A modular framework for building multi-agent reasoning systems with A2A protocol and MCP tools
This MCP server exhibits significant definition quality gaps across multiple dimensions. Tool definitions are present and use HTTP transport via fastmcp, but lack the rigor expected for production agents. Descriptions are present but generic (averaging ~50 chars), input schemas exist but lack comprehensive parameter descriptions, and critical error handling guidance is absent. Most tools are READ_ONLY, which is safe, but the framework fails to leverage this constraint in tool annotations. The server would require substantial refactoring to meet agent-readable standards.
Evaluate a specific rule against a record.
Retrieve a specific record by its ID.
Get schema information for the data table.
List all available validation rules.
Execute SQL query against the data.
Validate a record against all rules.
Tool descriptions are generic and lack actionable guidance. Examples: 'Execute SQL query against the data' (36 chars), 'Retrieve a specific record by its ID' (35 chars), 'Get schema information for the data table' (40 chars). No context on WHEN to use each tool vs. alternatives, prerequisites, or expected outcomes.
Input parameter descriptions are missing or incomplete. 'record_id' is described as 'The record identifier' (21 chars), too vague for LLM selection. 'sql_query' lacks guidance on table names, allowed operations, or query limits. 'record' parameter (object type) has no guidance on expected structure or required fields.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Output schemas are not documented in the tool definitions provided. No indication of return types, field names, structure, or what data agents should expect. This forces LLMs to call tools blindly and guess field names for follow-up chaining.
No error handling guidance. If 'query_data' encounters a SQL syntax error, malformed record, or missing table, what should the LLM do? No recovery hints, no actionable error messages, no categorization of retryable vs. fatal errors. Per pattern, error responses must tell the LLM what to do next.
Tool annotations are absent. All 6 tools are READ_ONLY (no side effects), but there are no readOnlyHint flags in the schema to signal this to clients. Tool annotations enable clients to optimize planning (read tools can be cached/parallelized; write tools require sequencing). Per current spec, tool annotations are a standard capability.
Pagination and result limits are not addressed. 'query_data' can execute arbitrary SQL, what happens if the query returns 10,000 rows? Will it blow the context window? No pagination parameters (page, limit, cursor), no cap on results, no guidance.
Parameter 'sql_query' in query_data accepts free-form SQL with no constraints. No description of allowed operations (SELECT only? No DROP?), table names beyond 'data', or injection safeguards. If the LLM is tricked into passing malicious SQL, the tool will execute it. Per pattern, all agent input must be treated as untrusted and sanitized.
Tool 'get_schema' has zero input parameters but description does not explain what schema it returns or how to use it. Likely returns the schema for the 'data' table, but LLMs cannot infer this. Should be named 'get_data_schema' or description should clarify 'Returns the schema of the data table (columns, types, constraints).'
Ambiguous parameter in 'validate_record' and 'evaluate_rule': 'record' is typed as object with description 'Dictionary containing record details' (38 chars). No hint on required fields, structure, or which fields are validated. LLMs will guess structure and likely pass invalid data.
Tool naming lacks verb-noun clarity in some cases. 'validate_record' and 'evaluate_rule' both perform validation/evaluation. Distinction is unclear, does 'validate' check ALL rules while 'evaluate' checks ONE? Names should be: 'validate_record_all_rules' vs 'evaluate_single_rule', or descriptions must explicitly state the difference.