An MCP server for SQLite database operations with field lineage tracking, data generation, and CSV import/export capabilities
This server has significant definition quality gaps. While tools are properly registered via @mcp.tool() decorator and basic descriptions exist, several critical issues emerge: (1) Parameter descriptions are minimal or missing for key fields, e.g., 'params' in execute_query has only 'Optional parameters for the query' without explaining format or constraints. (2) Output schemas are not documented, tools return strings but don't declare what content those strings contain or how to parse them. (3) Parameter constraints are absent, numeric param 'num_rows' has no min/max bounds; db_path and csv_path accept arbitrary file paths with no validation guidance. (4) No error recovery guidance, exception handlers return plain error strings like 'Error adding lineage: {str(e)}' instead of actionable recovery hints. (5) Tool names are clear (verb_noun pattern works) but descriptions lack the WHAT/WHEN/WHY structure required for LLM selection. Average across all 9 tools is 42, pulling down the overall score.
Add field lineage information to track data sources.
Analyze a SQL query to identify potential field lineage.
Connect to a SQLite database file.
Get detailed information about a table structure.
Execute a SQL query on the database.
Export a table to a CSV file.
Generate and insert sample data into a table based on column types.
Import data from a CSV file into a SQLite table.
Output schemas not documented. All 9 tools return string but do not declare what structure, fields, or format those strings contain. LLMs cannot parse or chain outputs without a documented schema.
Parameter constraints missing. 'num_rows' in generate_sample_data has no min/max bounds (could accept -1000 or 999999). 'db_path' and 'csv_path' accept any string with no path traversal validation guidance.
Error handling lacks recovery guidance. Exception handlers return plain strings like 'Error adding lineage: {str(e)}' instead of actionable next steps (e.g., 'Lineage not found. Verify table and field names exist.').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 7 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Trace the lineage of a specific field to understand its data sources.
Descriptions are too brief and lack WHAT/WHEN/WHY structure. E.g., execute_query: 'Execute a SQL query on the database.' does not explain when to use it vs describe_table, or warn that it can modify state.
Parameter 'params' in execute_query has generic description 'Optional parameters for the query' but does not specify format (list of values? dict of name-value pairs?) or SQL injection risk.
No pagination or result limiting guidance. execute_query could return millions of rows; no indication of max result size or how to paginate large datasets.
Destructive operations (execute_query with DELETE/DROP, generate_sample_data, import_csv with create_table=true) lack dry-run or confirmation step.