cyanheads-mcp-server

v0.5.0 pre-1.0

Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.

cyanheads.caseyjhand.com/mcp
claude mcp add --transport http cyanheads-mcp-server https://cyanheads.caseyjhand.com/mcp
codex mcp add cyanheads-mcp-server --url https://cyanheads.caseyjhand.com/mcp
{
  "mcpServers": {
    "cyanheads-mcp-server": {
      "url": "https://cyanheads.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http cyanheads-mcp-server https://cyanheads.caseyjhand.com/mcp
{
  "mcpServers": {
    "cyanheads-mcp-server": {
      "command": "bunx",
      "args": [
        "mcp-remote",
        "https://cyanheads.caseyjhand.com/mcp"
      ]
    }
  }
}
{
  "mcpServers": {
    "cyanheads-mcp-server": {
      "type": "http",
      "url": "https://cyanheads.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://cyanheads.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

2

cyanheads_search_catalog

Search fleet tools and servers by natural-language description. Returns ranked matches with brief summaries and the server each tool belongs to. Use scope "servers" to find which server handles a workflow; use the default scope "tools" to find specific tools.

read
scope read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "cyanheads_search_catalog",
    "arguments": {
      "query": "<query>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500,
      "pattern": "\\S",
      "description": "Natural language search query. Describe what you want to accomplish, a workflow, or a capability area. 1-500 raw characters; surrounding whitespace is trimmed. Must contain non-whitespace text."
    },
    "scope": {
      "default": "tools",
      "description": "What to search. \"tools\" returns individual tool matches; \"servers\" returns server-level matches.",
      "type": "string",
      "enum": [
        "tools",
        "servers"
      ]
    },
    "category": {
      "description": "Filter by catalog category. Omit to search all categories. Categories are catalog labels, not publisher types (a federal agency API can be public-data), and a wrong guess silently drops the matching server, so set this only when the category is known.",
      "type": "string",
      "enum": [
        "research",
        "government",
        "public-data",
        "utility"
      ]
    },
    "limit": {
      "default": 5,
      "description": "Maximum number of results to return (1-1000). Default 5. At most 20 per call: a larger limit returns up to 20, with a notice naming the offset to continue from when more matches follow.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "default": 0,
      "description": "Result offset. Use nextOffset with the same query, scope, category, and limit; pages use the current catalog.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "serversOffset": {
      "default": 0,
      "description": "Independent server roll-up offset (10 per page). Use nextServersOffset; must be zero in servers scope.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "query",
    "scope",
    "limit",
    "offset",
    "serversOffset"
  ],
  "additionalProperties": false
}
view source ↗

cyanheads_describe_entry

Return the description and install snippets for a named tool or server. For tools: the description, owning server, and connection metadata. For either kind: local (stdio, via npx) install snippets for every published server, plus remote (HTTP) connection snippets when a hosted endpoint exists — for every supported client, or one client via the client parameter.

read
scope read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "cyanheads_describe_entry",
    "arguments": {
      "name": "<name>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "Tool name (snake_case, e.g. \"earthquake_search_events\") or server name (kebab-case, e.g. \"earthquake-mcp-server\"). 1-64 characters. Exact names win; unique case-insensitive names resolve to canonical names. A tool name that more than one server owns also needs server. Use cyanheads_search_catalog to discover valid names."
    },
    "server": {
      "description": "Server that owns the tool to describe — the server value cyanheads_search_catalog returned with this name. 1-64 characters, resolved like a server name. Required when the tool name has more than one owner; with a server name, it must name the same server.",
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "kind": {
      "description": "Whether name refers to a tool or server. Omit to auto-detect: names containing underscores are treated as tools; names containing hyphens are treated as servers.",
      "type": "string",
      "enum": [
        "tool",
        "server"
      ]
    },
    "client": {
      "description": "Return install snippets for this client only (both local and remote transports when available). \"streamable-http\" selects the generic mcpServers JSON; \"curl\" selects a connectivity probe for hosted servers. Omit to return snippets for all supported clients.",
      "type": "string",
      "enum": [
        "claude-code",
        "cline",
        "codex",
        "cursor",
        "curl",
        "gemini",
        "streamable-http"
      ]
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}
view source ↗

Extensions

1

io.modelcontextprotocol/skills

{
  "directoryRead": true
}