mi-sii-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mi-sii-mcp¿Cuánto me han retenido en boletas de honorarios este año?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mi-sii-mcp es un servidor Model Context Protocol (MCP) de código abierto que conecta asistentes de inteligencia artificial —Claude, Codex, Cursor, Gemini CLI, VS Code con Copilot y otros clientes MCP— con tu información tributaria del Servicio de Impuestos Internos (SII) de Chile. Lee tu IVA, tus F29, tu renta (F22), tus boletas de honorarios y lo que otros informan sobre ti; lo guarda en tu equipo y lo concilia para mostrarte qué cuadra, qué no y qué vence. Funciona en solo lectura y el asistente nunca recibe tu clave.
Proyecto independiente de código abierto: no está afiliado al SII ni reemplaza la asesoría de un contador. Úsalo para revisar tu información y tomar mejores decisiones.
Características principales
Consultas tributarias en lenguaje natural: pregúntale a tu asistente por tu IVA, tus F29, tu renta o tus boletas de honorarios, con tus datos reales del SII.
Conciliación automática: cruza el registro de compras y ventas con el F29, las boletas con la renta y lo que informan tus pagadores con tus propios registros.
Alertas útiles: F29 sin presentar o por vencer (día 12, 20 o 28 según tu caso), facturas por reclamar y descuadres.
Solo lectura: nunca presenta, modifica ni emite nada en el SII.
Datos locales: todo se guarda en una base SQLite en tu equipo; no hay servidores intermedios.
La clave no pasa por el chat: inicias sesión en una página local y ninguna herramienta del MCP recibe claves.
Varias cuentas: tu RUT personal y los de tus empresas, cada uno con su propia sesión.
Open source (MIT), escrito en TypeScript, con más de 1.300 pruebas automáticas que usan solo datos ficticios.
Related MCP server: @integradte/mcp
Qué lee del SII y qué concilia
Área | Qué trae del SII | Qué concilia |
IVA | Registro de Compras y Ventas (RCV), F29 presentados (con su PDF) y propuesta de F29 | IVA del RCV contra el F29, F29 faltantes, facturas por reclamar y coherencia interna del F29 |
Boletas de honorarios | Recibidas (por mes) y emitidas (resumen anual y detalle boleta por boleta) | Retención de las boletas contra el F29 (código 151) y contra la renta (códigos 547 y 492) |
Renta (F22) | Declaraciones por año tributario, folio vigente, códigos, observaciones y eventos (devoluciones, giros) | Boletas emitidas y lo informado por terceros contra el F22 |
Informado por terceros | Declaraciones juradas que otros presentan sobre ti (p. ej. retenciones de honorarios) | Lo que informa cada pagador contra tus boletas y tu F22; avisa si el SII observó la declaración de un informante |
Cuenta | Perfil tributario (régimen, segmento, autorización para declarar el F29 hasta el día 20) y empresas autorizadas | Vencimientos del F29 según tu caso |
Los datos públicos (UTM, tablas de impuestos, tasas de cotización, comisiones de AFP) no se guardan: la herramienta fuentes_oficiales indica en qué página oficial consultarlos para el año que corresponda.
Compatibilidad con agentes de IA
mi-sii-mcp es un servidor MCP local (transporte stdio), así que funciona con los clientes que ejecutan servidores MCP locales.
Cliente | Estado | Cómo se configura |
Claude Code | ✅ Probado |
|
Claude Desktop | Configuración documentada |
|
Codex CLI | Configuración documentada |
|
Cursor | Configuración documentada |
|
VS Code con GitHub Copilot | Configuración documentada |
|
Gemini CLI | Configuración documentada |
|
Windsurf, Cline y otros | Configuración documentada | Formato |
«Configuración documentada» significa que se usa el formato MCP estándar de cada cliente; el desarrollo y las pruebas en vivo se hicieron con Claude Code.
Cómo funciona
flowchart LR
P([Tú]) -- preguntas --> A
subgraph A [Tu asistente con MCP]
direction TB
A1[Claude Code / Desktop]
A2[Cursor · Windsurf · Cline]
A3[VS Code + Copilot]
A4[Gemini CLI · Codex CLI]
end
A <-- herramientas MCP --> M[mi-sii-mcp]
M -- solo lectura --> S[(Portal del SII)]
M <--> D[(Base local<br/>~/.mi-sii-mcp)]
P -. conecta su cuenta .-> W[Página local<br/>Abrir mi-sii-mcp.cmd]
W --> MConectas tu cuenta una vez en una página local; la clave no pasa por el chat.
El asistente pide datos al servidor MCP, que los lee del SII y los guarda en tu equipo.
mi-sii-mcp concilia la información con reglas tributarias y responde con hallazgos claros.
Requisitos
Node.js 22.12 o superior (probado con Node 24).
Un cliente MCP que ejecute servidores locales (ver compatibilidad).
Clave tributaria del SII.
Windows es la plataforma probada; el código es multiplataforma y en macOS o Linux la página local se abre con
npm run local.
Instalación
git clone https://github.com/Taksuma-0/mi-sii-mcp.git
cd mi-sii-mcp
npm install
npm run build1. Registrar el servidor en tu asistente
El servidor se inicia con node <carpeta>/dist/interfaces/cli/bin.js mcp. Reemplaza C:\ruta\a\mi-sii-mcp por la carpeta donde clonaste el proyecto (en macOS/Linux, una ruta como /home/tu-usuario/mi-sii-mcp).
claude mcp add --scope user mi-sii-mcp -- node "C:\ruta\a\mi-sii-mcp\dist\interfaces\cli\bin.js" mcp[mcp_servers.mi-sii-mcp]
command = "node"
args = ["C:\\ruta\\a\\mi-sii-mcp\\dist\\interfaces\\cli\\bin.js", "mcp"]{
"servers": {
"mi-sii-mcp": {
"type": "stdio",
"command": "node",
"args": ["C:\\ruta\\a\\mi-sii-mcp\\dist\\interfaces\\cli\\bin.js", "mcp"]
}
}
}Agrega esto al archivo de configuración MCP de tu cliente (Claude Desktop: claude_desktop_config.json; Cursor: ~/.cursor/mcp.json; Gemini CLI: ~/.gemini/settings.json; Windsurf: ~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"mi-sii-mcp": {
"command": "node",
"args": ["C:\\ruta\\a\\mi-sii-mcp\\dist\\interfaces\\cli\\bin.js", "mcp"]
}
}
}El servidor trae sus propias instrucciones de uso para el asistente (por dónde empezar, cómo reintentar, que nunca pida la clave), así que se comporta igual con cualquier cliente.
2. Conectar tu cuenta del SII
En Windows, haz doble clic en Abrir mi-sii-mcp.cmd (en la carpeta del proyecto). Se abre una página local donde:
Escribes tu RUT (los puntos y el guion se ponen solos) y tu clave tributaria.
Dejas marcado Mantener conectada para que la sesión se renueve sola.
Pulsas Conectar.
Puedes conectar varias cuentas (tu RUT personal y tus empresas). La misma página ofrece entrar con ClaveÚnica desde el navegador; esa opción es experimental (aún no se ha probado con una cuenta real) y su sesión no se renueva sola.
En otras plataformas, abre la página con npm run local, o inicia sesión desde la terminal con node dist/interfaces/cli/bin.js login <rut> --guardar-clave.
3. Preguntar
Reinicia tu asistente (en Claude Code basta con /mcp) para que cargue el servidor y pregunta, por ejemplo: «lista mis perfiles» o «trae mi renta de los últimos 3 años».
Ejemplos de consultas tributarias
Pregunta al asistente | Qué hace mi-sii-mcp |
«¿Cuánto me han retenido este año en boletas de honorarios?» | Trae tus boletas emitidas y suma la retención por mes y por pagador ( |
«¿Cuadran mis boletas con lo que declaré en la renta?» | Compara tus boletas con los códigos 547 y 492 del F22, considerando el reajuste por IPC |
«¿Qué informaron mis pagadores al SII sobre mí?» | Lee las declaraciones juradas de terceros y las cruza con tus boletas |
«¿Tengo algún F29 sin presentar o por vencer?» | Revisa tus F29 y calcula el vencimiento según tu caso ( |
«¿Cuadra el IVA de compras y ventas con el F29 de septiembre?» | Concilia el RCV con el F29 del mes ( |
«¿A quién le emití más boletas en 2026?» | Consulta el detalle boleta por boleta guardado ( |
«Estímame la devolución de la próxima renta» | Junta tus datos y te indica las fuentes oficiales de los valores públicos ( |
Herramientas del MCP
Herramienta | Para qué sirve | ¿Consulta al SII? |
| Cuentas configuradas, estado de su sesión y si se renueva sola | No |
| Qué hay guardado por mes y por año | No |
| Trae RCV y F29 de un rango de meses (opcional: propuesta de F29 y boletas recibidas) | Sí (lectura) |
| Trae el F22, las boletas emitidas y lo informado por terceros, por año tributario | Sí (lectura) |
| Trae el perfil tributario y las empresas autorizadas | Sí (lectura) |
| Conciliación del IVA y hallazgos por mes | No |
| Historial de F29 y vencimientos | No |
| Documentos del RCV de un mes | No |
| Renta guardada con sus cruces (boletas, pagadores, terceros) | No |
| Vuelve a leer los PDF de F29 guardados, sin ir al SII | No |
| Dónde consultar los datos públicos (UTM, tablas, tasas) y cómo estimar una renta | No |
| Mapa de las tablas y consultas | No |
Seguridad y privacidad
Solo lee. Nunca presenta, modifica ni emite nada en el SII.
Tus datos quedan en tu equipo, en una base SQLite en
~/.mi-sii-mcp; el servidor se comunica directamente con el SII, sin servidores intermedios.El asistente nunca recibe tu clave. El inicio de sesión lo haces tú en una página local o en la terminal; el MCP no tiene ninguna herramienta que reciba claves.
La sesión se guarda como cookies en tu equipo para no pedirte la clave en cada consulta. Si eliges «Mantener conectada», la clave queda en el almacén de credenciales del sistema (Administrador de credenciales de Windows, Llavero de macOS o Secret Service en Linux), no en archivos.
Las respuestas del SII que se guardan como respaldo se sanean: sin correos, direcciones, códigos de barra ni el token de la sesión. De terceros se guarda solo lo necesario (p. ej. la razón social de un pagador).
Lo que consultas pasa a la conversación con tu asistente (y a su proveedor de IA): pregunta solo por los contribuyentes que estés dispuesto a comentar ahí.
Preguntas frecuentes
¿Qué es mi-sii-mcp?
Es un servidor MCP de código abierto que permite que un asistente de IA consulte y concilie tu información tributaria del SII de Chile: IVA, F29, renta F22, boletas de honorarios y declaraciones de terceros.
¿Qué es un servidor MCP y por qué usarlo con el SII?
MCP (Model Context Protocol) es un estándar abierto para que los asistentes de IA usen herramientas externas. Un servidor MCP para el SII le da a tu asistente herramientas para leer tus datos tributarios y aplicar reglas de conciliación, en vez de que copies y pegues información del portal.
¿Cómo conecto Claude, Codex, Cursor o Gemini CLI al SII?
Instala mi-sii-mcp, regístralo en tu cliente con la configuración de la instalación y conecta tu cuenta en la página local. Claude Code está probado; para los demás clientes se usa su formato MCP estándar.
¿El asistente puede ver mi clave tributaria?
No. La clave se escribe solo en la página local (o en la terminal) y ninguna herramienta del MCP la recibe. Si eliges mantener la sesión, la clave queda en el almacén de credenciales de tu sistema.
¿Dónde quedan mis datos?
En tu equipo, en ~/.mi-sii-mcp. Lo que preguntas y las respuestas sí pasan por tu asistente de IA, como cualquier conversación con él.
¿Puede presentar mi F29 o emitir boletas?
No. mi-sii-mcp solo lee el portal del SII; no presenta declaraciones, no emite documentos ni modifica nada.
¿Es una herramienta oficial del SII?
No. Es un proyecto independiente de código abierto y no reemplaza la asesoría de un contador.
¿Cuánto cuesta?
Es gratuito y de código abierto (licencia MIT). Solo necesitas un cliente MCP; el costo del asistente de IA depende de su proveedor.
¿Funciona en macOS o Linux?
El código es multiplataforma, pero la plataforma probada es Windows. En macOS o Linux la página para conectar la cuenta se abre con npm run local.
Uso desde la terminal (opcional)
Todo lo anterior también está disponible como comandos:
node dist/interfaces/cli/bin.js --help
node dist/interfaces/cli/bin.js perfil listar
node dist/interfaces/cli/bin.js sync <rut> --desde 2026-01 --hasta 2026-09
node dist/interfaces/cli/bin.js renta sync <rut> --desde 2025 --hasta 2027
node dist/interfaces/cli/bin.js renta ver <rut>Configuración
Variables de entorno opcionales:
Variable | Para qué |
| Carpeta de datos (por defecto |
| Plazo de cada consulta al SII (por defecto 60 s) |
| Pausa mínima entre consultas al SII (por defecto 1 s) |
| Tolerancia en pesos para los cruces de IVA |
| Ruta de Edge o Chrome para entrar con ClaveÚnica |
| Tiempo para completar el inicio de sesión en el navegador |
Documentación
Guía para usarlo con un asistente: instalación detallada, preguntas, herramientas y solución de problemas.
Decisiones de diseño: plazos del F29, áreas del SII, datos públicos de la renta y más.
Difusión y directorios MCP: metadatos para directorios y registro en buscadores.
Desarrollo
npm test # pruebas (solo datos ficticios; nunca consultan el SII real)
npm run typecheck # tipos
npm run build # compila a dist/
npm run probar:mcp # prueba el servidor MCP compiladoEl código está organizado por capas (domain, app, connectors, store, interfaces, main); test/arquitectura.test.ts verifica que se respeten.
Las contribuciones son bienvenidas. Por favor, nunca incluyas datos tributarios reales (RUT, nombres, montos) en issues, pruebas ni fixtures: usa RUT ficticios como 11.111.111-1.
Limitaciones
La propuesta del F22 aún no se lee (el SII la publica en abril).
La declaración de sueldos del empleador (DJ 1887) se lee de forma genérica: su formato no se ha verificado con datos reales.
El inicio de sesión con ClaveÚnica desde el navegador es experimental.
Si el SII cambia su portal, algunas lecturas pueden fallar hasta actualizar el lector; los errores lo indican y nunca se borran datos guardados por una respuesta vacía.
Licencia
MIT © 2026 Welinton Barrera · Código fuente: github.com/Taksuma-0/mi-sii-mcp
Available Tools
15 toolsconsulta_sqlConsulta SQL libreARead-onlyIdempotent
Ejecuta una sola sentencia SELECT (o WITH … SELECT) de solo lectura sobre una copia de los datos locales (RCV, F29, propuesta de F29, boletas de honorarios recibidas, renta F22, hallazgos y bitácora de sincronización). Llama antes una vez a datos_esquema: describe tablas, columnas y reglas (signo de las notas de crédito, estados del RCV, códigos del F29). Sin parámetros: escribe los valores como literales. Devuelve como máximo 200 filas y 40000 caracteres: filtra por RUT y período, agrupa o usa LIMIT.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | Una sola sentencia SELECT o WITH … SELECT |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses the hard output caps (200 filas, 40000 caracteres), the single-statement restriction, that the query runs against a copy of local data rather than production, and the literal-only constraint. These are exactly the operational facts an agent must know to avoid failing or over-scanning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences: what it runs, the prerequisite tool, then the limits and tuning advice. No repetition of the title or the schema, and the most important constraint (solo lectura, una sola sentencia) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating the row/character caps and pointing to datos_esquema for table and column semantics. Minor gaps remain: it doesn't name the SQL dialect or note error behavior for an invalid statement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and documents the sql string itself, but the description adds a real constraint not in the schema: no bind parameters — values must be written as literals. That is meaningful extra semantics for the only parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (ejecuta), a precise resource (una sola sentencia SELECT/WITH … SELECT de solo lectura) and enumerates the datasets it can reach (RCV, F29, boletas, F22, hallazgos, bitácora). It is clearly distinguishable from siblings like rcv_documentos or f29_historial, which are fixed-shape readers rather than free queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ("Llama antes una vez a datos_esquema") and guidance on how to keep queries cheap (filter by RUT and período, agrupa o usa LIMIT). It does not say when to prefer a sibling tool over free SQL, so no full when/when-not routing is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datos_esquemaEsquema de los datosARead-onlyIdempotent
Describe las tablas que ve consulta_sql: cada columna con su tipo y significado, y las reglas para interpretar montos, notas de crédito, estados del RCV, códigos del F29 y la ausencia de datos. Llámala una vez antes de escribir consultas.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new context: that this is a one-shot orientation call whose output is interpretation rules, not just a DDL dump. It doesn't state the response format or size, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The content scope comes first and the action directive (call once, before queries) is front-loaded at the end where it reads as the takeaway. Every clause names a concrete artifact (montos, notas de crédito, RCV, F29).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of previewing the return value — and it does, listing tables, columns, types, meanings and domain interpretation rules. For a no-argument orientation tool, nothing an agent needs before calling it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; there is nothing a description could add on parameter semantics. The description correctly spends no words on inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("describe") and resource (the tables behind consulta_sql), plus an enumeration of what the output covers: column types and meanings, amount/credit-note/RCV/F29 interpretation rules, and data-absence handling. It explicitly anchors itself to the sibling consulta_sql, so an agent can tell it apart from the query tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Llámala una vez antes de escribir consultas" gives a clear when (before authoring queries) and a cardinality constraint (once, i.e. idempotent, matching the annotation). No explicit when-not or named alternative beyond the implied consulta_sql reference, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
f29_historialHistorial del F29BRead-onlyIdempotent
Por cada mes del rango: si el F29 está presentado, folio, débitos, créditos y total a pagar; si se sincronizaron las boletas de honorarios recibidas del mes, también la retención declarada (código 151) junto a la de esas boletas.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 | |
| desde | Yes | Período tributario AAAA-MM | |
| hasta | Yes | Período tributario AAAA-MM |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by explaining that honorarios retention (código 151) is included only when that month's received honorarios boletas were synchronized, which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the per-month scope and then lists the returned fields. It is efficient for the information conveyed, though the conditional clause makes it slightly heavy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does a reasonable job explaining returned values, including the conditional honorarios retention. However, it omits what happens for months where no F29 is present and does not distinguish the tool from f29_releer, leaving gaps for correct tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so rut and the AAAA-MM period formats are fully documented in the schema. The description adds no further meaning about how desde/hasta bounds are treated or whether the range is inclusive, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear that this retrieves a per-month F29 history for a date range, listing presentation status, folio, debit/credit amounts and total payable. It is specific about the returned data but does not explicitly contrast itself with nearby tools such as f29_releer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of alternatives like f29_releer or iva_resumen. The only implied usage is the presence of required rut/desde/hasta parameters, which is not the same as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
f29_releerReleer el F29 guardadoAIdempotent
Relee los PDF ya guardados con el lector actual, sin ir al SII: vuelve a leer el PDF del F29 de cada folio que trajo una sincronización anterior y actualiza sus valores si cambian. Una lectura que no cuadra no reemplaza a una guardada que sí cuadra. Úsala tras actualizar mi-sii-mcp o ante un F29 leído que no cuadra; sin rango relee todos los meses guardados.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 | |
| desde | No | Período tributario AAAA-MM | |
| hasta | No | Período tributario AAAA-MM |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=true; the description adds that it updates saved values, that a mismatched reading will not overwrite a good saved one, and that no range means all months. This adds meaningful mutation and safety context beyond the annotations, though it omits return and error details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, followed by the safeguard and then usage/default behavior. Each sentence contributes distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity local re-read tool with full schema descriptions and rich annotations, the definition covers purpose, triggers, default scope, and safety semantics. It does not describe return values, and there is no output schema, leaving a small but real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the rut/desde/hasta parameters are already well documented. The description adds the non-obvious default that omitting desde/hasta re-reads all saved months, which is useful semantic context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'relee' and resource 'PDF del F29 guardados', and explicitly contrasts with 'sin ir al SII', so an agent can distinguish it from SII synchronization tools. It also clarifies the effect: re-reads each folio's PDF and updates values if they change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggers: after updating mi-sii-mcp or when a saved F29 reading does not reconcile. It also states the default scope ('sin rango relee todos los meses guardados'), though it does not explicitly name a sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fuentes_oficialesFuentes oficiales de datos públicosARead-onlyIdempotent
Datos públicos de la renta (UTM y UTA, tablas del Impuesto Global Complementario y del Impuesto Único, factores de actualización por IPC, gastos presuntos, tasa de retención de honorarios, obligación y cobertura de la cotización de honorarios, tasas de ATEP, SANNA y salud, comisiones de las AFP y tasa del SIS): mi-sii-mcp no los guarda. Esta herramienta dice en qué página oficial (SII, Superintendencia de Pensiones, Previsión Social, ChileAtiende) consultar cada uno y qué buscar ahí, y con regla=true la regla paso a paso para estimar el F22 de una persona con sueldo y honorarios. Úsala antes de estimar una renta: los datos privados salen de renta_resumen y los públicos de esas páginas, del año que se calcula. No va al SII.
| Name | Required | Description | Default |
|---|---|---|---|
| regla | No | Incluir la regla para estimar el F22 de una persona | |
| buscar | No | Palabras para filtrar (p. ej. «UTM», «cotización», «AFP»); sin filtro, todas |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe read-only profile, and the description adds important context: mi-sii-mcp does not store these public data and the tool does not go to the SII. It also explains what the tool returns (where to consult and what to search, plus the F22 rule when regla=true), though it does not discuss data freshness or update cadence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loads the core distinction: these are public data the server does not store, and the tool points to official sources. The long parenthetical list is useful for scope but makes the opening sentence heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter reference tool with full schema coverage, no output schema, and annotations already declaring read-only behavior, the description is largely complete: it explains the data categories, the official sources, the optional rule, and how it relates to renta_resumen. It is slightly incomplete on freshness/versioning of the referenced rates and tables.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds some meaning for regla=true by specifying a step-by-step F22 estimate for a person with salary and honorarios, but it does not add information about the buscar filter beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It clearly states a specific purpose: a guidance/reference tool that tells which official page to consult for each public tax/social-security datum and what to search there, with an optional step-by-step F22 rule. It explicitly distinguishes itself from sibling renta_resumen by assigning private data there and public data here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit timing and routing: use it before estimating income, private data comes from renta_resumen, public data from the named official pages, and the year calculated determines the figures. It also states a clear exclusion: 'No va al SII.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iva_hallazgosHallazgos de conciliaciónBRead-onlyIdempotent
Hallazgos de conciliación de IVA (descuadres, F29 faltantes, facturas por reclamar, cambios posteriores al F29 y, si se sincronizaron las boletas de honorarios recibidas, la retención de honorarios frente al código 151) de todos los meses con datos, o de un rango.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 | |
| desde | No | Período tributario AAAA-MM | |
| hasta | No | Período tributario AAAA-MM | |
| severidad | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real value beyond them by disclosing conditional yield ('si se sincronizaron las boletas de honorarios…') and the default scope of all months with data, but it says nothing about volume, pagination, or whether findings are empty when reconciliation is clean.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that leads with the core term and then enumerates finding types; nothing is redundant. The nested parenthetical with the conditional honorarios clause makes it dense and slightly harder to parse than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining what a 'hallazgo' looks like (fields, counts, severity levels) and does not. It is adequate for deciding whether to call the tool, but thin for interpreting results or understanding the meaning of the severity filter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, just below the high-coverage baseline, and the description only echoes the desde/hasta semantics already documented in the schema. The 'severidad' parameter has no description in the schema and is never mentioned in the description, so the meaning of info/advertencia/critico is left entirely unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (hallazgos de conciliación de IVA) and enumerates the concrete finding types it returns — descuadres, F29 faltantes, facturas por reclamar, cambios posteriores al F29, retención de honorarios vs código 151. That is far more specific than a sibling like iva_resumen, though it never says explicitly whether it lists, computes, or returns findings, and it doesn't name the sibling contrast outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trailing phrase 'de todos los meses con datos, o de un rango' implies the default scope and when to pass a period range, which is useful usage signal. However, there is no explicit when-to-use-this-instead-of guidance versus iva_resumen or f29_historial, and no prerequisites (e.g. that the RUT must already be synchronized).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iva_resumenResumen de IVA del mesARead-onlyIdempotent
Compara el débito y el crédito del RCV con el F29 presentado, revisa el remanente, los documentos pendientes y los plazos, y entrega los hallazgos de un mes. Lee solo la base local: revisa "frescura" y sincroniza si los datos están viejos.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 | |
| periodo | Yes | Período tributario AAAA-MM |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful context beyond that: operations run against a local copy whose staleness must be verified, with a sync step as remedy. It stops short of describing output shape or failure behavior when F29 is missing for the period.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the comparison and the reviewed artifacts before the local-data caveat. Slightly dense enumeration of four checks in one clause, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should signal what comes back; 'entrega los hallazgos de un mes' plus the enumerated checks give a reasonable sense of the result. Missing is what happens when the period has no F29 or no RCV documents, which matters for a reconciliation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so rut and periodo are already documented with format and pattern. The description only implies a single month is analyzed ('de un mes') and adds no syntax, range or edge-case guidance beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (compara, revisa, entrega) and concrete resources (débito/crédito del RCV, F29 presentado, remanente, documentos pendientes, plazos). An agent can see this is a monthly VAT reconciliation summary, though it never explicitly contrasts itself with iva_hallazgos, which the phrase 'entrega los hallazgos' partly overlaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an actionable precondition: it reads only the local base, so check 'frescura' and run the sync (sincronizar) when data is stale. It does not state when to prefer this over iva_hallazgos or renta_resumen, so the sibling routing is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perfiles_listarPerfiles configuradosARead-onlyIdempotent
Lista los contribuyentes configurados (persona natural y empresa) y el estado de su sesión SII. Úsala primero para saber qué RUT consultar.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds that results include each taxpayer's SII session state, but says nothing about behavior with no configured profiles, ordering, or whether session state can be stale.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what is returned and then the actionable usage hint. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param, read-only list tool with no output schema, the description covers what entities appear and one key returned field. A note on empty-configuration behavior or the RUT format would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is no parameter semantics to explain; the description correctly does not invent any. Baseline 4 applies for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Lista') plus a concrete resource ('contribuyentes configurados') and the returned field ('estado de su sesión SII'). It is clear what the tool does, though it never names which sibling it differs from (e.g. sii_panorama), leaving the distinction to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Úsala primero para saber qué RUT consultar' gives explicit sequencing guidance and the reason for calling it before other tools. It stops short of stating when not to use it or which specific sibling to follow with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perfil_sincronizarSincronizar la cuenta del SIIAIdempotent
Trae del SII el perfil tributario (si está autorizado a declarar el F29 hasta el día 20, régimen y segmento) y las empresas que el contribuyente puede consultar, y reemplaza representa del perfil por las empresas activas que informa el SII (lo que el SII reporta sobrescribe lo que se haya anotado a mano). Solo lee el SII; de las empresas autorizadas guarda RUT, razón social (que puede ser el nombre de una persona), privilegios y fecha de desautorización, y no guarda correos, teléfonos ni direcciones. Los plazos del F29 usan el día 20 solo si el SII lo autoriza (si no, el 12): sincroniza la cuenta antes de revisar plazos. Si no hay sesión, la respuesta indica cómo conectar la cuenta en la página «Abrir mi-sii-mcp.cmd»; nunca pidas la clave en el chat.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that SII-reported companies overwrite manually entered `representa` data, that only RUT, razón social, privileges and deauthorization date are stored, and that emails/phones/addresses are deliberately not stored. It also covers auth behavior and the read-only nature of the upstream SII call, which reconciles with readOnlyHint=false (the write happens locally) and idempotentHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior (what is fetched and what is replaced) is front-loaded in the first sentence, and each following clause carries distinct behavioral information. It is dense and slightly run-on, with the F29 day-20/day-12 rule sitting a bit tangentially, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still conveys what gets persisted, what gets overwritten, and what the no-session response looks like. It does not describe the success response shape, which is the only notable gap for a sync tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and the schema already documents it at 100% coverage with an example format (22.222.222-2). The description adds nothing about the RUT beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: it pulls the tax profile from SII (F29 authorization, régimen, segmento) plus the list of companies the taxpayer may query, and replaces the `representa` field. This is far more specific than the title, but it never names its siblings (perfiles_listar, renta_sincronizar, sincronizar), leaving the agent to infer when this differs from the other sync tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordering rule — 'sincroniza la cuenta antes de revisar plazos' — and explains the fallback path when there is no session (the response points to the «Abrir mi-sii-mcp.cmd» page, never ask for the password in chat). It does not state when to use a sibling instead, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plazos_proximosPlazos próximosBRead-onlyIdempotent
Vencimientos próximos: F29 por presentar y facturas recibidas cuyo plazo de reclamo (8 días) está por vencer.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 | |
| dias | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuine domain context — the 8-day reclaim window and the two data sources — but says nothing about return shape, ordering, or scope of the lookahead window.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the resource front-loaded and no filler. It is efficient, though the parenthetical '(8 días)' is the only piece of framing an agent gets about the window semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and an undocumented 'dias' parameter, the description should at minimum describe what the response contains (a list of deadlines keyed by type) and how 'dias' bounds it. It omits both, so an agent can call it but cannot reason about its results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: 'rut' is documented in the schema, but 'dias' has no description anywhere and the tool description never mentions it, leaving the lookahead window's meaning entirely undefined. The description adds no parameter-level information beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource precisely ('Vencimientos próximos') and enumerates the two things it aggregates: F29 filings pending and received invoices nearing the 8-day claim deadline. This differentiates it from siblings like f29_historial or rcv_documentos, though it never explicitly names or contrasts those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'próximos' framing implies the usage context (checking what's due soon), but there is no explicit when-to-use, when-not, or pointer to alternatives such as f29_releer for a single F29. The agent must infer the routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rcv_documentosDocumentos del RCVBRead-onlyIdempotent
Lista paginada (50 por página) de documentos del RCV de un mes, con filtros por lado, estado, tipo de documento y contraparte.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 | |
| lado | No | ||
| estado | No | ||
| pagina | No | ||
| periodo | Yes | Período tributario AAAA-MM | |
| tipo_doc | No | ||
| rut_contraparte | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered. The description adds useful behavior in 'paginada (50 por página)' and the one-month scoping, but says nothing about result ordering, total page counts, or what happens if pagina exceeds the range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the core action and page size, then lists filter dimensions. No filler, no repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, 29% schema coverage and no output schema, the description is thin: it never indicates what fields a returned document contains, what tipo_doc integer codes mean, or how results are ordered across pages. For a filtered list tool with no output schema, that leaves the agent guessing at both inputs and returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29% (rut and periodo documented), so the description must compensate; it does partially by naming the filter dimensions lado, estado, tipo de documento and contraparte in natural language. However, tipo_doc's integer codes remain unexplained in both schema and description, and rut_contraparte's expected format is never stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Lista ... documentos del RCV') plus scope (one month, 50 per page) and the filter dimensions available. An agent can tell this is a paginated document listing rather than an aggregate or sync tool, though the description never explicitly differentiates it from siblings like iva_resumen or sincronizar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention of filters by lado, estado, tipo and contraparte implies how the tool is used to narrow results, but there is no explicit statement of when to choose this over the sibling summary/sync tools or what to do when results span multiple pages. Usage is inferable but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renta_resumenResumen de la renta (F22)ARead-onlyIdempotent
Muestra la renta (F22) guardada localmente por año tributario: folio vigente, conclusión del SII, impuesto pagado, giro y remanente, los códigos del resultado con su glosa del SII, observaciones y eventos. De una persona muestra además sus boletas de honorarios emitidas del año comercial (vigentes, anuladas, bruto y retención) y su cruce con los códigos 547 (ingresos brutos) y 492 (retención) del F22, que vienen reajustados por IPC: cuadra si el F22 trae entre 0 % y 10 % más; con el detalle boleta por boleta, también sus 5 principales pagadores. También muestra lo informado por terceros (DJ): cada informante con sus meses, monto y estado, con un aviso si su declaración está observada por el SII; en la DJ 1879 cruza la retención informada con las boletas emitidas a ese RUT y la total con las boletas del año y con el 492 del F22 (cuadra o difiere por cuánto). Para preguntas como «¿a quién le emití boletas?» o por mes y receptor, usa consulta_sql sobre bhe_emitida. Lo informado por terceros está en dj_tercero. No va al SII: si no hay datos, usa renta_sincronizar. Los demás códigos están en f22_valor y las boletas por mes en bhe_emitida_mes (consulta_sql).
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 | |
| anio | No | Año tributario AAAA (año comercial + 1): 2026 es la renta del año 2025 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations it discloses key behavior: no consulta al SII (datos locales, por eso hay que sincronizar), que los montos vienen reajustados por IPC, la tolerancia de cuadre del 0 %–10 % entre F22 y boletas, y que en DJ 1879 se cruza la retención informada. Estos detalles operativos no están en las anotaciones y evitan interpretaciones erróneas del resultado.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with what the tool returns, followed by routing advice, and every clause carries information. The single dense paragraph chains many clauses (cross-checks, DJ 1879 rules) and would read better split into sections, but nothing is truly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does it well: enumerates the F22 fields, the boleta breakdown, top-5 pagadores, and the DJ structure with statuses and observed-declaration warning. Nothing an agent needs to decide whether this tool answers its question is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema itself documents the rut format and the anio rule (año comercial + 1). The description reinforces 'por año tributario' but adds no syntax or default behavior beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Muestra) and resource (renta F22 guardada localmente) with the exact scope: folio, conclusión SII, impuesto, giro, remanente, códigos con glosa, observaciones, eventos, boletas de honorarios, cruces 547/492 y DJ de terceros. An agent can tell this apart from renta_sincronizar and consulta_sql without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes alternative questions: «¿a quién le emití boletas?» o por mes/receptor → consulta_sql sobre bhe_emitida; sin datos → renta_sincronizar; demás códigos → f22_valor y bhe_emitida_mes. It also names where third-party data lives (dj_tercero), giving clear when-to-use vs when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renta_sincronizarSincronizar la renta (F22)AIdempotent
Trae del SII la declaración anual de renta (F22) de un rango de años tributarios (AAAA; el año tributario es el año comercial + 1) y la guarda en la base local: las declaraciones del año, su conclusión y, del folio vigente, los códigos con su glosa, las observaciones y los eventos. A una persona (no a una empresa) le trae además el informe anual de boletas de honorarios emitidas del año comercial y, de los meses con boletas, su detalle boleta por boleta (a quién, bruto y retenciones; no repite meses que ya calzan); con el año tributario siguiente al actual (p. ej. 2027 en 2026) ves las boletas del año en curso aunque aún no haya F22. A cualquier perfil le trae también las rentas informadas por terceros: las declaraciones juradas (DJ) que otros presentaron sobre él, como la 1879 (quien pagó honorarios y retuvo) o la 1887 (sueldos del empleador), con cada informante, sus meses, montos y si el SII observó su declaración. Máximo 10 años por llamada. Solo lee el SII y no guarda nombres, domicilio, cuenta ni banco. Si el SII responde vacío donde había datos, se conservan los guardados. Si no hay sesión, la respuesta indica cómo conectar la cuenta en la página «Abrir mi-sii-mcp.cmd»; nunca pidas la clave en el chat.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 | |
| desde | Yes | Año tributario AAAA (año comercial + 1): 2026 es la renta del año 2025 | |
| hasta | No | Año tributario AAAA (año comercial + 1): 2026 es la renta del año 2025 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true, openWorldHint=true) the description discloses concrete traits: it reads only from the SII and stores nothing sensitive (no names, address, account, bank), preserves previously stored data when the SII returns empty, caps the range at 10 years, and explains the no-session recovery path without asking for credentials in chat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and range limit are front-loaded, and every clause carries operational content. It is a single dense paragraph of roughly 150 words, which is long but justified by the number of distinct data classes it retrieves.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so thoroughly, enumerating declarations, conclusions, folio codes with glosas, observations, events, boleta-level detail with amounts and withholdings, and DJ informants with their months, amounts and SII observations. Error/degradation behavior is also covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3; the description adds real meaning on top by clarifying the año tributario convention (commercial year + 1) and imposing a 10-year maximum span across desde/hasta, which the schema does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb chain (fetch F22 from SII and persist it locally) plus the exact resource set: annual declarations, boletas de honorarios, and DJ filings by third parties. It implicitly distinguishes itself from read-only siblings like renta_resumen by stressing that it writes to the local database, but it never names an alternative tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful context conditions (using the next tax year to see current-year boletas without an F22, max 10 years per call, session-required path), but it never says when to prefer renta_resumen or sii_panorama over a sync, nor any when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sii_panoramaPanorama local del SIIARead-onlyIdempotent
Muestra el panorama de todos los meses almacenados localmente para un RUT, con montos y cobertura de RCV (compras y ventas) y F29 y, si se sincronizaron, la propuesta de F29, las boletas de honorarios recibidas y la renta (F22) por año tributario, además de los datos de la cuenta. No requiere un período y no descarga datos del SII: consulta solo lo almacenado localmente.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-open-world, so the bar is lower; the description still adds real context by stating it never reaches the SII and only reads stored data, plus the conditional availability of propuesta F29, boletas and F22 ('si se sincronizaron'). It doesn't say what is returned when nothing is stored locally, which is the main remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by the payload list and then the two behavioral constraints in a short second sentence. The enumeration is dense but every item is informative; only the long single sentence testing readability keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the necessary work of enumerating what comes back (monthly amounts, RCV coverage, F29, propuesta F29, boletas, F22 by tax year, account data) and flags which parts are conditional. It could still say more about the shape/aggregation of 'montos' and the empty-state behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 100% schema coverage with a concrete example format (22.222.222-2), so the schema carries the burden. The description adds only that the RUT scopes the whole panorama; no extra syntax or normalization guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Muestra') and a precisely scoped resource: an all-months local panorama for a RUT, with the exact contents enumerated (RCV compras/ventas, F29, propuesta F29, boletas, F22, datos de cuenta). It also explicitly contrasts with period-scoped and sync siblings ('No requiere un período y no descarga datos del SII'), so an agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: this is the cross-period overview and requires no period argument, and it is strictly a local read rather than a download. It doesn't name the alternative to call when the user needs fresh SII data (e.g. sincronizar / perfil_sincronizar), leaving that inference to the reader.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sincronizarSincronizar con el SIIAIdempotent
Trae desde el portal del SII el RCV (compras y ventas) y el F29 de un rango de meses y los guarda en la base local. Solo lee el SII: nunca presenta ni modifica nada allí. Por defecto trae rcv y f29 (propuesta y bhe son opcionales); con superficies puedes elegir, y «propuesta» (opcional, no va por defecto) agrega la propuesta de F29 del SII: crédito, remanente y retención propuestos, sin débito ni total a pagar; «bhe» (opcional, no va por defecto) agrega las boletas de honorarios recibidas del mes, con su retención, que se cruza con el código 151 del F29. La renta (F22) no va aquí: usa renta_sincronizar, y el perfil y las empresas autorizadas, perfil_sincronizar. Admite hasta 120 meses por llamada; para historia larga llama por tramos de 12 meses, así avanzas por partes y evitas que el cliente agote el plazo de espera. Si no hay sesión, la respuesta indica cómo conectar la cuenta en la página «Abrir mi-sii-mcp.cmd»; nunca pidas la clave en el chat.
| Name | Required | Description | Default |
|---|---|---|---|
| rut | Yes | RUT del contribuyente, por ejemplo 22.222.222-2 | |
| desde | Yes | Período tributario AAAA-MM | |
| hasta | No | Período tributario AAAA-MM | |
| superficies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: it is strictly read-only against the SII (never submits or modifies anything there, consistent with readOnlyHint=false only because it writes to the local DB), explains what each optional surface adds (propuesta = proposed credit/remainder/withholding without debit or total payable; bhe = honorarios receipts crossed with F29 code 151), and discloses session-failure behavior and a security rule (never ask for the password in chat).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence and every sentence carries information. It is a single dense run-on paragraph with stacked parentheticals, which makes it harder to scan than a short bulleted structure would.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter sync tool with no output schema, it covers scope, defaults, optional surfaces, batching strategy and failure handling. It does not describe what the response contains per surface (counts, errors, partial results), which an agent may want before calling, though the response itself reportedly explains the auth path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 75% schema coverage, the schema already documents rut, desde and hasta. The description adds real meaning for superficies — the four accepted values, their semantics and which are on by default — plus the effective 120-month cap on the desde/hasta range, which the schema does not express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: pulls RCV (purchases and sales) and F29 from the SII portal for a month range and stores them locally. It explicitly contrasts itself with renta_sincronizar (F22) and perfil_sincronizar (profile/authorized companies), so an agent can distinguish it from siblings without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States default behavior (rcv and f29 by default; propuesta and bhe optional and not included by default), when to use the sibling tools instead (renta_sincronizar for F22, perfil_sincronizar for profile), and operational guidance: max 120 months per call, use 12-month batches for long history to avoid client timeouts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v0.1.0- First observed
consulta_sql - First observed
datos_esquema - First observed
f29_historial - First observed
f29_releer - First observed
fuentes_oficiales - First observed
iva_hallazgos - First observed
iva_resumen - First observed
perfil_sincronizar - First observed
perfiles_listar - First observed
plazos_proximos - First observed
rcv_documentos - First observed
renta_resumen - First observed
renta_sincronizar - First observed
sii_panorama - First observed
sincronizar
TDQS
Scored across 15 tools
Most tools have clearly distinct purposes: listing/syncing profiles, syncing RCV/F29/renta, summarizing IVA or renta, exposing schema/query, and listing deadlines. There is some potential confusion between iva_resumen, iva_hallazgos, f29_historial, and sii_panorama in IVA/F29 reporting, but the descriptions clarify whether they cover one month, a range, or all locally stored months.
Names are readable but follow mixed Spanish conventions: some use noun_verb order (perfiles_listar, renta_sincronizar, f29_releer), others noun_noun (iva_resumen, renta_resumen, rcv_documentos, plazos_proximos), and one is a bare verb (sincronizar). The domain prefixes help, but there is no single predictable verb_noun pattern throughout.
With 15 tools, the surface matches a broad tax-data workflow: profiles, synchronization, local summaries, reconciliation findings, deadlines, and a SQL escape hatch. Each tool covers a meaningful and largely non-redundant operation for this domain.
The set covers the full read/sync/analyze lifecycle for SII local data: profile listing and synchronization, RCV/F29/renta synchronization, IVA and renta summaries, findings, deadlines, document listing, and schema-guided SQL queries. Write operations to the SII are intentionally absent, and the SQL/schema pair provides a general fallback for detailed local queries.
Maintenance
Related MCP Connectors
Brazilian Open Finance MCP — 30+ banks (Itaú, Nubank, etc.) to Claude/Cursor. Read-only.
- ManiloOAuthapp.manilo
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Atendio is a WhatsApp AI assistant for businesses in Latin America, on the official WhatsApp Business Platform. This MCP server lets Claude (or any MCP client) list and read WhatsApp conversations, view analytics and assistant settings, and create, edit or delete the rules your AI assistant follows. Remote, OAuth 2.1; the business always reviews and publishes rule changes.
Related MCP Servers
- AlicenseAqualityBmaintenanceOpen-source MCP server for Chile's SII free invoicing system, enabling AI agents to query issued and received tax documents.124MIT
- AlicenseAqualityCmaintenanceMCP server for querying Chilean electronic invoicing data via the IntegraDTE API. Enables language models to retrieve tax documents, folios, statistics, and more.1110 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to issue Chilean electronic tax documents (boleta and factura) stamped at SII via OpenFactura, with stateless bring-your-own-credentials.MIT
- AlicenseNot gradedqualityBmaintenanceEnables access to Chile's government procurement data (Mercado Público / ChileCompra) via MCP, allowing AI agents to query public procurement information.21 npmMIT