actual-budget-mcp

Pergunte ao seu Actual Budget auto-hospedado para onde o dinheiro foi: detalhamentos de gastos, tendências por categoria, projeções e orçamento vs real, não apenas consultas. Ele também escreve, e cada exclusão mostra uma prévia do que será removido e aguarda sua confirmação, com um modo somente leitura opcional que oculta completamente as ferramentas de escrita. MIT, no npm e como imagem Docker.

Documentação

actual-budget-mcp

npm version License: MIT Node.js Glama score

Converse com seu orçamento. Um servidor MCP que conecta o Actual Budget ao Claude — pergunte para onde o dinheiro foi, receba análises reais e deixe-o escrever sem prender a respiração.

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

Recursos

  • Análise real, não apenas consultas - Projeções, tendências de categorias, orçado vs. real e resumos mensais
  • Escritas em que você pode confiar - Cada exclusão mostra uma prévia do que será removido e aguarda sua confirmação; ACTUAL_READ_ONLY=1 oculta as ferramentas de escrita do modelo por completo (Segurança)
  • Multimoeda que sobrevive à realidade - Divisões e reconciliação de resíduos, não apenas um símbolo de moeda
  • Recupera-se de um orçamento dessincronizado - repair_sync reconstrói o estado de sincronização local quando @actual-app/api e seu servidor discordam, a falha que, de outra forma, deixa todas as ferramentas com erro
  • Pergunte sobre seu orçamento em linguagem natural - "Quanto gastei com comida este mês?" ou "Estou estourando o orçamento em algo?"
  • Crie e gerencie transações - Adicione despesas, transferências e edições sem abrir o aplicativo
  • Gerencie categorias, beneficiários e regras - CRUD completo sem abrir o aplicativo
  • Use nomes, não IDs - Diga "Cartera" em vez de a1b2c3d4-..., com sugestões úteis em caso de ambiguidade
  • Datas naturais em inglês e espanhol - "last month", "este mes", "hace 3 meses", "yesterday"
  • Saída formatada e limpa - Tabelas alinhadas e resumos claros, não JSON bruto
  • Mensagens de erro claras - Se algo estiver errado, você saberá exatamente o que corrigir

Funciona com modelos locais?

Sim. Este é um servidor MCP, então funciona com qualquer cliente que fale MCP, e o modelo por trás desse cliente é problema do cliente, não deste servidor. Claude Desktop, Claude Code, Cursor e VS Code são os documentados abaixo porque são os mais mencionados pelas pessoas, mas qualquer coisa que possa executar um cliente MCP, incluindo uma configuração local apontando para Ollama ou LM Studio, conversa com ele da mesma forma.

Seus dados de orçamento vão para o modelo que seu cliente usar. Se isso importa para você, e para muitas pessoas que usam Actual isso importa, um modelo local mantém tudo na sua máquina.

Pré-requisitos

Início Rápido

A maneira mais rápida de começar - copie isto no Claude Code ou 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

O Claude configurará tudo para você.

Instalação

Opção 1: Claude Code (um 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

Opção 2: Claude Desktop

Adicione isto ao seu 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"
      }
    }
  }
}

Opção 3: Cursor

Vá para Cursor Settings > MCP > Add new MCP server e adicione:

{
  "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"
      }
    }
  }
}

Opção 4: VS Code (GitHub Copilot)

Adicione isto ao seu settings.json do 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"
        }
      }
    }
  }
}

Opção 5: Docker

A imagem fala stdio como todas as outras opções, então seu cliente inicia o contêiner e é dono do seu 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"
      }
    }
  }
}

Duas coisas que pegam todo mundo uma vez:

  • Dentro do contêiner, localhost é o contêiner. Seu servidor Actual não está lá. host.docker.internal (com a flag --add-host acima, que é o que faz ele resolver no Linux) alcança o host em vez disso.
  • Monte /data. Esse é o cache do orçamento. Sem um volume, a cada início o orçamento inteiro é baixado novamente do servidor.

Opção 6: A partir do código-fonte (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

Verifique sua configuração

--verify lê o ambiente do shell em que você o executa, e as opções de instalação acima colocam suas credenciais na configuração do seu cliente MCP. Então defina-as para o comando:

ACTUAL_SERVER_URL=http://localhost:5006 \
ACTUAL_PASSWORD=your-password \
ACTUAL_BUDGET_ID=your-sync-id \
npx -y actual-budget-mcp --verify

Ele conecta, baixa o orçamento e imprime quantas contas e grupos de categorias encontrou. Executá-lo sem essas variáveis as reporta como ausentes, o que diz respeito ao comando, não à sua instalação.

Após alterar a configuração do seu cliente, reinicie o cliente. Claude Desktop, Claude Code e os demais leem a configuração MCP na inicialização e não detectarão uma edição até serem reiniciados.

Configuração

VariávelObrigatóriaDescrição
ACTUAL_SERVER_URLSimURL do seu servidor Actual Budget (ex.: http://localhost:5006)
ACTUAL_PASSWORDSimSenha do servidor (definida no Actual Budget em Configurações)
ACTUAL_BUDGET_IDSimID de Sincronização do Orçamento (encontrado em Configurações > Mostrar configurações avançadas)
ACTUAL_ENCRYPTION_PASSWORDNãoApenas se seu arquivo de orçamento for criptografado
ACTUAL_DATA_DIRNãoDiretório de cache (padrão: /tmp/actual-budget-mcp-data)
ACTUAL_READ_ONLYNãoDefina como 1/true/yes para executar somente leitura. Veja Segurança

Encontrando seu ID de Orçamento

  1. Abra o Actual Budget
  2. Abra Configurações: clique na seta ao lado do nome do seu orçamento, ou use a barra lateral, Mais, depois Configurações
  3. Clique em Mostrar configurações avançadas
  4. Copie o ID de Sincronização

Use o ID de Sincronização, não o ID do Orçamento. O Actual mostra ambos, um abaixo do outro, e ambos são UUIDs. ACTUAL_BUDGET_ID quer o rotulado como ID de Sincronização, apesar do nome da variável. Usar o outro resulta em Budget "..." not found on the server, que parece erro de digitação quando o valor era simplesmente o campo errado.

Se o ID de Sincronização mostrar (none), esse orçamento nunca foi sincronizado com um servidor. Este servidor fala com o Actual através do servidor de sincronização, então um orçamento apenas local não pode ser usado até que você o sincronize.

Segurança

Duas coisas protegem seu orçamento de um agente agindo com base em uma instrução vaga.

Exclusões mostram prévia antes de excluir

Toda ferramenta de exclusão se recusa a destruir qualquer coisa na primeira chamada. Ela relata o que seria perdido e para por aí. Excluir exige uma segunda chamada deliberada:

delete_category(category: "Groceries")
  → preview: transactions affected, budget and rollover warning. Nothing deleted.

delete_category(category: "Groceries", confirm: true, confirm_name: "Groceries")
  → deleted

Ferramentas que encontram seu alvo por nomedelete_account, delete_category, delete_category_group, delete_payee — também exigem confirm_name com o nome exato. É aí que excluir a coisa errada realmente acontece: pedir "Adicionales" pode resolver para "Ingresos Adicionales". Ferramentas que usam um id exato — delete_transaction, delete_rule — precisam apenas de confirm: true.

Modo somente leitura

Defina ACTUAL_READ_ONLY=1 e o servidor expõe apenas as 15 ferramentas de leitura, análise e reparo. As ferramentas de escrita não são registradas de forma alguma, então nunca aparecem na descoberta de ferramentas — um agente não pode ser convencido a chamar algo que não consegue ver.

repair_sync permanece disponível de propósito: ela repara o estado de sincronização em vez dos dados do orçamento, e ocultá-la deixaria um orçamento dessincronizado sem forma de recuperação.

Escritas são habilitadas por padrão. Somente leitura é opcional.

Ferramentas (37)

Leitura (9)

FerramentaDescriçãoExemplo de prompt
list_accountsTodas as contas com saldos"Mostre todas as minhas contas"
get_budget_monthOrçamento para um mês específico"Como está meu orçamento de março?"
get_transactionsTransações com filtros"Mostre transações da semana passada acima de 5000"
get_category_balanceHistórico de categorias entre meses"Como mudou meu gasto com comida?"
get_budget_summaryVisão executiva do orçamento"Dê um resumo do orçamento de fevereiro"
get_categoriesTodos os grupos de categorias e categorias"Quais categorias eu tenho?"
get_payeesTodos os beneficiários no orçamento"Liste todos os meus beneficiários"
get_rulesTodas as regras de transação"Mostre minhas regras"
balance_historySaldo da conta ao longo do tempo"Mostre o histórico de saldo da minha conta corrente"
Parâmetros

get_budget_month - month (opcional): AAAA-MM ou linguagem natural ("este mês", "mês passado", "enero 2025")

get_transactions - account (opcional): nome da conta | start_date / end_date (opcional): AAAA-MM-DD ou linguagem natural | category (opcional): nome da categoria | payee (opcional): nome do beneficiário | min_amount / max_amount (opcional): filtrar por valor | limit (opcional, padrão 50)

get_category_balance - category (obrigatório): nome ou ID da categoria | months (opcional, padrão 3): meses para olhar para trás

get_budget_summary - month (opcional): AAAA-MM ou linguagem natural

balance_history - account (obrigatório): nome ou ID da conta | start_date (opcional, padrão 3 meses atrás) | end_date (opcional, padrão hoje)

Análise (5)

FerramentaDescriçãoExemplo de prompt
budget_vs_actualOrçado vs. gasto por categoria"Estou estourando o orçamento em algo este mês?"
spending_projectionPrevisão de gastos até o fim do mês"Vou ficar dentro do orçamento este mês?"
category_trendsTendências de gastos ao longo do tempo"Quais são minhas tendências de gastos nos últimos 6 meses?"
spending_by_categoryDistribuição de gastos por categoria"Mostre gastos por categoria em fevereiro"
monthly_summaryReceitas vs. despesas vs. poupança"Como estão minhas finanças nos últimos 3 meses?"
Parâmetros

budget_vs_actual - month (opcional): AAAA-MM ou linguagem natural | group (opcional): filtrar por grupo de categorias

spending_projection - month (opcional): AAAA-MM ou linguagem natural

category_trends - category (opcional): categoria específica ou principais gastos se omitido | months (opcional, padrão 6)

spending_by_category - start_date / end_date (opcional): intervalo de datas | include_income (opcional, padrão false) | limit (opcional, padrão 20)

monthly_summary - months (opcional, padrão 3): número de meses a mostrar

Escrita — Transações (9)

FerramentaDescriçãoExemplo de prompt
create_transactionAdicionar uma nova transação"Gastei 500 em compras no Cartera hoje"
create_split_transactionUma cobrança dividida em várias categorias"Divida essa cobrança de 3.000: 2.000 compras, 1.000 casa"
update_transactionEditar uma transação existente"Mude o valor daquela transação para 600"
delete_transactionRemover uma transação (mostra prévia primeiro, veja Segurança)"Exclua aquela transação de teste"
update_budget_amountAlterar um valor de orçamento"Defina meu orçamento de comida para 15.000 este mês"
recategorize_transactionMover para outra categoria"Mova aquela transação para Entretenimento"
create_transferTransferência entre contas"Transfira 10.000 da Conta Corrente para a Poupança"
reconcile_currency_residualConciliar resíduo acumulado de taxa de câmbio"Concilie meu cartão USD em 213,82 USD"
run_bank_syncSincronizar com bancos vinculados"Sincronize minhas transações bancárias"
Parâmetros

create_transaction - account (obrigatório): nome da conta | amount (obrigatório): negativo para despesas, positivo para receitas | payee (opcional) | category (opcional) | date (opcional) | notes (opcional) | cleared (opcional)

update_transaction - transaction_id (obrigatório) | amount, payee, category, date, notes, cleared (todos opcionais)

delete_transaction - transaction_id (obrigatório)

update_budget_amount - category (obrigatório) | amount (obrigatório) | month (opcional)

recategorize_transaction - transaction_id (obrigatório) | category (obrigatório)

create_transfer - from_account (obrigatório) | to_account (obrigatório) | amount (obrigatório) | date (opcional) | notes (opcional) create_split_transaction - account (obrigatório) | amount (obrigatório): total, deve ser igual à soma das divisões | splits (obrigatório): duas ou mais {category, amount, notes} | payee, date, notes, cleared (todos opcionais)

reconcile_currency_residual - account (obrigatório) | category (obrigatório): onde lançar o ajuste | target_balance (opcional, padrão é 0) | payee, date, notes (todos opcionais)

run_bank_sync - account (opcional): sincronizar conta específica ou todas se omitido

Escrita — Categorias (6)

FerramentaDescriçãoExemplo de prompt
create_categoryCriar uma nova categoria"Crie uma categoria chamada Academia em Gastos Variáveis"
update_categoryRenomear ou ocultar uma categoria"Renomeie Academia para Fitness"
delete_categoryExcluir uma categoria (mostra prévia primeiro, veja Segurança)"Exclua a categoria Fitness"
create_category_groupCriar um novo grupo"Crie um grupo de categorias chamado Saúde"
update_category_groupRenomear ou ocultar um grupo"Renomeie o grupo Saúde para Bem-estar"
delete_category_groupExcluir um grupo (mostra prévia primeiro, veja Segurança)"Exclua o grupo Bem-estar"
Parâmetros

create_category - name (obrigatório) | group (obrigatório): nome ou ID do grupo

update_category - category (obrigatório): nome ou ID | name (opcional): novo nome | hidden (opcional): verdadeiro/falso

delete_category - category (obrigatório) | transfer_to (opcional): categoria para mover as transações | confirm + confirm_name (obrigatórios para excluir)

create_category_group - name (obrigatório)

update_category_group - group (obrigatório): nome ou ID | name (opcional): novo nome | hidden (opcional): verdadeiro/falso

delete_category_group - group (obrigatório) | transfer_to (obrigatório): categoria para transações órfãs | confirm + confirm_name (obrigatórios para excluir)

Escrita — Favorecidos e Regras (5)

FerramentaDescriçãoExemplo de prompt
create_payeeCriar um novo favorecido"Crie um favorecido chamado Netflix"
update_payeeRenomear um favorecido"Renomeie Netflix para Netflix Premium"
delete_payeeExcluir um favorecido (mostra prévia primeiro, veja Segurança)"Exclua o favorecido Netflix Premium"
create_ruleCriar uma regra de transação"Crie uma regra: quando o favorecido contém Amazon, defina a categoria como Compras"
delete_ruleExcluir uma regra (mostra prévia primeiro, veja Segurança)"Exclua essa regra"
Parâmetros

create_payee - name (obrigatório)

update_payee - payee (obrigatório): nome ou ID | name (obrigatório): novo nome

delete_payee - payee (obrigatório): nome ou ID | confirm + confirm_name (obrigatórios para excluir)

create_rule - condition_field (obrigatório): favorecido, categoria, valor, notas | condition_op (obrigatório): é, contém, umDe, maiorQue, menorQue, etc. | condition_value (obrigatório) | action_field (obrigatório): categoria, favorecido, notas | action_value (obrigatório) | stage (opcional)

delete_rule - rule_id (obrigatório) | confirm (obrigatório para excluir)

Escrita — Contas (2)

FerramentaDescriçãoExemplo de prompt
create_accountCriar uma conta dentro ou fora do orçamento"Crie uma conta fora do orçamento chamada Investimento da Família com 10.000"
delete_accountExcluir uma conta e seu histórico"Exclua a conta de teste ZZ"

delete_account precisa de duas chaves. Ela destrói todo o histórico de transações da conta, então uma única chamada nunca exclui. A primeira chamada apenas mostra a prévia do que seria perdido (nome, saldo, quantidade de transações) e sugere fechar a conta — fechar a aposenta mantendo seu histórico. Para excluir de fato, chame novamente com confirm: true e confirm_name definidos para o nome exato da conta. Enquanto recusa, a ferramenta reporta isError: true, então um prompt de confirmação nunca é confundido com uma exclusão concluída.

Parâmetros

create_account - name (obrigatório) | offBudget (opcional, padrão é falso) | initialBalance (opcional): valor em formato humano, cria a transação "Saldo Inicial". (O Actual modela contas apenas como dentro/fora do orçamento, então não há type de conta.)

delete_account - account (obrigatório): nome ou ID | confirm (obrigatório para excluir): deve ser true | confirm_name (obrigatório para excluir): o nome exato da conta

Manutenção (1)

FerramentaDescriçãoExemplo de prompt
repair_syncReparar um orçamento dessincronizado"Repare a sincronização, tudo está falhando"

Se as ferramentas começarem a falhar com erro de sincronização, o estado de sincronização do orçamento está inconsistente com o servidor. repair_sync reconstrói esse estado sem tocar nos dados do orçamento. Observe que excluir o ACTUAL_DATA_DIR local não corrige isso — a inconsistência está no estado de sincronização, não no cache.

Parâmetros

repair_sync - sem parâmetros

Prompts

Modelos de prompt integrados que guiam o Claude em análises financeiras de várias etapas:

PromptDescrição
monthly-reviewRevisão completa do orçamento para qualquer mês — gastos vs. orçamento, estouros, sugestões
spending-checkVerificação rápida: você está no caminho certo este mês?
spending-patternsAnálise aprofundada de tendências e padrões de gastos ao longo de vários meses

Use-os no Claude Desktop clicando no ícone de prompt, ou no Claude Code pedindo ao Claude para usá-los.

Recursos

Dados pré-carregados que o Claude pode consultar sem chamar ferramentas:

RecursoURIDescrição
Contasactual://accountsTodas as contas com saldos
Categoriasactual://categoriesGrupos de categorias e categorias com IDs
Favorecidosactual://payeesTodos os favorecidos em ordem alfabética

Exemplos de Uso

Aqui estão prompts reais que você pode 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?"

Qual é a diferença?

Comparado a outros servidores MCP do Actual Budget:

Recursoactual-budget-mcpOutros
Datas em linguagem natural"mês passado", "este mês", "há 3 meses"Apenas AAAA-MM-DD
Resolução de nomesDigite "Cartera" em vez de UUIDsExige IDs exatos
Formato de saídaTabelas alinhadas, texto legívelJSON bruto
Mensagens de erroInstruções claras sobre como corrigirErros genéricos
Ferramentas de análiseOrçamento vs. real, projeções, tendênciasNão disponível
Prompts MCP3 fluxos de análise guiadosLimitados ou nenhum
Recursos MCPContas, categorias, favorecidos pré-carregadosNão disponível
Datas bilínguesInglês + EspanholApenas inglês
TransferênciasDois lados vinculados, transfer_id correspondente, sem categoria, igual ao aplicativoFrequentemente unilateral ou mal categorizado
ExclusõesPrévia, depois confirmação explícitaExecuta imediatamente
Recuperação de dessincronizaçãorepair_sync reconstrói o estado de sincronização localReinstalar e torcer
Versão da API@actual-app/api 26.x (atual)Frequentemente desatualizada

Segurança

  • Este servidor se conecta à sua instância do Actual Budget usando as credenciais que você fornece
  • As credenciais são passadas como variáveis de ambiente e nunca armazenadas pelo servidor MCP
  • Toda comunicação com seu servidor do Actual Budget acontece localmente (ou com seu servidor auto-hospedado)
  • O servidor só acessa dados do orçamento por meio da biblioteca oficial @actual-app/api
  • Nenhum dado é enviado a terceiros

Solução de Problemas

Preso em algo que não está listado aqui? Conte-me o que te travou. Uma frase é suficiente, e uma configuração falha parece idêntica a nenhuma configuração do meu lado.

"Não foi possível conectar ao servidor do Actual Budget"

  • Certifique-se de que o Actual Budget está em execução (abra o aplicativo ou inicie o servidor)
  • Verifique se ACTUAL_SERVER_URL está correto
  • Execute npx -y actual-budget-mcp --verify para testar sua conexão

"Falha na autenticação"

  • Seu servidor exige uma senha. Defina ACTUAL_PASSWORD na sua configuração
  • Se você esqueceu a senha, redefina-a no Actual Budget em Configurações > Servidor

"Orçamento não encontrado"

  • Verifique seu ACTUAL_BUDGET_ID. Encontre-o em Configurações > Mostrar configurações avançadas > ID de sincronização

"Arquivo de orçamento está criptografado"

  • Defina ACTUAL_ENCRYPTION_PASSWORD com sua senha de criptografia

"Nome ambíguo: corresponde a X, Y"

  • Seja mais específico. Em vez de "BHD", tente "BHD Nomina" ou "BHD Mi Pais"

Requisito do Node.js

"ReferenceError: navigator is not defined"

  • @actual-app/api referenciou o global navigator até a versão 26.6. Esse global só existe no Node.js 21+, então importar a biblioteca no Node.js 20 lançava um erro antes de o servidor iniciar. A versão 26.8 removeu a referência, e este servidor suporta Node.js 20 desde a versão 0.8.1.
  • Solução: Atualize para actual-budget-mcp 0.8.1 ou posterior, ou execute Node.js 22.

Gerenciadores de Versão do Node (fnm, nvm, volta)

O servidor MCP mostra "Servidor desconectado" no Claude Desktop

  • O Claude Desktop não carrega seu perfil de shell (.bashrc, .zshrc), então gerenciadores de versão como fnm, nvm e volta não funcionarão com o comando padrão npx.
  • Solução: Use o caminho absoluto para o node na sua configuração. Encontre-o com:
readlink -f $(which node)

Depois atualize seu 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, crie um script wrapper 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 "$@"

Depois use-o na sua configuração:

{
  "mcpServers": {
    "actual-budget-mcp": {
      "command": "/path/to/mcp-wrapper.sh"
    }
  }
}

Contribuindo

Contribuições são bem-vindas! Abra uma issue ou envie um 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

Licença

MIT - DLSLabs