A Python-based repository demonstrating various agent architectures and tool integration patterns using Google ADK, including custom tools, CrewAI integration, MCP tools, and multi-agent patterns (sequential, parallel, loop).
This MCP server exhibits significant quality gaps across naming, descriptions, parameters, and schemas. All 6 tools are defined as Python functions with basic docstrings, but lack proper tool registration mechanisms, formal parameter schemas, and comprehensive descriptions expected by agentic frameworks. The server uses google-adk framework, which provides some tooling, but the tools themselves are inconsistently defined and lack the structured metadata needed for robust agent planning. Tool descriptions are present but minimal (10-80 chars), and parameter constraints are not formalized. No evidence of error handling patterns, output schema documentation, or security considerations.
Search the internet for news articles and information using Serper.
Calculate the area of a simple shape.
Signal the loop to stop when the SQL query is correct and efficient.
Returns the current time in a specified city.
Retrieves the current weather report for a specified city.
Search the internet using Google Search.
Tool names violate verb_noun convention: InternetNewsSearch is a noun phrase, not an action verb. This forces LLMs to infer intent from description rather than name, increasing misselection risk.
Descriptions are uniformly too brief (10-80 chars). Baseline for A+ tools is 50-200 chars with explicit WHAT/WHEN/WHY guidance. Current descriptions lack context for tool selection, constraints, and error recovery. E.g., 'Calculate the area of a simple shape' does not explain shape constraints, numeric bounds, or when to use vs other math tools.
Critical constraints are hidden in implementation logic and not documented in parameter descriptions. E.g., get_weather and get_current_time only support 'New York', but descriptions do not warn the LLM. This forces trial-and-error discovery and wastes agent reasoning cycles.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 39 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 34 | - | v1 |
No enum constraints on enumerated parameters. 'shape' in calculate_area accepts 'circle' or 'square', but is typed as free-form string. Without enum constraints, the LLM may hallucinate invalid values ('triangle', 'pentagon'). Enum constraints are self-documenting and prevent invalid inputs.
Output schemas are not documented. Agents cannot infer what fields to expect in responses, preventing them from planning downstream tool calls or extracting relevant data. E.g., calculate_area returns {status, report} but this is invisible to the agent unless it reads the function source.
Error messages are generic and do not guide recovery. E.g., 'Weather information for [city] is not available' and 'Sorry, I don't have timezone information for [city]' tell the agent nothing. Per pattern:recovery-guide, errors should suggest next steps: 'Weather for [city] is not supported. Try [list of supported cities].'
Tool 'exit_loop' couples the interface to framework internals (ToolContext, tool_context.actions.escalate). This is not an MCP-native tool; it's a control-flow artifact. Framework-specific tools reduce portability and confuse agents unfamiliar with google-adk patterns.
No documented relationships between related tools. E.g., get_weather and get_current_time both accept 'city' with the same constraints, but neither describes how they complement each other or when to call both vs one.