Custom MCP server with utility tools — datetime, calculate, text_stats, json_extract, search_knowledge, http_get
Server provides 6 utility tools with basic schemas and descriptions. All tools have input schemas with type definitions and parameter descriptions, meeting minimum requirements. However, descriptions are inconsistent in depth and quality. Most tools lack output schema documentation, error handling guidance, and composition hints. Tool naming is generally clear (verb_noun pattern), but some descriptions are generic or incomplete. No tool annotations (readOnlyHint, destructiveHint) despite all tools being read-only. Parameter descriptions exist but lack constraint details (ranges, formats, enums). Error handling is minimal, tools return generic errors without recovery guidance.
Evaluate a math expression via an AST whitelist (math funcs + consts).
Return the current date/time in several useful formats. ``timezone`` is an IANA name (``America/Sao_Paulo``); default is UTC.
HTTP GET against an allowlisted host. Body truncated at 4000 chars.
Extract a JSON value via dot-path (``a.b.0.c``). Returns ``Error: ...`` on failure. Supports list indices (numeric segments). Non-string results are re-serialised as JSON; strings are returned verbatim.
Stub for vector search — replace the body with your real Qdrant/pgvector query.
Return word, sentence and character counts plus a token estimate.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract fields without knowing what each tool returns. All 6 tools lack return type documentation.
search_knowledge is a stub with no real implementation. Description says 'Stub for vector search, replace the body with your real Qdrant/pgvector query.' This is not production-ready and should either be removed or fully implemented with proper error handling.
No tool annotations despite all tools being read-only. MCP spec supports readOnlyHint to signal safe tools. This helps agents reason about side effects and retry safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Parameter descriptions lack constraint details. 'timezone' accepts IANA names but no format/pattern specified. 'expression' accepts math operators but no examples of valid syntax. 'top_k' is integer but no min/max bounds stated.
Error handling is minimal. Tools return generic 'Error: ...' messages without recovery guidance. E.g., json_extract returns 'Error: ...' on parse failure, but LLM doesn't know whether to retry, fix input, or call a different tool.