MCP server

Read-only docs tools for your agent.

Cuitty publishes a Model Context Protocol server so coding agents like Claude Code, Cursor, and Aider can search the docs, read individual pages, list modules, and generate wire-protocol snippets — without scraping HTML. The manifest is documented today; the runtime server lands Q3 2026.

v0.1.0 Server: planned · Q3 2026 Manifest: documented

Endpoint

MCP endpoint
https://cuitty.com/mcp

HTTP+JSON transport (not stdio). Speak the standard MCP JSON-RPC frames and you'll get the same tool surface every client uses.

Manifest URL
https://cuitty.com/.well-known/mcp.json

The well-known JSON descriptor advertises capabilities to clients that auto-discover MCP servers from a domain.

Tools

4 read-only

All four tools are read-only. They wrap existing JSON endpoints the marketing site already serves, so the MCP server is a thin protocol shim — not a new data source. No write tools today; that surface will require API keys when it ships.

search_docs ( query , limit )

backed by GET /api/search.json?q=<query>&limit=<limit>

Full-text search over Cuitty's published documentation. Returns matching doc slugs with short excerpts so the agent can decide which page to fetch in full.

Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "query": {
      "type": "string",
      "description": "Free-form natural-language query. Phrases work; exact match not required."
    },
    "limit": {
      "type": "integer",
      "description": "Maximum number of hits to return.",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    }
  },
  "required": [
    "query"
  ]
}
Example call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_docs",
    "arguments": {
      "query": "rotate a secret",
      "limit": 3
    }
  }
}
Returns
{
  "hits": [
    {
      "slug": "modules/secrets",
      "title": "Secrets",
      "section": "Modules",
      "excerpt": "...rotation runs as a signed event into /api/ingest...",
      "score": 0.91
    }
  ]
}

Shape: { hits: Array<{ slug: string; title: string; section: string; excerpt: string; score: number }> }

get_doc ( slug )

backed by GET /docs/<slug>.json backed by GET /docs/<slug>.md

Fetch a single documentation page by its slug. Returns the full Markdown source, rendered HTML, headings outline, and outbound link list.

Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "slug": {
      "type": "string",
      "description": "Doc slug as it appears in the URL — e.g. `getting-started/install` or `modules/audit`. Leading and trailing slashes are tolerated."
    }
  },
  "required": [
    "slug"
  ]
}
Example call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_doc",
    "arguments": {
      "slug": "modules/audit"
    }
  }
}
Returns
{
  "slug": "modules/audit",
  "title": "Audit",
  "body_markdown": "# Audit\n\nThe audit module records...",
  "body_html": "<h1>Audit</h1><p>The audit module records...</p>",
  "headings": [
    { "depth": 1, "text": "Audit", "id": "audit" },
    { "depth": 2, "text": "Schema", "id": "schema" }
  ],
  "links_out": ["/docs/wire-protocol", "/docs/sdk/typescript"]
}

Shape: { slug: string; title: string; body_markdown: string; body_html: string; headings: Array<{ depth: number; text: string; id: string }>; links_out: string[] }

list_modules ( category )

backed by GET /api/docs.json (modules section) backed by src/lib/modules-data.ts

Return the canonical Cuitty module registry. Each entry includes id, name, description, status, route, and category — the same data the portal uses to render its left sidebar.

Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "category": {
      "type": "string",
      "description": "Optional filter — return only modules in this category (e.g. `monitoring`, `security`)."
    }
  }
}
Example call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_modules",
    "arguments": {}
  }
}
Returns
{
  "modules": [
    { "id": "audit",   "name": "Audit",   "category": "security",   "status": "live", "route": "/modules/audit" },
    { "id": "costs",   "name": "Costs",   "category": "analytics",  "status": "live", "route": "/modules/costs" },
    { "id": "deploys", "name": "Deploys", "category": "tools",      "status": "live", "route": "/modules/deploys" }
  ]
}

Shape: { modules: Array<{ id: string; name: string; description: string; route: string; icon: string; color: string; category: string; status: "live" | "preview" }> }

wire_protocol_example ( language , event_type )

backed by src/lib/sdk-samples.ts backed by /docs/wire-protocol

Generate a runnable code snippet that POSTs a sample event to /api/ingest in the requested language. Useful when an agent is asked to write integration code on behalf of a user.

Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "language": {
      "type": "string",
      "description": "Target language for the snippet.",
      "enum": [
        "typescript",
        "python",
        "go",
        "rust",
        "curl"
      ]
    },
    "event_type": {
      "type": "string",
      "description": "Event type recognized by the wire protocol — e.g. `audit`, `deploy`, `cost.sample`, `log`."
    }
  },
  "required": [
    "language",
    "event_type"
  ]
}
Example call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "wire_protocol_example",
    "arguments": {
      "language": "curl",
      "event_type": "audit"
    }
  }
}
Returns
{
  "language": "curl",
  "event_type": "audit",
  "source": "curl -X POST https://app.cuitty.com/api/ingest -H ...",
  "filename_hint": "ingest.sh",
  "runnable": true
}

Shape: { language: string; event_type: string; source: string; filename_hint: string; runnable: boolean }

Auth

No auth required for the read-only tool surface listed above.

The data behind these tools is the same public corpus the marketing site publishes at /llms.txt, /llms-full.txt, and /api/docs.json. Because reads are anonymous, no API key is required — just point your client at the endpoint and go.

Future write tools (e.g. ingesting events, rotating secrets, opening configs) will require a Cuitty API key and will be scoped per-project. They are out of scope for the v0.1 manifest.

Quickstart

Claude Code · Cursor · Aider

Drop the snippet for your client into the relevant config file and reload. The server then appears in the agent's tool palette as cuitty.

{
  "mcpServers": {
    "cuitty": {
      "transport": "http",
      "url": "https://cuitty.com/mcp"
    }
  }
}
  • Claude Code: paste into ~/.config/claude-code/mcp.json
  • Cursor: paste into ~/.cursor/mcp.json
  • Aider: paste into ~/.aider.conf.yml or CLI flag

Manifest preview

/.well-known/mcp.json

This is the exact contents of https://cuitty.com/.well-known/mcp.json. It is generated from ~/lib/mcp-tools.ts and shipped as a static asset so any MCP-aware client can discover Cuitty without running JavaScript.

{
  "name": "cuitty",
  "description": "Read-only docs and module-registry tools for the Cuitty self-hosted dashboard platform.",
  "version": "0.1.0",
  "endpoint": "https://cuitty.com/mcp",
  "transport": "http",
  "auth": {
    "type": "none"
  },
  "capabilities": {
    "tools": [
      {
        "name": "search_docs",
        "description": "Full-text search over Cuitty's published documentation. Returns matching doc slugs with short excerpts so the agent can decide which page to fetch in full.",
        "inputSchema": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "query": {
              "type": "string",
              "description": "Free-form natural-language query. Phrases work; exact match not required."
            },
            "limit": {
              "type": "integer",
              "description": "Maximum number of hits to return.",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          },
          "required": [
            "query"
          ]
        }
      },
      {
        "name": "get_doc",
        "description": "Fetch a single documentation page by its slug. Returns the full Markdown source, rendered HTML, headings outline, and outbound link list.",
        "inputSchema": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "slug": {
              "type": "string",
              "description": "Doc slug as it appears in the URL — e.g. `getting-started/install` or `modules/audit`. Leading and trailing slashes are tolerated."
            }
          },
          "required": [
            "slug"
          ]
        }
      },
      {
        "name": "list_modules",
        "description": "Return the canonical Cuitty module registry. Each entry includes id, name, description, status, route, and category — the same data the portal uses to render its left sidebar.",
        "inputSchema": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "category": {
              "type": "string",
              "description": "Optional filter — return only modules in this category (e.g. `monitoring`, `security`)."
            }
          }
        }
      },
      {
        "name": "wire_protocol_example",
        "description": "Generate a runnable code snippet that POSTs a sample event to /api/ingest in the requested language. Useful when an agent is asked to write integration code on behalf of a user.",
        "inputSchema": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "language": {
              "type": "string",
              "description": "Target language for the snippet.",
              "enum": [
                "typescript",
                "python",
                "go",
                "rust",
                "curl"
              ]
            },
            "event_type": {
              "type": "string",
              "description": "Event type recognized by the wire protocol — e.g. `audit`, `deploy`, `cost.sample`, `log`."
            }
          },
          "required": [
            "language",
            "event_type"
          ]
        }
      }
    ],
    "resources": [],
    "prompts": []
  },
  "links": {
    "homepage": "https://cuitty.com",
    "documentation": "https://cuitty.com/agents/mcp",
    "llms_txt": "https://cuitty.com/llms.txt",
    "llms_full_txt": "https://cuitty.com/llms-full.txt",
    "docs_json": "https://cuitty.com/api/docs.json"
  },
  "status": {
    "manifest": "documented",
    "server": "planned",
    "target_availability": "Q3 2026"
  }
}

Other agent feeds

The MCP server is one of four agent-facing surfaces. If MCP isn't supported in your client yet, the static feeds below give you the same content via plain HTTP GETs.