Buk 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., "@Buk MCPshow me the salary history for employee Ana Soto since 2024"
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.
Buk MCP
Servidor MCP comunitario para conectar Buk Chile con ChatGPT, Dots y otros clientes MCP. Incluye el catálogo completo de la API oficial indicada abajo y herramientas para historial salarial, remuneraciones, costo de equipos y comparación con el IPC.
Cada empresa utiliza su propia URL de Buk y su propia API key. El proyecto se puede autoalojar; el modo OAuth permite que varias empresas conecten sus credenciales por separado a un mismo servidor. No necesitas una API key de OpenAI para ejecutar el adaptador.
Integración independiente, sin afiliación ni aprobación de Buk. Este repositorio contiene código y datos públicos del IPC; no contiene claves ni datos de empleados. Publicar el código no publica un servicio alojado ni lo instala automáticamente en ChatGPT o Todd.
Qué incluye
206 operaciones documentadas en el esquema oficial de Chile: 119 GET y 87 operaciones de escritura. El catálogo se genera del esquema, sin mantener manualmente una lista parcial de rutas.
Descubrimiento de operaciones, parámetros, permisos y esquemas de respuesta. Puedes consultar cualquier endpoint documentado a través de las herramientas genéricas.
Sueldo base histórico, aumentos, jornada, moneda y liquidaciones por período.
Costo mensual de equipos según la fórmula estándar de Buk, con aportes observados, desglose por persona, haberes fijos/ocasionales y comparación mensual.
Simulación de cambios del sueldo base sin modificar Buk.
Comparación del sueldo con la serie mensual empalmada del INE de Chile.
Paginación, validación de parámetros, límites de tamaño, timeout, reintentos de lectura y errores con permisos o cobertura incompleta explícitos.
Transporte stdio y Streamable HTTP. HTTP ofrece OAuth con PKCE para varias empresas, o bearer fijo para una instalación aislada.
Pruebas de protocolo MCP, API, cálculos, autenticación y separación de empresas; CI para Node 22 y 24.
Las escrituras están desactivadas por defecto y no están disponibles en OAuth compartido. Una instalación aislada puede habilitarlas explícitamente. La cobertura del catálogo no elimina los permisos de la API key ni las restricciones de módulos contratados.
Related MCP server: parlayapi-mcp
Inicio rápido: cliente MCP local
Requisitos: Node.js 22 o superior y una API key de Buk. Para sueldos se requieren permisos de lectura de remuneraciones y acceso a información sensible.
git clone https://github.com/gmorande/buk-mcp.git
cd buk-mcp
npm ci
npm run buildEn la configuración del cliente MCP, agrega el proceso con una ruta absoluta. Sustituye los valores de ejemplo en un archivo privado del cliente:
{
"mcpServers": {
"buk": {
"command": "node",
"args": ["/ruta/absoluta/buk-mcp/dist/index.js", "stdio"],
"env": {
"BUK_TENANT_URL": "https://tuempresa.buk.cl",
"BUK_API_KEY": "TU_CLAVE_PRIVADA",
"BUK_COUNTRY": "chile",
"BUK_ALLOW_WRITES": "false"
}
}
}
}La clave va en la configuración privada o gestor de secretos. No debe aparecer en prompts, argumentos de herramientas, commits o issues.
También puedes preparar un .env a partir de .env.example y usar:
node --env-file=.env dist/index.js stdioEl proceso stdio se comunica con un cliente MCP mediante stdin/stdout; no es una consola interactiva de preguntas.
ChatGPT, Todd y un servicio para varias empresas
Para clientes cloud utiliza el modo HTTP con OAuth, detrás de HTTPS:
BUK_AUTH_MODE=oauth
PUBLIC_URL=https://mcp.tudominio.cl
HOST=127.0.0.1
PORT=3000
OAUTH_DATA_DIR=/var/lib/buk-mcp
OAUTH_MASTER_KEY=32_BYTES_ALEATORIOS_CODIFICADOS_EN_BASE64
OAUTH_REDIRECT_URIS=https://chatgpt.com/connector_platform/oauth_redirectnode --env-file=.env dist/index.js httpRegistra https://mcp.tudominio.cl/mcp como MCP personalizado con OAuth en el cliente. La página de conexión solicita la URL y la API key de esa empresa, las verifica y guarda la credencial cifrada. El token OAuth queda vinculado a esa conexión; cada solicitud usa su propio cliente Buk.
El operador del servicio puede acceder a los datos autorizados por esas claves: cada empresa debe elegir un operador de confianza o autoalojar. La implementación incluida usa un proceso y una réplica con almacenamiento cifrado persistente. La guía explica HTTPS, callbacks, rotación, revocación, límites y despliegue con Docker.
Guía completa: DEPLOYMENT.md. La conexión personalizada y la admisión en el catálogo público de ChatGPT son procesos distintos; el proyecto no afirma tener aprobación del catálogo.
Preguntas de ejemplo
Sustituye X por una persona y especifica el período cuando sea relevante. El asistente debe resolver la ficha correcta y aclarar nombres de equipo ambiguos. “Tech” es un ejemplo de área: cada empresa utiliza su propia estructura.
Estas son las preguntas que ejecuta la suite test:live. El informe de verificación distingue éxito, datos parciales y fallos; no contiene los resultados de RR.HH.
ID | Pregunta | Herramienta principal |
Q01 | Busca a X y dime si tiene más de una ficha. |
|
Q02 | Muéstrame las áreas y subáreas de la organización. |
|
Q03 | ¿Cuánto me costó mensualmente el equipo Tech en el último mes cerrado? Dame el total y el desglose por persona. |
|
Q04 | Separa los haberes fijos, ocasionales y aportes patronales del equipo Tech. |
|
Q05 | ¿Cómo cambió el costo de Tech frente al mes anterior y cuántas personas o fichas había en cada mes? |
|
Q06 | ¿Quiénes integraban Tech a una fecha determinada y cuánto sumaban sus sueldos base mensuales? |
|
Q07 | Si subo 5% los sueldos base de Tech, ¿cuánto aumenta mensualmente esa suma? |
|
Q08 | Dame la evolución histórica del sueldo de X, con las fechas y porcentajes de sus aumentos. |
|
Q09 | Compara la evolución del sueldo base de X con el IPC. ¿Ganó o perdió poder adquisitivo? |
|
Q10 | ¿Cuánto tuvo X de haberes brutos, descuentos y líquido en un mes determinado? |
|
Q11 | ¿Cuántos días de vacaciones tenía X a una fecha determinada, descontando las vacaciones futuras registradas? |
|
Q12 | ¿Qué empresas o razones sociales puede consultar esta conexión? |
|
La verificación comprueba las llamadas y los cálculos necesarios para responder. No es una promesa de que cualquier modelo responda correctamente a cualquier redacción ni una prueba de todos los endpoints contra producción.
Herramientas MCP
El servidor mantiene pocas herramientas y descubre el catálogo completo bajo demanda. No obliga al cliente a cargar 206 descripciones a la vez.
Herramienta | Función |
| Buscar operaciones por texto, módulo/tag y método; listar el catálogo con paginación. |
| Obtener parámetros, permisos y esquemas oficiales antes de una llamada. |
| Ejecutar cualquier GET documentado con validación y paginación. |
| Ejecutar operaciones de escritura; sólo aparece cuando el servidor aislado las habilita. |
| Encontrar personas y fichas, señalando coincidencias ambiguas. |
| Calcular remuneraciones y costo de un equipo para un mes; comparar períodos. |
| Consultar sueldo base histórico, liquidaciones y comparación opcional con IPC. |
| Sumar sueldo base vigente a una fecha y simular variaciones porcentuales. |
| Comparar dos sueldos en CLP con índices oficiales de dos meses. |
También ofrece los recursos buk://api/catalog, buk://schema/chile y buk://guide/payroll, más prompts para costo de equipo e historial salarial.
Ejemplo de llamada
Primero descubre y describe la operación; sus parámetros y formatos de fecha pueden variar.
{
"name": "buk_read",
"arguments": {
"operationId": "get_employees_id_jobs",
"path": { "id": "123" },
"paginate": true
}
}{
"name": "buk_team_payroll",
"arguments": {
"team": "Tech",
"month": "2026-09",
"compare_previous": true
}
}Los IDs de operación se derivan del método y la ruta. El catálogo del servidor es la autoridad; el ejemplo de ficha 123 es ficticio.
Cómo calcula sueldos y costos
Costo estándar Buk: total de haberes + aportes patronales observados − asignación familiar. El servidor verifica los componentes de la liquidación y su reconciliación. La ausencia de aportes no se transforma silenciosamente en cero. Los ítems informativos, como el saldo acumulado de una provisión, no se suman como gastos mensuales.
Costo contable personalizado: si la empresa usa otra definición, expense_accounts permite indicar las cuentas de gasto aprobadas. Suma débitos menos créditos de esas cuentas, evitando sumar pasivos o contrapartidas. El mapeo requiere validación de Finanzas. No se mezclan automáticamente los dos métodos.
Historia y pertenencia a equipos: usa trabajos con fechas efectivas para el mes consultado. Un cambio de área dentro del mes se señala como provisional; para una distribución exacta se necesitan los centros de costo correspondientes. La jerarquía de áreas puede ser la actual: si hubo una reorganización histórica, usa area_ids explícitos e include_descendants=false.
Sueldo vigente: la proyección de sueldo base excluye bonos, gratificaciones, aportes y otros componentes. El escenario de 5% representa ese aumento del sueldo base; no estima de forma implícita todas las cargas adicionales.
IPC: calcula (sueldo final / sueldo inicial) / (IPC final / IPC inicial) - 1, con meses coincidentes. Descarga la serie mensual empalmada del INE y conserva una copia pública fechada como respaldo. Si falta el mes solicitado, no inventa el dato. Usa los niveles publicados del índice; el redondeo puede producir pequeñas diferencias frente a una calculadora con precisión interna adicional.
Siempre separa monedas, sueldos base, bruto, descuentos, líquido y costo empresa. income_net es el líquido indicado por Buk, no una confirmación de transferencia bancaria. Costos de proveedores, contratistas o beneficios fuera de Buk requieren otra fuente.
Detalles, supuestos y límites: ANALYTICS.md.
Cobertura de la API
Fuente oficial: Swagger de Buk Chile, visible en apidocs. Snapshot: 23 de octubre de 2026.
Método | Operaciones |
GET | 119 |
POST | 46 |
PUT | 6 |
PATCH | 18 |
DELETE | 17 |
Total | 206 |
La cobertura significa que cada operación del esquema tiene un ID, descripción, esquema de entrada y un camino de ejecución. Los módulos o endpoints privados, de otros países, de otros productos Buk o ausentes del documento suministrado no se inventan ni se presentan como verificados.
El documento oficial contiene algunas inconsistencias y una referencia de respuesta sin definición. Las normalizaciones y la lista completa de rutas están en API_COVERAGE.md. El esquema original se conserva íntegro en schema/buk-chile.json.
Para actualizarlo:
npm run schema:update
npm run checkRevisa el diff antes de incorporar cambios del contrato. La actualización de esquema no ejecuta escrituras en Buk.
Pruebas
Verificación del 23 de octubre de 2026: las 12 preguntas del README pasaron con una cuenta real de Buk Chile, usando un cliente MCP por stdio. Se comprobaron consultas y conciliaciones matemáticas, exclusivamente en lectura. El informe anonimizado contiene los estados y comprobaciones. Los datos reales, la clave y la identidad del cliente no están incluidos.
npm ci
npm run checkLa suite local usa fixtures ficticios. Comprueba todos los esquemas, validación, paginación, formatos de solicitud, límites, reintentos, errores, matemáticas, OAuth/PKCE, revocación, aislamiento de empresas y llamadas MCP reales por transportes de prueba. GitHub Actions ejecuta estas pruebas sin credenciales Buk.
Para verificar las 12 preguntas con una cuenta autorizada, configura tu .env privado y ejecuta:
BUK_LIVE_TEAM=Tech BUK_LIVE_MONTH=2026-09 \
node --env-file=.env --import tsx scripts/live-test.tsPuedes definir BUK_LIVE_EMPLOYEE_ID y BUK_LIVE_START_MONTH. Por defecto, el script elige una ficha con historial accesible y usa el mes anterior. Si necesitas un informe, indica BUK_LIVE_REPORT=/ruta/informe.json; sólo escribe preguntas, estados, comprobaciones y códigos de limitación. No guarda respuestas de Buk. El script fuerza lectura y falla si el servidor expone una herramienta de escritura.
Si hay áreas activas e históricas con el mismo nombre, usa BUK_LIVE_TEAM con un nombre único de la jerarquía. Las herramientas devuelven candidatos cuando el nombre es ambiguo; no mezclan automáticamente áreas homónimas.
Un fallo de permisos, un período abierto o datos incompletos no se reportan como éxito. Las pruebas de escritura usan simulaciones; no alteran datos reales para comprobar el catálogo.
Seguridad y contribuciones
Consulta SECURITY.md. Antes de abrir un issue, elimina claves, dominios privados, nombres, RUT, montos y respuestas completas. Adjunta una reproducción con datos ficticios.
Las mejoras deben conservar la separación por empresa, la trazabilidad de cálculos y las señales de cobertura. Una nueva operación debe venir del esquema oficial; un nuevo cálculo financiero necesita una definición explícita y pruebas de los casos que podrían cambiar su resultado.
Licencia del código: MIT. Los esquemas y series públicas incluidos mantienen la atribución a Buk y al INE; la licencia del código no reemplaza sus condiciones de uso.
Available Tools
8 toolsbuk_compare_salary_to_cpiARead-onlyIdempotent
Compare two CLP salaries in exact months using official INE linked Chile CPI indices. Returns nominal change, real change, inflation-adjusted salary and monetary gap. No personal or salary data are transmitted to INE.
| Name | Required | Description | Default |
|---|---|---|---|
| currency | No | CLP | |
| end_month | Yes | ||
| start_month | Yes | ||
| final_salary | Yes | ||
| initial_salary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world, and the description adds real value: it names the external authority (INE), states what is returned, and reassures that no personal or salary data is transmitted externally. It stops short of discussing external-service failure modes or latency, which keeps it at 4.
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 short sentences, all earning their place: capability, return values, then a privacy note. Front-loaded with the core action.
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?
Covers inputs at a high level, enumerates all returned metrics in lieu of an output schema, and discloses the external dependency plus privacy posture. Only the month-format and error/timeout behavior for the external CPI call are 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 description coverage is 0%, so the description carries the burden: 'two CLP salaries in exact months' loosely maps to initial_salary/final_salary and start_month/end_month, and CLP is fixed. However the expected YYYY-MM month format and the currency parameter/default are never explained in prose.
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+resource (compare two CLP salaries) with the method (official INE linked Chile CPI indices) and enumerates the outputs. It is plainly distinct from the payroll/employee siblings, so an agent can select 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?
The use case (inflation-adjusted salary comparison between two exact months) is implied by the verb and the stated outputs, but there is no explicit when-to-use/when-not guidance and no mention of alternatives such as buk_salary_history for raw historical figures.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buk_describe_operationARead-onlyIdempotent
Return the official description, permissions, parameter schema and response schema of a Buk operation. Always check this before using a new operation.
| Name | Required | Description | Default |
|---|---|---|---|
| operationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly, idempotent, and closed-world, so safety is already covered; the description adds useful behavioral context by specifying the payload contents (permissions plus both schemas near schema). It does not mention latency, caching, or error behavior for unknown operationIds, which keeps it from 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, with the return contents front-loaded and the imperative guidance second. Every clause earns its place.
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 work of explaining the return value (description, permissions, parameter schema, response schema), which is exactly what's needed. The remaining gap is the provenance of operationId, unaddressed in both schema and description.
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 0% and the single parameter is documented only as a bare string. The description implies operationId identifies "a Buk operation" but never says where to obtain it — most likely from buk_list_operations — which is the one detail an agent actually needs.
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 (return) and resource (official documentation for a Buk operation), enumerating exactly what comes back: description, permissions, parameter schema, response schema. An agent can distinguish it from buk_list_operations (which enumerates operations) by inference, though the sibling is never named explicitly.
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?
"Always check this before using a new operation" gives a clear, actionable trigger condition tied to the agent's workflow. It stops short of naming alternatives or stating when the tool is unnecessary (e.g., for already-known operations), keeping it at a strong 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.
buk_list_operationsARead-onlyIdempotent
Discover every operation in the official Buk Chile API. Search Spanish names, English paths or tags; then describe the exact operation before calling it. Does not request HR data.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | No | ||
| method | No | ||
| offset | No | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered. The description adds real value beyond them by naming the searchable fields and explicitly limiting data scope ('Does not request HR data'), but it never mentions paging behavior or what the returned operation records contain.
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 short sentences, front-loaded with the purpose, then the searchable fields, then the follow-up step and scope limit. No repetition and nothing 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?
It is adequate for a discovery/catalog tool, but with no output schema the description should say what a listed operation looks like and that results are paginated (limit/offset exist with defaults). Those omissions are the main gaps for an agent deciding how many calls to make.
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 0%, so the description must carry parameter meaning; it clarifies what `search` and `tag` operate over (Spanish names, English paths, tags) and implies `method` filtering via 'operations'. However, `limit`, `offset` and the method enum are left entirely undocumented, so half the surface remains unexplained.
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 and resource ('Discover every operation in the official Buk Chile API') and scopes the search dimensions (Spanish names, English paths, tags). It also separates itself from buk_describe_operation by saying you describe an operation afterwards, so an agent can pick between the two 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?
Gives an explicit workflow: search here first, then describe the exact operation before calling it, which implicitly routes to buk_describe_operation. 'Does not request HR data' sets a scope boundary against the HR/payroll siblings, though those alternatives are not named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buk_readARead-onlyIdempotent
Execute any documented GET operation against the authenticated Buk tenant. Covers all read endpoints, including employees, payroll, accounting, recruiting, vacations, documents and other licensed modules. Parameters are validated against the official schema. Returns original Buk data plus pagination completeness; permission errors are explicit.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Declared path parameters, for example {"id":"123"}. | |
| query | No | Declared query parameters. Dates must follow the endpoint description. | |
| paginate | No | Follow all pages up to the configured limit. Check meta.complete. | |
| operationId | Yes | Exact ID returned by buk_list_operations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context beyond those annotations: parameters are validated against the official schema, results return original Buk data with pagination completeness, and permission errors are explicit.
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 three sentences and front-loads the core capability. The module examples are somewhat verbose but still reinforce scope, and the validation/return/error notes are useful rather than 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?
For a generic open-world read tool with a fully described schema, the description covers validation, result behavior, pagination completeness, and permission errors. It is close to complete, though it could better explain how this tool relates to the operation-list and specialized read tools.
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 operationId, path, query, and paginate. The description adds only the high-level note that parameters are validated against the official schema and does not contribute additional parameter-level semantics.
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 states a specific verb and resource: execute any documented GET operation against the authenticated Buk tenant. It clearly identifies the tool as a generic read-endpoint executor and lists covered domains, but it does not explicitly distinguish itself from the specialized read siblings such as buk_search_employees or buk_team_payroll.
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?
Usage is implied by the broad scope: any documented read endpoint can be called through this tool. However, the description does not explain when to prefer this generic tool over specialized siblings or when not to use it, so an agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buk_recurring_payrollARead-onlyIdempotent
Sum a team’s contractual base wages as of an explicit date, by currency, and simulate a percentage change. This is a base-wage run-rate, not total employer cost.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Exact area name. If ambiguous the tool returns candidate IDs. | |
| as_of | Yes | ||
| area_ids | No | ||
| company_id | No | ||
| increase_percent | No | ||
| include_descendants | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/open-world, and the description still adds genuine context: that increase_percent is a simulation rather than a mutation, and that the computed figure deliberately excludes non-base employer costs. What is missing is any hint of the result shape beyond 'by currency' (per-currency lines? per-employee rows?) and what happens when no wages exist for the date.
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 tightly packed sentences with no filler; the core computation is front-loaded and the scoping caveat trails it as a qualifier. Every clause earns its place.
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 tool with no output schema and 17% schema coverage, the description covers the calculation and its main interpretive trap (base wages vs total cost) but not the return structure or the three scope-controlling parameters. Adequate to call correctly in the simple case, thin for anything involving descendants or area resolution.
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 17%, so the description must carry the parameter burden and does not. It clarifies as_of ('explicit date') and increase_percent ('simulate a percentage change'), but leaves area_ids, company_id, include_descendants (default true, materially changes scope) and the team/area_ids/company_id selection relationship completely unexplained in either place.
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 gives a specific verb and resource set: sum a team's contractual base wages as of an explicit date, grouped by currency, plus a percentage-change simulation. The clause 'This is a base-wage run-rate, not total employer cost' sharply separates it from cost-of-employment interpretations, though it never names the obvious sibling buk_team_payroll, so the boundary with that tool must be inferred.
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?
Usage is implied rather than stated: the 'not total employer cost' caveat tells the agent what answer this tool gives, so an agent can infer it should pick this for run-rate/base-wage questions. There is no explicit 'use X instead when...' routing, no prerequisite or permission guidance, and no indication of when to prefer buk_team_payroll or buk_salary_history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buk_salary_historyARead-onlyIdempotent
Get contractual base-wage history, salary changes and historical payroll for one exact ficha, optionally compared with official Chile INE CPI for the same endpoint months. Does not infer missing salary history.
| Name | Required | Description | Default |
|---|---|---|---|
| end_month | Yes | ||
| compare_cpi | No | ||
| employee_id | Yes | ||
| start_month | Yes | ||
| include_payroll | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent and open-world behavior, so the bar is lower. The description adds a genuinely non-obvious behavioral trait: it will not infer or backfill missing salary history, so gaps mean no data rather than estimation. It does not describe output shape or error behavior for an unknown ficha.
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 with the core scope front-loaded and the limitation stated last; no filler. Minor cost is unexplained domain jargon ('ficha'), which an agent must infer means employee_id.
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?
A five-parameter read tool with no output schema and no parameter descriptions leaves real gaps: no return structure, no currency/units for wages, no month format, no default disclosure, and no statement of what happens when the ficha has no records. Adequate to call correctly, but not complete.
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 0% schema description coverage, the description must compensate, and it does reasonably: 'one exact ficha' maps to employee_id, the endpoint-month phrasing maps to start/end_month, CPI comparison maps to compare_cpi, and 'historical payroll' maps to include_payroll. It still omits the YYYY-MM format and the defaults (include_payroll=true, compare_cpi=false), which the schema supplies only structurally.
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 (Get) with a precisely scoped resource: contractual base-wage history, salary changes and historical payroll for one exact employee identified by ficha. It also names the optional CPI comparison axis, which distinguishes it from buk_team_payroll and buk_compare_salary_to_cpi.
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?
'for one exact ficha' implicitly excludes team/bulk lookups, but the description never explicitly says when to prefer buk_compare_salary_to_cpi or buk_team_payroll. The 'does not infer missing salary history' line is a useful exclusion, but only about data, not about sibling selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buk_search_employeesARead-onlyIdempotent
Find Buk employees by name, email, ficha ID or document. Returns a minimized directory and flags multiple matches; never guesses which person is intended.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), and the description adds genuinely new behavioral facts: the response is a minimized directory and ambiguous lookups are flagged rather than resolved arbitrarily. It does not cover pagination/limit behavior, which keeps it from 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 dense sentences with the lookup keys front-loaded and the ambiguity contract stated last. Nothing is redundant and nothing could be cut without losing information.
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 read-only search with no output schema, the description adequately characterizes the return (a minimized directory, with multiple matches flagged). The remaining gap is the unspecified status filter and default/maximum result count.
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 0%, so the description carries the burden. It usefully explains what the 'query' parameter accepts (name, email, ficha ID or document), but says nothing about 'limit' or the activo/inactivo/pendiente 'status' filter, leaving two of three parameters undocumented.
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 plus resource (find Buk employees) and enumerates the four lookup keys (name, email, ficha ID, document). The sibling tools are all in unrelated domains (payroll, operations, salary), so there is no real ambiguity to disambiguate from.
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 search keys imply when to reach for this tool (resolving a person from any identifier), and 'never guesses which person is intended' hints at the multi-match workflow. However, it never states when not to use it or names an alternative for enumerating employees, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buk_team_payrollBRead-onlyIdempotent
Calculate a team’s monthly gross/net payroll, employee breakdown and prior-month change using historical jobs. Standard Buk employer cost is calculated from reconciled earning/contribution/family-allowance lines; custom Finance-approved expense accounts are also supported. Missing data remain explicit. Only closed payroll is included by default.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Exact area name. If ambiguous the tool returns candidate IDs. | |
| month | Yes | ||
| area_ids | No | ||
| company_id | No | ||
| cost_centers | No | ||
| include_open | No | ||
| compare_previous | No | ||
| expense_accounts | No | Finance-approved personnel EXPENSE account numbers. Do not include liabilities, bank or balancing accounts. | |
| payroll_currency | No | Currency of payroll/accounting records where Buk omits a currency field; separate from contractual base-wage currency. | CLP |
| include_accounting | No | ||
| include_descendants | No | ||
| family_allowance_codes | No | Explicit additional item_code/code values for statutory family allowance. Standard Asignación Familiar is detected automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, openWorld), and the description adds real behavioral context: how the standard employer cost is derived (reconciled earning/contribution/family-allowance lines), that custom Finance-approved expense accounts are honored, and that missing data are surfaced explicitly rather than silently dropped. It stops short of describing output shape or the cost of a wide open-world lookup.
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?
Four sentences, front-loaded with the core capability and its data basis, with no filler. Slightly dense in the second sentence (reconciled earning/contribution/family-allowance lines) but every clause carries information.
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 12-parameter aggregation tool with no output schema, the definition covers the calculation model and default scope but is silent on the team-vs-area_ids/company_id resolution path (documented only in the schema), currency handling, and what the returned breakdown looks like. Adequate, but an agent would still guess on several inputs.
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 33%, so the description needs to compensate. It does explain include_open (closed-only default), compare_previous (prior-month change), expense_accounts (Finance-approved, standard-cost derivation) and family-allowance handling, but leaves area_ids, company_id, cost_centers, payroll_currency, include_accounting and include_descendants entirely unaddressed.
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 opening sentence names a specific verb (calculate) and resource (team monthly gross/net payroll, employee breakdown, prior-month change) plus the data source (historical jobs). It is clearly distinct from buk_salary_history or buk_recurring_payroll, though it never names those siblings explicitly.
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 states a default scope ('Only closed payroll is included by default') but gives no when-to-use / when-not-to-use guidance and never points to buk_salary_history, buk_recurring_payroll or buk_compare_salary_to_cpi as alternatives. An agent must infer selection criteria from the sibling names alone.
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.
8 tool updates
v0.1.0- First observed
buk_compare_salary_to_cpi - First observed
buk_describe_operation - First observed
buk_list_operations - First observed
buk_read - First observed
buk_recurring_payroll - First observed
buk_salary_history - First observed
buk_search_employees - First observed
buk_team_payroll
TDQS
Scored across 8 tools
The discovery trio (list/describe/read) has clear roles, and the payroll analytics tools are differentiated by cost basis, scope, and purpose. The main overlap is that buk_read can access any GET endpoint, including data also served by specialized tools like buk_search_employees and payroll helpers, so agents may occasionally hesitate between raw read and specialized analysis.
All tools use a consistent buk_ prefix and snake_case naming. Most follow a verb_noun pattern, but several are noun phrases (team_payroll, salary_history, recurring_payroll) and buk_read is a bare verb, creating minor convention drift.
Eight tools is well scoped for a Buk API wrapper with discovery, generic read access, and a few high-value payroll analytics helpers. Each tool appears to earn its place without an excessively broad or thin surface.
The server covers discovery and read access comprehensively via buk_read, plus useful payroll and CPI analytics. However, it is effectively read-only and lacks any create, update, or delete operations, which is a notable gap for an API integration surface.
Maintenance
Related MCP Connectors
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
- OneOAuthai.withone
Find, document and execute authenticated API calls across 700+ apps via one MCP server
SportsDataIO MCP — wraps SportsDataIO's Big-Six sports data API (sportsdata.io)
MLB Stats API MCP — official MLB statistics (keyless).
Related MCP Servers
- FlicenseAqualityCmaintenanceEnables read-only access to Sleeper fantasy sports data, including users, leagues, rosters, matchups, transactions, drafts, players, trending activity, playoff brackets, traded picks, and sport state via MCP tools.18-
- AlicenseAqualityAmaintenanceEnables MCP-compatible clients to access sports betting odds, player props, prediction markets, live previews, coverage checks, and ParlayAPI account signup through native tools.2235 PyPI1MIT
- AlicenseAqualityBmaintenanceEnables MCP clients to call the platform's full API as individual tools—covering evals, criteria, gates, logs, datasets, aliases, label sets, audit/proving, dedicated endpoints, and training—with validated inputs and raw API responses.8118 npmApache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables read-only access to DraftKings DFS lobby data, including slates, contests, salaries, and roster rules, via MCP.-