OPF
DocsHow-to

Connect to the OPF MCP server

The OPF MCP server teaches an agent the format and checks its decks. Use the hosted endpoint, or run the same server locally.

The hosted server

https://openpresentation.org/mcp is the @openpresentation/mcp server (0.28.0) over Streamable HTTP. It is read-only and stateless: no account, no key, no session, and nothing you send is stored. It serves the documentation, the schemas, the default catalog, the example decks and the agent skills as resources, and checks and converts decks with its tools. Requests are limited to 60 a minute per IP address; run it locally for more.

/.well-known/mcp.json describes it (name, version, transport, endpoint and tools), and /mcp in a browser shows a short description.

Claude Code

shell
claude mcp add --transport http opf https://openpresentation.org/mcp

Then ask, for example, “Use the opf tools to write a five-slide board update and validate it.”

Cursor

Add the server to .cursor/mcp.json in the project, or to ~/.cursor/mcp.json for every project:

.cursor/mcp.json
{
  "mcpServers": {
    "opf": {
      "url": "https://openpresentation.org/mcp"
    }
  }
}

claude.ai and Claude Desktop

Open Settings, then Connectors, choose Add custom connector, name it OPF and enter https://openpresentation.org/mcp as the URL. Leave the OAuth fields empty: the server needs no authentication.

Other clients

Any client that speaks Streamable HTTP connects to the URL. A client that reads an mcpServers file takes:

mcp.json
{
  "mcpServers": {
    "opf": {
      "type": "http",
      "url": "https://openpresentation.org/mcp"
    }
  }
}

The endpoint answers plain JSON-RPC POSTs too, so a script can call a tool directly:

shell
curl -s https://openpresentation.org/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"validate_deck","arguments":{"document":{"slides":[{"layout":"cover","title":"Hello"}]}}}}'

Run it locally

The same server runs on your machine over stdio, with no rate limit and no network. With @openpresentation/opf-render installed beside it, validate_deck measures text with the real fonts instead of estimating it. It needs Node 22 or later.

shell
npx -y @openpresentation/mcp                          # any MCP client: command npx, args -y @openpresentation/mcp
claude mcp add opf -- npx -y @openpresentation/mcp     # Claude Code
opf mcp                                               # the same server through the CLI, when @openpresentation/mcp is installed
.cursor/mcp.json (local)
{
  "mcpServers": {
    "opf": {
      "command": "npx",
      "args": [
        "-y",
        "@openpresentation/mcp"
      ]
    }
  }
}

Tools

Every tool is read-only. The resources (opf://docs/format-card, opf://schema/presentation#Chart, opf://catalog/layouts/two-column, ...) and prompts are listed in the MCP server reference.

ToolWhat it does
start_hereStart here: a guided path into OPF
validate_deckValidate an OPF deck
get_schemaGet an OPF JSON Schema
search_catalogSearch the default catalog
get_catalog_recordGet a catalog record
convertConvert a deck between JSON, YAML and Markdown
search_docsSearch the OPF documentation
list_examplesList the example decks

Validation checks a deck; it does not render it. Rendering and PowerPoint export need the local CLI or the packages.