Model Context Protocol (MCP) server for Siigo Colombian accounting software API integration
Strong schemas and naming conventions across all 8 tools. Tool names are action-verb-based (siigo_search, siigo_get_record, siigo_create_document, etc.), which is excellent for LLM disambiguation. Input schemas are complete with type definitions and constraints (enums, patterns, maxLength, etc.). Descriptions are detailed and document prerequisites, side effects, and how tools compose. However, descriptions vary significantly in depth (80-250 chars), and several lack explicit 'WHEN to use' guidance relative to similar tools. Output schemas are NOT documented in the tool definitions, the server relies on external discovery (siigo_discover_operations) rather than inline response shape documentation. Error handling is implicit via type validation and API contracts but lacks explicit recovery guidance in descriptions. Parameter descriptions are generally present but some lack format/range constraints in the description text itself (e.g., siigo_search's 'filters' param lacks specificity on nested structure).
Create one accounting document in Siigo. Preferred document creation route: pass preparation.creation or use discovery creation.payloadSchema for a complete payload. Exact endpoint validation applies. Only invoices, credit notes, journals and vouchers support idempotency_key. Use siigo_execute_write for updates, sending and other advanced writes.
Find advanced operations, catalogs and reports. Without a domain, list matching domains; with a domain, return exact input/output schemas and executors. Document create operations also include creation payload schemas and supported preparation schemas. Prefer siigo_prepare_document/siigo_create_document for documents. Does not call Siigo or change tools/list.
Execute a destructive operation discovered via siigo_discover_operations. Returns the exact result schema for the operation.
Execute a read operation discovered via siigo_discover_operations. Returns the exact result schema for the operation.
Execute a write operation discovered via siigo_discover_operations. Returns the exact result schema for the operation.
Output schemas not documented in tool definitions. siigo_execute_read, siigo_execute_write, and siigo_execute_destructive rely on discovery (siigo_discover_operations) to reveal output schemas dynamically. LLMs cannot plan downstream tool calls or extract fields without documented return types.
Generic parameter descriptions in execute_* tools. 'arguments' param described as 'Arguments matching the exact schema returned by siigo_discover_operations', this is circular and does not help LLMs understand what valid arguments look like without calling discover first. Requires multi-step reasoning.
siigo_prepare_document and siigo_create_document descriptions do not clearly distinguish when to use each. 'prepare' does discovery and returns 'unresolved choices or a creation object'; 'create' takes a payload. The composition flow is documented in descriptions but not optimized for LLM reasoning, LLMs may call create directly, bypassing prepare validation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 70 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Inspect a customer, product or accounting document by a selected UUID from siigo_search. Optionally include invoice PDF/XML, credit-note PDF or invoice DIAN stamp errors. Unsupported extras are rejected before any read.
Prepare an invoice, quotation, purchase or customer cash receipt without writing. Discover the create operation for preparation.inputSchema. Resolve exact party/product references and selected catalogs; return unresolved choices or a creation object for siigo_create_document. Prices, amounts and debt references must be supplied. Does not check accounting accounts, debt balances or totals.
Find customers/suppliers, products and supported accounting documents. Returns candidates and pagination; never selects a match. Use siigo_get_record with a selected UUID. List uses exact API filters; partial customer/product searches may scan many pages. Suppliers are customers with type Supplier.
siigo_search 'filters' parameter has type 'object' with no schema constraint on nested properties. LLMs cannot infer valid filter keys or value types. Description notes 'List uses exact API filters' but does not enumerate them.
Error handling guidance absent from most tool descriptions. No mention of recovery steps (e.g., 'If UUID not found, call siigo_search first') or error classification (retryable vs. user-fixable).