A FastAPI-based MCP server with tool calling agents supporting multiple LLM backends (Ollama, OpenAI-compatible), RAG via Qdrant, and specialized agent personas (FastFinance ads, School of Hard Knocks coaching)
This server has 6 tools with mixed quality. Most tools have basic descriptions and schemas, but they lack depth, parameter descriptions, output schemas, and comprehensive error handling. The tool names follow action-verb conventions, which is positive. However, parameter descriptions are almost entirely missing, and output structure is not documented. The ping tool is deprecated in the MCP spec (removed as of 2026-07-28). The rag_search tool has an incomplete schema (top_k is not required but logically should be optional with a default). Overall definitions are sparse, averaging 48/100 per tool.
Add two numbers
Echo the input text
List system capabilities
List available tools (hint: /mcp/tools shows full registry)
Health check tool; returns UTC timestamp
Search the local RAG vector database (Qdrant) for grounded context.
Parameter descriptions are missing for ALL tools except ping. The rubric states 'Every parameter needs a description explaining what it controls.' Without them, LLMs cannot infer intent and may pass invalid values.
Output schemas are not documented for ANY tool. The rubric requires 'Document the output schema. LLMs need to know what fields to expect so they can plan downstream tool calls.' Without documented outputs, agents cannot chain tools or extract required data.
The 'ping' tool is deprecated in MCP spec (2026-07-28; removed). Stateless request handling makes server-initiated health checks unnecessary. This tool should be eliminated.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 38 | - | v1 |
list_tools and list_capabilities are semantically overlapping. Either merge them or clarify distinct purposes.
The 'add' tool is of questionable utility in a multi-agent system. It lacks context (when would an LLM need a simple add operation?). If retained, it should have constraint descriptions (numeric range, precision).
rag_search has no error handling guidance. If no results match, should it suggest broader queries? If database is unavailable, should it retry?
rag_search parameter 'top_k' is required:false with no documented default.