cyanheads-mcp-server
A community MCP server providing fleet discovery for the cyanheads ecosystem. It enables semantic search across tools and servers using natural language queries and returns ranked matches with brief summaries. Additionally, it provides detailed descriptions and per-client install snippets for specific tools or servers, supporting various clients like Claude, Codex, and Cursor.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://cyanheads.caseyjhand.com/mcpWhat its tools do
2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (2)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search fleet tools and servers by natural-language description
- Return description and install snippets for a named tool or server
- Find fleet servers for a task and hand over a working install
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- cyanheads-mcp-server 0.5.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 2 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/skills": {
"directoryRead": true
}
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
2 advertised
cyanheads_search_catalog — Search Fleet Tools and Servers
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 1000,
"minimum": 1,
"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."
},
"query": {
"type": "string",
"pattern": "\\S",
"maxLength": 500,
"minLength": 1,
"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": {
"enum": [
"tools",
"servers"
],
"type": "string",
"default": "tools",
"description": "What to search. \"tools\" returns individual tool matches; \"servers\" returns server-level matches."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Result offset. Use nextOffset with the same query, scope, category, and limit; pages use the current catalog."
},
"category": {
"enum": [
"research",
"government",
"public-data",
"utility"
],
"type": "string",
"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."
},
"serversOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Independent server roll-up offset (10 per page). Use nextServersOffset; must be zero in servers scope."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"offset",
"nextOffset",
"results",
"scope",
"effectiveQuery",
"totalCount"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "Per-call result cap that was applied."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_servers_offset",
"catalog_empty"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_servers_offset`: A nonzero serversOffset is supplied in servers scope. `catalog_empty`: Catalog has not finished loading. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"scope": {
"enum": [
"tools",
"servers"
],
"type": "string",
"description": "Scope that was searched."
},
"shown": {
"type": "number",
"description": "Results returned on this capped page."
},
"notice": {
"type": "string",
"description": "Guidance for zero matches, an exhausted result page, or a page cut to the 20-per-call cap with more matches following (names the offset to continue from). Absent otherwise."
},
"offset": {
"type": "number",
"description": "Current ranked-result offset."
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"server",
"brief",
"category",
"score"
],
"properties": {
"name": {
"type": "string",
"description": "Tool name (snake_case) or server name (kebab-case) depending on scope."
},
"brief": {
"type": "string",
"description": "One-line summary of what this tool or server does."
},
"score": {
"type": "number",
"description": "Cosine similarity between query and entry, in [0, 1]. Higher is better. Compare only within a single response."
},
"server": {
"type": "string",
"description": "Server package name that owns this tool (e.g. \"arxiv-mcp-server\"). Same as name when scope is \"servers\". Pass name and server to cyanheads_describe_entry to describe exactly this row."
},
"category": {
"enum": [
"research",
"government",
"public-data",
"utility"
],
"type": "string",
"description": "Catalog category for the owning server."
}
},
"description": "A single search result entry.",
"additionalProperties": false
},
"description": "Ranked matches, best first."
},
"servers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"brief",
"category",
"matchedTools",
"topScore"
],
"properties": {
"name": {
"type": "string",
"description": "Server package name (e.g. \"cdc-health-mcp-server\")."
},
"brief": {
"type": "string",
"description": "One-line description of what the server does."
},
"category": {
"enum": [
"research",
"government",
"public-data",
"utility"
],
"type": "string",
"description": "Catalog category."
},
"topScore": {
"type": "number",
"description": "Best cosine similarity among this server's matched tools. Drives ordering. Distinct from the score a server gets under scope \"servers\"."
},
"matchedTools": {
"type": "number",
"description": "Count of this server's tools in the full match set."
}
},
"description": "A server roll-up entry.",
"additionalProperties": false
},
"description": "Server roll-up from the full match set, independent of result offset/limit. Tools scope only. Ordered by topScore desc (name-tiebroken); 10 per page starting at serversOffset. Use nextServersOffset to continue and serversTotal for the full distinct count."
},
"truncated": {
"type": "boolean",
"description": "True when limit exceeded the 20-per-call cap and more matches follow this page."
},
"nextOffset": {
"type": [
"number",
"null"
],
"description": "Next ranked-result offset, or null when exhausted."
},
"totalCount": {
"type": "number",
"description": "Total relevant matches before the limit was applied."
},
"serversTotal": {
"type": "number",
"description": "Total distinct servers in the full match set (before the cap of 10 is applied). Present only when servers is present."
},
"serversOffset": {
"type": "number",
"description": "Current server roll-up offset; tools scope only."
},
"effectiveQuery": {
"type": "string",
"description": "The query that was searched."
},
"nextServersOffset": {
"type": [
"number",
"null"
],
"description": "Next server roll-up offset, or null when exhausted; tools scope only."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}cyanheads_describe_entry — Describe Fleet Tool or Server
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"kind": {
"enum": [
"tool",
"server"
],
"type": "string",
"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."
},
"name": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"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."
},
"client": {
"enum": [
"claude-code",
"cline",
"codex",
"cursor",
"curl",
"gemini",
"streamable-http"
],
"type": "string",
"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."
},
"server": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"result"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"not_found",
"ambiguous_kind",
"ambiguous_owner",
"catalog_empty"
],
"description": "Machine-readable failure mode. Declared by this tool: `not_found`: No tool or server with the given name, under the given server when set, exists in the catalog. `ambiguous_kind`: Name matches both a tool and a server (collision in catalog). `ambiguous_owner`: The tool name has more than one owning server and server is not set. `catalog_empty`: Catalog has not finished loading. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"result": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"name",
"description",
"server",
"npm",
"github",
"auth",
"installSnippets"
],
"properties": {
"npm": {
"type": "string",
"description": "Owning server npm package for local installation."
},
"auth": {
"type": "string",
"description": "Owning server hosted authentication requirement."
},
"kind": {
"type": "string",
"const": "tool",
"description": "Resolved as a tool entry."
},
"name": {
"type": "string",
"description": "Canonical resolved tool name."
},
"github": {
"type": "string",
"description": "Owning server GitHub repository URL."
},
"server": {
"type": "string",
"description": "Server package name that owns this tool."
},
"endpoint": {
"type": "string",
"description": "Owning server hosted HTTP endpoint, when available."
},
"description": {
"type": "string",
"description": "Brief description of what the tool does."
},
"installNotice": {
"type": "string",
"description": "Actionable guidance when the requested client has no compatible installation snippet."
},
"installSnippets": {
"type": "array",
"items": {
"type": "object",
"required": [
"client",
"transport",
"label",
"payload"
],
"properties": {
"label": {
"type": "string",
"description": "Install method label."
},
"client": {
"enum": [
"claude-code",
"cline",
"codex",
"cursor",
"curl",
"gemini",
"streamable-http"
],
"type": "string",
"description": "Target MCP client."
},
"payload": {
"type": "string",
"description": "Install command or configuration."
},
"transport": {
"enum": [
"stdio",
"http"
],
"type": "string",
"description": "Local stdio or hosted HTTP transport."
}
},
"description": "An installation snippet for the owning server.",
"additionalProperties": false
},
"description": "Owning server install snippets, filtered by client when supplied."
},
"requiredEnvVars": {
"type": "array",
"items": {
"type": "string"
},
"description": "Environment variable names the owning server's manifest marks required for a local install; a key the manifest leaves optional is not listed."
}
},
"description": "A resolved tool entry — its description and the server that owns it.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"name",
"displayName",
"description",
"version",
"npm",
"github",
"auth",
"toolCount",
"tools",
"installSnippets"
],
"properties": {
"npm": {
"type": "string",
"description": "npm package name (e.g. \"@cyanheads/arxiv-mcp-server\"). Drives the local stdio snippets."
},
"auth": {
"type": "string",
"description": "Auth requirement for the hosted deployment (currently always \"none\")."
},
"kind": {
"type": "string",
"const": "server",
"description": "Resolved as a server entry."
},
"name": {
"type": "string",
"description": "Canonical resolved server name."
},
"tools": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"description"
],
"properties": {
"name": {
"type": "string",
"description": "Tool name (snake_case, e.g. \"earthquake_search_events\")."
},
"description": {
"type": "string",
"description": "Brief description of what the tool does."
}
},
"description": "A single tool exposed by this server.",
"additionalProperties": false
},
"description": "Every tool this server exposes, each with its name and a brief description — one describe call reveals the full surface without a second lookup."
},
"github": {
"type": "string",
"description": "GitHub repository URL."
},
"version": {
"type": "string",
"description": "Published version captured at fleet-generation time."
},
"endpoint": {
"type": "string",
"description": "Streamable HTTP endpoint for the hosted deployment. Absent for local-only (stdio) servers."
},
"toolCount": {
"type": "number",
"description": "Number of tools exposed by this server."
},
"description": {
"type": "string",
"description": "Brief description of what the server does."
},
"displayName": {
"type": "string",
"description": "Human-readable server label."
},
"installNotice": {
"type": "string",
"description": "Actionable guidance when the requested client has no compatible installation snippet."
},
"installSnippets": {
"type": "array",
"items": {
"type": "object",
"required": [
"client",
"transport",
"label",
"payload"
],
"properties": {
"label": {
"type": "string",
"description": "Human-readable install method label."
},
"client": {
"enum": [
"claude-code",
"cline",
"codex",
"cursor",
"curl",
"gemini",
"streamable-http"
],
"type": "string",
"description": "MCP client this snippet targets."
},
"payload": {
"type": "string",
"description": "Install payload (JSON fragment or CLI command)."
},
"transport": {
"enum": [
"stdio",
"http"
],
"type": "string",
"description": "Transport this snippet installs — stdio (local) or http (remote)."
}
},
"description": "A single install instruction entry.",
"additionalProperties": false
},
"description": "Install instructions: local (stdio) snippets for every server, plus remote (HTTP) snippets when an endpoint exists. Filtered to one client when input.client is set."
},
"requiredEnvVars": {
"type": "array",
"items": {
"type": "string"
},
"description": "Env var names the server's manifest marks required for a local (stdio) install (e.g. [\"MAILCHIMP_API_KEY\"]). Absent when none. A key the manifest leaves optional, such as one only some tools need, is not listed, so check the README before treating a local install as keyless."
}
},
"description": "A resolved server entry — metadata, optional hosted endpoint, and per-client install snippets.",
"additionalProperties": false
}
],
"description": "The resolved entry — either a tool detail or a server detail depending on the resolved kind."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}Prompts
0 advertised
Resources
1 advertised
cyanheads-guide
Find a cyanheads fleet MCP server for a task and hand the user a working install, using cyanheads_search_catalog and cyanheads_describe_entry. Use when the session lacks a capability, or the user asks which cyanheads server or tool does X, whether one is hosted, or how to add it to a client. Covers telling real matches from near misses, the category filter, hosted vs local installs, and env vars the snippets leave out.
skill://cyanheads-guide/SKILL.mdio.modelcontextprotocol/skills
skill://{+path}30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 643 ms
- 95th percentile latency
- 643 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 643 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http cyanheads-mcp-server https://cyanheads.caseyjhand.com/mcpCodex
codex mcp add cyanheads-mcp-server --url https://cyanheads.caseyjhand.com/mcpCursor
{
"mcpServers": {
"cyanheads-mcp-server": {
"url": "https://cyanheads.caseyjhand.com/mcp"
}
}
}Cline
{
"mcpServers": {
"cyanheads-mcp-server": {
"type": "streamableHttp",
"url": "https://cyanheads.caseyjhand.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"cyanheads-mcp-server": {
"type": "http",
"url": "https://cyanheads.caseyjhand.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http cyanheads-mcp-server https://cyanheads.caseyjhand.com/mcpClaude Desktop
https://cyanheads.caseyjhand.com/mcpWindsurf
{
"mcpServers": {
"cyanheads-mcp-server": {
"serverUrl": "https://cyanheads.caseyjhand.com/mcp"
}
}
}Let your agent find its tools
Find servers like cyanheads-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.