AI-powered cricket intelligence system with MCP tools for cricket statistics (DuckDB SQL) and news (ChromaDB semantic search + GNews API)
Server has 5 tools with complete schemas and descriptions. Naming follows verb_noun convention (search_, query_, get_, execute_). Descriptions are present (avg 150 chars) and explain WHEN to use tools (e.g., 'Use when search_chromadb returns no results'). However, parameter descriptions lack actionable constraints (no enums, ranges, or format specs). Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance. Security: API keys injected via settings (good), but no permission gates or audit logging. Tool composition is sound (5 atomic tools, clear dependencies), but missing pagination for list-like results.
Execute SQL query on cricket database (Test cricket 1877-2024). Returns query results. Read-only, SELECT queries only. Use get_database_schema first to see available tables and columns.
Get cricket database schema information. Returns table structures, columns, types, and row counts. ALWAYS use this BEFORE generating SQL queries to understand available data.
Get example SQL queries for reference. Useful for learning database structure and query patterns. Shows common use cases like top scorers, player stats, head-to-head.
Fetch fresh cricket news from GNews API and automatically ingest to ChromaDB. Use when search_chromadb returns no results. After calling this, call search_chromadb again to get the new articles.
Search cricket news in ChromaDB using semantic similarity. Returns relevant articles based on meaning, not just keywords. If no results found, use query_cricket_articles to get fresh news.
Output schemas not documented. LLMs cannot predict response structure (e.g., what fields are in 'results' from search_chromadb, or 'articles' from query_cricket_articles). Forces agents to guess and parse unstructured output.
Parameter descriptions lack actionable constraints. 'query' param has no format guidance (free-form string invites hallucinated values). 'top_k' has min/max but no rationale. 'sql' param has no examples of valid queries or forbidden patterns beyond 'SELECT only'.
No error handling guidance. If execute_sql fails (syntax error, timeout, permission denied), the tool returns raw error. LLM has no recovery path. Missing pattern: 'Invalid SQL: got "SELECT * FROM nonexistent", available tables: players, matches, batting, bowling.'
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
No pagination support. query_cricket_articles returns all articles up to max_articles; no offset/limit or next_cursor. If GNews returns 100 results, all are embedded and returned, bloating context. No cap on result size mentioned in description.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Descriptions state 'Read-only' and 'WRITE' in text, but no machine-readable hints. Agents cannot programmatically determine safety without parsing descriptions.