# Docs for AI tools

> Read these docs from an LLM or coding agent, with llms.txt, llms-full.txt and a Markdown version of every page.

Source: https://polvallverdu.github.io/pipedog/docs/guides/llms/



Every page of these docs is also available as plain Markdown, for LLMs and coding agents. The
Markdown is generated at build time from the same source as the HTML, so it is always in sync.

## llms.txt [#llmstxt]

[`/llms.txt`](https://polvallverdu.github.io/pipedog/llms.txt) is the index: every page, by
section, with its title, its description and a link to its Markdown. It follows the
[llms.txt](https://llmstxt.org) convention. Give an agent this URL first, so it can pick the pages
it needs.

[`/llms-full.txt`](https://polvallverdu.github.io/pipedog/llms-full.txt) is every page in one
file, for tools that take one big context.

## A page as Markdown [#a-page-as-markdown]

Add `.md` to a page's URL:

| Page                                   | Markdown                                 |
| -------------------------------------- | ---------------------------------------- |
| `/pipedog/docs/`                       | `/pipedog/docs.md`                       |
| `/pipedog/docs/concepts/frames/`       | `/pipedog/docs/concepts/frames.md`       |
| `/pipedog/docs/services/stt/deepgram/` | `/pipedog/docs/services/stt/deepgram.md` |

Each file starts with the page's title, description and URL. Option tables are rendered as
Markdown tables, and code samples are inlined from the type-checked snippets.

## On every page [#on-every-page]

The buttons under each page title:

* **Copy page** copies the page's Markdown to the clipboard.
* **Open** has the Markdown view, the page's source on GitHub, and links that open ChatGPT, Claude,
  Cursor or Scira with a prompt to read the page.

## MCP server [#mcp-server]

[`@pipedog/mcp`](https://www.npmjs.com/package/@pipedog/mcp) is a local MCP server for these
docs. Coding agents (Claude Code, Cursor, VS Code, Windsurf and any other MCP client) start it
over stdio and get four tools:

| Tool                         | What it does                                                                                                                                                                               |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `list_pages(section?)`       | Every page's slug, title and description, by section. `section` is a sidebar section (`Services`), a group (`Speech-to-text`) or a slug prefix (`services/stt`).                           |
| `search_docs(query, limit?)` | Keyword search (BM25) over the page sections: the slug, title, section heading and a snippet.                                                                                              |
| `read_page(slug)`            | A page's full Markdown, e.g. `services/stt/deepgram`.                                                                                                                                      |
| `get_api(symbol)`            | An exported class, function or type of the `@pipedog/*` packages: its import path, its constructor and options interface, its declaration from the `.d.ts` and the pages that document it. |

Each page is also an MCP resource, `pipedog://docs/<slug>`, and llms.txt is `pipedog://llms.txt`.

The docs ship inside the package: each release bundles the docs and the API of that release, so
the server works offline and matches the pipedog version it came with. To keep the two together,
pin it to your pipedog version: `npx -y @pipedog/mcp@<version>`. With `--live` (or
`PIPEDOG_MCP_LIVE=1`) it fetches the current docs from this site instead, and falls back to the
bundled ones if the site doesn't answer within 10 seconds (`--timeout <ms>`). It needs Node.js 20
or later.

### From `pipedog init` [#from-pipedog-init]

[`pipedog init`](https://polvallverdu.github.io/pipedog/docs/cli.md) writes the entries below into a new project's `.mcp.json`,
`.cursor/mcp.json` and `.vscode/mcp.json`, next to an `AGENTS.md` that tells the agent to use
them. `--no-mcp` skips it.

### Claude Code [#claude-code]

```bash
claude mcp add pipedog -- npx -y @pipedog/mcp
```

Add `--scope project` to write it to the project's `.mcp.json`, for everyone on the repository.

### Cursor [#cursor]

`.cursor/mcp.json` in the project, or `~/.cursor/mcp.json` for every project:

```json
{
  "mcpServers": {
    "pipedog": {
      "command": "npx",
      "args": ["-y", "@pipedog/mcp"]
    }
  }
}
```

### VS Code [#vs-code]

`.vscode/mcp.json` in the project (VS Code uses `servers`, not `mcpServers`):

```json
{
  "servers": {
    "pipedog": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@pipedog/mcp"]
    }
  }
}
```

### Windsurf [#windsurf]

`~/.codeium/windsurf/mcp_config.json` (in Devin Desktop, Windsurf's successor,
`~/.config/devin/mcp_config.json`):

```json
{
  "mcpServers": {
    "pipedog": {
      "command": "npx",
      "args": ["-y", "@pipedog/mcp"]
    }
  }
}
```

### Options [#options]

| Option             | Environment variable     |                                                                        |
| ------------------ | ------------------------ | ---------------------------------------------------------------------- |
| `--live`           | `PIPEDOG_MCP_LIVE=1`     | Read the current docs from the site, falling back to the bundled ones. |
| `--docs-url <url>` | `PIPEDOG_DOCS_URL`       | The docs site for `--live` (default: this site).                       |
| `--timeout <ms>`   | `PIPEDOG_MCP_TIMEOUT_MS` | How long `--live` waits for the site (default 10000).                  |

With Bun, `bunx @pipedog/mcp` works too. For live mode, add `"--live"` to `args`, or
`-- npx -y @pipedog/mcp --live` for Claude Code.
