A Python framework for building LLM applications with MCP server support, providing adapters for multiple LLM APIs (OpenAI, Anthropic, Google, etc.) and MCP protocol integration
Three tools exposed via FastMCP framework. All three have trivial descriptions (10-15 chars), minimal-to-no parameter documentation, and no documented output schemas. 'models' and 'ask' are critical LLM-interaction tools but lack guidance on when to use each, expected return formats, or error handling. 'ping' is a test utility with no real production purpose. Parameter naming is reasonably clear (query, model, message) but descriptions are absent or single-phrase. No evidence of input validation, error recovery guidance, or result pagination. Tools are defined using decorator-based registration (FastMCP @mcp.tool()) which is standard, but the definitions themselves lack the depth required for reliable agent composition.
Query a specified LLM model with a given prompt
Returns list of available LLM model configurations
Returns a pong response with the provided message
Missing parameter descriptions. 'ask' tool has 'query' and 'model' parameters with basic type info but no description text explaining what format query accepts, what happens if model doesn't exist, or constraints on query length/content.
No output schema documentation. 'models' claims to return list[str] but schema is inferred from type hint alone, no JSON Schema object visible. LLMs cannot determine if the list is paginated, what each string represents (model ID? display name?), or if additional metadata is included.
Tool descriptions are too brief (<20 chars). 'models' = 'Returns list of available LLM model configurations' (46 chars, acceptable but minimal). 'ask' = 'Query a specified LLM model with a given prompt' (48 chars, adequate but lacks context on when to use vs alternatives). 'ping' = 'Returns a pong response with the provided message' (48 chars, vague and test-focused).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 27 | - | v1 |
No error handling or recovery guidance. If 'ask' receives an invalid model name, no documentation states what error is returned or how the LLM should respond. If query processing fails (timeout, API error, rate limit), there is no guidance on retry logic or fallback.
'ask' tool description does not clarify whether it is idempotent or has side effects. For an LLM querying tool, this matters, retrying a failed query should produce the same result, but the description does not guarantee this.
No input validation hints. 'ask' accepts 'query' as a string but provides no guidance on length limits, forbidden characters, prompt injection risks, or expected content (natural language only, or code/structured data allowed?).