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

npm version License: MIT Node.js Glama score

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.

Asking a budget where the money went, and a delete that stops to ask for confirmation

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=1 oculta 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_sync reconstruye el estado de sincronización local cuando @actual-app/api y 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

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, localhost es el contenedor. Tu servidor de Actual no está allí. host.docker.internal (con el indicador --add-host anterior, 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

VariableRequeridaDescripción
ACTUAL_SERVER_URLLa URL de tu servidor de Actual Budget (p. ej., http://localhost:5006)
ACTUAL_PASSWORDContraseña del servidor (configurada en Actual Budget en Settings)
ACTUAL_BUDGET_IDID de sincronización del presupuesto (se encuentra en Settings > Show advanced settings)
ACTUAL_ENCRYPTION_PASSWORDNoSolo si tu archivo de presupuesto está cifrado
ACTUAL_DATA_DIRNoDirectorio de caché (predeterminado: /tmp/actual-budget-mcp-data)
ACTUAL_READ_ONLYNoConfigúralo en 1/true/yes para ejecutar solo lectura. Ver Seguridad

Encontrar tu ID de presupuesto

  1. Abre Actual Budget
  2. Abre Settings: haz clic en la flecha junto al nombre de tu presupuesto, o usa la barra lateral, More, luego Settings
  3. Haz clic en Show advanced settings
  4. 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 nombredelete_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)

HerramientaDescripciónEjemplo de prompt
list_accountsTodas las cuentas con saldos"Muéstrame todas mis cuentas"
get_budget_monthPresupuesto para un mes específico"¿Cómo se ve mi presupuesto de marzo?"
get_transactionsTransacciones con filtros"Muéstrame transacciones de la semana pasada mayores a 5000"
get_category_balanceHistorial de categorías entre meses"¿Cómo ha cambiado mi gasto en comida?"
get_budget_summaryResumen ejecutivo del presupuesto"Dame un resumen del presupuesto de febrero"
get_categoriesTodos los grupos de categorías y categorías"¿Qué categorías tengo?"
get_payeesTodos los beneficiarios en el presupuesto"Lista todos mis beneficiarios"
get_rulesTodas las reglas de transacciones"Muéstrame mis reglas"
balance_historySaldo 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)

HerramientaDescripciónEjemplo de prompt
budget_vs_actualPresupuestado vs. gastado por categoría"¿Estoy por encima del presupuesto en algo este mes?"
spending_projectionPronóstico de gasto a fin de mes"¿Me mantendré dentro del presupuesto este mes?"
category_trendsTendencias de gasto a lo largo del tiempo"¿Cuáles son mis tendencias de gasto de los últimos 6 meses?"
spending_by_categoryDesglose de gastos por categoría"Muéstrame el gasto por categoría de febrero"
monthly_summaryIngresos 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)

HerramientaDescripciónEjemplo de prompt
create_transactionAgregar una nueva transacción"Gasté 500 en comestibles desde Cartera hoy"
create_split_transactionUn cargo dividido en varias categorías"Divide ese cargo de 3,000: 2,000 comestibles, 1,000 hogar"
update_transactionEditar una transacción existente"Cambia el monto de esa transacción a 600"
delete_transactionEliminar una transacción (muestra vista previa primero, ver Seguridad)"Elimina esa transacción de prueba"
update_budget_amountCambiar un monto de presupuesto"Configura mi presupuesto de comida en 15,000 para este mes"
recategorize_transactionMover a otra categoría"Mueve esa transacción a Entretenimiento"
create_transferTransferencia entre cuentas"Transfiere 10,000 de Corriente a Ahorros"
reconcile_currency_residualConciliar el residual acumulado de tipo de cambio"Concilia mi tarjeta USD a 213.82 USD"
run_bank_syncSincronizar 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)

HerramientaDescripciónEjemplo de prompt
create_categoryCrear una nueva categoría"Crea una categoría llamada Gimnasio en Gastos Variables"
update_categoryRenombrar u ocultar una categoría"Renombra Gimnasio a Fitness"
delete_categoryEliminar una categoría (previsualiza primero, ver Seguridad)"Elimina la categoría Fitness"
create_category_groupCrear un nuevo grupo"Crea un grupo de categorías llamado Salud"
update_category_groupRenombrar u ocultar un grupo"Renombra el grupo Salud a Bienestar"
delete_category_groupEliminar 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)

HerramientaDescripciónEjemplo de prompt
create_payeeCrear un nuevo beneficiario"Crea un beneficiario llamado Netflix"
update_payeeRenombrar un beneficiario"Renombra Netflix a Netflix Premium"
delete_payeeEliminar un beneficiario (previsualiza primero, ver Seguridad)"Elimina el beneficiario Netflix Premium"
create_ruleCrear una regla de transacción"Crea una regla: cuando el beneficiario contenga Amazon, establece la categoría a Compras"
delete_ruleEliminar 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)

HerramientaDescripciónEjemplo de prompt
create_accountCrear una cuenta dentro o fuera del presupuesto"Crea una cuenta fuera del presupuesto llamada Inversión Familiar con 10,000"
delete_accountEliminar una cuenta y su historial"Elimina la cuenta ZZ Test"

delete_account necesita 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 con confirm: true y confirm_name establecidos al nombre exacto de la cuenta. Mientras lo rechaza, la herramienta informa isError: 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)

HerramientaDescripciónEjemplo de prompt
repair_syncReparar 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_sync reconstruye ese estado sin tocar los datos del presupuesto. Ten en cuenta que eliminar el ACTUAL_DATA_DIR local 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:

PromptDescripción
monthly-reviewRevisión completa del presupuesto para cualquier mes — gastos vs presupuesto, sobregastos, sugerencias
spending-checkVerificación rápida: ¿vas bien este mes?
spending-patternsAná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:

RecursoURIDescripción
Cuentasactual://accountsTodas las cuentas con saldos
Categoríasactual://categoriesGrupos de categorías y categorías con IDs
Beneficiariosactual://payeesTodos 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ísticaactual-budget-mcpOtros
Fechas en lenguaje natural"el mes pasado", "este mes", "hace 3 meses"Solo YYYY-MM-DD
Resolución de nombresEscribe "Cartera" en lugar de UUIDsRequiere IDs exactos
Formato de salidaTablas alineadas, texto legibleJSON crudo
Mensajes de errorInstrucciones claras sobre cómo solucionarErrores genéricos
Herramientas de análisisPresupuesto vs real, proyecciones, tendenciasNo disponibles
Prompts MCP3 flujos de análisis guiadosLimitados o ninguno
Recursos MCPCuentas, categorías, beneficiarios precargadosNo disponibles
Fechas bilingüesInglés + EspañolSolo inglés
TransferenciasDos lados vinculados, transfer_id coincidente, sin categoría, igual que la appA menudo de un solo lado o mal categorizadas
EliminacionesPrevisualización, luego confirmación explícitaSe ejecutan inmediatamente
Recuperación de desincronizaciónrepair_sync reconstruye el estado de sincronización localReinstalar 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_URL sea correcto
  • Ejecuta npx -y actual-budget-mcp --verify para probar tu conexión

"Autenticación fallida"

  • Tu servidor requiere una contraseña. Establece ACTUAL_PASSWORD en 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_PASSWORD con 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/api hizo referencia al global navigator hasta 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 comando npx predeterminado.
  • 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