# naszą stronę czytają agenci

Co zbudowaliśmy, żeby agenci AI mogli czytać spookat.com i działać: llms.txt, markdown każdej strony, auth.md, OpenAPI, karta serwera MCP, WebMCP i otwarty robots.txt.

2026-10-16 · Kuba

Część ludzi, którzy szukają widgetu czatu, nigdy nie przeczyta naszej strony głównej. Przeczyta ją ich agent. Dostaje polecenie „dodaj czat do mojej strony”, pobiera kilka URL-i i albo znajduje, czego potrzebuje, albo idzie do następnego narzędzia. Dlatego spookat.com jest zbudowany do czytania przez agentów tak samo jak przez ludzi, a wszystko poniżej działa i da się sprawdzić `curl`em.

## llms.txt: cały manual w jednym pliku

[`/llms.txt`](/llms.txt) to cały manual produktu jako zwykły markdown: instalacja, konfiguracja, Slack i Discord, webhooki, API do odpowiedzi, MCP, partnerzy. 27 września 2026 ważył 28,8 kb. Na końcu jest lista wszystkich opublikowanych wpisów z bloga po angielsku z linkiem do ich wersji w markdownie.

Strony `/docs` są przetłumaczone na 12 języków dla ludzi. `llms.txt` zostaje po angielsku, tak samo jak bloki kodu, prompty i nazwy narzędzi w przetłumaczonych docsach, bo to agenci kopiują i odpalają. Test wywala build, jeśli tłumaczenie ruszy którąkolwiek z tych rzeczy.

## każda strona jako markdown

Poproś dowolną stronę na spookat.com o markdown, a dostaniesz markdown:

```
curl -H "Accept: text/markdown" https://spookat.com/pricing/
```

Dostajesz główną treść strony jako czysty markdown, bez nawigacji, stopki i przycisków. Build zapisuje markdownowego bliźniaka każdej strony i to on przychodzi, kiedy request o niego prosi. Wpisy na blogu mają też własny URL `.md` i to do nich linkuje `llms.txt`.

Strona główna do każdej odpowiedzi dokleja nagłówek `Link`, który wskazuje `/llms.txt` (`rel="describedby"`) i `/docs/` (`rel="service-doc"`), więc agent, który patrzy tylko w nagłówki, i tak znajdzie manual.

## auth.md: jak agent wchodzi do środka

[`/auth.md`](/auth.md) to strona pisana dla agentów, a nie dla ludzi. Tłumaczy trzy drogi:

1. Klient MCP, przy którym człowiek siedzi przy przeglądarce, loguje się przez OAuth. Człowiek wybiera strony i zakres uprawnień.
2. Człowiek, który ma już konto, daje agentowi klucz.
3. Jeszcze nie ma konta: agent sam rejestruje stronę, dostaje snippet do wklejenia i link do przejęcia dla swojego człowieka.

Ta trzecia to nietypowa część. Agent może postawić Spookata na stronie od początku do końca, a potem jego człowiek klika jeden link, żeby ją przejąć. Zanim ktoś ją przejmie, widget mówi, że jeszcze nikt nie odpowiada. I cokolwiek agent robi, płaci zawsze człowiek: agent może zacząć zmianę planu, ale dostaje z powrotem tylko link do płatności dla człowieka.

## openapi i katalog api

API do odpowiedzi jest opisane w [`/openapi.json`](/openapi.json), OpenAPI 3.1, a test pilnuje, żeby zgadzało się z serwerem. [`/.well-known/api-catalog`](/.well-known/api-catalog) idzie za RFC 9727 i w jednym małym JSON-ie wymienia API, jego specyfikację, docsy i health check. Agent, który zna ten standard, znajdzie wszystko z jednego well-known URL-a.

## karta serwera MCP

Spookat ma zdalny serwer MCP pod `https://api.spookat.com/mcp`. Agenci łączą się z nim, żeby czytać czaty i odpowiadać, zostawiać notatki wewnętrzne, przekazać czat człowiekowi, zmienić wygląd widgetu i podpiąć Slacka albo Discorda. [`/.well-known/mcp/server-card.json`](/.well-known/mcp/server-card.json) go opisuje: nazwa, transport, gdzie się uwierzytelnić, gdzie jest manual. Rejestry i skanery, które szukają serwerów MCP, znajdą go bez wypełniania żadnego formularza.

Dodanie go do Claude Code to jedna linijka:

```
claude mcp add --transport http spookat https://api.spookat.com/mcp
```

## WebMCP: sama strona ma narzędzia

Przeglądarki zaczynają pozwalać stronom podawać narzędzia agentowi, który w nich działa. Na spookat.com, jeśli przeglądarka to wspiera, strona rejestruje narzędzia do czytania serwisu i do postawienia czatu:

- `search_docs`: przeszukuje manual i zwraca pasujące sekcje jako markdown
- `read_page`: czyta dowolną stronę spookat.com jako markdown
- `open_page`: pokazuje człowiekowi stronę w języku, w którym czyta serwis
- `join_waitlist`: zapisuje człowieka na waitlistę, tylko za jego zgodą, na stronach z formularzem waitlisty
- `register_site`: rejestruje domenę człowieka, bez konta, i zwraca snippet do instalacji oraz link do przejęcia strony
- narzędzia do setupu (`set_style`, `set_accent`, `publish` i reszta), te same co na serwerze MCP, bez podpinania kanału i płacenia
- `claim_site`: przekazuje stronę człowiekowi, który przejmuje ją jednym kliknięciem

Jeśli przeglądarka tego nie wspiera, nic się nie dzieje i nic się nie ładuje.

## robots.txt mówi tak

Nasz [`/robots.txt`](/robots.txt) zaprasza crawlery i mówi to już w pierwszej linijce. Wyszukiwarki, asystenci AI i ci, którzy trenują modele: wszyscy mile widziani. Oprócz domyślnej grupy wymienia z nazwy 23 crawlery AI (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot, CCBot i inne), żeby jakiś ostrzejszy default po drodze nie odczytał ciszy jako „nie”. Jedyna zamknięta ścieżka to `/u/`, nasze proxy analityki, w którym nie ma nic do czytania.

Nasz CDN ma własne przełączniki do blokowania crawlerów AI. Trzymamy je wszystkie wyłączone, łącznie z tym, który przepisuje ci robots.txt po swojemu.

## po co to

Bo „dodaj czat do mojej strony” to coraz częściej zdanie wpisane do agenta, a nie do wyszukiwarki. Jeśli agent przeczyta nasz manual jednym requestem, wklei widget ze snippetu i sprawdzi go bez człowieka klikającego po dashboardzie, wybierze narzędzie, które pozwoliło mu skończyć robotę.

To też po prostu lepsza strona. Markdownowe bliźniaki to najszybszy sposób na czytanie naszych docsów, także dla ludzi, a manual, który mieści się w jednym pliku, wymusza zwięzłość.

Jesteśmy z tego dumni. Dla agenta większość stron SaaS to ściana JavaScriptu. Nasza podaje mu manual, specyfikację API, serwer MCP i sposób, żeby sam się zapisał, wszystko z URL-i, które możesz sprawdzić od razu.

Daj swojemu agentowi [spookat.com/llms.txt](/llms.txt) i każ mu dodać czat do twojej strony. Potem [odpal trial](/pl/pricing/), do którego cię wyśle.

---
source: https://spookat.com/pl/blog/agent-readable-website/
