mcpField
C
CDF Finance MCP

CDF Finance MCP

Remote
cdf.financeFinance0Updated 7w ago

About CDF Finance MCP

CDF Finance MCP connects MCP clients to a user's CDF Finance personal-finance account for natural-language queries and requested record keeping. Its stateless, separately deployed server uses OAuth 2.1 and offers account, transaction, invoice, budget, debt and investment tools.

Key features

  1. 01Query accounts, cards and transactions
  2. 02Create and manage financial records
  3. 03Review invoices, budgets and goals
  4. 04Access debt and investment tools
  5. 05Choose full or read-only tool mode

Use cases

  1. 01Ask about monthly spending and cash flow
  2. 02Check whether an upcoming invoice fits a budget
  3. 03Record a requested purchase transaction
  4. 04Review goals, debts or investment data

MCP support

The remote MCP server exposes CDF Finance account and financial-management tools to MCP clients over Streamable HTTP, using OAuth 2.1 with DCR and PKCE. It supports a read-only mode; requested writes record financial entries but do not transfer money or execute payments.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://mcp.cdf.finance/mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

Tools

Details

From the project README

CDF Finance MCP

Conecte Claude, ChatGPT e qualquer client MCP (OAuth 2.1) à sua conta CDF Finance — consulte e registre sua vida financeira por linguagem natural.

License: BUSL-1.1 MCP Registry Version Node

Remoto: https://mcp.cdf.finance/mcp (Streamable HTTP) · Website: https://cdf.finance/mcp · Status: https://status.cdf.finance · Suporte: [email protected]


O que é

MCP server stateless e isolado para o CDF Finance — app de controle financeiro pessoal (contas, cartões, transações, faturas, orçamentos, metas, dívidas, investimentos e insights).

  • Para usuários: pergunte ao Claude/ChatGPT sobre seu dinheiro e registre lançamentos sem abrir o app.
  • Para desenvolvedores/revisores: código auditável, sem dependência do backend-husk — só HTTP sobre a API pública que o app mobile já usa.

Source-available sob BUSL-1.1: pode auditar, usar com o CDF Finance, contribuir. Uso em produção como produto concorrente exige licença comercial. Vira Apache-2.0 em 2030-09-01.

Exemplos
Você dizO que acontece
"Quanto sobrou do meu salário esse mês?"current_month_spending + categories_insights
"Minha próxima fatura vai caber no orçamento?"list_pending_invoices + budget_comparison
"Lança um Uber de R$ 27,50 no Nubank como Transporte"list_accounts + list_categories + create_transaction

English: "How much is left of my salary?" / "Will my next bill fit the budget?" / "Log an Uber ride of R$27.50 on Nubank as Transportation."


Arquitetura

Isolamento total do backend-husk — este serviço não importa código do backend.

Claude / ChatGPT (MCP client)
        │  OAuth 2.1 — DCR + PKCE (S256)
        ▼
┌───────────────────────────────┐
│  cdf-mcp-server (este repo)   │  Postgres isolado (Railway)
│  • Authorization Server        │  ├─ oauth_clients / oauth_codes
│  • Resource Server (/mcp)     │  ├─ oauth_tokens (hash SHA-256)
│  • Catálogo declarativo       │  └─ sessions (JWT mobile criptografado
│    ~50 tools → REST           │                AES-256-GCM)
└───────────────┬───────────────┘
                │  HTTPS — Bearer <mobile JWT>
                ▼
        backend-husk (api.vessell.app)
        API pública — mesmo contrato do app mobile

Fluxo de login:

  1. Client faz Dynamic Client Registration em /register.
  2. Usuário autoriza em /authorize (form server-rendered, sem terceiros) → POST /api/mobile/auth/login com device_id=mcp-<sessionId>, platform=mcp.
  3. access/refresh do backend ficam criptografados em sessions; client MCP recebe apenas token opaco (oauth_tokens).
  4. Cada tool renova o access_token via refresh automaticamente (getValidAccessToken).
  5. Sessão aparece como device em GET /api/mobile/devices — revogável em DELETE /api/mobile/devices/:id.

Por que isolado (README original): sem dependência circular, deploy/escala independentes (Railway vs Coolify no backend) e imune a troca de linguagem do backend — só fala HTTP.

Tools

Catálogo 100% declarativo em src/tools/catalog/ — cada tool é { name, method, path, input(zod) } executada por src/tools/register.ts. Nova rota no backend = nova entrada, sem handler.

DomínioTools (exemplos)
Userget_profile, update_profile
Accounts / Cardslist_accounts, create_account, list_cards, current_invoice
Categories / Cost Centerslist_categories, create_category, list_cost_centers
Transactionslist_transactions, create_transaction, confirm_pending_transaction, upcoming_transactions
Recurring / Invoiceslist_recurring_transactions, list_invoices, pay_invoice
Goals / Budgets / Debtslist_goals, budget_comparison, create_debt, debt_payoff_simulation
Equities / Investmentslist_equities, add_equity_valuation, investments_workspace
Insights / Analyticscashflow_forecast, spending_projection, networth_projection, categories_insights, behavior_insights, can_afford, analytics_history
Tagslist_tags, create_tag

Fora de escopo de propósito (igual ao backend): admin, Stripe/pagamentos, webhooks, S3/anexos, /api/ai/*.

Modo somente leitura: MCP_TOOLS_MODE=readonly expõe só readOnly:true — ideal para diretórios curados.


Quick start

cp .env.example .env   # preencha DATABASE_URL, TOKEN_ENCRYPTION_KEY, SESSION_SECRET
npm install
npm run db:migrate
npm run dev            # http://localhost:8090

Teste com MCP Inspector:

npx @modelcontextprotocol/inspector
# Transport: Streamable HTTP → http://localhost:8090/mcp
Variáveis de ambiente
VarObrigatóriaDescrição
PUBLIC_URLsimURL pública deste serviço (entra nos metadados OAuth). Gere o domínio antes do primeiro deploy
PORTnãodefault 8090
BACKEND_API_URLsimhttps://api.vessell.app (ou staging)
DATABASE_URLsimPostgres isolado deste serviço
TOKEN_ENCRYPTION_KEYsim32 bytes base64: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
SESSION_SECRETsimstring longa aleatória p/ cookies /authorize
MCP_SERVICE_TOKENnãosegredo serviço-a-serviço (backend-husk → MCP via X-CDF-User-Token). Se ausente, só OAuth
MCP_TOOLS_MODEnãofull (default) ou readonly
OPENAI_APPS_CHALLENGE_TOKENnãoverificação de domínio OpenAI
ALLOWED_ORIGINSnãoCORS do /authorize — default https://claude.ai,https://chatgpt.com

Ver .env.example comentado.

Deploy (Railway)

  1. railway init ou conecte o repo no dashboard.
  2. Adicione addon Postgres (injeta DATABASE_URL).
  3. Configure envs acima — gere domínio em Settings → Networking primeiro.
  4. Deploy: Dockerfile → node dist/index.js (railway.json já configurado).
  5. Migration: railway run npm run db:migrate.
  6. No Claude.ai/ChatGPT aponte o connector para https://<seu-dominio>.up.railway.app/mcp — DCR/OAuth é automático.

Segurança

  • PKCE S256 obrigatório em todo authorization_code.
  • Tokens opacos — só SHA-256 persiste (oauth_tokens), bruto é entregue uma vez.
  • JWT mobile criptografado AES-256-GCM em sessions — nunca exposto ao client (src/crypto.ts, src/mcp/http.ts).
  • Device isolado — cada sessão mcp-<id> (src/backend/client.ts:45) revogável sem afetar outros logins.
  • Sanitização — redactLargeInlineData + redactFields (src/tools/register.ts:19) evita vazamento de data: URI e campos sensíveis pro LLM.

Reporte vulnerabilidades em SECURITY.md — não abra issue pública: [email protected] [SECURITY].

Conformidade — Diretório Anthropic (Seção 4.A)

Este conector não transfere dinheiro/cripto/ativos e não executa pagamentos em nome do usuário — apenas lê e registra lançamentos no controle financeiro pessoal, igual ao app. Toda escrita é explícita e solicitada na conversa.

Contribuindo

Veja CONTRIBUTING.md — fork, branch feat/..., npm run build e PR com path validado no backend. Ao contribuir você licencia sob BUSL-1.1.

Licença

Source-available BUSL-1.1 — uso com o CDF Finance, pessoal, acadêmico e contribuições são livres. Proibido uso em produção como produto concorrente de gestão financeira (hosted/managed). Converte para Apache-2.0 em 2030-09-01.

Dúvidas comerciais: [email protected].


Construído com Model Context Protocol · Mantido por Vessell CDF Finance

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.