# This site as text

> An index at /docs/llms.txt, everything in one file at /docs/llms-full.txt, a Markdown twin at every documentation address, and /SKILL.md — with no MCP server behind any of it.

Page: https://sdk.chatfuel.com/docs/agents/llms-txt
Markdown: https://sdk.chatfuel.com/docs/agents/llms-txt.md

The reader of a documentation page is often not a person, so every page here exists twice: once as
HTML and once as Markdown, from the same build-time export. Nothing is behind a key, nothing is
rate-limited, and none of it is generated on request — every surface below is static.

## The index at `/docs/llms.txt` [#the-index-at-docsllmstxt]

The [llmstxt.org](https://llmstxt.org) shape, scoped to the documentation: an H1, a one-paragraph
summary, then one section per sidebar group. The sections are built from the page tree the sidebar
itself renders, so the index cannot drift from the navigation, and every link points at the
Markdown twin rather than the HTML page — an agent that follows one reads text. Each entry carries
that page's description.

It ends with an `## Optional` section naming the full text, the site-wide index and the skill. It
is served as `text/plain` and carries no other header.

## Everything in one file at `/docs/llms-full.txt` [#everything-in-one-file-at-docsllms-fulltxt]

Every documentation page concatenated, separated by horizontal rules, with a header block giving
the index URL and the page count. Agents fetch it about twice as often as the index, because one
request is cheaper than forty, and each page inside it keeps the same header block its own mirror
has.

## A Markdown twin at every address [#a-markdown-twin-at-every-address]

Append `.md` to any documentation URL:

| Page                  | Markdown                 |
| --------------------- | ------------------------ |
| `/docs/quickstart`    | `/docs/quickstart.md`    |
| `/docs/reference/cli` | `/docs/reference/cli.md` |
| `/docs`               | `/docs/index.md`         |

A twin opens with the title, the description, the canonical page URL and its own URL, then the
body. The citation comment every page carries under its frontmatter is stripped out first: it is a
note to whoever edits the page, and a list of paths in another repository is not something an
agent should go looking for.

The copy and view controls at the top of each page fetch that same file rather than re-deriving
the text in the browser, so what a reader pastes into an agent is byte-identical to what the URL
serves.

```bash
curl -sS https://chatfuel-sdk.com/docs/llms.txt
curl -sS https://chatfuel-sdk.com/docs/quickstart.md
```

Behind the scenes those addresses are rewrites. The App Router cannot name a dynamic segment
`[[...slug]].md` — a segment that does not end in `]` is read as a literal directory — so the
mirror lives at `/docs.md/*` and two rewrites map the public address onto it, in the `afterFiles`
phase, which is what lets them win over `/docs/[[...slug]]`.

## The headers those carry [#the-headers-those-carry]

Both the twins and the full text carry three:

| Header              | Value                                                                                 |
| ------------------- | ------------------------------------------------------------------------------------- |
| `Content-Type`      | `text/markdown; charset=utf-8`                                                        |
| `X-Robots-Tag`      | `noindex` — the mirror carries the same words as the HTML page, which is canonical    |
| `X-Markdown-Tokens` | An estimate, characters over four, so you can budget context before fetching the body |

`/docs/llms.txt` is the exception: it is `text/plain` and carries neither of the other two.

## The link in every documentation page's head [#the-link-in-every-documentation-pages-head]

Every documentation page advertises its own mirror in its head as a
`<link rel="alternate" type="text/markdown">`, beside the canonical URL and the two RSS feeds.
That is what lets a client discover the text version from the HTML without knowing the `.md`
convention. It is a docs-page thing: the marketing pages have no mirror to advertise.

## `/SKILL.md` [#skillmd]

This site written as a skill file, in the format a coding agent already reads. Save it into a
skills directory as it stands, or paste the URL into a prompt. It carries `name` and `description`
frontmatter, the command to run, the thirteen module skills with the `--modules` id each answers
to, the directory each agent reads them from, and four links out — the documentation index, the
full text, the quickstart and the source.

The skills in it come from the same registry the table on [Skills](/docs/agents/skills) is built
from, so the two cannot disagree. Unlike the `.md` mirrors it is not `noindex`: it has no HTML twin
and it is a link people share.

## The site index at `/llms.txt` [#the-site-index-at-llmstxt]

The map of the whole site rather than the documentation: the marketing pages, the comparisons, the
module pages, the solutions, the blog and its tags. It stays short and points at
`/docs/llms.txt` instead of reprinting every documentation entry, and it ends with a
machine-readable section listing every surface of this kind — the two documentation indexes,
`/SKILL.md`, and the changelog and blog as Markdown and as RSS.

## There is no MCP server [#there-is-no-mcp-server]

That list is the complete set, and no entry on it is an MCP endpoint. Fetching a URL is the whole
interface — no key to request, no handshake, no session. The one route not on the list is
`/api/search`, which is Fumadocs' search handler over the same source and exists to serve the
search box on these pages; `robots.txt` disallows it along with `/dev/`, and allows everything
else.
