Agents
Every site built with this generator also publishes machine-readable dumps of its content — and docs.pmnd.rs serves them to agents over MCP.
llms.txt
As alternate content, we provide you llms.txt and llms-full.txt.
These URLs are linked in the HTML header as:
<link rel="alternate" type="text/plain" href="/llms.txt" />
<link rel="alternate" type="text/plain" href="/llms-full.txt" />
MCP Server
llms-full.txt is a whole documentation site in one file — too big to paste into an agent for a one-line question. So docs.pmnd.rs also exposes it as an MCP server, which lets an agent read a table of contents first, then fetch the one page it needs.
One endpoint for all libraries, over streamable HTTP: https://docs.pmnd.rs/api/mcp. It exposes:
| kind | name | what it gives |
|---|---|---|
| resource | docs://pmndrs/manifest | which libraries are served, and how to query them |
| resource | docs://{lib}/index | that library's pages, one {path} - {title} per line |
| tool | get_page_content | the markdown of a single page, given a lib + a path from the index |
A typical round-trip — "how do I use TypeScript with Zustand?":
read docs://zustand/index
→ /learn/guides/beginner-typescript - Beginner TypeScript Guide
call get_page_content(lib="zustand", path="/learn/guides/beginner-typescript")
→ the page, as markdown
Two pages transferred instead of the whole site.
pmndrs/claude-code-plugin supports it natively
/plugin marketplace add pmndrs/claude-code-plugin
/plugin install pmndrs@pmndrs
For other clients, see the JSON config in the MCP-server box on the home page. To poke at it by hand — see the resources, call the tool, read the raw JSON-RPC — run the official inspector:
$ HOST=127.0.0.1 npx -y @modelcontextprotocol/inspector
In the web UI it opens: Add Servers › Add manually, transport streamable-http, URL https://docs.pmnd.rs/api/mcp (or your own http://localhost:3000/api/mcp), and flip the server's toggle to connect.

Getting your library served
Only libraries publishing a /llms-full.txt dump are served — the ones badged MCP on docs.pmnd.rs. To join them:
- Publish the dump. If your site is already built with this generator, bump it to a version shipping
/llms-full.txtand redeploy. Otherwise, either migrate to this generator, or emit that file yourself with the same XML shape (<page path="…" title="…">…</page>). - Check it.
curl -sI <NEXT_PUBLIC_URL>/llms-full.txtmust return200, and the body must contain<page …>entries. A missing dump makes the library's index resource fail loudly, on purpose. - Flip the flag. Open a PR on pmndrs/docs setting
llms_full: trueon your entry inlibs(src/app/page.tsx). That single flag drives theMCPbadge, thedocs://{lib}/indexresource and theget_page_contentenum. It takes effect once docs.pmnd.rs is redeployed — every push tomaindoes that.
This is a one-off. Once served, content updates need no redeploy on either side: pages are fetched at request time and revalidated every 5 minutes.