Actual Budget
Integre o Actual Budget com assistentes LLM para gerenciar suas finanças pessoais.
Documentação
Servidor MCP do Actual Budget
Servidor MCP para integrar o Actual Budget com Claude e outros assistentes de LLM.
Visão Geral
O Servidor MCP do Actual Budget permite que você interaja com seus dados financeiros pessoais do Actual Budget usando linguagem natural por meio de LLMs. Ele expõe suas contas, transações e métricas financeiras através do Model Context Protocol (MCP).
Recursos
Recursos
- Listagem de Contas - Navegue por todas as suas contas com seus saldos
- Detalhes da Conta - Veja informações detalhadas sobre contas específicas
- Histórico de Transações - Acesse dados de transações com detalhes completos
Ferramentas
Gerenciamento de Transações e Contas
get-transactions- Recupere e filtre transações por conta, data, valor, categoria ou beneficiáriocreate-transaction- Crie uma nova transação em uma conta com categoria, beneficiário e notas opcionaisupdate-transaction- Atualize uma transação existente com nova categoria, beneficiário, notas ou valorget-accounts- Recupere uma lista de todas as contas com seu saldo atual e IDbalance-history- Veja as mudanças de saldo da conta ao longo do tempo
Relatórios e Análises
spending-by-category- Gere detalhamentos de gastos categorizados por tipomonthly-summary- Obtenha métricas mensais de receitas, despesas e economiabudget-vs-actual- Compare valores orçados com gastos reais por categorianet-worth- Acompanhe ativos, passivos e patrimônio líquido em todas as contas ao longo do tempocategory-trends- Veja como os gastos em cada categoria variam mês a mês, com direção de tendênciaspending-by-payee- Classifique os beneficiários pelo quanto foi gasto com (ou recebido de) cada umcash-flow- Reporte receitas, despesas e fluxo de caixa líquido por mês ou semana
As cinco ferramentas acima retornam JSON em vez de markdown, para que os valores permaneçam legíveis por máquina. Cada valor é um número inteiro de centavos, e cada resposta inclui um campo
amountsIndescrevendo as convenções de sinal que utiliza.
Relatórios Personalizados e Painéis
get-custom-reports- Recupere todos os relatórios personalizados salvos da seção Relatórioscreate-custom-report- Crie um relatório personalizado salvoupdate-custom-report- Atualize campos em um relatório personalizado salvo, mantendo o restante inalteradodelete-custom-report- Exclua um relatório personalizado salvoget-dashboards- Recupere todas as páginas do painel e os widgets dispostos nelasadd-dashboard-widget- Adicione um widget a uma página do painelupdate-dashboard-widget- Atualize a configuração, posição ou tamanho de um widgetremove-dashboard-widget- Remova um widget de sua páginaorganize-dashboard- Reposicione e redimensione vários widgets de uma vezcreate-dashboard-page/rename-dashboard-page/delete-dashboard-page- Gerencie páginas do painel
Categorias
get-grouped-categories- Recupere uma lista de todos os grupos de categorias com suas categoriascreate-category- Crie uma nova categoria dentro de um grupo de categoriasupdate-category- Atualize o nome ou grupo de uma categoria existentedelete-category- Exclua uma categoriacreate-category-group- Crie um novo grupo de categoriasupdate-category-group- Atualize o nome de um grupo de categoriasdelete-category-group- Exclua um grupo de categorias
Beneficiários
get-payees- Recupere uma lista de todos os beneficiários com seus detalhescreate-payee- Crie um novo beneficiárioupdate-payee- Atualize os detalhes de um beneficiário existentedelete-payee- Exclua um beneficiário
Regras
get-rules- Recupere uma lista de todas as regras de transaçãocreate-rule- Crie uma nova regra de transação com condições e açõesupdate-rule- Atualize uma regra de transação existentedelete-rule- Exclua uma regra de transação
Prompts
financial-insights- Gere insights e recomendações com base nos seus dados financeirosbudget-review- Analise sua conformidade orçamentária e sugira ajustes
Instalação
Pré-requisitos
- Node.js (v16 ou superior)
- Actual Budget instalado e configurado
- Claude Desktop ou outro cliente compatível com MCP
- Docker Desktop (opcional)
Acesso remoto
Baixe a imagem docker mais recente:
docker pull sstefanov/actual-mcp:latest
Configuração local
- Clone o repositório:
git clone https://github.com/s-stefanov/actual-mcp.git
cd actual-mcp
- Instale as dependências:
npm install
- Compile o servidor:
npm run build
- Compile a imagem docker local (opcional):
docker build -t <local-image-name> .
- Configure as variáveis de ambiente (opcional):
# Path to your Actual Budget data directory (default: ~/.actual)
export ACTUAL_DATA_DIR="/path/to/your/actual/data"
# If using a remote Actual server
export ACTUAL_SERVER_URL="https://your-actual-server.com"
export ACTUAL_PASSWORD="your-password"
# Specific budget to use (optional)
export ACTUAL_BUDGET_SYNC_ID="your-budget-id"
# How long downloaded data stays fresh before the server re-syncs, in ms
# (default: 60000). Use 0 to sync before every call, or -1 to never sync.
export ACTUAL_SYNC_TTL_MS="60000"
Opcional: senha separada para criptografia do orçamento
Se sua configuração do Actual exigir uma senha diferente para desbloquear os dados do orçamento local/criptografado em vez da senha de autenticação do servidor, você pode definir ACTUAL_BUDGET_ENCRYPTION_PASSWORD além de ACTUAL_PASSWORD.
# If server auth and encryption/unlock use different passwords
export ACTUAL_BUDGET_ENCRYPTION_PASSWORD="your-encryption-password"
Ciclo de vida da conexão
O servidor mantém uma conexão compartilhada do Actual durante toda a sua vida útil e serializa as operações do orçamento por meio dela. Os dados baixados são ressincronizados quando excedem a janela de atualização de ACTUAL_SYNC_TTL_MS. Nos modos stdio e HTTP, SIGINT e SIGTERM drenam o trabalho em andamento antes do desligamento do servidor. O Actual não é mais inicializado e desligado a cada chamada de ferramenta.
Semântica de relatórios
- Saldos e históricos de saldo são limitados até a data de hoje; transações com data futura são excluídas, e a linha do histórico de saldo do mês atual é parcial.
- Contas fechadas dentro do orçamento permanecem incluídas em relatórios históricos; contas fechadas fora do orçamento permanecem excluídas por padrão.
- A receita mensal segue os metadados do grupo de receitas do Actual. Reembolsos são compensados com despesas, meses sem atividade contam nas médias, e pares de transferência não categorizados são ignorados.
- O antigo bucket de Investimentos foi removido dos resumos mensais.
Uso com Claude Desktop
Para usar este servidor com o Claude Desktop, adicione-o à sua configuração do Claude:
No MacOS:
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
No Windows:
code %APPDATA%\Claude\claude_desktop_config.json
Adicione o seguinte à sua configuração...
a. Usando Node.js (versão npx):
{
"mcpServers": {
"actualBudget": {
"command": "npx",
"args": ["-y", "actual-mcp", "--enable-write"],
"env": {
"ACTUAL_DATA_DIR": "path/to/your/data",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_SERVER_URL": "http://your-actual-server.com",
"ACTUAL_BUDGET_SYNC_ID": "your-budget-id"
}
}
}
}
### a. Using Node.js (local only):
```json
{
"mcpServers": {
"actualBudget": {
"command": "node",
"args": ["/path/to/your/clone/build/index.js", "--enable-write"],
"env": {
"ACTUAL_DATA_DIR": "path/to/your/data",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_SERVER_URL": "http://your-actual-server.com",
"ACTUAL_BUDGET_SYNC_ID": "your-budget-id"
}
}
}
}
b. Usando Docker (imagens locais ou remotas):
{
"mcpServers": {
"actualBudget": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/path/to/your/data:/data",
"-e",
"ACTUAL_PASSWORD=your-password",
"-e",
"ACTUAL_SERVER_URL=https://your-actual-server.com",
"-e",
"ACTUAL_BUDGET_SYNC_ID=your-budget-id",
"sstefanov/actual-mcp:latest",
"--enable-write"
]
}
}
}
Após salvar a configuração, reinicie o Claude Desktop.
💡
ACTUAL_DATA_DIRé opcional se você estiver usandoACTUAL_SERVER_URL.
💡 Use
--enable-writepara habilitar ferramentas de acesso de escrita.
Executando um Servidor SSE
Para expor o servidor em uma porta usando Docker:
docker run -i --rm \
-p 3000:3000 \
-v "/path/to/your/data:/data" \
-e ACTUAL_PASSWORD="your-password" \
-e ACTUAL_SERVER_URL="http://your-actual-server.com" \
-e ACTUAL_BUDGET_SYNC_ID="your-budget-id" \
-e BEARER_TOKEN="your-bearer-token" \
sstefanov/actual-mcp:latest \
--sse --enable-write --enable-bearer
⚠️ Importante: Ao usar --enable-bearer, a variável de ambiente BEARER_TOKEN deve ser definida.
🔒 Isso é altamente recomendado se você estiver expondo seu servidor por meio de uma URL pública.
Exemplos de Consultas
Uma vez conectado, você pode fazer perguntas ao Claude como:
- "Qual é o meu saldo atual da conta?"
- "Mostre meus gastos por categoria no mês passado"
- "Quanto gastei com supermercado em janeiro?"
- "Qual é a minha taxa de economia nos últimos 3 meses?"
- "Em quais categorias estou gastando demais este mês?"
- "Como meu patrimônio líquido mudou no último ano?"
- "Com quais beneficiários gasto mais?"
- "Meus gastos com supermercado estão tendendo para cima ou para baixo?"
- "Analise meu orçamento e sugira áreas para melhorar"
- "Quais relatórios personalizados eu tenho?"
- "Adicione um widget de patrimônio líquido ao meu painel do Spending Plan"
- "Reorganize meu painel para que o cartão de fluxo de caixa fique em largura total no topo"
Uso com Codex CLI
Exemplo de configuração do Codex:
Em ~/.codex/config.toml:
[mcp_servers.actual-budget]
url = "http://localhost:3000"
Aponte o Codex para a mesma porta que você passa para npm start -- --sse --port <PORT>.
Desenvolvimento
Para desenvolvimento com recompilação automática:
npm run watch
Testando a conexão com o Actual
Para verificar se o servidor pode se conectar aos seus dados do Actual Budget:
node build/index.js --test-resources
Depuração
Como os servidores MCP se comunicam via stdio, a depuração pode ser desafiadora. Você pode usar o MCP Inspector:
npx @modelcontextprotocol/inspector node build/index.js
Portão de validação E2E
A suíte de testes de ponta a ponta (vitest.e2e.config.ts) inicia um servidor real do Actual Budget em um contêiner Docker (via Testcontainers), semeia um orçamento e o conduz por um cliente MCP real via stdio para verificar se contas, transações, categorias, beneficiários, regras e importações realmente persistem. Requer que o Docker esteja em execução localmente.
No CI, o job e2e-test em .github/workflows/pr-validation.yml só é executado em PRs do release-please (prefixo de branch release-please--) ou quando um PR recebe o rótulo run-e2e — não é executado em todos os PRs por padrão, pois precisa do Docker e leva mais tempo que as verificações padrão.
Para executá-lo localmente:
npm run build && npm run test:e2e
O Docker deve estar instalado e em execução; a suíte de testes baixa e inicia a imagem do servidor Actual automaticamente.
Estrutura do Projeto
index.ts- Implementação principal do servidortypes.ts- Definições de tipos para respostas e parâmetros da APIprompts.ts- Modelos de prompt para interações com LLMutils.ts- Funções auxiliares para formatação de datas e mais
Registro e Descoberta
actual-mcp é publicado no Registro MCP oficial
como io.github.s-stefanov/actual-mcp. Os metadados do registro estão em
server.json e são publicados automaticamente a cada lançamento
(veja .github/workflows/release-please.yml).
Ele anuncia dois transportes no pacote npm — stdio (padrão) e
streamable-http (via a flag --sse). (Uma imagem Docker também é publicada,
mas ainda não está listada como um pacote do registro.)
Listagens de diretórios pós-lançamento são rastreadas em
docs/mcp-registry-checklist.md.
Licença
MIT
Contribuição
Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request.