Pluggy Finance MCP
This server is a personal finance MCP gateway for Pluggy connections, letting an AI agent query, aggregate, and explicitly synchronize financial data per connected bank item.
Connection & sync: validate/get item info (
get_item), check sync status (get_sync_status), and trigger on-demand synchronization (sync_item) with optional waiting and timeout.Accounts & balances: list/filter bank and credit accounts, get account details, real-time balances, and available account statements.
Transactions: list transactions with date filters and cursor pagination, and fetch individual transaction details.
Credit cards: list credit card bills, get bill details, and summarize bills/due dates/payments.
Investments: list investments by type with paged results, get investment details, and list investment transactions.
Financial aggregations: compute total balance, monthly expenses, expenses by category, credit card summary, investment portfolio, and net worth estimates.
Safety & isolation: every tool requires an
item_id; credentials are never exposed, and responses include warnings/meta to indicate data completeness.
Provides access to Nubank financial data through Pluggy, including accounts, balances, transactions, credit card bills, and investments, with support for on-demand synchronization.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Pluggy Finance MCP show me my total balance across all accounts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Pluggy Finance MCP
Servidor MCP pessoal em Python para múltiplas conexões Pluggy em uma única instância. Implementa consultas, agregações financeiras e sincronização explícita sob demanda, com isolamento por Item em cada chamada, paginação e proteção de credenciais.
Implementação independente voltada a consultas financeiras pessoais no Hermes; não é um produto oficial da Pluggy. Existem também o MCP da Pluggy e o mcp-pluggy comunitário.
O uso local não precisa de Docker. O Hermes inicia diretamente o processo Python por
stdio. O container é opcional e serve para implantação remota em Cloud Run ou plataforma
equivalente.
Execução local
Requisitos: Python 3.12+ e uv.
uv sync --frozen
cp .env.example .envPreencha apenas PLUGGY_CLIENT_ID e PLUGGY_CLIENT_SECRET em .env.
A autorização inicial no MeuPluggy deve ter sido feita previamente. O servidor não cria Items.
uv run --env-file .env python -m pluggy_finance_mcpO processo aguarda mensagens MCP em stdin; não abre interface gráfica ou porta de rede.
.env só é carregado quando solicitado explicitamente ao uv. A aplicação lê o ambiente.
Depois da instalação, .venv/bin/python -m pluggy_finance_mcp também funciona com as variáveis
já exportadas. Veja a configuração do Hermes.
Related MCP server: pluggy-mcp-server
Tools
Todas as 21 tools exigem item_id (UUID), além dos parâmetros abaixo.
Conexão e sincronização | Parâmetros adicionais |
| nenhum; valida existência e consulta estado/freshness |
| nenhum; consulta andamento, sem PATCH |
|
|
Consultas básicas | Parâmetros |
| nenhum |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Agregações | Parâmetros |
|
|
|
|
| mesmos parâmetros de gastos mensais |
|
|
|
|
|
|
Nenhuma tool aceita credenciais, URL ou método HTTP. Identity não está implementada.
Datas de intervalo usam YYYY-MM-DD; mês usa YYYY-MM. O padrão das agregações de gastos é
mês atual em America/Sao_Paulo, pelo lançamento de cada transação.
As respostas têm ok, tool, data, pagination, meta, warnings e error.
Totais calculados com Decimal são strings decimais; campos brutos mantêm seus nomes e valores
numéricos JSON. Verifique meta.complete e warnings antes de interpretar uma agregação.
As regras de cálculo descrevem cobertura, ambiguidades e limites.
Pluggy authentication
PLUGGY_CLIENT_ID + PLUGGY_CLIENT_SECRET → POST /auth → API Key temporária.
O gerenciador compartilha a chave entre todas as conexões, somente em memória, e a renova
15 minutos antes da expiração de duas horas. Um HTTP 401 permite uma renovação e repetição;
um segundo 401 encerra a chamada. Não configure PLUGGY_API_KEY nem persista chaves em disco.
Item IDs
Cada conexão tem seu próprio itemId. Forneça-o ao Hermes no primeiro uso e peça que guarde
a associação, por exemplo pluggy.itau_pessoal → <UUID>. O Hermes pode validar com get_item.
Nas próximas sessões ele resolve o nome na memória e fornece o UUID em cada chamada.
Uma única instância e as mesmas credenciais atendem Itaú, Nubank, Inter e outras conexões.
O MCP não lê nem escreve MEMORY.md, não mantém registry, banco local ou aliases, e não
depende da memória do Hermes para funcionar. Não há Item em variável de ambiente.
Migração: as antigas tools agora também exigem item_id; o vínculo de contas, transações
e investimentos continua sendo validado contra o Item recebido naquela chamada.
Manual synchronization
Consultas nunca chamam PATCH. “Quanto gastei hoje?” consulta os dados já disponíveis.
“Atualize meu Itaú e veja quanto gastei hoje” exige sync_item antes da consulta.
sync_item(item_id, wait=true) valida o Item, reutiliza as credenciais guardadas pela Pluggy
com PATCH /items/{id} e corpo {}, e acompanha o estado por polling. Um Item já atualizando
é acompanhado sem novo PATCH. wait=false retorna imediatamente após validação/envio.
get_sync_status(item_id) e get_item(item_id) permitem verificar depois, incluindo lastUpdatedAt.
Configurações opcionais: PLUGGY_SYNC_POLL_INTERVAL_SECONDS=3 e
PLUGGY_SYNC_TIMEOUT_SECONDS=120. O prazo inclui validação, envio, retries e polling.
Timeout local com execução iniciada retorna data.inProgress=true; não significa falha do banco.
Falha de rede após envio pode deixar o resultado incerto; consulte o status antes de reenviar.
O envelope ok=true indica que a tool produziu um resultado, não que o banco sincronizou:
verifique data.success, data.inProgress, data.requiresUserAction e data.error.
Sucesso parcial é sinalizado por partialSuccess=true, sem afirmar atualização completa.
MFA, login inválido e renovação de parâmetros exigem intervenção via Pluggy Connect;
o MCP não pede senha ou token. OUTDATED pode ser atualizado mediante pedido explícito.
Restrições de plano/frequência e connector offline preservam códigos específicos e mensagens seguras; não causam repetição de PATCH. HTTP 403 não é repetido. HTTP 429 respeita Retry-After com até duas repetições; se a espera exceder o limite HTTP, devolve o erro e a espera indicada. Mensagens livres da API não são expostas, pois podem conter credenciais. A frequência mínima é retornada quando existe em campo numérico estruturado; a próxima data só é calculada com timestamp e fuso conhecidos. Não se infere frequência de texto livre.
Não há scheduler, cron, sync_all ou descoberta de Items. A Pluggy pode executar auto-sync por configuração própria; este MCP não altera essa configuração. Confira o ciclo do Item e as restrições de atualização.
Example
Primeiro uso: “Meu Itaú pessoal possui itemId . Lembre disso.”
Depois: “Verifique quando meu Itaú foi atualizado.” → memória Hermes → get_item(item_id).
Depois: “Atualize meu Itaú.” → memória Hermes → sync_item(item_id) → Pluggy.
Para atualizar dois bancos, o Hermes chama sync_item individualmente, inicialmente em sequência.
Teste manual com uma conexão real
Inicie o MCP por stdio e forneça ao Hermes um UUID real.
Chame
get_iteme confira connector, status elastUpdatedAt.Solicite uma única atualização com
sync_item; se ainda estiver em andamento, useget_sync_status.Consulte
get_itemnovamente e compare o timestamp. Consulte contas/transações normalmente.Em uma nova sessão Hermes, peça o estado pelo nome do banco e confirme que a memória resolve o UUID.
Os testes automatizados não executam essas etapas com contas reais. Sem um Item real fornecido para teste, a validação de plano, instituição, MFA e memória entre sessões permanece manual.
Validação e desenvolvimento
make check # lint, formato, tipos, contratos e testes; não precisa de Docker
make audit # auditoria de dependências
make openapi-check # compara o snapshot com a API pública, sem credenciaisOs testes usam dados sintéticos e HTTP simulado para a Pluggy. Testes MCP exercitam subprocessos
stdio e HTTP real em loopback; não consultam dados financeiros reais.
HTTP remoto com OAuth
O mesmo registro de tools atende /mcp por Streamable HTTP. O modo remoto exige OAuth 2.1/OIDC
e access tokens JWT; bearer estático não é aceito. O servidor atua somente como resource server:
o login e a emissão de tokens pertencem a um provedor como Auth0, Keycloak ou Zitadel.
Configuração mínima:
MCP_TRANSPORT=streamable-http
MCP_AUTH_MODE=oauth
MCP_PUBLIC_URL=https://finance.example.com/mcp
MCP_ALLOWED_HOSTS=finance.example.com
MCP_OAUTH_ISSUER_URL=https://identity.example.com
MCP_OAUTH_ALLOWED_SUBJECT=provider-user-id-estavel
MCP_OAUTH_ALLOWED_CLIENT_IDS=gpt-client,claude-client,hermes-client
MCP_OAUTH_SCOPE=pluggy:access
MCP_OAUTH_SIGNING_ALGORITHM=RS256O MCP publica Protected Resource Metadata e responde com o desafio OAuth padrão. O token precisa
ter assinatura válida, issuer e audience exatos, prazo vigente, o subject autorizado, um client ID
da allowlist e o escopo pluggy:access. /healthz e /readyz permanecem públicos e não consultam
a Pluggy. Credenciais Pluggy ficam somente no servidor.
Veja o guia de implantação remota para configurar o provedor e os clientes. O exemplo Cloud Run cobre a plataforma Google. Nenhum deploy ou recurso de infraestrutura é criado automaticamente.
Documentação
O SDK oficial MCP está fixado na linha 1.x mantida (mcp>=1.28,<2, lock em 1.30.0).
A atualização para 2.x requer migração explícita e os mesmos testes de transporte.
Available Tools
18 toolsget_accountCRead-only
Detalhe de uma conta pertencente ao Item configurado.
Inputs: account_id (required). Returns: ok, data, meta, tool, +3 more
get_account_balanceBRead-only
Saldo em tempo real, sujeito ao suporte e limites da instituição.
Inputs: account_id (required). Returns: ok, data, meta, tool, +3 more
get_connection_statusARead-only
Estado e data de atualização do Item configurado.
Inputs: no named parameters. Returns: ok, data, meta, tool, +3 more
get_credit_card_billBRead-only
Detalhe de fatura após comprovação pela listagem de cartão autorizado.
Inputs: bill_id (required). Returns: ok, data, meta, tool, +3 more
get_credit_card_summaryARead-only
Faturas, vencimentos e pagamentos disponíveis; sem somar faturas históricas como dívida.
Inputs: account_ids. Returns: ok, data, meta, tool, +3 more
get_expenses_by_categoryCRead-only
Gastos por categoria original e moeda; mesmas regras dos gastos mensais.
Inputs: month, date_to, date_from, account_ids. Returns: ok, data, meta, tool, +3 more
get_investmentCRead-only
Detalhe de investimento autorizado.
Inputs: investment_id (required). Returns: ok, data, meta, tool, +3 more
get_investment_portfolioBRead-only
Carteira ativa por instituição, tipo e moeda; posições excluídas ficam explícitas.
Inputs: investment_ids. Returns: ok, data, meta, tool, +3 more
get_monthly_expensesARead-only
Gastos lançados no mês YYYY-MM ou intervalo YYYY-MM-DD, em São Paulo; mês atual por padrão. Totais decimais em strings, pendências e ambiguidades separadas.
Inputs: month, date_to, date_from, account_ids. Returns: ok, data, meta, tool, +3 more
get_net_worthBRead-only
Estimativa patrimonial parcial por moeda, com possíveis sobreposições e lacunas explícitas.
Inputs: account_ids, investment_ids. Returns: ok, data, meta, tool, +3 more
get_total_balanceBRead-only
Saldos bancários por moeda e tipo; cartões separados. Instituição pode estar indisponível.
Inputs: account_ids. Returns: ok, data, meta, tool, +3 more
get_transactionDRead-only
Transação com vínculo à conta autorizado antes de retornar seus dados.
Inputs: transaction_id (required). Returns: ok, data, meta, tool, +3 more
list_accountsCRead-only
Contas e cartões autorizados. Subtype é filtrado localmente.
Inputs: type, subtype. Returns: ok, data, meta, tool, +3 more
list_account_statementsCRead-only
Extratos disponíveis; URLs assinadas expiram e não são acessadas pelo servidor.
Inputs: account_id (required). Returns: ok, data, meta, tool, +3 more
list_credit_card_billsARead-only
Faturas coletadas de um cartão autorizado; não representam todas dívida atual.
Inputs: account_id (required). Returns: ok, data, meta, tool, +3 more
list_investmentsCRead-only
Investimentos do Item; página numerada, tamanho entre 1 e 500.
Inputs: page, type, page_size. Returns: ok, data, meta, tool, +3 more
list_investment_transactionsCRead-only
Movimentações do investimento com paginação numerada.
Inputs: investment_id (required), page, page_size. Returns: ok, data, meta, tool, +3 more
list_transactionsARead-only
Uma página de até 500 transações v2. Datas YYYY-MM-DD; cursor opaco da resposta anterior.
Inputs: account_id (required), cursor, date_to, date_from. Returns: ok, data, meta, tool, +3 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 18 tools
Most tools are clearly separated by resource and action, with list_* for collections and get_* for single items. A few aggregate tools like get_total_balance, get_net_worth, and get_investment_portfolio could be confused, but their descriptions clarify their distinct scopes.
Tool names follow a consistent list_/get_ + noun pattern with snake_case throughout. The verb prefix reliably indicates whether the tool returns a collection or a single resource, making the naming predictable and easy to navigate.
18 tools is slightly above the ideal compact range, but the count is justified by the breadth of finance domains covered: accounts, transactions, credit cards, investments, expenses, and net worth. No tool feels redundant, though a few could potentially be consolidated.
The surface covers the main read-only finance data needs well: accounts, balances, transactions, statements, credit cards, investments, expenses, and net worth. Minor gaps exist, such as no connection refresh or broader account-level filtering, but core workflows are not blocked.
Maintenance
Related MCP Connectors
Read-only access to your bank, investment, and crypto accounts: balances, transactions, holdings.
Read-only access to your Finch finances: accounts, transactions, spending, net worth, goals.
Read-only personal finance for AI agents: budgets, receipts, net worth, bills. OAuth 2.1.
Read-only bank & investment accounts via Plaid: balances, holdings, transactions, SQL analytics.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables read-only access to personal bank accounts via the TrueLayer API, allowing querying of accounts, balances, transactions, and generating financial analytics such as spending by category, subscriptions, and monthly summaries.91MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server exposing Brazilian Open Finance personal financial data from Pluggy to MCP clients, enabling listing of connections, accounts, transactions, credit card bills, investments, and loans without moving money.4MIT
- AlicenseAqualityBmaintenanceEnables users to ask natural-language questions about their spending, transactions, and connected bank accounts or cards by aggregating read-only Pluggy Open Finance data across multiple itemIds. It exposes schema and SELECT-only query tools over accounts and transactions without moving money or modifying data.214 npm6MIT

Fillfolio MCPofficial
AlicenseNot gradedqualityBmaintenanceEnables read-only access to a Fillfolio account's normalized portfolio data, including net worth, holdings with cost basis, cash and liabilities, activity, and exact asset details, plus optional bank spending summaries, transactions, and budgets for eligible accounts. Clients can query stored data only — they cannot trade, move money, modify holdings, or access credentials.11 npmMIT