mcp-xubio

mcp-xubio

Enables querying Xubio accounting data (clients, invoices, products, balances) through natural language by exposing 52 read-only API endpoints as MCP tools.

Category
访问服务器

README

mcp-xubio

Un servidor MCP que expone la API de contabilidad de Xubio como herramientas para Claude, así podés consultar clientes, facturas, productos y saldos hablando en lenguaje natural en vez de navegar la interfaz web.

¿Sos contador y solo querés instalarlo? Guía paso a paso con capturas y descarga en un clic: https://ignacio-llabot.github.io/mcp-xubio/

Solo lectura. Las 52 herramientas son endpoints GET. Los endpoints de escritura de Xubio crean comprobantes fiscales reales y piden el CAE a la AFIP — esos quedan deliberadamente afuera.

Requisitos

  • Una cuenta de Xubio en el plan PLUS o superior — la API no está disponible en planes menores
  • Para usarlo: Claude Desktop (trae su propio Node — no hay que instalar nada más)
  • Para armar el bundle: Node 18+ (desarrollado sobre 22.19)

Instalación para usuarios finales (contadores) — sin terminal, sin Node

Distribuí el único archivo mcp-xubio.mcpb (se arma más abajo). El usuario:

  1. Hace doble clic en mcp-xubio.mcpb → Claude Desktop abre el diálogo de instalación.
  2. Pega su Client ID y su Secret ID en el formulario (se obtienen en Xubio: Configuración → Integraciones → API de Xubio → Nueva App Cliente — requiere el plan PLUS).
  3. Hace clic en Instalar.

Claude Desktop trae su propio Node.js, así que no hay nada que instalar ni ningún archivo de configuración que editar. Las credenciales van directo al llavero (keychain) del sistema desde el formulario — nunca a un archivo de texto. Si Windows SmartScreen advierte sobre un bundle sin firmar descargado de la web, hacé clic en Más información → Ejecutar de todas formas; alojá el archivo en un lugar de confianza para evitar la advertencia.

Armar el bundle .mcpb (mantenedor, una vez por release)

npm install
npm run bundle     # tsc → dist, después mcpb pack → mcp-xubio.mcpb

manifest.json declara los dos campos de credenciales como el formulario de instalación. El bundle se verifica desempaquetándolo y corriendo dist/index.js de forma autónoma.

Instalación para desarrolladores (Claude Code / CLI)

npm install
npm run build

Credenciales

En Xubio: Configuración → Integraciones → API de Xubio → Nueva App Cliente. Obtenés un Client_id y un Secret_id.

El servidor las lee del entorno y nunca las escribe en disco:

Variable Requerida Significado
XUBIO_CLIENT_ID sí, al momento de llamar Client_id de la app de Xubio
XUBIO_SECRET_ID sí, al momento de llamar Secret_id de la app de Xubio
XUBIO_TOOLS no operationIds separados por coma. Acota el set de herramientas. Vacío = sin filtro.

Las credenciales solo hacen falta cuando una herramienta se llama. El servidor arranca y responde tools/list sin ellas, que es lo que permite que toda la suite de tests corra offline.

Registrar en Claude (CLI)

claude mcp add xubio \
  --env XUBIO_CLIENT_ID=... \
  --env XUBIO_SECRET_ID=... \
  -- node /ruta/absoluta/a/mcp-xubio/dist/index.js

52 herramientas ocupan bastante contexto en cada sesión. Si usás solo algunas, acotá:

--env XUBIO_TOOLS=getClienteBeans,getFacturaVentaBeans,getProductoVentaBeans

En Claude Code, las herramientas MCP se difieren por defecto (tool search): solo se cargan los nombres hasta que Claude las busca, así que el costo de contexto real es mínimo y no hace falta filtrar. En Claude Desktop, filtrar con XUBIO_TOOLS sí reduce lo que se envía.

Qué obtenés

Los nombres de las herramientas son los operationId del spec; las descripciones vienen directo de Xubio:

getClienteBeans                 Obtiene todos los Clientes
getFacturaVentaBeans            Obtiene listado de Facturas de Venta
getAsientoContableManualBeans   Obtiene listado de Asientos Contables Manuales
getEmpresaBean                  Obtiene los datos de Mi Empresa

Listarlas todas:

printf '%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"smoke","version":"0.0.0"}}}' \
  '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
| node dist/index.js \
| node -e "let s='';process.stdin.setEncoding('utf8').on('data',d=>s+=d).on('end',()=>{const r=s.trim().split('\n').map(JSON.parse).find(m=>m.id===2);r.result.tools.forEach(t=>console.log(t.name))})"

En Windows PowerShell, escribí los frames a un archivo y redirigí en vez de pipear — PowerShell 5.1 antepone un BOM UTF-8 al stdin de un comando nativo, lo que corrompe el primer frame.

Prueba en vivo

export XUBIO_CLIENT_ID='...' XUBIO_SECRET_ID='...'
# después llamá getClienteBeans desde cualquier cliente MCP

Fallas esperables que conviene reconocer:

Respuesta Causa
XUBIO_CLIENT_ID / XUBIO_SECRET_ID are not set Al entorno del servidor le faltan. Ojo: un cliente MCP de escritorio no hereda tu shell interactiva.
HTTP 400: {"error":"invalid_client"} Las credenciales están seteadas pero son incorrectas.
HTTP 403 Normalmente, una cuenta por debajo del plan PLUS.

Cómo funciona

src/index.ts tiene ~172 líneas. Las herramientas se generan al arrancar desde un swagger.json incluido en el repo — una herramienta por operación GET, mapeando los tipos de parámetro de Swagger a un esquema Zod. Nada se escribe a mano por endpoint, así que un endpoint nuevo de Xubio aparece simplemente refrescando el spec:

curl -o swagger.json https://xubio.com/API/1.1/swagger.json
npm test

El spec se commitea en vez de descargarse en tiempo de ejecución: la lista de herramientas queda determinística, el servidor no depende de la red al arrancar, y un cambio en la API de Xubio aparece como un diff revisable.

Tests

npm test        # compila, después corre node --test (30 tests, sin framework)
npx tsc --noEmit

Todo es offline — el intercambio de token y las llamadas a la API se testean contra mocks de node:test. Lo único que los mocks no pueden probar es una vuelta completa con credenciales reales; para eso está la prueba en vivo de arriba.

Límites conocidos

Marcados en el código con comentarios, cada uno indicando su camino de mejora:

  • Paginación. /comprobanteVentaBean y /comprobanteCompraBean paginan mediante headers HTTP que Xubio documenta solo en prosa y no declara como parámetros de Swagger, así que el generador no puede verlos. Obtenés una única página sin paginar por llamada.
  • Forma de las respuestas. El spec declara las respuestas de listado como un único objeto, pero la API devuelve un array. El JSON se pasa tal cual, así que el desajuste no cuesta nada — no lo "arregles" validando contra el esquema declarado.
  • Concurrencia. Llamadas iniciales simultáneas pueden generar cada una un token. Es inocuo (todos los tokens son válidos, gana el último) y no amerita un lock hasta que aparezca en la práctica.

Aviso

Proyecto no oficial, hecho por la comunidad. Sin afiliación, respaldo ni soporte de Xubio. "Xubio" y las marcas relacionadas pertenecen a su respectivo dueño. El swagger.json incluido es la propia especificación pública de la API de Xubio, incorporada solo para que la lista de herramientas quede determinística — refrescala desde el endpoint oficial (ver Cómo funciona). Usalo bajo tu propia responsabilidad: accede a tus datos contables reales. Es solo lectura, pero siguen siendo tus datos.

Licencia

MIT — ver LICENSE.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选