A Model Context Protocol server providing web search, GitHub code search, and URL content fetching capabilities
Search-MCP provides three well-scoped tools with solid naming conventions (all start with action verbs: search-*, fetch-*) and complete input schemas using Zod with type constraints. All tools have descriptions and all parameters have descriptions. However, the server has significant weaknesses: (1) output schemas are completely undocumented, handlers return generic `{content: [{type: 'text', text: JSON.stringify(...)}]}` with no guidance on what fields the LLM should expect in the JSON payload; (2) error handling is absent, no error messages, recovery guidance, or input validation visible; (3) parameter descriptions lack expected format/range details; (4) no pagination or result limits documented for search tools that could return many results; (5) tools are read-only but lack explicit security/idempotency markers.
Downloads a web page, extracts readable content, and converts it to clean Markdown.
Advanced search in public GitHub code (REST v3)
100% free DuckDuckGo search (no API key required)
Output schemas completely undocumented. Handlers return JSON.stringify() results wrapped in generic text content, but the LLM has no formal schema for the returned object structure. For search-web/search-github, are results arrays? Objects with 'hits' field? Does each hit have 'title', 'url', 'snippet'? For fetch-url, is the markdown unformatted text or structured sections?
No error handling or recovery guidance. Handlers have no try-catch, input validation, or error messages. If search-web fails (network timeout, DuckDuckGo rate limit), the LLM gets a raw error or generic failure with no actionable next step (e.g., 'retry in N seconds' or 'rate limited, try a simpler query').
search-web and search-github lack pagination/result-limit documentation. The limit parameter maxes at 30 and 100 respectively, but the description does not say what happens if results exceed the limit, whether they are truncated, or what structure pagination takes. No next_cursor or total_count documented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 57 | - | v1 |
Parameter descriptions lack actionable constraints. 'Max number of results (default 10)' does not explain what 'default 10' means if limit is not provided, or what happens when limit is omitted vs. 0. For fetch-url, 'HTTP/HTTPS URL to fetch' does not mention timeout, size limits, or whether redirects are followed.
No tool idempotency or destructiveness markers. Tools are read-only (low risk) but lack explicit annotations. Newer MCP spec supports readOnlyHint to signal to the LLM that these are safe to retry. This is a missed clarity opportunity.