Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.
Two well-defined discovery tools with clear naming, comprehensive parameter schemas, and detailed descriptions. Both tools follow verb_noun convention (search_, describe_) and include proper input validation with enums and constraints. Descriptions are 150-250 chars, within the 10-1024 baseline. Parameter annotations are complete with types and descriptions. Output schemas are not explicitly documented in the source, which is the primary gap. Error handling guidance is absent, no recovery hints or actionable error messages visible. Tool composition is sound: search_catalog feeds into describe_entry via name discovery.
Return the description and install snippets for a named tool or server. For tools: the description and the server it belongs to. For servers: 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.
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.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'ranked matches with brief summaries') but do not specify the JSON structure, field names, or types. LLMs cannot plan downstream tool calls or extract specific fields without knowing the response schema.
No error handling guidance. Tool descriptions do not explain what happens on failure (e.g., 'If no matches found, returns empty list' or 'If name not found, returns 404 with available alternatives'). Agents cannot recover from errors without explicit guidance.
Parameter 'category' in cyanheads_search_catalog has enum values ['research', 'government', 'public-data', 'utility'] but no description explaining what each category contains or when to use each. LLMs cannot reason about category selection without context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Parameter 'client' in cyanheads_describe_entry lists enum values but lacks guidance on when to use each. LLMs may not understand the difference between 'claude-code', 'codex', 'cursor', etc., or when to omit the parameter to get all clients.
No pagination or result-limiting guidance for cyanheads_search_catalog. The 'limit' parameter defaults to 5 and caps at 20, but the description does not explain why or what happens if more results exist. No mention of next_cursor or offset for iterating large result sets.