informer-mcp
informer-mcp
Un servidor Model Context Protocol para la API de contabilidad Informer (v2). Ofrece a cualquier cliente MCP acceso directo a tus relaciones, facturas de venta y compra, presupuestos, pedidos, recibos, productos e informes financieros.
Cada herramienta se deriva del documento OpenAPI propio de Informer (api.informer.eu/docs/v2). El servidor incluye una copia para que funcione sin conexión, y se mantiene al día; consulta Mantenerse al día con los cambios de la API.
Proyecto no oficial. Sin afiliación ni respaldo de Informer.
Inicio rápido
Pega esto en cualquier asistente de IA que pueda instalar servidores MCP:
Install the following MCP server: https://github.com/vladxyz/informer-mcp and run the local setup screen for the API keys.Clonará el repositorio, lo compilará, registrará el servidor en tu cliente y luego ejecutará informer-mcp setup, que abre una página en tu navegador en 127.0.0.1. Esa página es donde van tus credenciales de API; no se pide nada en el chat y ninguna clave se pega nunca en una conversación.
Qué ves en esa página
Una tarjeta por administración, más Añadir administración si gestionas más de una:
┌─ Administration ────────────────────────────── Remove ─┐
│ ALIAS COMPANY NAME │
│ [ acme ] [ ACME BV ] │
│ Short handle you use Optional, shown in │
│ in prompts. tool descriptions. │
│ │
│ API KEY SECURITY CODE │
│ [ ••••••••••••••••• ] [ ••••••••••••••• ] │
│ │
│ ACCESS │
│ [ Read and write ▾ ] │
│ Read only hides every tool that changes this │
│ client's books. │
└────────────────────────────────────────────────────────┘
[ Add administration ] [ Verify & save ] ☐ Save without verifyingCampo | Qué poner |
Alias | El nombre corto que usarás en los prompts — "listar facturas abiertas de acme". Letras, dígitos, |
Nombre de la empresa | Etiqueta opcional, mostrada al modelo para que sepa que |
Clave de API | Creada dentro de esa administración en app.informer.eu/settings/api. |
Código de seguridad | Se muestra en la configuración de esa administración en app.informer.eu/settings/account. |
Acceso | Lectura y escritura, o Solo lectura para ocultar toda herramienta que pueda cambiar los libros de este cliente. |
Ambas credenciales pertenecen a una administración, así que un contable añade una tarjeta por cliente. Consulta Varias administraciones de clientes.
Qué ocurre al pulsar Verificar y guardar
Cada par clave/código de seguridad se prueba contra la API, y la página te muestra el nombre de la empresa al que pertenece realmente; así, una clave pegada en la fila equivocada es evidente antes de que se guarde nada.
Si un par es rechazado, no se escribe nada y se nombra la fila que falla. Marca Guardar sin verificar para guardarlo de todos modos, por ejemplo cuando estés sin conexión.
Si tiene éxito, las credenciales se escriben en
~/.informer-mcp.jsoncon permisos0600. Si se abrió medianteopen_setup, el servidor en ejecución recoge el cambio de inmediato: una nueva administración es seleccionable en el siguiente mensaje. Si se abrió desde una terminal, reinicia tu cliente.
Pregunta "¿a qué administraciones tienes acceso?" para confirmarlo: eso llama a list_administrations y enumera cada alias con su empresa.
Related MCP server: billingo-mcp
Qué obtienes
68 herramientas que cubren los 49 endpoints documentados — lectura y escritura.
Configuración en el navegador. Pide a tu asistente que abra la página de configuración, o ejecuta
informer-mcp setup. Comprueba cada clave contra la API, escribe el archivo de configuración y el cambio surte efecto sin reiniciar nada.Sigue la API. Cuando Informer publica un nuevo endpoint, el servidor lo detecta y añade la herramienta mientras tu cliente sigue conectado: sin reinstalar, sin reiniciar.
Varias administraciones de clientes en un solo servidor. Los contables pueden acceder a los libros de cada cliente desde una única conexión, con un argumento
administrationque es obligatorio siempre que haya más de una configurada.Una pregunta para toda la cartera. Las herramientas de solo lectura aceptan una lista de alias o
"all"y las consultan de forma concurrente, devolviendo resultados indexados por cliente.Esquemas de solicitud completos. Las herramientas de crear/actualizar anuncian el JSON Schema completo de su payload, para que el modelo sepa qué campos existen y cuáles son obligatorios antes de enviar nada.
Solo lectura o lectura-escritura, a tu elección. Una opción
--read-onlyoculta toda herramienta que cambie algo, y clientes individuales pueden fijarse como solo lectura mientras el resto sigue siendo escribible. Las listas de permitidos/denegados reducen aún más la superficie.PDFs y adjuntos se decodifican desde base64 y pueden escribirse directamente en disco.
HTTP resiliente. Timeouts, reintentos con soporte de
Retry-After, y los errores de validación en neerlandés de Informer se muestran tal cual (HTTP 422: invoice_date: ongeldig).
Requisitos
Node.js 20 o superior
Una cuenta de InformerOnline con acceso a la API
Configuración de tus credenciales
Basta con pedirlo en la conversación:
"Quiero cambiar mis administraciones de Informer" "Añadir un nuevo cliente a Informer" "Mi clave de API de Informer ha cambiado"
Tu asistente llama a la herramienta open_setup y la página se abre. No hay ningún archivo de configuración que buscar ni nada que editar a mano; y como la página es un formulario de navegador, tu clave de API nunca tiene que escribirse en un chat.
La misma página desde una terminal:
npm run setup # or: informer-mcp setupDe cualquier manera, obtienes http://127.0.0.1:<port> en tu navegador, con un formulario para cada administración:
alias, nombre de la empresa, clave de API, código de seguridad, y si se puede escribir en ella. Al guardar se verifica cada par contra la API — así una clave mal escrita se detecta de inmediato, y ves el nombre de la empresa al que pertenece realmente cada clave — y después escribe ~/.informer-mcp.json con permisos 0600.
Iniciar el servidor sin credenciales abre automáticamente la misma página, ya que es exactamente el momento en que la necesitas. Establece INFORMER_AUTO_SETUP=false para desactivarlo, o INFORMER_OPEN_BROWSER=false en una máquina sin interfaz gráfica para que solo imprima la URL. Sin importar cómo se haya abierto, solo hay una página: si la pides de nuevo, se te devuelve la misma URL.
Algunas cosas que la página hace deliberadamente:
se vincula solo a
127.0.0.1, y cada ejecución genera un token aleatorio que debe estar en la URL y en la solicitud de guardado, para que otro sitio en tu navegador no pueda enviar datos a la página;nunca envía las claves almacenadas de vuelta a la página: las administraciones existentes aparecen con sus credenciales en blanco y se conservan a menos que escribas un valor nuevo;
se niega a guardar credenciales que la API rechaza, a menos que marques Guardar sin verificar.
Nada te impide escribir el archivo o las variables de entorno a mano; la página es una comodidad, no un requisito.
De dónde salen las claves
La API se autentica con dos cabeceras, ambas obligatorias:
Variable de entorno | Dónde encontrarla |
| |
|
Ambas están limitadas a una administración: la clave de API pertenece a la administración en la que se creó (GET /administration devuelve "la administración vinculada a esta clave de API") y el código de seguridad identifica a esa empresa. No existe ningún endpoint que enumere administraciones o cambie entre ellas.
Una clave concede acceso completo a los libros de esa administración. Trátala como una contraseña: mantenla en tu entorno, en un gestor de secretos o en un archivo de configuración fuera del repositorio.
Varias administraciones de clientes
Un contable con varios clientes necesita un par clave/código de seguridad por administración de cliente: un usuario contable con acceso a una administración puede crearlos desde su configuración. Añádelos en la página de configuración, o escribe ~/.informer-mcp.json (o cualquier archivo nombrado por INFORMER_CONFIG_FILE) tú mismo:
{
"administrations": {
"acme": { "label": "ACME BV", "api_key": "...", "security_code": "..." },
"bakkerij": { "label": "Bakkerij de Bol", "api_key": "...", "security_code": "...", "mode": "read-only" }
}
}Con más de una administración configurada, toda herramienta requiere un argumento administration, anunciado como una enumeración de tus alias:
list_sales_invoices({ "administration": "acme", "filter": "open" })Deliberadamente no hay valor por defecto. Contabilizar una factura en el libro mayor del cliente equivocado es el único error que no debe ocurrir en silencio, así que una llamada sin el argumento es rechazada por la validación del esquema antes de que se haga cualquier solicitud HTTP — igual que un alias que nunca configuraste.
list_administrations muestra los alias configurados; pasa verify: true para obtener el nombre de cada empresa desde la API, lo que confirma tanto que las credenciales funcionan como que cada alias apunta a la empresa que crees que es.
Consultar varios clientes a la vez
Las herramientas de solo lectura también aceptan una lista de alias, o "all":
list_sales_invoices({ "administration": "all", "filter": "open", "records": 50 })
list_sales_invoices({ "administration": ["acme", "bakkerij"], "filter": "open" })Las administraciones se consultan de forma concurrente (INFORMER_FANOUT_CONCURRENCY, cuatro a la vez por defecto) y la respuesta se indexa por alias:
{
"administrations": ["acme", "bakkerij"],
"results": {
"acme": { "pagination": { "total": 3 }, "invoices": [ ... ] },
"bakkerij": { "error": "[bakkerij] HTTP 401: Authentication failed" }
}
}Tres propiedades que conviene conocer:
Que un cliente falle no hunde la consulta. Su entrada lleva un
errory el resto sigue devolviendo datos.El presupuesto de respuesta se reparte a partes iguales. Cada administración recibe
INFORMER_MAX_RESPONSE_CHARS / ncaracteres, para que un cliente grande no desplace a los demás; cualquier exceso sobre su parte se devuelve como{ "truncated": true, "partial": ... }.El fan-out es de solo lectura. Las herramientas que escriben, y las descargas de PDF/adjuntos, aceptan un único alias: su esquema ni siquiera ofrece el array ni
"all", y el manejador las rechaza una segunda vez. Crear la misma factura en doce administraciones nunca es un accidente que merezca la pena habilitar.
Una sola administración sigue devolviendo el payload de la API sin envolver, exactamente igual que antes.
Con una sola administración — el caso habitual — nada cambia: establece INFORMER_API_KEY e INFORMER_SECURITY_CODE como siempre y el argumento sigue siendo opcional.
Instalación
git clone https://github.com/vladxyz/informer-mcp.git
cd informer-mcp
npm install # also builds dist/ via the prepare script
npm run setup # opens a local page to enter your API credentialsLa página de configuración se ejecuta en 127.0.0.1, verifica cada clave contra la API y escribe ~/.informer-mcp.json. Consulta Configuración de tus credenciales.
Claude Desktop, como extensión
La vía más sencilla: compila un bundle y ábrelo.
npm run bundle # writes informer-mcp.mcpbEn Claude Desktop ve a Configuración → Extensiones → Configuración avanzada → Instalar extensión… y elige el archivo .mcpb. Lleva sus propias dependencias, así que no hay nada que instalar antes aparte de Node.js 20.
El diálogo de instalación ofrece una clave de API, un código de seguridad y un interruptor de solo lectura. Puedes dejar los tres vacíos: el servidor abrirá entonces su página de configuración la primera vez que se inicie, que es también la única forma de configurar más de una administración.
Configuración → Conectores → Añadir conector personalizado de Claude Desktop es otra cosa: toma la URL de un servidor MCP remoto. Este se ejecuta localmente a través de stdio, así que se instala como extensión y no como conector.
Claude Desktop, manualmente
Edita el archivo de configuración directamente:
macOS |
|
Windows |
|
{
"mcpServers": {
"informer": {
"command": "node",
"args": ["C:\\path\\to\\informer-mcp\\dist\\index.js"]
}
}
}Reinicia Claude Desktop después. En Windows, las barras invertidas en JSON deben duplicarse; las barras normales también funcionan y son más fáciles de leer.
Cualquier otro cliente MCP
El servidor habla MCP a través de stdio, así que todos los clientes lo configuran de la misma manera: un comando y sus argumentos. El bloque anterior funciona tal cual en Claude Code (claude mcp add), Cursor, Zed, o cualquier otra cosa que hable MCP.
Las credenciales provienen de ~/.informer-mcp.json, así que no es necesario repetirlas en la configuración del cliente. Para pasarlas por cliente en su lugar, añade un bloque env con INFORMER_API_KEY e INFORMER_SECURITY_CODE, o apunta INFORMER_CONFIG_FILE a otro lugar.
Añade "--read-only" a args para registrar un servidor que no pueda cambiar nada: consulta
Solo lectura o lectura y escritura. Registrar el mismo servidor dos veces
con dos nombres, uno de solo lectura y otro de lectura y escritura, funciona bien.
stdout lleva el protocolo, así que todo el registro va a stderr: un aviso de una línea al inicio te indica cuántas herramientas se registraron y qué administraciones encontró.
Solo lectura o lectura y escritura
Por defecto, todas las herramientas están disponibles. Para eliminar por completo las herramientas de escritura, inicia el servidor con una opción:
informer-mcp --read-only # only the tools that read
informer-mcp --read-write # the default: create, update and delete tooINFORMER_READ_ONLY=true hace lo mismo, y la opción tiene prioridad sobre la variable; así
puedes registrar el mismo servidor dos veces en un mismo cliente: una vez de solo lectura para las
preguntas cotidianas y otra de lectura y escritura para las sesiones en las que realmente registras algo.
En el modo de solo lectura, las herramientas de escritura no se registran en absoluto: nunca aparecen en la lista de herramientas, por lo que un modelo no tiene nada a lo que recurrir.
Por cada cliente
Las administraciones individuales se pueden fijar en el archivo de configuración, que es lo más útil cuando solo puedes consultar los libros de algunos clientes:
{
"administrations": {
"acme": { "api_key": "...", "security_code": "..." },
"bakkerij": { "api_key": "...", "security_code": "...", "mode": "read-only" }
}
}"read_only": true funciona como abreviatura. La configuración más restrictiva es la que gana:
Servidor | Cliente | Resultado |
| sin especificar | lectura y escritura |
|
| solo lectura |
| sin especificar | solo lectura |
|
| solo lectura — la opción lo restringe todo |
Así, un cliente marcado como de solo lectura nunca puede escribirse por accidente, y una sesión
iniciada con --read-only se mantiene así sin importar lo que diga el archivo de configuración.
Cuando algunas administraciones son de solo escritura y otras no, las herramientas de escritura se
mantienen registradas, pero su enum administration solo ofrece las que son de escritura. Crear
una factura en un cliente de solo lectura se deniega antes de realizar cualquier petición HTTP:
Administration(s) bakkerij are configured as read-only, so this tool cannot change them.
Writable: acme, garage.list_administrations informa del modo efectivo de cada cliente, y el banner de inicio lo resume:
read-write: acme, garage.
Configuración
Variable | Valor por defecto | Descripción |
| — | Clave de API para una sola administración. |
| — | Código de seguridad para esa administración. |
|
| Archivo JSON con varias administraciones. Lo crea |
| — | Mismo JSON en línea, como variable de entorno. Sobrescribe el archivo por alias. |
|
| Alias para el par de |
| — | Nombre legible para ese alias. |
| — |
|
|
| Permite indicar una raíz de API alternativa. |
|
|
|
| (todos) | Lista blanca de etiquetas y/o nombres de herramientas, separadas por comas. |
| (ninguno) | Lista negra que se aplica después de la lista blanca. |
|
| Tiempo límite por petición. |
|
| Número de reintentos para errores 408/429/5xx y de red. |
|
| Los resultados de herramientas más largos se truncan con un aviso. Se reparten equitativamente en una consulta fan-out. |
|
| Cuántas administraciones consulta a la vez una fan-out. |
|
|
|
|
|
|
|
| Máxima antigüedad de la descripción de API en caché antes de una actualización en segundo plano. |
|
| Dónde se guarda en caché la descarga de la API. |
| Documento publicado de Informer | Permite cambiar la descripción de API que se descarga. |
Los filtros aceptan una etiqueta OpenAPI o un nombre de herramienta y se comparan sin distinguir entre mayúsculas, minúsculas ni puntuación:
# read-only access to invoicing data
INFORMER_TOOLS="Sales Invoices,Relations" node dist/index.js --read-only
# everything except deleting attachments
INFORMER_EXCLUDE_TOOLS=delete_sales_invoice_attachment node dist/index.jsUso
Una vez conectado, pide en lenguaje sencillo:
"¿Qué facturas de venta de 2026 están todavía sin pagar?" →
list_sales_invoicesconfilter"Crea una factura en borrador para ACME por 10 horas de consultoría a 125 €." →
get_sales_invoice_optionspara los identificadores válidos de libro mayor, IVA y plantilla, y luegocreate_sales_invoice"Descarga la factura 12345 como PDF en el escritorio." →
get_sales_invoice_pdfconsave_path"Muestra el balance de situación para el periodo 6 de 2026." →
get_balance_report
Convenciones que conviene conocer
Elige la administración explícitamente. Con varios clientes configurados, todas las herramientas aceptan
administración: "<alias>".list_administrationsasigna los alias a las empresas, y las herramientas de solo lectura también aceptan una lista o"all".Las fechas siempre siguen el formato
YYYY-MM-DD.Las herramientas de listado están paginadas con
page(por defecto 1) yrecords(por defecto 20), y devuelven un objetopaginationcontotalypages.Los cuerpos de las peticiones van en un único argumento
body. Los parámetros de ruta y de consulta se quedan en el primer nivel, así queupdate_relationrecibe{ "id": 42, "body": { ... } }.Llama primero a la herramienta
*_optionspara crear documentos.get_sales_invoice_options,get_quotation_optionsy compañía devuelven los identificadores válidos de libro mayor, IVA, plantilla, moneda y condiciones de pago para tu administración.Los informes requieren rangos explícitos.
get_balance_reportnecesitayear_from,year_toyperiod;get_column_balance_reporttambién pide un rango de libro mayor.
PDFs y archivos adjuntos
Informer devuelve los archivos como base64 dentro de JSON. Las herramientas que hacen esto
(get_*_pdf, download_sales_invoice_attachment) aceptan un save_path opcional:
con
save_path— el archivo se decodifica y se escribe en esa ruta, y la herramienta devuelve{ saved_to, filename, bytes, mime_type };sin
save_path— el archivo se devuelve como un recurso MCP en línea con el tipo MIME correcto, lo que en documentos grandes puede resultar caro en contexto.
La subida funciona al revés: upload_sales_invoice_attachment toma
{ filename, file }, donde file es el contenido en base64 (máximo 10 MB; PDF, PNG,
JPEG, GIF, DOC(X), XLS(X)).
Referencia de herramientas
npm run tools imprime esta lista a partir de la especificación actual; npm run tools -- --md
regenera las tablas siguientes.
Además de las herramientas de endpoint, hay tres que entrega el servidor:
Herramienta | Qué hace |
| Muestra las administraciones de cliente configuradas, sus empresas y en cuáles se puede escribir. |
| Abre la página local para añadir, cambiar o eliminar administraciones y sus credenciales. |
| Vuelve a leer la descripción de la API de Informer y actualiza las herramientas. |
Administración
Herramienta | Endpoint | Descripción |
|
| Obtener detalles de la administración |
Relaciones
Herramienta | Endpoint | Descripción |
|
| Obtener una sola relación |
|
| Actualizar una relación |
|
| Obtener una lista de relaciones |
|
| Crear una relación nueva |
Contactos
Herramienta | Endpoint | Descripción |
|
| Obtener un contacto |
|
| Actualizar un contacto |
|
| Crear un nuevo contacto |
Facturas de venta
Herramienta | Endpoint | Descripción |
|
| Obtener una sola factura de ved |
|
| Actualizar una factura |
|
| Obtener una lista de facturas |
|
| Crear una nueva factura |
|
| Obtener opciones de factura |
|
| Obtener el PDF de una factura |
|
| Enviar una factura |
|
| Subir perfil de factura |
|
| Descargar un adjunto de factura |
|
| Eliminar un adjunto de factura |
Facturas de compra
Tool | Endpoint | Descripción |
|
| Obtener una factura de compra individual |
|
| Obtener una lista de facturas de compra |
|
| Crear una nueva factura de compra |
|
| Obtener opciones de factura de compra |
|
| Obtener el PDF de la factura de compra |
Facturas recurrentes
Tool | Endpoint | Descripción |
|
| Obtener una factura recurrente individual |
|
| Actualizar una factura recurrente |
|
| Obtener una lista de facturas recurrentes |
|
| Crear una nueva factura recurrente |
|
| Obtener opciones de factura recurrente |
Pedidos de venta
Tool | Endpoint | Descripción |
|
| Obtener un pedido de venta individual |
|
| Actualizar un pedido de venta |
|
| Obtener una lista de pedidos de venta |
|
| Crear un nuevo pedido de venta |
|
| Obtener opciones de pedido de venta |
|
| Obtener el PDF del pedido de venta |
|
| Enviar un pedido de venta |
Presupuestos
Tool | Endpoint | Descripción |
|
| Obtener un presupuesto individual |
|
| Actualizar un presupuesto |
|
| Obtener una lista de presupuestos |
|
| Crear un nuevo presupuesto |
|
| Obtener opciones de presupuesto |
|
| Obtener el PDF del presupuesto |
|
| Enviar un presupuesto |
Libro de ventas
Tool | Endpoint | Descripción |
|
| Obtener una factura del libro de ventas individual |
|
| Actualizar una factura del libro de ventas |
|
| Obtener una lista de facturas del libro de ventas |
|
| Crear una nueva factura del libro de ventas |
|
| Obtener opciones del libro de ventas |
|
| Obtener el PDF del libro de ventas |
Condiciones de pago
Tool | Endpoint | Descripción |
|
| Obtener todas las condiciones de pago |
Plantillas
Tool | Endpoint | Descripción |
|
| Obtener todas las plantillas |
IVA
Tool | Endpoint | Descripción |
|
| Obtener todas las opciones de IVA |
Libros mayores
Tool | Endpoint | Descripción |
|
| Obtener todas las cuentas del libro mayor |
Centros de coste
Tool | Endpoint | Descripción |
|
| Obtener todas las cuentas de centro de coste |
Divisas
Tool | Endpoint | Descripción |
|
| Obtener todas las divisas |
Diarios
Tool | Endpoint | Descripción |
|
| Obtener todos los diarios |
Tipos de suscripción
Tool | Endpoint | Descripción |
|
| Obtener todos los tipos de suscripción |
Adjuntos
Tool | Endpoint | Descripción |
|
| Obtener todos los adjuntos |
Productos
Tool | Endpoint | Descripción |
|
| Obtener todos los productos |
Recibos
Tool | Endpoint | Descripción |
|
| Obtener un recibo individual |
|
| Actualizar un recibo |
|
| Obtener una lista de recibos |
|
| Crear un nuevo recibo |
Memorándum
Tool | Endpoint | Descripción |
|
| Obtener un asiento de memorándum individual |
|
| Actualizar un asiento de memorándum |
|
| Obtener una lista de asientos de memorándum |
|
| Crear un nuevo asiento de memorándum |
Informes
Tool | Endpoint | Descripción |
|
| Obtener balance de situación |
|
| Obtener balance por columnas |
Nomenclatura de herramientas
Los nombres se derivan del método HTTP y de la ruta, no de la prosa, por lo que se mantienen estables entre actualizaciones de la especificación:
Patrón | Ejemplo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Los endpoints que la tabla de nomenclatura no reconoce recurren a <verbo>_<slug de ruta>, de modo que
una actualización de la especificación nunca produce una herramienta rota.
Mantenerse al día con los cambios de la API
Las herramientas se generan a partir del documento OpenAPI de Informer, así que cuando Informer añade un endpoint, lo único que falta es una copia actualizada de ese documento. El servidor puede obtenerla por sí mismo.
Tres capas, en orden de precedencia:
Una copia descargada, almacenada en caché en
~/.informer-mcp.spec.json.La copia incluida en
openapi/api-docs.json, que se distribuye con el servidor y siempre funciona sin conexión.Ninguna de las dos se acepta a ciegas: una descarga debe poder analizarse como un documento OpenAPI 3 con al menos una operación utilizable, o se rechaza y las herramientas actuales se mantienen. Un portal cautivo o una página de mantenimiento no pueden eliminar tu conjunto de herramientas.
De forma programada
Una vez al día, poco después de iniciarse, el servidor comprueba en segundo plano si hay un documento más reciente.
El arranque nunca se bloquea y un fallo en la comprobación se registra y se ignora.
INFORMER_SPEC_MAX_AGE_HOURS=0 lo desactiva.
Bajo demanda
La herramienta refresh_api_spec hace lo mismo cuando se lo pides, útil cuando falta un
endpoint que esperabas o un argumento se rechaza por desconocido:
"Actualiza la descripción de la API de Informer y dime qué ha cambiado."
{
"adopted": true,
"api_version": "2.0.0",
"endpoints": 49,
"tools": 68,
"changes": {
"added": [{ "tool": "list_projects", "endpoint": "GET /projects" }],
"removed": [],
"changed": [{ "tool": "create_sales_invoice", "endpoint": "POST /invoices/sales",
"notes": ["body now requires: project_id"] }],
"unchanged": 66
},
"note": "The tool list has been updated; no restart is needed."
}Pasa dry_run para ver ese informe sin aplicar nada.
El diff es deliberadamente específico: nombra las herramientas que han aparecido y desaparecido, y
para las que han cambiado dice qué ha cambiado: un argumento nuevo, uno que ya no existe, un
campo que ahora es obligatorio. Esa es la parte que una comparación de rutas a secas pasa por alto, y
suele ser la parte que de otro modo aparecería como un desconcertante 422.
Adoptar un documento actualiza el servidor en ejecución: se registran herramientas nuevas, se eliminan
las retiradas, se vuelven a anunciar las modificadas y se envía una notificación tools/list_changed
para que tu cliente recargue la lista a mitad de sesión.
La copia en el repositorio
npm run update-spec actualiza el documento incluido e informa de qué rutas han entrado y
salido. Ese es el comando que debes ejecutar cuando quieras que el cambio quede confirmado para todos los que
instalen el servidor; refresh_api_spec solo afecta a tu propia máquina.
Recursos
El servidor también expone el propio documento OpenAPI como recurso MCP en
informer://openapi.json, lo que resulta útil cuando quieres que el modelo compruebe una definición
de campo sin adivinar.
Desarrollo
npm install # install + build
npm run setup # enter credentials in the browser
npm run bundle # package as informer-mcp.mcpb for one-click install
npm run dev # run from source with tsx
npm test # vitest
npm run typecheck # tsc --noEmit
npm run build # compile to dist/
npm run tools # print the tool surface
npm run update-spec # re-download openapi/api-docs.json and report added/removed pathsEstructura del proyecto
openapi/api-docs.json vendored OpenAPI 3.0 document — the source of truth
src/openapi.ts spec → operations: tool names, JSON Schema conversion
src/client.ts HTTP client: auth headers, retries, error formatting
src/tools.ts operations → MCP tools, filtering, result formatting
src/server.ts server assembly (tools + openapi resource)
src/spec.ts download, validate, cache and diff the OpenAPI document
src/setup.ts local setup server: verify credentials, write the config file
src/setup-page.ts the HTML it serves
src/index.ts stdio entry point and CLI
manifest.json extension manifest: entry point and install-time settings
scripts/update-spec.mjs refresh the vendored spec
scripts/list-tools.ts print/regenerate the tool reference
scripts/bundle.mjs stage production dependencies and pack the .mcpbAñadir endpoints normalmente no supone ningún cambio de código: el servidor en ejecución los
detecta por sí mismo y npm run update-spec confirma el mismo cambio en la copia incluida. Solo
las formas de URL realmente nuevas necesitan una regla en la tabla RESOURCES de src/openapi.ts;
sin ella, siguen convirtiéndose en herramientas, solo que con un nombre menos descriptivo.
Cómo se convierten los esquemas
OpenAPI 3.0 no es exactamente JSON Schema. De camino a la definición de herramienta MCP:
Las referencias
#/components/schemas/Xse convierten en#/$defs/X, con solo el cierre transitivo que cada operación necesita realmente incluido, de modo que las definiciones de herramienta sigan siendo pequeñas;nullable: truese convierte en una unión["type", "null"];los parámetros de ruta y consulta se convierten en propiedades de nivel superior, los cuerpos de solicitud van bajo
body, yadditionalProperties: falseevita que los errores tipográficos lleguen a la API.
Los argumentos se validan contra ese esquema antes de realizar cualquier llamada HTTP.
Notas de seguridad
Este servidor puede crear, actualizar y eliminar registros contables reales. Comience con
--read-onlysi solo necesita informes, fije clientes individuales con"mode": "read-only"y deje que su cliente MCP solicite aprobación para las herramientas de escritura.Las credenciales de varios clientes en un mismo proceso significan que una llamada mal enrutada toca los libros de otra persona. El argumento
administrationobligatorio, la enumeración de alias conocidos, la restricción de solo lectura en la difusión y el prefijo de alias en cada mensaje de error ([acme] HTTP 422: ...) existen por esa razón. Mantenga el archivo de configuración fuera del control de versiones y legible solo por usted.Las herramientas están anotadas con
readOnlyHint,destructiveHinteidempotentHint, de modo que los clientes que usan esas sugerencias pueden bloquear las riesgosas.No se registra nada en
stdouty las credenciales nunca se reflejan en la salida de las herramientas ni se envían de vuelta a la página de configuración.open_setupdevuelve una URL, nunca una clave: un asistente no tiene forma de leer sus credenciales ni razón para pedírselas en un chat.La descripción de la API se descarga sin credenciales, y un documento que no se analiza como un archivo OpenAPI 3 utilizable se rechaza en lugar de adoptarse.
Licencia
MIT — consulte LICENSE.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP server to interact with the Cuéntica accounting API, allowing users to manage invoices, expenses, income, clients, providers, and bank accounts via natural language.592MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for the Billingo V3 Hungarian invoicing API. Manage invoices, partners, products, spendings, and bank accounts from any MCP client.10MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that wraps the cebelca.biz accounting API, exposing tools for operations like managing partners, invoices, proformas, and fetching PDFs.2
- AlicenseBqualityAmaintenanceRead-only MCP server for self-hosted Manager.io bookkeeping, providing curated GET tools to access accounting data like invoices, balances, and reports.101MIT
Related MCP Connectors
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.
A basic MCP server to operate on the Postman API.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vladxyz/informer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server