{
  "endpoint": "https://pdfex.io/mcp",
  "transport": "streamable-http",
  "auth": {
    "header": "Authorization",
    "scheme": "Bearer",
    "key_env_var": "PDFEX_API_KEY"
  },
  "verification_levels": {
    "executed": "install was run against a live host and connected",
    "syntax": "command exists as spelled, read from the tool's own --help",
    "documented": "confirmed against the vendor's official MCP docs",
    "unverified": "not confirmed by anyone; best current knowledge"
  },
  "canonical": {
    "json_mcpServers": "{\n  \"mcpServers\": {\n    \"pdfex\": {\n      \"type\": \"http\",\n      \"url\": \"https://pdfex.io/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer pdfex_your_key_here\" }\n    }\n  }\n}",
    "cli_example": "claude mcp add --transport http pdfex https://pdfex.io/mcp \\\n  --header \"Authorization: Bearer $PDFEX_API_KEY\""
  },
  "counts": {
    "executed": 0,
    "syntax": 6,
    "documented": 1,
    "unverified": 11
  },
  "hosts": [
    {
      "name": "Hermes Agent",
      "shape": "cli",
      "summary": "Nous Research's open-source agent framework (CLI, desktop, gateway).",
      "configPath": "~/.hermes/config.yaml",
      "configKey": "mcp_servers",
      "install": "hermes mcp add",
      "snippet": "mcp_servers:\n  pdfex:\n    url: \"https://pdfex.io/mcp\"\n    headers:\n      Authorization: \"Bearer pdfex_your_key_here\"",
      "verify": "hermes mcp list",
      "docUrl": "https://hermes-agent.nousresearch.com/docs/",
      "verification": "syntax",
      "verifiedAt": "2026-09-30",
      "note": "`hermes mcp add` is a discovery-first wizard; it writes the entry for you. Hermes stores connections as YAML under `mcp_servers`, not JSON. Do not hand-edit the file — a stray indent corrupts it and breaks the running gateway."
    },
    {
      "name": "Pi",
      "shape": "cli",
      "summary": "Coding agent CLI by Mario Zechner (@earendil-works/pi).",
      "configPath": "~/.pi/agent/mcp.json",
      "configKey": "mcpServers",
      "install": "pi mcp add pdfex --url https://pdfex.io/mcp --bearer-token-env-var PDFEX_API_KEY",
      "verify": "pi mcp list",
      "docUrl": "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/mcp.md",
      "verification": "syntax",
      "verifiedAt": "2026-09-30",
      "note": "`--bearer-token-env-var` is a documented Pi flag that sends `Authorization: Bearer <value of that env var>`, so the key never lands in the file. `pi mcp list` exits non-zero when a server fails — it is a real health check. Use `-l` to scope the server to the current project instead of globally."
    },
    {
      "name": "Claude Code",
      "shape": "cli",
      "summary": "Anthropic's terminal coding agent.",
      "configPath": "~/.claude.json (or a project .mcp.json)",
      "configKey": "mcpServers",
      "install": "claude mcp add --transport http pdfex https://pdfex.io/mcp \\\n  --header \"Authorization: Bearer $PDFEX_API_KEY\"",
      "verify": "claude mcp list",
      "docUrl": "https://docs.claude.com/en/docs/claude-code/mcp",
      "verification": "syntax",
      "verifiedAt": "2026-09-30",
      "note": "`--transport http` is required — without it Claude Code assumes a local stdio command. Add `--scope project` to write `.mcp.json` into the repo so a whole team shares it."
    },
    {
      "name": "Codex CLI",
      "shape": "cli",
      "summary": "OpenAI's terminal coding agent.",
      "configPath": "~/.codex/config.toml",
      "configKey": "[mcp_servers.pdfex]",
      "install": "codex mcp add",
      "verify": "codex mcp list",
      "docUrl": "https://developers.openai.com/codex/mcp",
      "verification": "syntax",
      "verifiedAt": "2026-09-30",
      "note": "`codex mcp add` exists but its flag spelling was not confirmed — run `codex mcp add --help` first. Codex reads TOML, so a JSON block will not work; the entry belongs under `[mcp_servers.pdfex]` in `~/.codex/config.toml`."
    },
    {
      "name": "Gemini CLI",
      "shape": "cli",
      "summary": "Google's open-source terminal agent.",
      "configPath": "~/.gemini/settings.json",
      "configKey": "mcpServers",
      "install": "gemini mcp add pdfex https://pdfex.io/mcp",
      "verify": "gemini mcp list",
      "docUrl": "https://github.com/google-gemini/gemini-cli",
      "verification": "syntax",
      "verifiedAt": "2026-09-30",
      "note": "`gemini mcp add <name> <commandOrUrl>` is confirmed from `--help`. The header flag spelling is not — run `gemini mcp add --help` and add the Authorization header, otherwise the server will answer 401."
    },
    {
      "name": "OpenCode",
      "shape": "cli",
      "summary": "Open-source terminal coding agent.",
      "configPath": "~/.config/opencode/opencode.json",
      "configKey": "mcp",
      "install": "opencode mcp add",
      "verify": "opencode mcp list",
      "docUrl": "https://opencode.ai/docs/mcp-servers/",
      "verification": "syntax",
      "verifiedAt": "2026-09-30",
      "note": "Note the key is `mcp`, not `mcpServers` — OpenCode uses its own schema. `opencode mcp add` is interactive and will prompt for the URL and header."
    },
    {
      "name": "OpenClaw",
      "shape": "cli",
      "summary": "Self-hosted assistant gateway that connects chat apps to agents.",
      "configKey": "mcp.servers.pdfex (transport: \"streamable-http\")",
      "install": "openclaw mcp add pdfex --url https://pdfex.io/mcp \\\n  --transport streamable-http",
      "verify": "openclaw mcp doctor pdfex --probe",
      "docUrl": "https://docs.openclaw.ai/tools/mcp",
      "verification": "documented",
      "verifiedAt": "2026-09-30",
      "note": "OpenClaw's own docs make the point this matrix is built on: saving a definition proves nothing about reachability — `doctor --probe` does. Also keep the key out of the config literal; OpenClaw asks you to store sensitive headers through its secret mechanism. You can also add it from the Control UI under Settings → MCP."
    },
    {
      "name": "GitHub Copilot CLI",
      "shape": "cli",
      "summary": "GitHub's Copilot agent for the terminal.",
      "install": "copilot mcp add pdfex",
      "verify": "copilot mcp list",
      "docUrl": "https://docs.github.com/en/copilot/how-tos/use-copilot-agents/use-copilot-cli",
      "verification": "unverified",
      "note": "A `copilot mcp` subcommand exists, but the add syntax was not confirmed. Run `copilot mcp --help` before trusting this line."
    },
    {
      "name": "Crush",
      "shape": "cli",
      "summary": "Charm's terminal-first coding agent.",
      "configPath": "~/.config/crush/crush.json",
      "configKey": "mcp",
      "install": "crush",
      "verify": "crush --help",
      "docUrl": "https://github.com/charmbracelet/crush",
      "verification": "unverified",
      "note": "Crush reads `mcp` entries from its config file. Not confirmed on this machine — check the repo before publishing a command."
    },
    {
      "name": "Claude Desktop",
      "shape": "json",
      "summary": "Anthropic's desktop app.",
      "configPath": "claude_desktop_config.json",
      "configKey": "mcpServers",
      "verify": "Restart the app; the pdfex tools appear in the tool picker.",
      "docUrl": "https://modelcontextprotocol.io/quickstart/user",
      "verification": "unverified",
      "note": "Reachable from Settings → Developer → Edit Config. Restart the app after editing — it reads this file only at startup."
    },
    {
      "name": "Cursor",
      "shape": "json",
      "summary": "AI code editor.",
      "configPath": "~/.cursor/mcp.json",
      "configKey": "mcpServers",
      "verify": "Settings → MCP shows pdfex connected with its tools listed.",
      "docUrl": "https://docs.cursor.com/context/model-context-protocol",
      "verification": "unverified",
      "note": "A project-scoped `.cursor/mcp.json` is also honoured, which is the better choice for a shared repo."
    },
    {
      "name": "Windsurf",
      "shape": "json",
      "summary": "Codeium's AI code editor.",
      "configPath": "~/.codeium/windsurf/mcp_config.json",
      "configKey": "mcpServers",
      "verify": "Cascade panel → MCP servers lists pdfex.",
      "docUrl": "https://docs.windsurf.com/windsurf/cascade/mcp",
      "verification": "unverified",
      "note": "Windsurf also has an in-app MCP settings UI that edits this same file."
    },
    {
      "name": "Cline",
      "shape": "json",
      "summary": "Autonomous coding agent as a VS Code extension.",
      "configPath": "cline_mcp_settings.json",
      "configKey": "mcpServers",
      "verify": "The MCP Servers panel shows pdfex as connected.",
      "docUrl": "https://docs.cline.bot/mcp/configuring-mcp-servers",
      "verification": "unverified",
      "note": "Cline offers a remote-server form in its UI, which is less error-prone than editing the JSON."
    },
    {
      "name": "Roo Code",
      "shape": "json",
      "summary": "VS Code coding agent (Cline fork).",
      "configPath": "mcp_settings.json",
      "configKey": "mcpServers",
      "verify": "MCP Servers tab in the Roo Code panel shows pdfex connected.",
      "docUrl": "https://docs.roocode.com/features/mcp/using-mcp-in-roo",
      "verification": "unverified",
      "note": "Same shape as Cline, different file location. Prefer the UI's remote-server form."
    },
    {
      "name": "VS Code (Copilot Chat)",
      "shape": "json",
      "summary": "GitHub Copilot Chat inside VS Code.",
      "configPath": ".vscode/mcp.json",
      "configKey": "servers",
      "verify": "Command Palette → “MCP: List Servers” shows pdfex running.",
      "docUrl": "https://code.visualstudio.com/docs/copilot/chat/mcp-servers",
      "verification": "unverified",
      "note": "THE TRAP: VS Code uses the key `servers`, not `mcpServers`. A block copied from Cursor or Claude Desktop is silently ignored here. This is the single most common copy-paste failure in this matrix."
    },
    {
      "name": "Continue",
      "shape": "native",
      "summary": "Open-source IDE assistant (VS Code / JetBrains).",
      "configPath": "~/.continue/config.yaml",
      "configKey": "mcpServers",
      "snippet": "mcpServers:\n  - name: pdfex\n    type: http\n    url: https://pdfex.io/mcp\n    headers:\n      Authorization: \"Bearer pdfex_your_key_here\"",
      "verify": "The Continue sidebar lists the pdfex tools.",
      "docUrl": "https://docs.continue.dev/customize/deep-dives/mcp",
      "verification": "unverified",
      "note": "Continue's YAML takes a LIST of servers, not a map — note the leading `-`. Its JSON form (`config.json`) uses a map like everyone else."
    },
    {
      "name": "Goose",
      "shape": "native",
      "summary": "Block's open-source local agent.",
      "configPath": "~/.config/goose/config.yaml",
      "configKey": "extensions",
      "snippet": "extensions:\n  pdfex:\n    type: streamable_http\n    uri: https://pdfex.io/mcp\n    headers:\n      Authorization: \"Bearer pdfex_your_key_here\"",
      "verify": "`goose` starts and lists pdfex among its extensions.",
      "docUrl": "https://block.github.io/goose/",
      "verification": "unverified",
      "note": "Goose calls MCP servers “extensions” and spells the transport `streamable_http` with an underscore, and the URL field `uri` not `url`. Three differences from every other host — copy from here, not from the canonical block."
    },
    {
      "name": "Zed",
      "shape": "native",
      "summary": "Collaborative code editor.",
      "configPath": "~/.config/zed/settings.json",
      "configKey": "context_servers",
      "snippet": "{\n  \"context_servers\": {\n    \"pdfex\": {\n      \"source\": \"custom\",\n      \"command\": https://pdfex.io/mcp,\n      \"args\": []\n    }\n  }\n}",
      "verify": "Zed's agent panel lists the pdfex tools.",
      "docUrl": "https://zed.dev/docs/ai/mcp",
      "verification": "unverified",
      "note": "Zed uses the key `context_servers`, not `mcpServers` — another silent-ignore trap. Newer Zed builds support remote HTTP servers directly; consult the docs, since this schema has been changing."
    }
  ]
}
