Skip to content
Blume
English
Esc
navigateopen⌘Jpreview
On this page

MCP server

Host a Model Context Protocol server so coding agents can search and read your docs directly — tools, resources, discovery documents, content-type and facet filters, and the server output it needs.

Host a Model Context Protocol server so coding agents (Claude Code, Cursor, VS Code, claude.ai connectors) can search and read your docs directly — no scraping. It’s opt-in:

ai: {
  mcp: {
    enabled: true,
    route: "/mcp", // where the server is mounted
  },
}
Option Default Description
enabled false Generate and host the MCP server.
route /mcp Path the Streamable-HTTP endpoint is mounted on.
name title Server name shown to clients (defaults to title).
instructions Optional system hint passed to connecting agents.

Tools and resources

The server exposes read-only tools — search_docs, get_page, list_pages, and get_navigation — and every page as an MCP resource (resources/list enumerates the pages at their served URLs with a text/markdown type; resources/read returns the page’s agent Markdown, the same output as get_page), so clients that attach context by URI can browse the docs without calling a tool. It publishes discovery documents at /.well-known/mcp.json and /.well-known/mcp/server-card.json. The server card follows the SEP-2127 Server Card extension schema (reverse-DNS name, remotes transport endpoints), with initialize-shaped compat fields (serverInfo, capabilities, transports) for scanners built against the proposal’s earlier revision. Each page’s Connect to MCP menu offers copy-and-go install for Claude Code, Cursor, VS Code, and Codex (shown once deployment.site is set).

search_docs runs its own full-text index, so it works regardless of your search provider — and even when search is set to none. The MCP server is a separate feature from on-page search.

The same tools are available over plain HTTP as the JSON API, for frameworks that don’t speak MCP.

Scoping by content type and facets

search_docs and list_pages both accept an optional contentTypes filter, narrowing results to pages of the given frontmatter types["rfc"], ["blog", "changelog"] — so an agent working against a site that mixes docs with RFCs, runbooks, or policies can scope retrieval to the kind of page it needs. Every result names its content type, and list_pages output shows the types in use.

Both tools also accept a filters object matching against the facets a site declares per content type (content.types.<type>.facets) — custom frontmatter keys whose values become filterable metadata:

{
  "query": "OpenAPI request schemas",
  "contentTypes": ["rfc"],
  "filters": { "domain": "architecture", "status": "enforced" }
}

Every filters entry must match (results carry their facet values, and list_pages shows each page’s), so a knowledge base can drive progressive-disclosure agent workflows — enumerate the enforced standards, search only within them — without any server of its own.

Server output required

The MCP server is a live endpoint (/mcp), so it can’t run on a static build. Switch to server output and pick an adapter:

deployment: {
  output: "server",
  adapter: "node", // or "vercel" | "netlify" | "cloudflare"
  site: "https://docs.example.com",
}

A static build with ai.mcp.enabled fails fast with a message telling you to set deployment.output to server. See Deployment for the adapters. Once deployed, connect from Claude Code with:

claude mcp add --transport http my-docs https://docs.example.com/mcp

Was this page helpful?