DuckDB-powered MCP server for querying Wago DB2 CSV tables (World of Warcraft data)
Six tools with complete schemas and descriptions. Naming follows verb_noun pattern (db2_lookup, db2_search, db2_validate_ids, db2_query, db2_tables, db2_describe). All tools are READ_ONLY with readOnlyHint annotations. Descriptions are adequate (100-200 chars) and explain WHAT and WHEN. Parameters have types and descriptions. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal (ValueError exceptions without recovery guidance). No pagination support despite tools returning potentially large result sets. Parameter constraints (e.g., limit range, SQL validation) lack explicit bounds in descriptions.
Get schema information for a table: column names, types, and row count. Useful for understanding table structure before querying.
Look up rows by ID (primary key) from any DB2 table. Supports single or batch lookups. Returns full rows or selected columns.
Execute a raw SELECT query against loaded DB2 tables. Supports JOINs, aggregations, ILIKE, etc. Non-SELECT statements are rejected. Tables are auto-loaded on first reference. Default LIMIT 1000.
Case-insensitive text search in any DB2 table. Auto-detects the name column (first *_lang, then Name, then first string column). Override with 'column' parameter. Returns up to 'limit' matches (default 25).
List available DB2 tables. Optionally filter by substring (case-insensitive). Returns table names and whether they're currently loaded.
Check which IDs exist in a table and which are missing. Returns {existing: [...], missing: [...]}. Useful for bulk validation.
Output schemas not documented. LLMs cannot predict response structure (list of dicts with which fields?). db2_lookup, db2_search, db2_validate_ids, db2_query, db2_tables, db2_describe all return untyped results.
No pagination support. db2_query defaults to LIMIT 1000 but no offset/cursor mechanism. db2_search limits to 25 results but no way to fetch next page. Large result sets risk context window exhaustion.
Error handling lacks recovery guidance. ValueError exceptions ('Unknown table', 'No searchable text column') do not suggest next steps. LLM cannot self-correct without explicit guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Parameter constraints not explicit. db2_search 'limit' parameter lacks min/max bounds in description. db2_query 'sql' parameter accepts raw SQL with only 'SELECT' validation, no mention of injection safeguards or timeout.
db2_query tool exposes raw SQL interface. While SELECT-only, no mention of query timeout, result row limits, or JOIN complexity constraints. Agents could craft expensive queries.