MCP server for analyzing LLM evaluation metrics across models, domains, and sub-domains
Server has 7 tools with basic descriptions and input schemas. Naming follows verb_noun convention (list_*, get_*, compare_*). However, descriptions are generic and lack actionable context for LLM selection. Parameter descriptions exist but are minimal (e.g., 'The model name, which was returned by "list_models" tool'). No output schemas documented. Error handling is silent (returns empty dict/list on failure) with no recovery guidance. Tools lack idempotency hints, destructive markers, or read-only annotations. Composition is reasonable, tools chain logically (list → get → compare), but missing pagination, result limits, and field-level documentation.
Compare models for a given domain, averaging across all sub-domains.
Compare models for a given domain and specific sub-domain.
Get average metrics for a given model and domain, averaging across all sub-domains.
Get metrics for a given model, domain, and specific sub-domain.
Returns a list of unique domains in the dataset. Domains broadly classify the areas in which model is tested. A domain has multiple sub domains/categories
Returns a list of unique models in the dataset.
Returns a list of unique sub-domains for a given domain. Takes in input a Domain available in the list returned by list_domains
No output schemas documented. Tools return dict or list[str] with no field-level documentation. LLMs cannot infer what fields to expect (e.g., does get_metric_domain return {accuracy, latency_ms, ...} or {model, domain, metrics}?). Breaks downstream tool chaining and forces LLM guessing.
Silent error handling. All tools catch exceptions and return empty dict/list with no error message. LLM receives no guidance on what failed or how to recover. E.g., FileNotFoundError silently returns [] instead of 'CSV file not found at final.csv. Check environment variable or file path.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, idempotentHint). All 7 tools are read-only and idempotent, but LLM has no explicit signal. Missing annotations prevent agents from optimizing retry logic and caching strategies.
Parameter descriptions are minimal and reference-heavy. E.g., 'The model name, which was returned by "list_models" tool' assumes LLM has already called list_models. Better: 'Model identifier (e.g., gpt-4, claude-3). Call list_models() first to see available options.' Dependency hints missing.
No pagination or result limits. list_models, list_domains, list_sub_domains return all items as arrays. If dataset grows to thousands of models/domains, response bloats context window. Missing limit parameter and total_count field.