MCP Server that integrates with the McPoogle search engine for discovering MCP Servers and Tools
McPoogle provides one search tool with a clear purpose and functional schema. The tool name 'searchMcpServers' uses a verb and is specific. The description is detailed (217 characters, within the 194-char baseline for good tools) and explains WHAT the tool does (retrieve MCP Servers), WHEN to use it (find servers matching a prompt), and what it returns (ranked sources with metadata). The input schema is present with a Zod definition and parameter description. However, the tool lacks several production-grade patterns: no error handling guidance (catches errors but returns bare error.message), no pagination support despite potentially large result sets, no output schema documentation visible, no tool annotations (readOnlyHint despite being a READ_ONLY operation), and no constraint on the 'prompt' parameter (unbounded string could be exploited). The resources feature (contents://) is partially implemented but the resource registration code is truncated, making full assessment impossible.
Retrieve relevant MCP Servers and Tools from McPoogle search engine. Use this tool to find MCP Servers and Tools that match a given user prompt. The search results will include the name, description, and GitHub URL of each MCP Server. Accepts an LLM user prompt for content retrieval. For best retrieval quality, provide only key words or phrases from the user prompt, which will be used to create text embeddings for a vector search query. Returns the ranked content sources, including their content resource URI to retrieve the complete Markdown text.
No output schema documentation. The tool returns a structured object with content array containing text/json items, but the client has no documented schema to know what fields to expect or how to chain results into follow-up calls.
No error recovery guidance. The catch block returns { content: [{ type: 'text', text: `Error: ${error.message}` }], isError: true } but does not tell the LLM what to do next (retry? adjust input? contact user?). Error message is bare API error, not actionable.
No tool annotations. The tool is READ_ONLY but uses no readOnlyHint annotation. Adding idempotentHint would clarify that repeated calls with same input are safe.
No pagination or result limiting documented in description. contentLimit is hard-coded to 50 but the description does not state 'Returns up to 50 ranked results' or offer pagination support. Large result sets may exceed context windows.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 73 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Unbounded 'prompt' parameter. No length limit, format constraint, or validation. LLM could pass a multi-megabyte payload or prompt injection. Should document max length and validate early.
Resource registration incomplete. The resources.ts file is truncated after 'const filter: ContentFilter = {'. Cannot verify resource schemas, descriptions, or error handling.