A simple, extensible MCP server for agent development built with FastAPI.
The server exposes 3 tools with partial schema definitions and basic descriptions. All three tools have explicit registrations in app/routes.py with names, descriptions, and parameter schemas visible. However, there are significant gaps: (1) Parameter descriptions are minimal and lack actionable constraints (e.g., no limits on query length for brave_search, no format hints for openai_chat prompt). (2) Output schemas are not documented, callers cannot determine the structure of results. (3) Error handling is minimal; the invoke endpoint returns generic 404/500 responses without recovery guidance. (4) No parameter validation constraints (enums, ranges, patterns) are declared in the schemas. (5) Tool names lack clear action verbs, 'openai_chat' is somewhat ambiguous (send_prompt? query_llm?), 'wikipedia_person' conflates lookup+summarization. The server demonstrates basic MCP tooling but falls short of production-grade quality.
Search the web using Brave Search API.
Send a prompt to OpenAI and get a response.
Fetch summary info about a person from Wikipedia.
Output schemas not documented. Callers cannot predict response structure for openai_chat, wikipedia_person, or brave_search. This forces LLMs to reason about response shape, increasing parsing errors and token waste.
Parameter descriptions lack actionable constraints. 'prompt' for openai_chat has no length limits. 'name' for wikipedia_person has no format hints (full name, partial, how to handle accents?). 'count' for brave_search has no explicit range (min/max beyond the default 5).
Error responses in /invoke endpoint are generic (404 'Tool not found', 500 with raw exception message). No recovery guidance. LLM cannot determine if an error is retryable, user-fixable, or fatal.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | <=2025-11-25 | v2 |
Tool names lack clear action verbs or disambiguating suffixes. 'openai_chat' is ambiguous (does it chat or query?). 'wikipedia_person' mixes lookup and filtering. Naming should follow verb_noun pattern (e.g., query_openai, search_wikipedia_person) to aid LLM intent inference.
Brave Search API key is injected via environment variable (correct), but tool description does not mention the dependency. LLM is unaware that the tool requires BRAVE_API_KEY setup, potentially leading to runtime failures without context.
No pagination support for brave_search results. The tool accepts a 'count' parameter (default 5) but does not document max count or offer pagination cursors. Large result sets risk context window exhaustion.