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
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.

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=1oculta 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_syncreconstrói o estado de sincronização local quando@actual-app/apie 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
- Servidor do Actual Budget em execução (local ou remoto)
- Node.js 20 ou superior (veja Requisito do Node.js)
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-hostacima, 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ável | Obrigatória | Descrição |
|---|---|---|
ACTUAL_SERVER_URL | Sim | URL do seu servidor Actual Budget (ex.: http://localhost:5006) |
ACTUAL_PASSWORD | Sim | Senha do servidor (definida no Actual Budget em Configurações) |
ACTUAL_BUDGET_ID | Sim | ID de Sincronização do Orçamento (encontrado em Configurações > Mostrar configurações avançadas) |
ACTUAL_ENCRYPTION_PASSWORD | Não | Apenas se seu arquivo de orçamento for criptografado |
ACTUAL_DATA_DIR | Não | Diretório de cache (padrão: /tmp/actual-budget-mcp-data) |
ACTUAL_READ_ONLY | Não | Defina como 1/true/yes para executar somente leitura. Veja Segurança |
Encontrando seu ID de Orçamento
- Abra o Actual Budget
- Abra Configurações: clique na seta ao lado do nome do seu orçamento, ou use a barra lateral, Mais, depois Configurações
- Clique em Mostrar configurações avançadas
- 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 nome — delete_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)
| Ferramenta | Descrição | Exemplo de prompt |
|---|---|---|
list_accounts | Todas as contas com saldos | "Mostre todas as minhas contas" |
get_budget_month | Orçamento para um mês específico | "Como está meu orçamento de março?" |
get_transactions | Transações com filtros | "Mostre transações da semana passada acima de 5000" |
get_category_balance | Histórico de categorias entre meses | "Como mudou meu gasto com comida?" |
get_budget_summary | Visão executiva do orçamento | "Dê um resumo do orçamento de fevereiro" |
get_categories | Todos os grupos de categorias e categorias | "Quais categorias eu tenho?" |
get_payees | Todos os beneficiários no orçamento | "Liste todos os meus beneficiários" |
get_rules | Todas as regras de transação | "Mostre minhas regras" |
balance_history | Saldo 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)
| Ferramenta | Descrição | Exemplo de prompt |
|---|---|---|
budget_vs_actual | Orçado vs. gasto por categoria | "Estou estourando o orçamento em algo este mês?" |
spending_projection | Previsão de gastos até o fim do mês | "Vou ficar dentro do orçamento este mês?" |
category_trends | Tendências de gastos ao longo do tempo | "Quais são minhas tendências de gastos nos últimos 6 meses?" |
spending_by_category | Distribuição de gastos por categoria | "Mostre gastos por categoria em fevereiro" |
monthly_summary | Receitas 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)
| Ferramenta | Descrição | Exemplo de prompt |
|---|---|---|
create_transaction | Adicionar uma nova transação | "Gastei 500 em compras no Cartera hoje" |
create_split_transaction | Uma cobrança dividida em várias categorias | "Divida essa cobrança de 3.000: 2.000 compras, 1.000 casa" |
update_transaction | Editar uma transação existente | "Mude o valor daquela transação para 600" |
delete_transaction | Remover uma transação (mostra prévia primeiro, veja Segurança) | "Exclua aquela transação de teste" |
update_budget_amount | Alterar um valor de orçamento | "Defina meu orçamento de comida para 15.000 este mês" |
recategorize_transaction | Mover para outra categoria | "Mova aquela transação para Entretenimento" |
create_transfer | Transferência entre contas | "Transfira 10.000 da Conta Corrente para a Poupança" |
reconcile_currency_residual | Conciliar resíduo acumulado de taxa de câmbio | "Concilie meu cartão USD em 213,82 USD" |
run_bank_sync | Sincronizar 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)
| Ferramenta | Descrição | Exemplo de prompt |
|---|---|---|
create_category | Criar uma nova categoria | "Crie uma categoria chamada Academia em Gastos Variáveis" |
update_category | Renomear ou ocultar uma categoria | "Renomeie Academia para Fitness" |
delete_category | Excluir uma categoria (mostra prévia primeiro, veja Segurança) | "Exclua a categoria Fitness" |
create_category_group | Criar um novo grupo | "Crie um grupo de categorias chamado Saúde" |
update_category_group | Renomear ou ocultar um grupo | "Renomeie o grupo Saúde para Bem-estar" |
delete_category_group | Excluir 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)
| Ferramenta | Descrição | Exemplo de prompt |
|---|---|---|
create_payee | Criar um novo favorecido | "Crie um favorecido chamado Netflix" |
update_payee | Renomear um favorecido | "Renomeie Netflix para Netflix Premium" |
delete_payee | Excluir um favorecido (mostra prévia primeiro, veja Segurança) | "Exclua o favorecido Netflix Premium" |
create_rule | Criar uma regra de transação | "Crie uma regra: quando o favorecido contém Amazon, defina a categoria como Compras" |
delete_rule | Excluir 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)
| Ferramenta | Descrição | Exemplo de prompt |
|---|---|---|
create_account | Criar uma conta dentro ou fora do orçamento | "Crie uma conta fora do orçamento chamada Investimento da Família com 10.000" |
delete_account | Excluir uma conta e seu histórico | "Exclua a conta de teste ZZ" |
delete_accountprecisa 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 comconfirm: trueeconfirm_namedefinidos para o nome exato da conta. Enquanto recusa, a ferramenta reportaisError: 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)
| Ferramenta | Descrição | Exemplo de prompt |
|---|---|---|
repair_sync | Reparar 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_syncreconstrói esse estado sem tocar nos dados do orçamento. Observe que excluir oACTUAL_DATA_DIRlocal 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:
| Prompt | Descrição |
|---|---|
monthly-review | Revisão completa do orçamento para qualquer mês — gastos vs. orçamento, estouros, sugestões |
spending-check | Verificação rápida: você está no caminho certo este mês? |
spending-patterns | Aná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:
| Recurso | URI | Descrição |
|---|---|---|
| Contas | actual://accounts | Todas as contas com saldos |
| Categorias | actual://categories | Grupos de categorias e categorias com IDs |
| Favorecidos | actual://payees | Todos 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:
| Recurso | actual-budget-mcp | Outros |
|---|---|---|
| Datas em linguagem natural | "mês passado", "este mês", "há 3 meses" | Apenas AAAA-MM-DD |
| Resolução de nomes | Digite "Cartera" em vez de UUIDs | Exige IDs exatos |
| Formato de saída | Tabelas alinhadas, texto legível | JSON bruto |
| Mensagens de erro | Instruções claras sobre como corrigir | Erros genéricos |
| Ferramentas de análise | Orçamento vs. real, projeções, tendências | Não disponível |
| Prompts MCP | 3 fluxos de análise guiados | Limitados ou nenhum |
| Recursos MCP | Contas, categorias, favorecidos pré-carregados | Não disponível |
| Datas bilíngues | Inglês + Espanhol | Apenas inglês |
| Transferências | Dois lados vinculados, transfer_id correspondente, sem categoria, igual ao aplicativo | Frequentemente unilateral ou mal categorizado |
| Exclusões | Prévia, depois confirmação explícita | Executa imediatamente |
| Recuperação de dessincronização | repair_sync reconstrói o estado de sincronização local | Reinstalar 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_URLestá correto - Execute
npx -y actual-budget-mcp --verifypara testar sua conexão
"Falha na autenticação"
- Seu servidor exige uma senha. Defina
ACTUAL_PASSWORDna 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_PASSWORDcom 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/apireferenciou o globalnavigatoraté 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ãonpx. - 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