This server has significant definition quality gaps. Of 31 tools, most lack comprehensive input validation, many descriptions are generic or minimal, and output schemas are not documented. While basic tool registration is present via fastmcp, the implementation does not meet production standards for LLM agent consumption. Key issues: (1) Many tool descriptions are under 20 characters or generic (e.g., 'Get coordinates from Google Maps API' for get_coordinates_google, 'Perform a Google search' for get_google_search). (2) Input parameters lack consistency in description quality, some params have single-word descriptions ('Numerator', 'Denominator') while others are more detailed. (3) Output schemas are not visible in the code; tool responses appear to be unstructured or documentation is absent. (4) No evidence of error handling guidance, tools that call external APIs (Google Maps, BigQuery, Redis) do not describe failure modes or recovery steps. (5) Tool naming shows minor inconsistencies: duplicate tools like emitir_guia_a_vista and emitir_guia_a_vista_v2, and get_equipments_instructions vs get_instructions_for_equipments suggest refactoring debt. (6) Parameters in sensitive tools (create_cor_alert, store_user_feedback, upsert_memory, emitir_guia_a_vista) accept user IDs as strings but do no visible validation or permission gating. (7) Many tools lack idempotency guarantees needed for LLM retry safety.
Add two numbers
Check outstanding debts for a CPF
Registra um alerta de incidente hidrico (alagamento, enchente ou bolsao).
Search using Dharma service
Divide two numbers
Emit a payment guide for outstanding debt (à vista)
Emit a payment guide for outstanding debt (à vista) - V2
Emit a payment guide for debt regularization (parcelado)
Generic, minimal descriptions across majority of tools, 30% of tools have descriptions under 35 characters or lack context for LLM selection (e.g., 'Get list of districts in Rio de Janeiro', 'Perform a Google search', 'Get basic information about Rio de Janeiro'). LLMs cannot determine when to invoke these tools without clearer, action-oriented descriptions explaining unique value vs. related tools.
Output schemas not documented in code or visible for any tool. Tools return responses but structure is not declared, LLMs cannot plan downstream tool calls or extract specific fields from results. For example, create_cor_alert writes to BigQuery and returns unknown structure; get_rock_in_rio_lineup fetches lineup data but return format is not specified.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 11 | - | v1 |
Emit a payment guide for debt regularization (parcelado) - V2
Cria uma saudação personalizada baseada no horário atual.
Geocode an address using Google Maps API.
Get coordinates from Google Maps API.
Obtém a data e hora atual no timezone do Rio de Janeiro.
Get list of districts in Rio de Janeiro
Get available equipment categories
Get instructions for presenting equipment to users
Obtém equipamentos por endereço e retorna com instruções apropriadas.
Perform a Google search
Get a personalized greeting message
Retorna instruções específicas baseadas nos dados dos equipamentos retornados.
Get user memories
Get basic information about Rio de Janeiro
Retorna a programação completa do Rock in Rio 2026 com informações sobre atrações, dias e palcos.
Retorna a lista de temas válidos para equipamentos
Multi-step service orchestrator for complex workflows
Multiply two numbers
Raise a number to a power
Armazena feedback do usuário no BigQuery.
Subtract two numbers
Web search using Surkai service
Update or insert user memory
No evidence of error handling guidance in tool definitions. Tools calling external APIs (Google Maps, BigQuery, Redis, web search services) do not describe failure modes, timeouts, or recovery steps. LLMs have no guidance on what to do if a call fails.
Duplicate tools with identical functionality and name variants (emitir_guia_a_vista vs. emitir_guia_a_vista_v2; get_instructions_for_equipments vs. get_equipments_instructions). Unclear which version LLMs should prefer, causing confusion and wasted reasoning. Violates single-tool-per-function principle.
Sensitive write tools (create_cor_alert, store_user_feedback, upsert_memory, emitir_guia_a_vista) accept user_id as a parameter with minimal validation documentation. No evidence of permission gating, audit logging, or user identity verification. Tool descriptions do not state 'This modifies state' or indicate idempotency guarantees.
Parameter descriptions lack specificity and constraints. Examples: 'Numerator' and 'Denominator' for divide (single words); 'Assunto principal da pergunta do cidadão' (generic context); no enums for enumerable values (e.g., alert_type is documented as a string but valid values are only mentioned in description text, not as a formal constraint).
No visible pagination or result-limiting patterns. Tools like get_google_search, surkai_search, dharma_search, and get_rock_in_rio_lineup do not specify how many results they return or whether pagination is supported. Unbounded results risk context window exhaustion and degraded LLM reasoning.
multi_step_service is vague and appears to be a catch-all orchestrator accepting arbitrary service_name strings and payloads. This violates the single-responsibility principle and prevents LLMs from understanding what the tool actually does. No enums on service_name, no schema for payload validation, no documentation of supported workflows.