# Docs for AI tools

Read these docs from a coding agent through Markdown URLs, llms.txt, an MCP server, a Claude Code skill and the OpenAPI spec.

Coding agents do better with plain text than with a rendered page, so every page of these docs has a machine-readable twin. Pick the one that fits the tool you're using.

| You're using                            | Give it                                                               |
| --------------------------------------- | --------------------------------------------------------------------- |
| Claude Code, every session in a project | [The clndr.pro skill](#the-claude-code-skill)                         |
| Any agent that can call MCP tools       | [The docs MCP server](#mcp-server)                                    |
| An agent that can fetch URLs            | [`/llms.txt`](/llms.txt), then the paths it lists with `.md` appended |
| A chat window with a big context        | [`/llms-full.txt`](/llms-full.txt), pasted or attached                |
| A code generator, Postman, Insomnia     | [`/openapi.json`](/openapi.json)                                      |

## Markdown for every page

Add `.md` to any URL here and you get the page as Markdown: no navigation, no scripts, components flattened into plain blocks. Prompt cards keep their prompt as a fenced code block.

```text
https://docs.clndr.pro/index.md                                  ← the introduction
https://docs.clndr.pro/quickstart.md
https://docs.clndr.pro/tutorials/shadcn-booking-widget.md
https://docs.clndr.pro/api-reference/operations/createBooking.md ← one endpoint
```

The **Copy Markdown** button at the top of each guide page copies the same text (API reference pages have their `.md` URLs but no button). Next to it, the **Open** menu sends the page to ChatGPT, Claude, Perplexity, Grok or Google with "Read this page and help me understand it", installs the MCP server below into Cursor or VS Code, or copies a ready-made command for Claude Code, Codex, OpenCode or Antigravity.

## llms.txt

[`/llms.txt`](/llms.txt) follows the [llms.txt convention](https://llmstxt.org): a short Markdown index with one line per docs page (title, link, description) and one per API operation. The links are site-relative HTML paths such as `/quickstart` or `/api-reference/operations/listSlots`; add `.md` and the domain to fetch one as Markdown (`https://docs.clndr.pro/quickstart.md`). It's small enough for an agent to read first and decide which pages it needs.

[`/llms-full.txt`](/llms-full.txt) is the whole site in one file: every guide, tutorial and API operation, in nav order. Use it when you'd rather hand a model everything at once than let it fetch page by page.

Both are rebuilt with each deploy, so they always match the site.

## MCP server

`https://docs.clndr.pro/api/mcp` is a [Model Context Protocol](https://modelcontextprotocol.io) server over HTTP. It's read-only and needs no key: it serves these docs and nothing else, and has no access to your clndr.pro account.

| Tool              | What it returns                                                     |
| ----------------- | ------------------------------------------------------------------- |
| `search`          | Ranked matches across docs pages and API operations for a query     |
| `get_doc`         | One docs page's source, by slug (`quickstart`, `react/hooks`, …)    |
| `list_operations` | Every API operation: operationId, method, path, summary, tag        |
| `get_operation`   | One operation's parameters, request body and responses, as Markdown |

**Claude Code**

```bash
claude mcp add --transport http clndr-docs https://docs.clndr.pro/api/mcp
```

Add `--scope project` to write it to the project's `.mcp.json` so everyone on the repo gets it.

**Cursor**

```json title=".cursor/mcp.json"
{
  "mcpServers": {
    "clndr-docs": { "url": "https://docs.clndr.pro/api/mcp" }
  }
}
```

Or use **Open → Open in Cursor** on any page.

**VS Code**

```json title=".vscode/mcp.json"
{
  "servers": {
    "clndr-docs": { "type": "http", "url": "https://docs.clndr.pro/api/mcp" }
  }
}
```

Or use **Open → Open in VS Code** on any page.

## The Claude Code skill

A skill is a Markdown file Claude Code loads on its own whenever a task matches the skill's description. The clndr.pro skill holds what an agent most often gets wrong: the `www` base URL, which key goes where, `'use client'` boundaries, the slot `date` semantics, the endpoint table, and a checklist to run before calling the job done. It links back here for everything longer.

Install it into a project:

```bash
mkdir -p .claude/skills/clndr-pro && curl -fsSL https://docs.clndr.pro/skills/clndr-pro/SKILL.md -o .claude/skills/clndr-pro/SKILL.md
```

Or for every project on your machine:

```bash
mkdir -p ~/.claude/skills/clndr-pro && curl -fsSL https://docs.clndr.pro/skills/clndr-pro/SKILL.md -o ~/.claude/skills/clndr-pro/SKILL.md
```

Commit the project copy so your teammates get it too. Run the command again to update it. With the skill installed, a request as short as "add a clndr.pro booking page at /book" is enough; the [prompt library](/ai/claude-code) is for when you want a specific shape.

## OpenAPI spec

[`/openapi.json`](/openapi.json) is the OpenAPI 3.1 document the [API reference](/api-reference) is rendered from. It's served with `Access-Control-Allow-Origin: *`, so browser tools can load it directly.

```bash
# TypeScript types for every request and response
npx openapi-typescript https://docs.clndr.pro/openapi.json -o types/clndr-api.d.ts
```

In Postman or Insomnia, import it by URL and set the bearer token to your key. Each operation also carries `x-required-scopes` and `x-key-types`, which say which scope and which key type it needs.

## Keep keys out of the conversation

Agents read files, run commands and keep transcripts. Treat your keys accordingly:

* Put keys in `.env.local` and make sure it's in `.gitignore`. Tell the agent the variable name (`CLNDR_SECRET_KEY`), never the value. Every prompt on this site is written that way.
* Don't paste a key into a prompt, and don't ask an agent to print environment variables.
* Use a separate key for local development. A publishable key is enough to build and test any browser-side booking flow.
* Review diffs for `clndr_sk_` before you commit.

If a secret key does end up in a transcript, a log or a commit, revoke it under [**API keys**](https://www.clndr.pro/api-keys) and create a new one. Revoking takes effect on the next request.
