MCP server for IXCSoft integration with support for invoice, client, contract, and department management
Server has 8 tools with basic structure. Strengths: all tools have names following verb_noun convention (echo, listar-*, enviar-), descriptions present for all tools, and input schemas defined via Zod. Weaknesses: descriptions are generic and brief (10-50 chars typically), most lack parameter-level descriptions, output schemas partially documented, no error recovery guidance, and several tools lack depth in documentation. The tool framework (defineTool) provides structured output with both content and structuredContent, which is good. However, parameter descriptions are mostly missing, the 'message' param in echo has a description, but tools like listarClientesPeloDocumento likely lack per-param guidance based on code visibility. No evidence of pagination support for list_ tools despite multiple returning potentially large result sets (e.g., listarFaturasPorCliente). Error handling returns structured responses with isError flag, which is positive, but error messages lack recovery guidance.
Echoes back the provided message
Sends an invoice
Lists clients by mobile phone number
Lists clients by document number
Lists contracts for a specific client
Lists all departments
Lists invoices for a specific client
Lists invoices for a specific contract
List tools lack pagination parameters (page, limit, offset, cursor) and no result count or next_cursor fields documented. Without pagination, large result sets will exhaust context windows.
Most parameter descriptions are missing or minimal. Only 'echo' tool has explicit parameter description visible in source code. Tools like listarFaturasPorCliente, listarClientesPeloDocumento must have input parameters (client_id, document, phone, etc.) but their descriptions are not visible or are missing.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 30 | - | v1 |
Error messages lack recovery guidance. The error handler returns isError:true with a message, but does not categorize errors as retryable, user-fixable, or fatal, nor suggest next actions (e.g., 'Try searching first with search_clientes()').
Output schemas for most tools are not documented in visible code. Only 'echo' has an explicit outputSchema (z.object({echo: z.string()})). Query/mutation tools must specify expected return structure (fields, types, pagination markers) so LLMs can plan downstream operations.
Tool descriptions are too brief (typically 20-50 chars). Baseline from production is 194 chars average. Current descriptions lack detail on WHEN to use each tool, WHAT it returns, and what prerequisites exist (e.g., does listarFaturasPorCliente need active client subscription?).
No evidence of input validation or constraint documentation. Parameters likely accept strings without format validation (e.g., what format is 'cliente_id'? numeric? alphanumeric? max length?). Descriptions must state constraints: 'cliente_id (numeric, 1-999999)' or use enums for closed sets.
enviar-fatura (WRITE tool) lacks dry-run or confirmation pattern. Destructive/irreversible operations should support confirmation before execution to prevent accidental bulk sends.