cyanheads-mcp-server
Server Details
Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.
- Status
- Healthy
- Uptime
- 99.8% over 63 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/cyanheads-mcp-server
- GitHub Stars
- 1
- Server Listing
- cyanheads-mcp-server
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one searches the catalog by natural language, the other retrieves details for a specific named entry. Their descriptions make the boundary explicit, and neither overlaps with the other's function.
Both tool names follow the same predictable pattern: cyanheads_ prefix plus a snake_case verb_noun structure (describe_entry, search_catalog). There is no mixing of conventions and the naming is fully readable.
Two tools is borderline for a discovery server. While search and describe cover the core read-only catalog interaction, the count is thin and lacks any additional browsing or enumeration operation.
The surface covers the essential read-only operations: natural-language search and detailed lookup with install snippets. A minor gap is the absence of a direct list-all or browse operation, though agents can likely work around this via broad search queries.
Available Tools
2 toolscyanheads_describe_entryDescribe Fleet Tool or ServerARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | 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 | Yes | Tool name (snake_case, e.g. "earthquake_search") 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 | No | 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 | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| result | No | The resolved entry — either a tool detail or a server detail depending on the resolved kind. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuine context beyond that: it discloses that local stdio/npx snippets cover every published server while remote HTTP snippets appear only 'when a hosted endpoint exists,' and that results can be scoped to one client or all clients.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and the second elaborates on output content. It is efficient overall, though the long em-dash-laden second sentence is somewhat run-on and packs several distinct behaviors together.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be explained. For a read-only lookup with a required name and an auto-detection hint handled in the schema, the description covers the important behavioral surface (kind handling, client scoping, conditional remote snippets).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's note that snippets are returned 'for every supported client, or one client via the client parameter' adds a little meaning about the client param's effect, but it largely restates what the schema already documents thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Return the description and install snippets for a named tool or server.' It then further distinguishes the two operating modes (tool vs server) so an agent knows precisely what it gets back, and it is clearly distinct from the search sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what is returned for each kind and how the client parameter narrows scope, which implies when to use it. However, it never explicitly names cyanheads_search_catalog as the discovery alternative or states when to prefer this tool over it; the only pointer to the sibling lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cyanheads_search_catalogSearch Fleet Tools and ServersARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 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 | Yes | 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 | No | What to search. "tools" returns individual tool matches; "servers" returns server-level matches. | tools |
| offset | No | Result offset. Use nextOffset with the same query, scope, category, and limit; pages use the current catalog. | |
| category | No | Filter by catalog category. Omit to search all categories. | |
| serversOffset | No | Independent server roll-up offset (10 per page). Use nextServersOffset; must be zero in servers scope. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | Per-call result cap that was applied. |
| error | No | Present when the call failed. Absent on success. |
| scope | No | Scope that was searched. |
| shown | No | Results returned on this capped page. |
| notice | No | 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 | No | Current ranked-result offset. |
| results | No | Ranked matches, best first. |
| servers | No | 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 | No | True when limit exceeded the 20-per-call cap and more matches follow this page. |
| nextOffset | No | Next ranked-result offset, or null when exhausted. |
| totalCount | No | Total relevant matches before the limit was applied. |
| serversTotal | No | Total distinct servers in the full match set (before the cap of 10 is applied). Present only when servers is present. |
| serversOffset | No | Current server roll-up offset; tools scope only. |
| effectiveQuery | No | The query that was searched. |
| nextServersOffset | No | Next server roll-up offset, or null when exhausted; tools scope only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, non-open-world operation, and the description adds useful substance on top: ranked results, brief summaries, and server attribution per tool. It does not discuss pagination caps or rate behavior in prose, but the schema already documents the 20-per-call limit and offset continuation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no waste: purpose and return value first, then the scope-selection rule. Every sentence carries decision-relevant information and the most important constraint is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full parameter coverage, and safety annotations, the description supplies exactly the pieces structured fields cannot: what the ranking returns and how to choose a scope. The only gap is the absence of any relationship to describe_entry, which matters for a two-tool catalog.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description earns above baseline by explaining the practical semantics of 'scope' in workflow terms rather than just restating the enum. The remaining parameters (limit, offset, category, serversOffset) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Search fleet tools and servers by natural-language description') and defines the return shape ('ranked matches with brief summaries and the server each tool belongs to'). It clearly separates the two search modes internally, but never names the one sibling tool (describe_entry), so an agent gets no explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete routing guidance for its most consequential choice: scope 'servers' to find which server handles a workflow, default scope 'tools' to find specific tools. It stops short of saying when to prefer describe_entry over searching, so usage is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
cyanheads_describe_entry7 fields changed- changed
Input schema / properties / client / descriptionPrevious value: -"Return install snippets for this client only (both local and remote transports when available). Omit to return snippets for all supported clients."New value: +"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." - changed
Input schema / properties / client / enumPrevious value: -[ - "claude-code", - "codex", - "cursor", - "curl", - "gemini", - "streamable-http" -]New value: +[ + "claude-code", + "cline", + "codex", + "cursor", + "curl", + "gemini", + "streamable-http" +] - changed
Input schema / properties / name / descriptionPrevious value: -"Tool name (snake_case, e.g. \"earthquake_search\") or server name (kebab-case, e.g. \"earthquake-mcp-server\"). 1-64 characters. Exact names win; unique case-insensitive names resolve to canonical names. Use cyanheads_search_catalog to discover valid names."New value: +"Tool name (snake_case, e.g. \"earthquake_search\") 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." - added
Input schema / properties / serverAdded value: +{ + "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.", + "maxLength": 64, + "minLength": 1, + "type": "string" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `not_found`: No tool or server with the given name exists in the catalog. `ambiguous_kind`: Name matches both a tool and a server (collision in catalog). `catalog_empty`: Catalog has not finished loading. Other values are possible when a failure originates below the handler."New value: +"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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "not_found", - "ambiguous_kind", - "catalog_empty" -]New value: +[ + "not_found", + "ambiguous_kind", + "ambiguous_owner", + "catalog_empty" +] - changed
Output schema / properties / result / oneOfPrevious value: -[ - { - "additionalProperties": false, - "description": "A resolved tool entry — its description and the server that owns it.", - "properties": { - "auth": { - "description": "Owning server hosted authentication requirement.", - "type": "string" - }, - "description": { - "description": "Brief description of what the tool does.", - "type": "string" - }, - "endpoint": { - "description": "Owning server hosted HTTP endpoint, when available.", - "type": "string" - }, - "github": { - "description": "Owning server GitHub repository URL.", - "type": "string" - }, - "installNotice": { - "description": "Actionable guidance when the requested client has no compatible installation snippet.", - "type": "string" - }, - "installSnippets": { - "description": "Owning server install snippets, filtered by client when supplied.", - "items": { - "additionalProperties": false, - "description": "An installation snippet for the owning server.", - "properties": { - "client": { - "description": "Target MCP client.", - "enum": [ - "claude-code", - "codex", - "cursor", - "curl", - "gemini", - "streamable-http" - ], - "type": "string" - }, - "label": { - "description": "Install method label.", - "type": "string" - }, - "payload": { - "description": "Install command or configuration.", - "type": "string" - }, - "transport": { - "description": "Local stdio or hosted HTTP transport.", - "enum": [ - "stdio", - "http" - ], - "type": "string" - } - }, - "required": [ - "client", - "transport", - "label", - "payload" - ], - "type": "object" - }, - "type": "array" - }, - "kind": { - "const": "tool", - "description": "Resolved as a tool entry.", - "type": "string" - }, - "name": { - "description": "Canonical resolved tool name.", - "type": "string" - }, - "npm": { - "description": "Owning server npm package for local installation.", - "type": "string" - }, - "requiredEnvVars": { - "description": "Environment variable names required for local installation.", - "items": { - "type": "string" - }, - "type": "array" - }, - "server": { - "description": "Server package name that owns this tool.", - "type": "string" - } - }, - "required": [ - "kind", - "name", - "description", - "server", - "npm", - "github", - "auth", - "installSnippets" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A resolved server entry — metadata, optional hosted endpoint, and per-client install snippets.", - "properties": { - "auth": { - "description": "Auth requirement for the hosted deployment (currently always \"none\").", - "type": "string" - }, - "description": { - "description": "Brief description of what the server does.", - "type": "string" - }, - "displayName": { - "description": "Human-readable server label.", - "type": "string" - }, - "endpoint": { - "description": "Streamable HTTP endpoint for the hosted deployment. Absent for local-only (stdio) servers.", - "type": "string" - }, - "github": { - "description": "GitHub repository URL.", - "type": "string" - }, - "installNotice": { - "description": "Actionable guidance when the requested client has no compatible installation snippet.", - "type": "string" - }, - "installSnippets": { - "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.", - "items": { - "additionalProperties": false, - "description": "A single install instruction entry.", - "properties": { - "client": { - "description": "MCP client this snippet targets.", - "enum": [ - "claude-code", - "codex", - "cursor", - "curl", - "gemini", - "streamable-http" - ], - "type": "string" - }, - "label": { - "description": "Human-readable install method label.", - "type": "string" - }, - "payload": { - "description": "Install payload (JSON fragment or CLI command).", - "type": "string" - }, - "transport": { - "description": "Transport this snippet installs — stdio (local) or http (remote).", - "enum": [ - "stdio", - "http" - ], - "type": "string" - } - }, - "required": [ - "client", - "transport", - "label", - "payload" - ], - "type": "object" - }, - "type": "array" - }, - "kind": { - "const": "server", - "description": "Resolved as a server entry.", - "type": "string" - }, - "name": { - "description": "Canonical resolved server name.", - "type": "string" - }, - "npm": { - "description": "npm package name (e.g. \"@cyanheads/arxiv-mcp-server\"). Drives the local stdio snippets.", - "type": "string" - }, - "requiredEnvVars": { - "description": "Env var names the local (stdio) install requires (e.g. [\"MAILCHIMP_API_KEY\"]). Absent when none.", - "items": { - "type": "string" - }, - "type": "array" - }, - "toolCount": { - "description": "Number of tools exposed by this server.", - "type": "number" - }, - "tools": { - "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.", - "items": { - "additionalProperties": false, - "description": "A single tool exposed by this server.", - "properties": { - "description": { - "description": "Brief description of what the tool does.", - "type": "string" - }, - "name": { - "description": "Tool name (snake_case, e.g. \"earthquake_search\").", - "type": "string" - } - }, - "required": [ - "name", - "description" - ], - "type": "object" - }, - "type": "array" - }, - "version": { - "description": "Published version captured at fleet-generation time.", - "type": "string" - } - }, - "required": [ - "kind", - "name", - "displayName", - "description", - "version", - "npm", - "github", - "auth", - "toolCount", - "tools", - "installSnippets" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "description": "A resolved tool entry — its description and the server that owns it.", + "properties": { + "auth": { + "description": "Owning server hosted authentication requirement.", + "type": "string" + }, + "description": { + "description": "Brief description of what the tool does.", + "type": "string" + }, + "endpoint": { + "description": "Owning server hosted HTTP endpoint, when available.", + "type": "string" + }, + "github": { + "description": "Owning server GitHub repository URL.", + "type": "string" + }, + "installNotice": { + "description": "Actionable guidance when the requested client has no compatible installation snippet.", + "type": "string" + }, + "installSnippets": { + "description": "Owning server install snippets, filtered by client when supplied.", + "items": { + "additionalProperties": false, + "description": "An installation snippet for the owning server.", + "properties": { + "client": { + "description": "Target MCP client.", + "enum": [ + "claude-code", + "cline", + "codex", + "cursor", + "curl", + "gemini", + "streamable-http" + ], + "type": "string" + }, + "label": { + "description": "Install method label.", + "type": "string" + }, + "payload": { + "description": "Install command or configuration.", + "type": "string" + }, + "transport": { + "description": "Local stdio or hosted HTTP transport.", + "enum": [ + "stdio", + "http" + ], + "type": "string" + } + }, + "required": [ + "client", + "transport", + "label", + "payload" + ], + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "tool", + "description": "Resolved as a tool entry.", + "type": "string" + }, + "name": { + "description": "Canonical resolved tool name.", + "type": "string" + }, + "npm": { + "description": "Owning server npm package for local installation.", + "type": "string" + }, + "requiredEnvVars": { + "description": "Environment variable names required for local installation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "server": { + "description": "Server package name that owns this tool.", + "type": "string" + } + }, + "required": [ + "kind", + "name", + "description", + "server", + "npm", + "github", + "auth", + "installSnippets" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A resolved server entry — metadata, optional hosted endpoint, and per-client install snippets.", + "properties": { + "auth": { + "description": "Auth requirement for the hosted deployment (currently always \"none\").", + "type": "string" + }, + "description": { + "description": "Brief description of what the server does.", + "type": "string" + }, + "displayName": { + "description": "Human-readable server label.", + "type": "string" + }, + "endpoint": { + "description": "Streamable HTTP endpoint for the hosted deployment. Absent for local-only (stdio) servers.", + "type": "string" + }, + "github": { + "description": "GitHub repository URL.", + "type": "string" + }, + "installNotice": { + "description": "Actionable guidance when the requested client has no compatible installation snippet.", + "type": "string" + }, + "installSnippets": { + "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.", + "items": { + "additionalProperties": false, + "description": "A single install instruction entry.", + "properties": { + "client": { + "description": "MCP client this snippet targets.", + "enum": [ + "claude-code", + "cline", + "codex", + "cursor", + "curl", + "gemini", + "streamable-http" + ], + "type": "string" + }, + "label": { + "description": "Human-readable install method label.", + "type": "string" + }, + "payload": { + "description": "Install payload (JSON fragment or CLI command).", + "type": "string" + }, + "transport": { + "description": "Transport this snippet installs — stdio (local) or http (remote).", + "enum": [ + "stdio", + "http" + ], + "type": "string" + } + }, + "required": [ + "client", + "transport", + "label", + "payload" + ], + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "server", + "description": "Resolved as a server entry.", + "type": "string" + }, + "name": { + "description": "Canonical resolved server name.", + "type": "string" + }, + "npm": { + "description": "npm package name (e.g. \"@cyanheads/arxiv-mcp-server\"). Drives the local stdio snippets.", + "type": "string" + }, + "requiredEnvVars": { + "description": "Env var names the local (stdio) install requires (e.g. [\"MAILCHIMP_API_KEY\"]). Absent when none.", + "items": { + "type": "string" + }, + "type": "array" + }, + "toolCount": { + "description": "Number of tools exposed by this server.", + "type": "number" + }, + "tools": { + "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.", + "items": { + "additionalProperties": false, + "description": "A single tool exposed by this server.", + "properties": { + "description": { + "description": "Brief description of what the tool does.", + "type": "string" + }, + "name": { + "description": "Tool name (snake_case, e.g. \"earthquake_search\").", + "type": "string" + } + }, + "required": [ + "name", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "description": "Published version captured at fleet-generation time.", + "type": "string" + } + }, + "required": [ + "kind", + "name", + "displayName", + "description", + "version", + "npm", + "github", + "auth", + "toolCount", + "tools", + "installSnippets" + ], + "type": "object" + } +]
- Changed
cyanheads_search_catalog7 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of results to return (1-20). Default 5."New value: +"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." - changed
Input schema / properties / limit / maximumPrevious value: -20New value: +1000 - added
Output schema / properties / capAdded value: +{ + "description": "Per-call result cap that was applied.", + "type": "number" +} - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance for zero matches or an exhausted result page. Absent on nonempty result pages."New value: +"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." - changed
Output schema / properties / results / items / properties / server / descriptionPrevious value: -"Server package name that owns this tool (e.g. \"arxiv-mcp-server\"). Same as name when scope is \"servers\"."New value: +"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." - added
Output schema / properties / shownAdded value: +{ + "description": "Results returned on this capped page.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when limit exceeded the 20-per-call cap and more matches follow this page.", + "type": "boolean" +}
2 tool updates
- Changed
cyanheads_describe_entry2 fields changed- changed
Input schema / properties / name / descriptionPrevious value: -"Tool name (snake_case, e.g. \"earthquake_search\") or server name (kebab-case, e.g. \"earthquake-mcp-server\"). 1-64 characters. Use cyanheads_search_catalog to discover valid names."New value: +"Tool name (snake_case, e.g. \"earthquake_search\") or server name (kebab-case, e.g. \"earthquake-mcp-server\"). 1-64 characters. Exact names win; unique case-insensitive names resolve to canonical names. Use cyanheads_search_catalog to discover valid names." - changed
Output schema / properties / result / oneOfPrevious value: -[ - { - "additionalProperties": false, - "description": "A resolved tool entry — its description and the server that owns it.", - "properties": { - "description": { - "description": "Brief description of what the tool does.", - "type": "string" - }, - "kind": { - "const": "tool", - "description": "Resolved as a tool entry.", - "type": "string" - }, - "name": { - "description": "Resolved name (as looked up).", - "type": "string" - }, - "server": { - "description": "Server package name that owns this tool.", - "type": "string" - } - }, - "required": [ - "kind", - "name", - "description", - "server" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A resolved server entry — metadata, optional hosted endpoint, and per-client install snippets.", - "properties": { - "auth": { - "description": "Auth requirement for the hosted deployment (currently always \"none\").", - "type": "string" - }, - "description": { - "description": "Brief description of what the server does.", - "type": "string" - }, - "displayName": { - "description": "Human-readable server label.", - "type": "string" - }, - "endpoint": { - "description": "Streamable HTTP endpoint for the hosted deployment. Absent for local-only (stdio) servers.", - "type": "string" - }, - "github": { - "description": "GitHub repository URL.", - "type": "string" - }, - "installSnippets": { - "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.", - "items": { - "additionalProperties": false, - "description": "A single install instruction entry.", - "properties": { - "client": { - "description": "MCP client this snippet targets.", - "enum": [ - "claude-code", - "codex", - "cursor", - "curl", - "gemini", - "streamable-http" - ], - "type": "string" - }, - "label": { - "description": "Human-readable install method label.", - "type": "string" - }, - "payload": { - "description": "Install payload (JSON fragment or CLI command).", - "type": "string" - }, - "transport": { - "description": "Transport this snippet installs — stdio (local) or http (remote).", - "enum": [ - "stdio", - "http" - ], - "type": "string" - } - }, - "required": [ - "client", - "transport", - "label", - "payload" - ], - "type": "object" - }, - "type": "array" - }, - "kind": { - "const": "server", - "description": "Resolved as a server entry.", - "type": "string" - }, - "name": { - "description": "Resolved name (as looked up).", - "type": "string" - }, - "npm": { - "description": "npm package name (e.g. \"@cyanheads/arxiv-mcp-server\"). Drives the local stdio snippets.", - "type": "string" - }, - "requiredEnvVars": { - "description": "Env var names the local (stdio) install requires (e.g. [\"MAILCHIMP_API_KEY\"]). Absent when none.", - "items": { - "type": "string" - }, - "type": "array" - }, - "toolCount": { - "description": "Number of tools exposed by this server.", - "type": "number" - }, - "tools": { - "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.", - "items": { - "additionalProperties": false, - "description": "A single tool exposed by this server.", - "properties": { - "description": { - "description": "Brief description of what the tool does.", - "type": "string" - }, - "name": { - "description": "Tool name (snake_case, e.g. \"earthquake_search\").", - "type": "string" - } - }, - "required": [ - "name", - "description" - ], - "type": "object" - }, - "type": "array" - }, - "version": { - "description": "Published version captured at fleet-generation time.", - "type": "string" - } - }, - "required": [ - "kind", - "name", - "displayName", - "description", - "version", - "npm", - "github", - "auth", - "toolCount", - "tools", - "installSnippets" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "description": "A resolved tool entry — its description and the server that owns it.", + "properties": { + "auth": { + "description": "Owning server hosted authentication requirement.", + "type": "string" + }, + "description": { + "description": "Brief description of what the tool does.", + "type": "string" + }, + "endpoint": { + "description": "Owning server hosted HTTP endpoint, when available.", + "type": "string" + }, + "github": { + "description": "Owning server GitHub repository URL.", + "type": "string" + }, + "installNotice": { + "description": "Actionable guidance when the requested client has no compatible installation snippet.", + "type": "string" + }, + "installSnippets": { + "description": "Owning server install snippets, filtered by client when supplied.", + "items": { + "additionalProperties": false, + "description": "An installation snippet for the owning server.", + "properties": { + "client": { + "description": "Target MCP client.", + "enum": [ + "claude-code", + "codex", + "cursor", + "curl", + "gemini", + "streamable-http" + ], + "type": "string" + }, + "label": { + "description": "Install method label.", + "type": "string" + }, + "payload": { + "description": "Install command or configuration.", + "type": "string" + }, + "transport": { + "description": "Local stdio or hosted HTTP transport.", + "enum": [ + "stdio", + "http" + ], + "type": "string" + } + }, + "required": [ + "client", + "transport", + "label", + "payload" + ], + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "tool", + "description": "Resolved as a tool entry.", + "type": "string" + }, + "name": { + "description": "Canonical resolved tool name.", + "type": "string" + }, + "npm": { + "description": "Owning server npm package for local installation.", + "type": "string" + }, + "requiredEnvVars": { + "description": "Environment variable names required for local installation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "server": { + "description": "Server package name that owns this tool.", + "type": "string" + } + }, + "required": [ + "kind", + "name", + "description", + "server", + "npm", + "github", + "auth", + "installSnippets" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A resolved server entry — metadata, optional hosted endpoint, and per-client install snippets.", + "properties": { + "auth": { + "description": "Auth requirement for the hosted deployment (currently always \"none\").", + "type": "string" + }, + "description": { + "description": "Brief description of what the server does.", + "type": "string" + }, + "displayName": { + "description": "Human-readable server label.", + "type": "string" + }, + "endpoint": { + "description": "Streamable HTTP endpoint for the hosted deployment. Absent for local-only (stdio) servers.", + "type": "string" + }, + "github": { + "description": "GitHub repository URL.", + "type": "string" + }, + "installNotice": { + "description": "Actionable guidance when the requested client has no compatible installation snippet.", + "type": "string" + }, + "installSnippets": { + "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.", + "items": { + "additionalProperties": false, + "description": "A single install instruction entry.", + "properties": { + "client": { + "description": "MCP client this snippet targets.", + "enum": [ + "claude-code", + "codex", + "cursor", + "curl", + "gemini", + "streamable-http" + ], + "type": "string" + }, + "label": { + "description": "Human-readable install method label.", + "type": "string" + }, + "payload": { + "description": "Install payload (JSON fragment or CLI command).", + "type": "string" + }, + "transport": { + "description": "Transport this snippet installs — stdio (local) or http (remote).", + "enum": [ + "stdio", + "http" + ], + "type": "string" + } + }, + "required": [ + "client", + "transport", + "label", + "payload" + ], + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "server", + "description": "Resolved as a server entry.", + "type": "string" + }, + "name": { + "description": "Canonical resolved server name.", + "type": "string" + }, + "npm": { + "description": "npm package name (e.g. \"@cyanheads/arxiv-mcp-server\"). Drives the local stdio snippets.", + "type": "string" + }, + "requiredEnvVars": { + "description": "Env var names the local (stdio) install requires (e.g. [\"MAILCHIMP_API_KEY\"]). Absent when none.", + "items": { + "type": "string" + }, + "type": "array" + }, + "toolCount": { + "description": "Number of tools exposed by this server.", + "type": "number" + }, + "tools": { + "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.", + "items": { + "additionalProperties": false, + "description": "A single tool exposed by this server.", + "properties": { + "description": { + "description": "Brief description of what the tool does.", + "type": "string" + }, + "name": { + "description": "Tool name (snake_case, e.g. \"earthquake_search\").", + "type": "string" + } + }, + "required": [ + "name", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "description": "Published version captured at fleet-generation time.", + "type": "string" + } + }, + "required": [ + "kind", + "name", + "displayName", + "description", + "version", + "npm", + "github", + "auth", + "toolCount", + "tools", + "installSnippets" + ], + "type": "object" + } +]
- Changed
cyanheads_search_catalog13 fields changed- added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Result offset. Use nextOffset with the same query, scope, category, and limit; pages use the current catalog.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Natural language search query. Describe what you want to accomplish, a workflow, or a capability area. 1-500 characters."New value: +"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." - added
Input schema / properties / query / patternAdded value: +"\\S" - added
Input schema / properties / serversOffsetAdded value: +{ + "default": 0, + "description": "Independent server roll-up offset (10 per page). Use nextServersOffset; must be zero in servers scope.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "results", - "scope", - "effectiveQuery", - "totalCount" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "offset", + "nextOffset", + "results", + "scope", + "effectiveQuery", + "totalCount" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `catalog_empty`: Catalog has not finished loading. Other values are possible when a failure originates below the handler."New value: +"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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "catalog_empty" -]New value: +[ + "invalid_servers_offset", + "catalog_empty" +] - added
Output schema / properties / nextOffsetAdded value: +{ + "description": "Next ranked-result offset, or null when exhausted.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / nextServersOffsetAdded value: +{ + "description": "Next server roll-up offset, or null when exhausted; tools scope only.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no results matched — e.g. how to broaden the query or try a different scope. Absent on successful result pages."New value: +"Guidance for zero matches or an exhausted result page. Absent on nonempty result pages." - added
Output schema / properties / offsetAdded value: +{ + "description": "Current ranked-result offset.", + "type": "number" +} - changed
Output schema / properties / servers / descriptionPrevious value: -"Roll-up of distinct servers across the full match set, before the limit slice. Present only for scope \"tools\". Ordered by topScore desc (name-tiebroken); capped at 10. Use serversTotal to see how many distinct servers matched in total."New value: +"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." - added
Output schema / properties / serversOffsetAdded value: +{ + "description": "Current server roll-up offset; tools scope only.", + "type": "number" +}
2 tool updates
- Changed
cyanheads_describe_entry6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "result" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `not_found`: No tool or server with the given name exists in the catalog. `ambiguous_kind`: Name matches both a tool and a server (collision in catalog). `catalog_empty`: Catalog has not finished loading. Other values are possible when a failure originates below the handler.", + "examples": [ + "not_found", + "ambiguous_kind", + "catalog_empty" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "result" -]
- Changed
cyanheads_search_catalog6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "results", + "scope", + "effectiveQuery", + "totalCount" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `catalog_empty`: Catalog has not finished loading. Other values are possible when a failure originates below the handler.", + "examples": [ + "catalog_empty" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "results", - "scope", - "effectiveQuery", - "totalCount" -]
4 tool updates
- Removed
cyanheads_describe - Added
cyanheads_describe_entry - Removed
cyanheads_search - Added
cyanheads_search_catalog
1 tool update
- Changed
cyanheads_describe1 field changed- changed
Output schema / properties / result / oneOfPrevious value: -[ - { - "additionalProperties": false, - "description": "A resolved tool entry — its description and the server that owns it.", - "properties": { - "description": { - "description": "Brief description of what the tool does.", - "type": "string" - }, - "kind": { - "const": "tool", - "description": "Resolved as a tool entry.", - "type": "string" - }, - "name": { - "description": "Resolved name (as looked up).", - "type": "string" - }, - "server": { - "description": "Server package name that owns this tool.", - "type": "string" - } - }, - "required": [ - "kind", - "name", - "description", - "server" - ], - "type": "object" - }, - { - "additionalProperties": false, - "description": "A resolved server entry — metadata, optional hosted endpoint, and per-client install snippets.", - "properties": { - "auth": { - "description": "Auth requirement for the hosted deployment (currently always \"none\").", - "type": "string" - }, - "description": { - "description": "Brief description of what the server does.", - "type": "string" - }, - "displayName": { - "description": "Human-readable server label.", - "type": "string" - }, - "endpoint": { - "description": "Streamable HTTP endpoint for the hosted deployment. Absent for local-only (stdio) servers.", - "type": "string" - }, - "github": { - "description": "GitHub repository URL.", - "type": "string" - }, - "installSnippets": { - "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.", - "items": { - "additionalProperties": false, - "description": "A single install instruction entry.", - "properties": { - "client": { - "description": "MCP client this snippet targets.", - "enum": [ - "claude-code", - "codex", - "cursor", - "curl", - "gemini", - "streamable-http" - ], - "type": "string" - }, - "label": { - "description": "Human-readable install method label.", - "type": "string" - }, - "payload": { - "description": "Install payload (JSON fragment or CLI command).", - "type": "string" - }, - "transport": { - "description": "Transport this snippet installs — stdio (local) or http (remote).", - "enum": [ - "stdio", - "http" - ], - "type": "string" - } - }, - "required": [ - "client", - "transport", - "label", - "payload" - ], - "type": "object" - }, - "type": "array" - }, - "kind": { - "const": "server", - "description": "Resolved as a server entry.", - "type": "string" - }, - "name": { - "description": "Resolved name (as looked up).", - "type": "string" - }, - "npm": { - "description": "npm package name (e.g. \"@cyanheads/arxiv-mcp-server\"). Drives the local stdio snippets.", - "type": "string" - }, - "requiredEnvVars": { - "description": "Env var names the local (stdio) install requires (e.g. [\"MAILCHIMP_API_KEY\"]). Absent when none.", - "items": { - "type": "string" - }, - "type": "array" - }, - "toolCount": { - "description": "Number of tools exposed by this server.", - "type": "number" - }, - "version": { - "description": "Published version captured at fleet-generation time.", - "type": "string" - } - }, - "required": [ - "kind", - "name", - "displayName", - "description", - "version", - "npm", - "github", - "auth", - "toolCount", - "installSnippets" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "description": "A resolved tool entry — its description and the server that owns it.", + "properties": { + "description": { + "description": "Brief description of what the tool does.", + "type": "string" + }, + "kind": { + "const": "tool", + "description": "Resolved as a tool entry.", + "type": "string" + }, + "name": { + "description": "Resolved name (as looked up).", + "type": "string" + }, + "server": { + "description": "Server package name that owns this tool.", + "type": "string" + } + }, + "required": [ + "kind", + "name", + "description", + "server" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A resolved server entry — metadata, optional hosted endpoint, and per-client install snippets.", + "properties": { + "auth": { + "description": "Auth requirement for the hosted deployment (currently always \"none\").", + "type": "string" + }, + "description": { + "description": "Brief description of what the server does.", + "type": "string" + }, + "displayName": { + "description": "Human-readable server label.", + "type": "string" + }, + "endpoint": { + "description": "Streamable HTTP endpoint for the hosted deployment. Absent for local-only (stdio) servers.", + "type": "string" + }, + "github": { + "description": "GitHub repository URL.", + "type": "string" + }, + "installSnippets": { + "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.", + "items": { + "additionalProperties": false, + "description": "A single install instruction entry.", + "properties": { + "client": { + "description": "MCP client this snippet targets.", + "enum": [ + "claude-code", + "codex", + "cursor", + "curl", + "gemini", + "streamable-http" + ], + "type": "string" + }, + "label": { + "description": "Human-readable install method label.", + "type": "string" + }, + "payload": { + "description": "Install payload (JSON fragment or CLI command).", + "type": "string" + }, + "transport": { + "description": "Transport this snippet installs — stdio (local) or http (remote).", + "enum": [ + "stdio", + "http" + ], + "type": "string" + } + }, + "required": [ + "client", + "transport", + "label", + "payload" + ], + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "server", + "description": "Resolved as a server entry.", + "type": "string" + }, + "name": { + "description": "Resolved name (as looked up).", + "type": "string" + }, + "npm": { + "description": "npm package name (e.g. \"@cyanheads/arxiv-mcp-server\"). Drives the local stdio snippets.", + "type": "string" + }, + "requiredEnvVars": { + "description": "Env var names the local (stdio) install requires (e.g. [\"MAILCHIMP_API_KEY\"]). Absent when none.", + "items": { + "type": "string" + }, + "type": "array" + }, + "toolCount": { + "description": "Number of tools exposed by this server.", + "type": "number" + }, + "tools": { + "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.", + "items": { + "additionalProperties": false, + "description": "A single tool exposed by this server.", + "properties": { + "description": { + "description": "Brief description of what the tool does.", + "type": "string" + }, + "name": { + "description": "Tool name (snake_case, e.g. \"earthquake_search\").", + "type": "string" + } + }, + "required": [ + "name", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "description": "Published version captured at fleet-generation time.", + "type": "string" + } + }, + "required": [ + "kind", + "name", + "displayName", + "description", + "version", + "npm", + "github", + "auth", + "toolCount", + "tools", + "installSnippets" + ], + "type": "object" + } +]
1 tool update
- Changed
cyanheads_describe2 fields changed- changed
Input schema / properties / client / descriptionPrevious value: -"Return the install snippet for this specific client only. Omit to return snippets for all supported clients."New value: +"Return install snippets for this client only (both local and remote transports when available). Omit to return snippets for all supported clients." - changed
Output schema / properties / result / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "description": { - "description": "Brief description of what the tool does.", - "type": "string" - }, - "kind": { - "const": "tool", - "description": "Resolved as a tool entry.", - "type": "string" - }, - "name": { - "description": "Resolved name (as looked up).", - "type": "string" - }, - "server": { - "description": "Server package name that owns this tool.", - "type": "string" - } - }, - "required": [ - "kind", - "name", - "description", - "server" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "auth": { - "description": "Auth requirement for the hosted deployment (currently always \"none\").", - "type": "string" - }, - "description": { - "description": "Brief description of what the server does.", - "type": "string" - }, - "displayName": { - "description": "Human-readable server label.", - "type": "string" - }, - "endpoint": { - "description": "Streamable HTTP endpoint for the hosted deployment.", - "type": "string" - }, - "github": { - "description": "GitHub repository URL.", - "type": "string" - }, - "installSnippets": { - "description": "Install instructions, one per supported client (or filtered by input.client).", - "items": { - "additionalProperties": false, - "description": "A single install instruction entry.", - "properties": { - "client": { - "description": "MCP client this snippet targets.", - "enum": [ - "claude-code", - "codex", - "cursor", - "curl", - "gemini", - "streamable-http" - ], - "type": "string" - }, - "label": { - "description": "Human-readable install method label.", - "type": "string" - }, - "payload": { - "description": "Install payload (JSON fragment or CLI command).", - "type": "string" - } - }, - "required": [ - "client", - "label", - "payload" - ], - "type": "object" - }, - "type": "array" - }, - "kind": { - "const": "server", - "description": "Resolved as a server entry.", - "type": "string" - }, - "name": { - "description": "Resolved name (as looked up).", - "type": "string" - }, - "npm": { - "description": "npm package name (e.g. \"@cyanheads/arxiv-mcp-server\").", - "type": "string" - }, - "toolCount": { - "description": "Number of tools exposed by this server.", - "type": "number" - }, - "version": { - "description": "Published version captured at fleet-generation time.", - "type": "string" - } - }, - "required": [ - "kind", - "name", - "displayName", - "description", - "version", - "npm", - "github", - "endpoint", - "auth", - "toolCount", - "installSnippets" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "description": "A resolved tool entry — its description and the server that owns it.", + "properties": { + "description": { + "description": "Brief description of what the tool does.", + "type": "string" + }, + "kind": { + "const": "tool", + "description": "Resolved as a tool entry.", + "type": "string" + }, + "name": { + "description": "Resolved name (as looked up).", + "type": "string" + }, + "server": { + "description": "Server package name that owns this tool.", + "type": "string" + } + }, + "required": [ + "kind", + "name", + "description", + "server" + ], + "type": "object" + }, + { + "additionalProperties": false, + "description": "A resolved server entry — metadata, optional hosted endpoint, and per-client install snippets.", + "properties": { + "auth": { + "description": "Auth requirement for the hosted deployment (currently always \"none\").", + "type": "string" + }, + "description": { + "description": "Brief description of what the server does.", + "type": "string" + }, + "displayName": { + "description": "Human-readable server label.", + "type": "string" + }, + "endpoint": { + "description": "Streamable HTTP endpoint for the hosted deployment. Absent for local-only (stdio) servers.", + "type": "string" + }, + "github": { + "description": "GitHub repository URL.", + "type": "string" + }, + "installSnippets": { + "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.", + "items": { + "additionalProperties": false, + "description": "A single install instruction entry.", + "properties": { + "client": { + "description": "MCP client this snippet targets.", + "enum": [ + "claude-code", + "codex", + "cursor", + "curl", + "gemini", + "streamable-http" + ], + "type": "string" + }, + "label": { + "description": "Human-readable install method label.", + "type": "string" + }, + "payload": { + "description": "Install payload (JSON fragment or CLI command).", + "type": "string" + }, + "transport": { + "description": "Transport this snippet installs — stdio (local) or http (remote).", + "enum": [ + "stdio", + "http" + ], + "type": "string" + } + }, + "required": [ + "client", + "transport", + "label", + "payload" + ], + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "server", + "description": "Resolved as a server entry.", + "type": "string" + }, + "name": { + "description": "Resolved name (as looked up).", + "type": "string" + }, + "npm": { + "description": "npm package name (e.g. \"@cyanheads/arxiv-mcp-server\"). Drives the local stdio snippets.", + "type": "string" + }, + "requiredEnvVars": { + "description": "Env var names the local (stdio) install requires (e.g. [\"MAILCHIMP_API_KEY\"]). Absent when none.", + "items": { + "type": "string" + }, + "type": "array" + }, + "toolCount": { + "description": "Number of tools exposed by this server.", + "type": "number" + }, + "version": { + "description": "Published version captured at fleet-generation time.", + "type": "string" + } + }, + "required": [ + "kind", + "name", + "displayName", + "description", + "version", + "npm", + "github", + "auth", + "toolCount", + "installSnippets" + ], + "type": "object" + } +]
1 tool update
- Changed
cyanheads_search2 fields changed- added
Output schema / properties / serversAdded value: +{ + "description": "Roll-up of distinct servers across the full match set, before the limit slice. Present only for scope \"tools\". Ordered by topScore desc (name-tiebroken); capped at 10. Use serversTotal to see how many distinct servers matched in total.", + "items": { + "additionalProperties": false, + "description": "A server roll-up entry.", + "properties": { + "brief": { + "description": "One-line description of what the server does.", + "type": "string" + }, + "category": { + "description": "Catalog category.", + "enum": [ + "research", + "government", + "public-data", + "utility" + ], + "type": "string" + }, + "matchedTools": { + "description": "Count of this server's tools in the full match set.", + "type": "number" + }, + "name": { + "description": "Server package name (e.g. \"cdc-health-mcp-server\").", + "type": "string" + }, + "topScore": { + "description": "Best cosine similarity among this server's matched tools. Drives ordering. Distinct from the score a server gets under scope \"servers\".", + "type": "number" + } + }, + "required": [ + "name", + "brief", + "category", + "matchedTools", + "topScore" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / serversTotalAdded value: +{ + "description": "Total distinct servers in the full match set (before the cap of 10 is applied). Present only when servers is present.", + "type": "number" +}
1 tool update
- Changed
cyanheads_search6 fields changed- added
Output schema / properties / effectiveQueryAdded value: +{ + "description": "The query that was searched.", + "type": "string" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no results matched — e.g. how to broaden the query or try a different scope. Absent on successful result pages.", + "type": "string" +} - removed
Output schema / properties / queryRemoved value: -{ - "description": "The query that was searched.", - "type": "string" -} - added
Output schema / properties / totalCountAdded value: +{ + "description": "Total relevant matches before the limit was applied.", + "type": "number" +} - removed
Output schema / properties / totalMatchedRemoved value: -{ - "description": "Total relevant matches before the limit was applied.", - "type": "number" -} - changed
Output schema / requiredPrevious value: -[ - "results", - "totalMatched", - "query", - "scope" -]New value: +[ + "results", + "scope", + "effectiveQuery", + "totalCount" +]
2 tool updates
- First observed
cyanheads_describe - First observed
cyanheads_search
Related MCP Connectors
Search and install 4,000+ security-scanned MCP servers from inside any MCP-aware AI client.
MCP registry & directory: search, find & install 31k+ MCP servers & tools. Catalog and marketplace.
Search and get install details on MCP servers, right from your agent -- a unified marketplace index.
Search GitHub, npm, PyPI, StackOverflow, ArXiv from one MCP — built for coding agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAI-first MCP server discovery tool that enables agents to search, inspect, and install MCP servers from multiple registries.13AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables MCP-based hybrid semantic code search over repositories, providing tools for searching code by meaning or keyword, retrieving symbol definitions, finding usages, reading chunks, and listing indexed repos.MIT
- AlicenseNot gradedqualityBmaintenanceEnables semantic code search across repositories via MCP, returning exact source excerpts with paths and line numbers.15 npm104MIT
- AlicenseAqualityDmaintenanceLocal-first MCP server for semantic + keyword hybrid code search. Zero external services, no API keys required.2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.