Woovi Pix MCP
Allows querying and optionally creating Pix charges (cobranças) through the Woovi Pix API. Provides tools such as pix_get_charge to look up a charge's ID, reference, status, and amount, and pix_create_charge (disabled by default, opt-in) to create charges with an explicit value limit and expiration, using each charge reference as the Woovi correlationID and a local idempotency key so repeated payloads return the persisted result. Uncertain calls remain UNKNOWN and are reconciled by querying Woovi by reference before the operation is closed.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Woovi Pix MCP
Servidor MCP local em Go para consultar e, opcionalmente, criar cobranças Pix
Woovi. A ferramenta pix_create_charge fica desativada por padrão. Não há Pix
Out, transferências, reembolsos ou cancelamentos financeiros.
Stack: Go 1.27.3, MCP Go SDK v1.8.0, SQLite embutido e Goose v3 para migrações SQL. Quando escrita está habilitada, o servidor cria o banco privado e aplica as migrações ao iniciar. Não requer PostgreSQL nem Docker.
CLI local: setup, perfis, stdio, doctor, instalação segura em clientes JSON e Litestream opcional. Transporte remoto, distribuição pública e operações Pix Out estão fora do escopo. Validação externa no sandbox Woovi ainda não realizada.
Licença
Copyright 2026 Lucas Eufrasio e contribuidores. Licenciado sob a Apache License 2.0.
Projeto independente, não oficial da Woovi. A licença cobre o código deste repositório, não concede direitos sobre marcas de terceiros e não substitui os termos de uso da API Woovi. Dependências mantêm suas próprias licenças.
Related MCP server: refund-mcp-server
Configurar pela CLI
go build -o ./bin/woovi-pix-mcp ./cmd/woovi-pix-mcp
./bin/woovi-pix-mcp setup --profile sandbox
./bin/woovi-pix-mcp doctor --profile sandboxO assistente interativo permite selecionar entre sandbox
(https://api.woovi-sandbox.com), produção (https://api.woovi.com) e o
simulador local (http://127.0.0.1:8081), informa o identificador estável da
conta e mantém criação de cobranças desativada por padrão. O AppID é digitado
mascarado e salvo no cofre de credenciais do sistema. Se o
cofre não estiver disponível, o setup falha: não há fallback silencioso. Use
setup --profile sandbox --secret-file somente se aceitar guardar o segredo
sem criptografia em arquivo restrito ao usuário. Permissões POSIX são validadas;
ACLs Windows ainda precisam validação antes de recomendar esse fallback lá.
Perfis existentes não são sobrescritos: use outro nome para nova configuração.
Configure seu cliente com o caminho absoluto do binário e argumentos
["stdio", "--profile", "sandbox"]. Não inclua AppID na configuração do cliente.
doctor é diagnóstico local; não chama Woovi nem cria cobrança.
Instalar
No Linux ou macOS, instale a release mais recente em ~/.local/bin:
curl -fsSL https://github.com/lucaswilliameufrasio/woovi-pix-mcp/releases/latest/download/woovi-pix-mcp-installer.sh | shPara instalar uma versão específica, baixe o instalador da release e informe a
tag. Exemplo com v0.1.2:
curl -fsSL https://github.com/lucaswilliameufrasio/woovi-pix-mcp/releases/download/v0.1.2/woovi-pix-mcp-installer.sh | sh -s -- --tag v0.1.2No Windows PowerShell, para a release mais recente:
Invoke-WebRequest https://github.com/lucaswilliameufrasio/woovi-pix-mcp/releases/latest/download/woovi-pix-mcp-installer.ps1 -OutFile woovi-pix-mcp-installer.ps1
.\woovi-pix-mcp-installer.ps1Passe -Tag v0.1.2 para fixar uma versão no Windows.
Os instaladores verificam o SHA-256 do pacote antes da instalação. É necessário
adicionar ~/.local/bin ao PATH se ainda não estiver configurado.
profiles lista os nomes configurados sem carregar ou exibir credenciais.
O identificador de conta precisa ser estável e corresponder à conta do AppID:
o servidor não consegue verificar isso offline. Dois perfis da mesma conta e
ambiente compartilham o histórico de idempotência, inclusive após trocar AppID.
Ao executar woovi-pix-mcp sem argumentos pela primeira vez em um terminal,
sem as duas variáveis legadas completas, o CLI abre o assistente Bubble Tea para
criar o perfil sandbox: use ↑/↓ para escolher o ambiente, Enter para avançar
e Esc para cancelar. Depois de salvar, ele mostra os comandos para validar e
conectar o cliente. Se já houver perfis, use profiles para escolher
explicitamente; o perfil sandbox é iniciado automaticamente quando existir e
nenhum par completo de variáveis de ambiente estiver configurado. Sem terminal,
o CLI não solicita segredos: mostra como executar setup interativamente.
Instalar no cliente MCP
Sem --client, o CLI abre um seletor Bubble Tea com cinco clientes. O arquivo
do projeto atual é sugerido; preview é o padrão e --apply salva com backup,
preservando entradas alheias. Exemplo:
./bin/woovi-pix-mcp install-mcp --profile sandbox --client opencode --config ~/.config/opencode/opencode.json
./bin/woovi-pix-mcp install-mcp --profile sandbox --client opencode --config ~/.config/opencode/opencode.json --applySuporta OpenCode V2, Claude Code, Cursor, Codex CLI e Gemini CLI. JSONC, arquivos de configuração não privados ou symlinks são recusados; uma entrada diferente com o mesmo nome não é sobrescrita. Codex TOML recebe a entrada ao final para preservar comentários e tabelas existentes.
Comandos de desenvolvimento
make help lista os comandos disponíveis. Exemplos:
Para make fmt/make check, além de Go, instale golangci-lint 2.14.0, Python
3.12+ e uv. Ruff é resolvido na versão fixa 0.16.10. O lint também verifica
espaçamento entre blocos Go; não basta passar no gofmt.
make test
make check
make migrate-create name=add_charge_metadataOs testes usam arquivos SQLite reais temporários, inclusive processos separados.
As novas migrations são timestamped e criadas pela
Goose CLI. Não há target migrate-down/reset: a migration Down remove as
tabelas de operação/auditoria e pode apagar evidência de idempotência.
Processo de release
Prepare Release abre um PR de changelog; após revisão/CI e merge, uma tag
vX.Y.Z dispara Release, que repete os checks e cria um draft com binários
Linux/macOS/Windows (amd64/arm64) e checksums SHA-256. Publicar o draft continua
sendo uma decisão manual. Nenhuma release é disparada ao adicionar os workflows.
Veja docs/releases.md para configuração, preparação,
tagueamento, verificação de artefatos e limitações de plataforma. Para validar
o empacotamento local sem publicar: make release-snapshot (GoReleaser 2.18.2).
Executar
./bin/woovi-pix-mcp stdio --profile sandboxPara compilar um binário local sem instalá-lo globalmente:
go build -o ./bin/woovi-pix-mcp ./cmd/woovi-pix-mcpExecute o binário com stdio --profile sandbox para iniciar o servidor. Sem
argumentos, a primeira execução em um terminal orienta a configuração. Se já
houver um perfil sandbox, o comando sem argumentos inicia esse perfil; se
houver apenas perfis com outros nomes, o CLI abre um seletor interativo. Em
execuções sem terminal, escolha explicitamente com stdio --profile NAME. O
diretório bin/ é apenas uma saída local e não deve ser versionado.
O AppID fica no processo servidor e nunca é um argumento ou resultado MCP. Logs
operacionais vão para stderr; stdout fica reservado ao protocolo stdio. O host
Woovi de produção é https://api.woovi.com, mas o servidor aceita apenas HTTPS
para hosts remotos.
Criação é uma capacidade explicitamente opt-in. Requer identificador fixo da conta autorizada e limite máximo de R$ 100.000 por cobrança, sem banco externo:
No setup, responda yes somente se quiser habilitar criação. Para automação,
o modo legado sem subcomando ainda aceita WOOVI_API_BASE_URL, WOOVI_APP_ID,
WOOVI_ACCOUNT_ID e WOOVI_ENABLE_CHARGE_CREATION; injete o segredo pelo cofre
da automação, nunca em argv, histórico do shell ou configuração dos clientes.
Cada referência é usada como correlationID Woovi e chave idempotente local.
Repetir o mesmo payload retorna resultado já persistido; outra carga para a
mesma referência conflita. Uma chamada com resultado incerto permanece UNKNOWN
e não é reenviada automaticamente: a ferramenta primeiro consulta a Woovi pela
referência e só fecha a operação quando referência e valor batem. Se não for
encontrada, permanece UNKNOWN. O valor explícito está limitado a R$ 100.000 e
expiração de 300 a 2.592.000 segundos. Tentativas e resultados são auditados no
SQLite sem persistir AppID ou conteúdo do QR no log de auditoria. Esta fatia
não implementa approval workflow.
O arquivo SQLite é criado sob o diretório de configuração do usuário, em
woovi-pix-mcp/state/<escopo>/operations.db; o escopo separa URL/ambiente e conta.
WOOVI_DATABASE_PATH permite indicar outro arquivo privado. Nunca apague o
arquivo para resolver um erro: ele guarda a evidência das tentativas anteriores.
SQLite usa WAL, synchronous FULL e espera limitada para escritores concorrentes.
Não há DATABASE_URL nem importação PostgreSQL; esse MCP não teve usuários legados.
Teste rápido local — sem chamar a Woovi
Execute os comandos na raiz deste repositório, com Go 1.27.3 instalado. Este roteiro usa somente dados fictícios e não precisa de conta Woovi ou Docker.
1. Terminal 1: subir o simulador
mise exec go@1.27.3 -- go run ./cmd/woovi-simulatorDeixe esse terminal aberto. O simulador escuta em 127.0.0.1:8081.
2. Terminal 2: compilar e configurar
go build -o ./bin/woovi-pix-mcp ./cmd/woovi-pix-mcp
./bin/woovi-pix-mcp setup --profile testeResponda ao assistente:
Ambiente:
simulatorConta:
conta-testeHabilitar criação:
noAppID:
simulator(a entrada fica oculta)
Se o cofre do sistema estiver indisponível, repita o setup com o fallback explícito abaixo. Ele guarda o AppID sem criptografia em arquivo privado 0600:
./bin/woovi-pix-mcp setup --profile teste --secret-fileSe o perfil já existir, reutilize-o ou escolha outro nome; não há sobrescrita.
3. Conferir a configuração
./bin/woovi-pix-mcp doctor --profile testeEsperado: ambiente simulator, credencial disponível sem exibir AppID e
criação desabilitada. O banco pode aparecer como não inicializado: isso é normal
em modo somente leitura. doctor não consulta nem mesmo o simulador.
4. Conectar ao OpenCode V2
Para configurar um cliente no projeto atual, execute o seletor interativo:
./bin/woovi-pix-mcp install-mcp --profile testeEle oferece OpenCode, Claude Code, Cursor, Codex CLI e Gemini CLI, usando os
arquivos de configuração do projeto atual por padrão. O primeiro comando
faz preview; revise e repita com --apply para gravar. Também é possível
escolher cliente e arquivo explicitamente:
./bin/woovi-pix-mcp install-mcp --profile teste --client opencode --config opencode.json
./bin/woovi-pix-mcp install-mcp --profile teste --client opencode --config opencode.json --applyOs caminhos padrão são opencode.json, .mcp.json, .cursor/mcp.json,
.codex/config.toml e .gemini/settings.json, respectivamente. JSONC não é
reescrito; TOML do Codex recebe a entrada ao final do arquivo. O instalador faz
backup antes de aplicar e recusa sobrescrever uma entrada Woovi conflitante.
Ele registra somente binário e perfil, nunca AppID; mantenha o binário no
caminho usado na instalação.
Instale também o skill e os avisos de segurança específicos dos hosts suportados no projeto atual. Revise o preview antes de aplicar:
./bin/woovi-pix-mcp install-agent-assets
./bin/woovi-pix-mcp install-agent-assets --applyIsso instala o skill em .agents/skills/ e .claude/skills/, o hook
SessionStart do Claude Code e um plugin do OpenCode que acrescenta o aviso ao
contexto de cada chamada. O aviso não bloqueia ferramentas nem substitui
autorização; pix_create_charge é uma operação de escrita opcional. Nenhuma
configuração global dos clientes é alterada.
5. Consultar a cobrança fictícia
Reabra o OpenCode para carregar o servidor woovi-pix-teste e peça:
Use o servidor woovi-pix-teste para consultar a cobrança
demo-chargecompix_get_charge. Não use outros servidores nem crie cobranças.
Esperado: ID demo-charge, referência demo-order-001, estado ACTIVE e
valor 1250 centavos (R$ 12,50), com código Pix fictício. Nenhuma chamada
Woovi ou operação financeira real é feita. Termine o simulador com Ctrl+C.
O simulador também mantém uma assinatura sintética demo-subscription em memória
para validar cancelamento, leitura do snapshot e paginação local:
curl -i -X PUT http://127.0.0.1:8081/api/v1/subscriptions/demo-subscription/cancel \
-H 'Authorization: simulator'
curl -sS http://127.0.0.1:8081/api/v1/subscriptions/demo-subscription \
-H 'Authorization: simulator'
curl -sS 'http://127.0.0.1:8081/api/v1/subscriptions/demo-subscription/installments?skip=0&limit=1' \
-H 'Authorization: simulator'
curl -sS 'http://127.0.0.1:8081/api/v1/subscriptions/demo-subscription/installments?skip=1&limit=1' \
-H 'Authorization: simulator'O primeiro comando retorna 204; o segundo mostra status: CANCELED. O estado
é sintético, vive apenas na memória do processo e volta a APPROVED após restart.
O GET da assinatura devolve somente IDs e estado fictícios; os GETs de parcelas
aceitam skip e limit de 1 a 100 e retornam pageInfo. A primeira página
inclui uma parcela COMPLETED, a segunda uma SCHEDULED.
Esse endpoint existe para exercitar adapters locais, não é ferramenta MCP, não
cria uma recorrência Woovi e não chama nem cancela uma assinatura real.
O simulador manual de cobrança também aceita consulta/criação em memória; criação e idempotência são cobertas adicionalmente pelos testes automatizados. Para rodar a suíte e as verificações do projeto:
make checkTeste com o sandbox da própria Woovi
Este roteiro usa a API de teste externa da Woovi, não o simulador local.
Não é necessário executar woovi-simulator. Execute apenas com autorização
para usar essa conta; os passos abaixo não foram executados pela implementação
ou pela CI. Não use credenciais de produção nem faça pagamentos reais.
1. Preparar a conta e uma cobrança de teste
Acesse app.woovi-sandbox.com. O sandbox tem cadastro separado: dados de produção não funcionam nele.
No painel do sandbox, obtenha um AppID da sua conta. A documentação de autenticação indica
Admin Panel > Permissions > APIspara gerar a chave, com permissão de administrador. Use os escopos necessários para consulta.Tenha uma cobrança criada no sandbox pelo painel e copie seu ID ou
correlationID.demo-chargeé exclusivo do simulador e não deve ser usado aqui.
Referências oficiais: ambiente de teste e criação da chave API.
2. Compilar e configurar o perfil sandbox
go build -o ./bin/woovi-pix-mcp ./cmd/woovi-pix-mcp
./bin/woovi-pix-mcp setup --profile sandboxResponda:
Ambiente:
sandbox(selecionahttps://api.woovi-sandbox.com)Conta: um identificador estável dessa conta, por exemplo
minha-conta-sandboxHabilitar criação:
no, para começar somente com consultaAppID: o AppID do sandbox, no prompt oculto; nunca cole no chat ou no cliente
A conta é o escopo local de idempotência, não outro segredo; mantenha o mesmo identificador ao criar perfis para essa conta. Se o cofre estiver indisponível e você aceitar o arquivo privado sem criptografia, use explicitamente:
./bin/woovi-pix-mcp setup --profile sandbox --secret-file3. Conferir e conectar ao cliente
./bin/woovi-pix-mcp doctor --profile sandbox
./bin/woovi-pix-mcp install-mcp --profile sandbox \
--client opencode --config ~/.config/opencode/opencode.json
./bin/woovi-pix-mcp install-mcp --profile sandbox \
--client opencode --config ~/.config/opencode/opencode.json --applyValem os requisitos de JSON e permissões do roteiro local. Esperado no doctor:
ambiente sandbox, credencial disponível e criação desabilitada. Isso valida
apenas a configuração local, não autenticação ou conectividade com a Woovi.
4. Consultar uma cobrança do sandbox
Reabra o cliente e substitua <ID_OU_CORRELATION_ID> pelo identificador copiado
do painel. Se houver outros perfis instalados, selecione woovi-pix-sandbox:
Use somente o servidor woovi-pix-sandbox para chamar
pix_get_chargecomidigual a<ID_OU_CORRELATION_ID>. Não crie nem pague cobranças.
Esperado: a cobrança da sua conta sandbox, com ID/referência, estado e valor em centavos coerentes com o painel, sem AppID ou dados do pagador. Estado e valor dependem da cobrança escolhida; não há resultado fixo de R$ 12,50 aqui. Essa consulta é a verificação efetiva de API, credencial e escopo da conta.
5. Opcional: testar criação e idempotência no sandbox
Somente se quiser testar escrita e tiver autorização, siga o roteiro detalhado em docs/sandbox.md. Ele cria outro perfil com opt-in explícito e explica como repetir o mesmo payload e verificar conflito. Não pague o QR gerado, não use produção e não invente outra referência para contornar um timeout ou resultado incerto.
Contrato Woovi verificado
Autenticação por
Authorization: <AppID>; API retorna/aceita JSON e requer HTTPS. Limite documentado: 10 requisições por segundo.Consulta:
GET /api/v1/charge/{id};idaceita identificador da cobrança oucorrelationID.O retorno MCP é minimizado a identificador, referência, estado, centavos BRL, expiração e código Pix; dados do pagador e payloads brutos são descartados.
O cliente aplica limiter local conservador de 10 req/s (sem rajada) para respeitar o limite publicado pela Woovi.
Referências: Autenticação e limites, API Redoc, Correlation ID/idempotência.
O simulador de teste também suporta POST e mantém cobranças idempotentes pela referência em memória; nunca use credencial ou host de produção nos testes.
Todos os testes de persistência SQLite executam automaticamente em make test,
sem credenciais ou infraestrutura externa.
Litestream opcional e recuperação
Instale separadamente Litestream 0.5.12+ (série 0.5.x), validado com 0.5.17. Não é iniciado automaticamente e o MCP funciona sem ele.
./bin/woovi-pix-mcp replica-setup --profile sandbox --replica-url file:///absolute/private/backup/sandbox
# Alternativa: S3 ou compatível; access key e secret key entram em prompts sem eco.
./bin/woovi-pix-mcp replica-setup --profile sandbox --replica-url s3://my-bucket/account-specific-prefix --region us-east-1
./bin/woovi-pix-mcp replica-run --profile sandboxUse apenas um dos destinos; configuração existente não é sobrescrita. Para S3
compatível use --endpoint https://.... Credenciais usam cofre do sistema ou
--secret-file explicitamente; não coloque credenciais na URL. O processo filho
recebe somente as credenciais da réplica, não o AppID. Prefira discos privados e
criptografia/controle de acesso do bucket: a réplica contém dados de cobranças.
Inicie stdio uma vez para inicializar o banco antes da primeira réplica.
replica-run fica em foreground; Ctrl+C o encerra. Um lock impede duas réplicas
gerenciadas para o mesmo banco. replica-status verifica o estado local via
Litestream; não atesta sincronização remota nem atraso zero. Saída bruta do
processo externo é suprimida para evitar vazamento em mensagens de erro.
Para recuperar: pare todos os processos MCP e réplica; arquive manualmente o banco e seus sidecars, sem excluí-los. O destino e sidecars precisam estar ausentes; não existe opção force/overwrite nesta CLI.
./bin/woovi-pix-mcp replica-restore --profile sandbox --acknowledge-stale-state
./bin/woovi-pix-mcp doctor --profile sandboxA restauração faz integrity check completo e cria operations.db.recovered,
que bloqueia inicialização com criação habilitada. Não remova esse marcador
antes de conferir o histórico da Woovi e reconciliar operações possivelmente
ausentes na cópia. Se não conseguir reconciliar, permaneça em leitura. Não há
importação automática de histórico PSP nem botão de desbloqueio automático.
Uma falha de restore pode deixar arquivos parciais: arquive-os e investigue,
não reinicie com estado vazio. O marcador também permanece em caso de falha.
Litestream replica de forma assíncrona: RPO depende do último envio confirmado; RTO depende da recuperação manual. Não oferece HA automática ou multiwriter. Uma cópia antiga pode esquecer uma criação já efetivada no provedor; restaurar o banco não autoriza repetir pedidos financeiros com novas referências.
Integração real de réplica em arquivo e armazenamento S3 local (SeaweedFS):
TEST_LITESTREAM_BINARY=/absolute/path/litestream make test-litestreamEsse target precisa Docker somente para os testes opcionais de réplica; uso normal continua sem Docker. CI executa ambos os backends e valida o checksum do binário fixado. Não chama Woovi nem usa credenciais reais.
Roteiro e troubleshooting: docs/sandbox.md.
This server cannot be deployed
Maintenance
Related MCP Connectors
Accept Pix in Brazil and settle in USDT/USDC; pay Pix with crypto; verify a Pix with no API key.
Issue registered Brazilian bank slips (boleto) and Pix charges on PagHiper with the official API. Cr
Brazilian fiscal MCP server - issue NF-e, NFC-e, NFS-e, CT-e, MDF-e and DC-e via SEFAZ.
Read-only finance MCP server. Connects your banks, cards, payment apps, books and payroll into one ledger for your AI. Can't move money. Open source (AGPL-3.0), free during beta.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables local-first expense logging, editing, and analysis through natural language conversation, backed by a SQLite database and accessible via MCP over stdio.8MIT
- FlicenseNot gradedqualityCmaintenanceEnables retrieving customer records and triggering validated refunds via JSON-RPC over stdio.-
- FlicenseBqualityBmaintenanceEnables an AI assistant to read and manage a local project-management database over stdio: listing and creating projects, tasks, expenses, chats and people, and pulling money, margin, deadline and overdue summaries. It runs on the same service layer and SQLite file as the bundled web UI, so figures shown to the assistant and to the human always agree.14-
- AlicenseNot gradedqualityBmaintenanceEnables task management with persistent SQLite storage, along with tools, resources, subscriptions, prompts, and completions over stdio or Streamable HTTP with per-user authentication.7 npmMIT