Self-hosted MCP server for documentation with semantic search using Pinecone vector database
ContextMCP exposes two tools, both named 'search_docs', with identical naming and schemas but slightly different descriptions. The input schema is present and properly typed (query: string, limit: number with min constraint), but critical issues undermine quality: (1) duplicate tool name violates composition patterns and confuses LLM dispatch; (2) descriptions are brief (59-65 chars) and lack context for when/why to use the tool or what it returns; (3) output schema is not documented anywhere in the source, LLMs cannot predict response structure; (4) no error handling guidance (what happens on empty results, bad queries, or API timeouts?); (5) no parameter descriptions explain 'query' semantics or 'limit' defaults; (6) no indication whether results are paginated or bounded; (7) tool annotations (readOnlyHint, idempotentHint) are absent despite being safe, read-only operations.
Search the documentation using semantic search across API Reference, SDK docs, and guides.
Search the documentation using semantic search.
Duplicate tool name 'search_docs', both tools have identical names, violating single-responsibility and composition patterns. LLM cannot dispatch correctly when two tools are indistinguishable by name.
No output/return schema documented. Source code does not specify what fields search_docs returns (e.g., array of documents, document objects with title/content/url?). LLMs cannot plan downstream steps or extract data without knowing response structure.
Parameter descriptions missing. 'query' and 'limit' have no descriptions explaining what a query should contain, how specificity affects results, or what the limit default is.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 61 | 1.25.2+ | v1 |
Tool descriptions are too brief (59-65 chars) and lack context. Do not explain when to use search_docs vs alternatives, what structure is returned, or prerequisites.
No error handling guidance. No documented behavior for empty queries, no results, rate limits, or timeouts. A bare API error gives the agent nothing to act on.
No pagination or result-limit behavior specified. Limit parameter accepts 1 - 20, but no indication whether results beyond the limit are available (next_cursor, total_count?) or what happens if all results fit in one response.
Tool annotations absent. Both tools are read-only, idempotent, and safe to retry, but no readOnlyHint or idempotentHint declared. Per spec (2026-07-28), tool annotations enable agents to reason about side effects and retry safety.