MCP server demonstrating tool, resource, and prompt implementations for LangChain integration with web search and GitHub file access capabilities
This server has critical definition gaps across all tools. Tool names lack clear action verbs (search_web vs web_search duplication; authenticate is vague). Descriptions are minimal (10-30 chars) and lack context on WHEN to use tools or WHAT they return. No input schemas are visible in the source code, parameter types and descriptions exist in function signatures but are not formally registered with the MCP server. The authenticate tool exposes a ToolRuntime parameter, which is a code smell for improper abstraction. No output schemas documented. Error handling is absent, tools return raw strings or dicts with no guidance on failure modes. Security issue: password parameter in authenticate tool is exposed as a parameter (should be server-side injected). No pagination, no idempotency hints, no permission gates.
Authenticate the user with the given email and password
Check the inbox for recent emails
Search the web for information
Send an response email
Search the web for information
No input schemas visible in MCP registration. Tools defined as Python functions with type hints, but FastMCP decorator does not show explicit JSON Schema registration with types and descriptions for each parameter.
Duplicate tools with identical functionality: search_web (2.1_mcp_server.py) and web_search (1.5_personal_chef.py) both search the web. LLMs will waste reasoning cycles deciding between them.
Descriptions are too short (10-30 chars) and lack context. 'Search the web for information' does not explain WHEN to use it vs other tools, what format the query should be, or what the response contains. Baseline for A+ tools is 50-200 chars with WHAT/WHEN/HOW guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 31 | 2026-07-28+ | v2 |
authenticate tool exposes password as a parameter and ToolRuntime context object. Passwords must NEVER be tool parameters, use server-side secret injection. ToolRuntime is an implementation detail that should not leak into the tool interface.
No output schemas documented. Tools return raw dicts or strings with no structure. LLMs cannot plan downstream calls or extract required fields (e.g., email IDs for reply operations).