actual-budget-mcp
Pregúntale a tu Actual Budget autoalojado a dónde fue el dinero: desgloses de gastos, tendencias por categoría, proyecciones y presupuesto vs real, no solo consultas. También escribe, y cada eliminación muestra una vista previa de lo que eliminará y espera tu confirmación, con un modo de solo lectura opcional que oculta las herramientas de escritura por completo. MIT, en npm y como imagen de Docker.
Documentación
actual-budget-mcp
Habla con tu presupuesto. Un servidor MCP que conecta Actual Budget con Claude: pregunta a dónde fue tu dinero, obtén análisis reales y deja que escriba sin contener la respiración.

Características
- Análisis real, no solo consultas - Proyecciones, tendencias de categorías, presupuesto vs. real y resúmenes mensuales
- Escrituras en las que puedes confiar - Cada eliminación muestra una vista previa de lo que eliminará y espera tu confirmación;
ACTUAL_READ_ONLY=1oculta las herramientas de escritura por completo del modelo (Seguridad) - Multimoneda que sobrevive a la realidad - Divisiones y conciliación de residuales, no solo un símbolo de moneda
- Se recupera de un presupuesto desincronizado -
repair_syncreconstruye el estado de sincronización local cuando@actual-app/apiy tu servidor no coinciden, el fallo que de otro modo deja todas las herramientas con errores - Pregunta sobre tu presupuesto en lenguaje natural - "¿Cuánto gasté en comida este mes?" o "¿Estoy por encima del presupuesto en algo?"
- Crea y gestiona transacciones - Agrega gastos, transferencias y ediciones sin abrir la aplicación
- Gestiona categorías, beneficiarios y reglas - CRUD completo sin abrir la aplicación
- Usa nombres, no IDs - Di "Cartera" en lugar de
a1b2c3d4-..., con sugerencias útiles si hay ambigüedad - Fechas naturales en inglés y español - "last month", "este mes", "hace 3 meses", "yesterday"
- Salida formateada limpia - Tablas alineadas y resúmenes claros, no JSON crudo
- Mensajes de error claros - Si algo está mal, sabrás exactamente qué corregir
¿Funciona con modelos locales?
Sí. Este es un servidor MCP, por lo que funciona con cualquier cliente que hable MCP, y el modelo detrás de ese cliente es asunto del cliente, no de este servidor. Claude Desktop, Claude Code, Cursor y VS Code son los documentados a continuación porque son los que la gente pregunta, pero cualquier cosa que pueda ejecutar un cliente MCP, incluida una configuración local apuntando a Ollama o LM Studio, se comunica con él de la misma manera.
Los datos de tu presupuesto van al modelo que use tu cliente. Si eso te importa, y para mucha gente que ejecuta Actual sí importa, un modelo local los mantiene en tu máquina.
Requisitos previos
- Servidor de Actual Budget en ejecución (local o remoto)
- Node.js 20 o superior (ver Requisito de Node.js)
Inicio rápido
La forma más rápida de empezar: copia esto en Claude Code o Claude Desktop:
Install the actual-budget-mcp MCP server from npm (https://github.com/henfrydls/actual-budget-mcp).
Configure it with these credentials:
- My Actual Budget server: http://localhost:5006
- Password: YOUR_PASSWORD
- Budget ID: YOUR_BUDGET_ID
Claude configurará todo por ti.
Instalación
Opción 1: Claude Code (un comando)
claude mcp add actual-budget-mcp -e ACTUAL_SERVER_URL=http://localhost:5006 -e ACTUAL_PASSWORD=your-password -e ACTUAL_BUDGET_ID=your-budget-id -- npx -y actual-budget-mcp
Opción 2: Claude Desktop
Agrega esto a tu claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"actual-budget-mcp": {
"command": "npx",
"args": ["-y", "actual-budget-mcp"],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}
Opción 3: Cursor
Ve a Cursor Settings > MCP > Add new MCP server y agrega:
{
"mcpServers": {
"actual-budget-mcp": {
"command": "npx",
"args": ["-y", "actual-budget-mcp"],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}
Opción 4: VS Code (GitHub Copilot)
Agrega esto a tu settings.json de VS Code:
{
"mcp": {
"servers": {
"actual-budget-mcp": {
"command": "npx",
"args": ["-y", "actual-budget-mcp"],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}
}
Opción 5: Docker
La imagen habla stdio como cualquier otra opción, por lo que tu cliente inicia el contenedor y es dueño de su ciclo de vida:
{
"mcpServers": {
"actual-budget-mcp": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--add-host=host.docker.internal:host-gateway",
"-v", "actual-budget-mcp-data:/data",
"-e", "ACTUAL_SERVER_URL",
"-e", "ACTUAL_PASSWORD",
"-e", "ACTUAL_BUDGET_ID",
"ghcr.io/henfrydls/actual-budget-mcp:latest"
],
"env": {
"ACTUAL_SERVER_URL": "http://host.docker.internal:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}
Dos cosas que muerden a todos una vez:
- Dentro del contenedor,
localhostes el contenedor. Tu servidor de Actual no está allí.host.docker.internal(con el indicador--add-hostanterior, que es lo que hace que se resuelva en Linux) llega al host en su lugar. - Monta
/data. Ese es el caché del presupuesto. Sin un volumen, cada inicio vuelve a descargar todo tu presupuesto desde el servidor.
Opción 6: Desde el código fuente (para contribuidores)
git clone https://github.com/henfrydls/actual-budget-mcp.git
cd actual-budget-mcp
npm install
cp .env.example .env # Edit with your credentials
npm run build
npm run test:connection # Verify it works
Verifica tu configuración
--verify lee el entorno del shell en el que lo ejecutas, y las opciones de instalación anteriores
ponen tus credenciales en la configuración de tu cliente MCP en su lugar. Así que configúralas para el
comando:
ACTUAL_SERVER_URL=http://localhost:5006 \
ACTUAL_PASSWORD=your-password \
ACTUAL_BUDGET_ID=your-sync-id \
npx -y actual-budget-mcp --verify
Se conecta, descarga el presupuesto e imprime cuántas cuentas y grupos de categorías encontró. Ejecutarlo sin esas variables las reporta como faltantes, lo cual se trata del comando, no de tu instalación.
Después de cambiar la configuración de tu cliente, reinícialo. Claude Desktop, Claude Code y los demás leen la configuración de MCP al inicio y no recogerán una edición hasta que se reinicien.
Configuración
| Variable | Requerida | Descripción |
|---|---|---|
ACTUAL_SERVER_URL | Sí | La URL de tu servidor de Actual Budget (p. ej., http://localhost:5006) |
ACTUAL_PASSWORD | Sí | Contraseña del servidor (configurada en Actual Budget en Settings) |
ACTUAL_BUDGET_ID | Sí | ID de sincronización del presupuesto (se encuentra en Settings > Show advanced settings) |
ACTUAL_ENCRYPTION_PASSWORD | No | Solo si tu archivo de presupuesto está cifrado |
ACTUAL_DATA_DIR | No | Directorio de caché (predeterminado: /tmp/actual-budget-mcp-data) |
ACTUAL_READ_ONLY | No | Configúralo en 1/true/yes para ejecutar solo lectura. Ver Seguridad |
Encontrar tu ID de presupuesto
- Abre Actual Budget
- Abre Settings: haz clic en la flecha junto al nombre de tu presupuesto, o usa la barra lateral, More, luego Settings
- Haz clic en Show advanced settings
- Copia el Sync ID
Toma el Sync ID, no el Budget ID. Actual muestra ambos, uno debajo del otro, y ambos
son UUIDs. ACTUAL_BUDGET_ID quiere el etiquetado como Sync ID, a pesar del nombre de la
variable. Usar el otro te da Budget "..." not found on the server, que
se lee como si lo hubieras escrito mal cuando el valor simplemente era el campo incorrecto.
Si Sync ID muestra (none), ese presupuesto nunca se ha sincronizado con un servidor. Este servidor
se comunica con Actual a través de su servidor de sincronización, por lo que un presupuesto solo local no se puede usar hasta que
lo sincronices.
Seguridad
Dos cosas protegen tu presupuesto de un agente que actúa sobre una instrucción vaga.
Las eliminaciones muestran vista previa antes de eliminar
Cada herramienta de eliminación se niega a destruir cualquier cosa en la primera llamada. Reporta lo que se perdería y se detiene allí. Eliminar requiere una segunda llamada deliberada:
delete_category(category: "Groceries")
→ preview: transactions affected, budget and rollover warning. Nothing deleted.
delete_category(category: "Groceries", confirm: true, confirm_name: "Groceries")
→ deleted
Las herramientas que encuentran su objetivo por nombre — delete_account, delete_category,
delete_category_group, delete_payee — también requieren confirm_name con el
nombre exacto. Ahí es donde realmente ocurre eliminar lo incorrecto: pedir
"Adicionales" puede resolverse a "Ingresos Adicionales". Las herramientas que toman un id exacto
— delete_transaction, delete_rule — solo necesitan confirm: true.
Modo solo lectura
Configura ACTUAL_READ_ONLY=1 y el servidor expone solo las 15 herramientas de lectura, análisis y
reparación. Las herramientas de escritura no están registradas en absoluto, por lo que nunca
aparecen en el descubrimiento de herramientas: un agente no puede ser convencido de llamar algo que
no puede ver.
repair_sync permanece disponible a propósito: repara el estado de sincronización en lugar de
datos del presupuesto, y ocultarlo dejaría un presupuesto desincronizado sin forma de recuperarse.
Las escrituras están habilitadas por defecto. El modo solo lectura es opcional.
Herramientas (37)
Lectura (9)
| Herramienta | Descripción | Ejemplo de prompt |
|---|---|---|
list_accounts | Todas las cuentas con saldos | "Muéstrame todas mis cuentas" |
get_budget_month | Presupuesto para un mes específico | "¿Cómo se ve mi presupuesto de marzo?" |
get_transactions | Transacciones con filtros | "Muéstrame transacciones de la semana pasada mayores a 5000" |
get_category_balance | Historial de categorías entre meses | "¿Cómo ha cambiado mi gasto en comida?" |
get_budget_summary | Resumen ejecutivo del presupuesto | "Dame un resumen del presupuesto de febrero" |
get_categories | Todos los grupos de categorías y categorías | "¿Qué categorías tengo?" |
get_payees | Todos los beneficiarios en el presupuesto | "Lista todos mis beneficiarios" |
get_rules | Todas las reglas de transacciones | "Muéstrame mis reglas" |
balance_history | Saldo de cuenta a lo largo del tiempo | "Muestra el historial de saldo de mi cuenta corriente" |
Parámetros
get_budget_month - month (opcional): YYYY-MM o lenguaje natural ("this month", "last month", "enero 2025")
get_transactions - account (opcional): nombre de cuenta | start_date / end_date (opcional): YYYY-MM-DD o lenguaje natural | category (opcional): nombre de categoría | payee (opcional): nombre de beneficiario | min_amount / max_amount (opcional): filtrar por monto | limit (opcional, predeterminado 50)
get_category_balance - category (requerido): nombre de categoría o ID | months (opcional, predeterminado 3): meses a mirar hacia atrás
get_budget_summary - month (opcional): YYYY-MM o lenguaje natural
balance_history - account (requerido): nombre de cuenta o ID | start_date (opcional, predeterminado hace 3 meses) | end_date (opcional, predeterminado hoy)
Análisis (5)
| Herramienta | Descripción | Ejemplo de prompt |
|---|---|---|
budget_vs_actual | Presupuestado vs. gastado por categoría | "¿Estoy por encima del presupuesto en algo este mes?" |
spending_projection | Pronóstico de gasto a fin de mes | "¿Me mantendré dentro del presupuesto este mes?" |
category_trends | Tendencias de gasto a lo largo del tiempo | "¿Cuáles son mis tendencias de gasto de los últimos 6 meses?" |
spending_by_category | Desglose de gastos por categoría | "Muéstrame el gasto por categoría de febrero" |
monthly_summary | Ingresos vs. gastos vs. ahorros | "¿Cómo han estado mis finanzas los últimos 3 meses?" |
Parámetros
budget_vs_actual - month (opcional): YYYY-MM o lenguaje natural | group (opcional): filtrar por grupo de categorías
spending_projection - month (opcional): YYYY-MM o lenguaje natural
category_trends - category (opcional): categoría específica o el mayor gasto si se omite | months (opcional, predeterminado 6)
spending_by_category - start_date / end_date (opcional): rango de fechas | include_income (opcional, predeterminado false) | limit (opcional, predeterminado 20)
monthly_summary - months (opcional, predeterminado 3): número de meses a mostrar
Escritura — Transacciones (9)
| Herramienta | Descripción | Ejemplo de prompt |
|---|---|---|
create_transaction | Agregar una nueva transacción | "Gasté 500 en comestibles desde Cartera hoy" |
create_split_transaction | Un cargo dividido en varias categorías | "Divide ese cargo de 3,000: 2,000 comestibles, 1,000 hogar" |
update_transaction | Editar una transacción existente | "Cambia el monto de esa transacción a 600" |
delete_transaction | Eliminar una transacción (muestra vista previa primero, ver Seguridad) | "Elimina esa transacción de prueba" |
update_budget_amount | Cambiar un monto de presupuesto | "Configura mi presupuesto de comida en 15,000 para este mes" |
recategorize_transaction | Mover a otra categoría | "Mueve esa transacción a Entretenimiento" |
create_transfer | Transferencia entre cuentas | "Transfiere 10,000 de Corriente a Ahorros" |
reconcile_currency_residual | Conciliar el residual acumulado de tipo de cambio | "Concilia mi tarjeta USD a 213.82 USD" |
run_bank_sync | Sincronizar con bancos vinculados | "Sincroniza mis transacciones bancarias" |
Parámetros
create_transaction - account (requerido): nombre de cuenta | amount (requerido): negativo para gastos, positivo para ingresos | payee (opcional) | category (opcional) | date (opcional) | notes (opcional) | cleared (opcional)
update_transaction - transaction_id (requerido) | amount, payee, category, date, notes, cleared (todos opcionales)
delete_transaction - transaction_id (requerido)
update_budget_amount - category (requerido) | amount (requerido) | month (opcional)
recategorize_transaction - transaction_id (requerido) | category (requerido)
create_transfer - from_account (requerido) | to_account (requerido) | amount (requerido) | date (opcional) | notes (opcional)
create_split_transaction - account (obligatorio) | amount (obligatorio): total, debe ser igual a la suma de las divisiones | splits (obligatorio): dos o más {category, amount, notes} | payee, date, notes, cleared (todos opcionales)
reconcile_currency_residual - account (obligatorio) | category (obligatorio): dónde contabilizar el ajuste | target_balance (opcional, por defecto 0) | payee, date, notes (todos opcionales)
run_bank_sync - account (opcional): sincronizar una cuenta específica o todas si se omite
Escritura — Categorías (6)
| Herramienta | Descripción | Ejemplo de prompt |
|---|---|---|
create_category | Crear una nueva categoría | "Crea una categoría llamada Gimnasio en Gastos Variables" |
update_category | Renombrar u ocultar una categoría | "Renombra Gimnasio a Fitness" |
delete_category | Eliminar una categoría (previsualiza primero, ver Seguridad) | "Elimina la categoría Fitness" |
create_category_group | Crear un nuevo grupo | "Crea un grupo de categorías llamado Salud" |
update_category_group | Renombrar u ocultar un grupo | "Renombra el grupo Salud a Bienestar" |
delete_category_group | Eliminar un grupo (previsualiza primero, ver Seguridad) | "Elimina el grupo Bienestar" |
Parámetros
create_category - name (obligatorio) | group (obligatorio): nombre o ID del grupo
update_category - category (obligatorio): nombre o ID | name (opcional): nuevo nombre | hidden (opcional): verdadero/falso
delete_category - category (obligatorio) | transfer_to (opcional): categoría a la que mover las transacciones | confirm + confirm_name (obligatorio para eliminar)
create_category_group - name (obligatorio)
update_category_group - group (obligatorio): nombre o ID | name (opcional): nuevo nombre | hidden (opcional): verdadero/falso
delete_category_group - group (obligatorio) | transfer_to (obligatorio): categoría para transacciones huérfanas | confirm + confirm_name (obligatorio para eliminar)
Escritura — Beneficiarios y Reglas (5)
| Herramienta | Descripción | Ejemplo de prompt |
|---|---|---|
create_payee | Crear un nuevo beneficiario | "Crea un beneficiario llamado Netflix" |
update_payee | Renombrar un beneficiario | "Renombra Netflix a Netflix Premium" |
delete_payee | Eliminar un beneficiario (previsualiza primero, ver Seguridad) | "Elimina el beneficiario Netflix Premium" |
create_rule | Crear una regla de transacción | "Crea una regla: cuando el beneficiario contenga Amazon, establece la categoría a Compras" |
delete_rule | Eliminar una regla (previsualiza primero, ver Seguridad) | "Elimina esa regla" |
Parámetros
create_payee - name (obligatorio)
update_payee - payee (obligatorio): nombre o ID | name (obligatorio): nuevo nombre
delete_payee - payee (obligatorio): nombre o ID | confirm + confirm_name (obligatorio para eliminar)
create_rule - condition_field (obligatorio): beneficiario, categoría, monto, notas | condition_op (obligatorio): es, contiene, unoDe, mayorQue, menorQue, etc. | condition_value (obligatorio) | action_field (obligatorio): categoría, beneficiario, notas | action_value (obligatorio) | stage (opcional)
delete_rule - rule_id (obligatorio) | confirm (obligatorio para eliminar)
Escritura — Cuentas (2)
| Herramienta | Descripción | Ejemplo de prompt |
|---|---|---|
create_account | Crear una cuenta dentro o fuera del presupuesto | "Crea una cuenta fuera del presupuesto llamada Inversión Familiar con 10,000" |
delete_account | Eliminar una cuenta y su historial | "Elimina la cuenta ZZ Test" |
delete_accountnecesita dos claves. Destruye todo el historial de transacciones de la cuenta, por lo que una sola llamada nunca elimina. La primera llamada solo previsualiza lo que se perdería (nombre, saldo, número de transacciones) y sugiere cerrar la cuenta en su lugar — cerrarla la retira mientras conserva su historial. Para eliminar realmente, llama de nuevo conconfirm: trueyconfirm_nameestablecidos al nombre exacto de la cuenta. Mientras lo rechaza, la herramienta informaisError: true, por lo que una solicitud de confirmación nunca se confunde con una eliminación completada.
Parámetros
create_account - name (obligatorio) | offBudget (opcional, por defecto falso) | initialBalance (opcional): monto en formato humano, crea la transacción "Saldo Inicial". (Actual modela las cuentas solo como dentro/fuera del presupuesto, por lo que no hay type de cuenta.)
delete_account - account (obligatorio): nombre o ID | confirm (obligatorio para eliminar): debe ser true | confirm_name (obligatorio para eliminar): el nombre exacto de la cuenta
Mantenimiento (1)
| Herramienta | Descripción | Ejemplo de prompt |
|---|---|---|
repair_sync | Reparar un presupuesto desincronizado | "Repara la sincronización, todo está fallando" |
Si las herramientas comienzan a fallar con un error de sincronización, el estado de sincronización del presupuesto es inconsistente con el servidor.
repair_syncreconstruye ese estado sin tocar los datos del presupuesto. Ten en cuenta que eliminar elACTUAL_DATA_DIRlocal no soluciona esto — la inconsistencia está en el estado de sincronización, no en la caché.
Parámetros
repair_sync - sin parámetros
Prompts
Plantillas de prompts integradas que guían a Claude a través de análisis financieros de varios pasos:
| Prompt | Descripción |
|---|---|
monthly-review | Revisión completa del presupuesto para cualquier mes — gastos vs presupuesto, sobregastos, sugerencias |
spending-check | Verificación rápida: ¿vas bien este mes? |
spending-patterns | Análisis profundo de tendencias y patrones de gasto durante varios meses |
Úsalos en Claude Desktop haciendo clic en el ícono de prompt, o en Claude Code pidiéndole a Claude que los use.
Recursos
Datos precargados a los que Claude puede hacer referencia sin llamar a herramientas:
| Recurso | URI | Descripción |
|---|---|---|
| Cuentas | actual://accounts | Todas las cuentas con saldos |
| Categorías | actual://categories | Grupos de categorías y categorías con IDs |
| Beneficiarios | actual://payees | Todos los beneficiarios ordenados alfabéticamente |
Ejemplos de Uso
Aquí tienes prompts reales que puedes usar:
"How much did I spend in February?"
"Show me my top 5 spending categories this month"
"Am I over budget on anything?"
"I spent 1,200 on electricity from my BHD account yesterday"
"What's my savings rate this month?"
"Show me all transactions from Cartera in the last 30 days"
"Transfer 5,000 from Checking to Savings"
"What are my spending trends for food over the last 6 months?"
"Create a category called Gym in Gastos Variables"
"Rename the Gym category to Fitness"
"Create a rule: when payee is Netflix, set category to Suscripciones"
"How have my finances been the last 3 months?"
¿En qué se diferencia?
Comparado con otros servidores MCP de Actual Budget:
| Característica | actual-budget-mcp | Otros |
|---|---|---|
| Fechas en lenguaje natural | "el mes pasado", "este mes", "hace 3 meses" | Solo YYYY-MM-DD |
| Resolución de nombres | Escribe "Cartera" en lugar de UUIDs | Requiere IDs exactos |
| Formato de salida | Tablas alineadas, texto legible | JSON crudo |
| Mensajes de error | Instrucciones claras sobre cómo solucionar | Errores genéricos |
| Herramientas de análisis | Presupuesto vs real, proyecciones, tendencias | No disponibles |
| Prompts MCP | 3 flujos de análisis guiados | Limitados o ninguno |
| Recursos MCP | Cuentas, categorías, beneficiarios precargados | No disponibles |
| Fechas bilingües | Inglés + Español | Solo inglés |
| Transferencias | Dos lados vinculados, transfer_id coincidente, sin categoría, igual que la app | A menudo de un solo lado o mal categorizadas |
| Eliminaciones | Previsualización, luego confirmación explícita | Se ejecutan inmediatamente |
| Recuperación de desincronización | repair_sync reconstruye el estado de sincronización local | Reinstalar y esperar |
| Versión de API | @actual-app/api 26.x (actual) | A menudo desactualizada |
Seguridad
- Este servidor se conecta a tu instancia de Actual Budget usando las credenciales que proporcionas
- Las credenciales se pasan como variables de entorno y nunca se almacenan en el servidor MCP
- Toda la comunicación con tu servidor de Actual Budget ocurre localmente (o con tu servidor autoalojado)
- El servidor solo accede a los datos del presupuesto a través de la biblioteca oficial
@actual-app/api - No se envían datos a terceros
Solución de Problemas
¿Atascado en algo que no aparece aquí? Cuéntame qué te ha bloqueado. Una frase es suficiente, y una configuración fallida se ve idéntica a ninguna configuración desde mi lado.
"No se pudo conectar al servidor de Actual Budget"
- Asegúrate de que Actual Budget esté en ejecución (abre la app o inicia el servidor)
- Verifica que
ACTUAL_SERVER_URLsea correcto - Ejecuta
npx -y actual-budget-mcp --verifypara probar tu conexión
"Autenticación fallida"
- Tu servidor requiere una contraseña. Establece
ACTUAL_PASSWORDen tu configuración - Si olvidaste la contraseña, restablécela en Actual Budget en Configuración > Servidor
"Presupuesto no encontrado"
- Verifica tu
ACTUAL_BUDGET_ID. Encuéntralo en Configuración > Mostrar configuración avanzada > ID de sincronización
"El archivo de presupuesto está cifrado"
- Establece
ACTUAL_ENCRYPTION_PASSWORDcon tu contraseña de cifrado
"Nombre ambiguo: coincide con X, Y"
- Sé más específico. En lugar de "BHD", intenta "BHD Nómina" o "BHD Mi País"
Requisito de Node.js
"ReferenceError: navigator is not defined"
@actual-app/apihizo referencia al globalnavigatorhasta la versión 26.6. Ese global solo existe en Node.js 21+, por lo que importar la biblioteca en Node.js 20 lanzaba un error antes de que el servidor pudiera iniciarse. La versión 26.8 eliminó la referencia, y este servidor ha soportado Node.js 20 desde la versión 0.8.1.- Solución: Actualiza a actual-budget-mcp 0.8.1 o posterior, o ejecuta Node.js 22.
Gestores de Versiones de Node (fnm, nvm, volta)
El servidor MCP muestra "Servidor desconectado" en Claude Desktop
- Claude Desktop no carga tu perfil de shell (
.bashrc,.zshrc), por lo que los gestores de versiones como fnm, nvm y volta no funcionarán con el comandonpxpredeterminado. - Solución: Usa la ruta absoluta a node en tu configuración. Encuéntrala con:
readlink -f $(which node)
Luego actualiza tu claude_desktop_config.json:
{
"mcpServers": {
"actual-budget-mcp": {
"command": "/home/user/.local/share/fnm/node-versions/v22.22.1/installation/bin/node",
"args": ["/path/to/actual-budget-mcp/dist/index.js"],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}
Alternativamente, crea un script contenedor mcp-wrapper.sh:
#!/bin/bash
export PATH="$HOME/.local/share/fnm/node-versions/v22.22.1/installation/bin:$PATH"
exec npx -y actual-budget-mcp "$@"
Luego úsalo en tu configuración:
{
"mcpServers": {
"actual-budget-mcp": {
"command": "/path/to/mcp-wrapper.sh"
}
}
}
Contribuciones
¡Las contribuciones son bienvenidas! Por favor, abre un issue o envía un pull request.
git clone https://github.com/henfrydls/actual-budget-mcp.git
cd actual-budget-mcp
npm install
npm run build
npm test # Run unit tests
npm run test:connection # Needs .env configured
Licencia
MIT - DLSLabs