Invoice by Ouroboros Apps
Fatura por Ouroboros Apps: itens de linha de fatura para freelancers, tarifas, datas de vencimento e termos de atraso
Servidor MCP hospedado
npx add-mcp 'https://invoice-continuity2.vercel.app/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Invoice
O Invoice mantém a fatura aprovada de um freelancer — itens de linha, quantidades, a taxa já aprovada, a data de vencimento e os termos de atraso — e permite que um assistente leia esse registro antes de responder. Um assistente não pode adicionar uma linha, alterar uma taxa, inventar um desconto ou mover uma data de vencimento, a menos que essa alteração seja explicitamente aprovada.
Ele funciona com ChatGPT, Claude, Gemini, Grok e Cursor, além de qualquer outro cliente MCP que suporte Streamable HTTP e OAuth. Não é um plugin exclusivo do ChatGPT.
Entre com sua conta Invoice quando o assistente abrir o OAuth. Não cole uma chave de API ou senha em um cabeçalho. O Invoice suporta registro dinâmico de cliente: deixe o client id e o secret vazios. Os metadados do recurso protegido em /.well-known/oauth-protected-resource/mcp apontam os clientes para o emissor OAuth, que os registra.
As ferramentas do Invoice exigem Pro ou uma avaliação ativa. Uma nova assinatura inclui um teste de 14 dias. Esta página não lista um preço. O checkout mostra o intervalo de cobrança e os termos de pagamento. Os valores armazenados em uma fatura são os valores aprovados pelo freelancer, em unidades menores inteiras da moeda da fatura. Eles não são um preço de produto.
Para auto-hospedar, execute o servidor e use a URL base que você configurar. O endereço MCP padrão é http://127.0.0.1:3000/mcp.
Servidor hospedado
- URL do servidor MCP:
https://invoice-continuity2.vercel.app/mcp(Streamable HTTP, login OAuth) - Documentação: https://ouroborosapps.com/docs/invoice
- Status: acesso antecipado. Cole a URL no modo desenvolvedor do Claude, Cursor, Grok ou ChatGPT.
- Nome do registro:
io.github.LAHutchins91/invoice
O que o assistente pode fazer
Após você aprovar a conexão, o servidor expõe estas ferramentas:
- list_invoices
- begin_invoice
- read_invoice
- place_line
- describe_line
- quote_line_rate
- set_line_quantity
- set_invoice_due
- write_late_terms
- offer_discount
- seal_invoice
- suggest_invoice_change
- accept_invoice_change
read_invoice é a leitura que o assistente deve fazer antes de responder. Valores de rascunho não são um compromisso aprovado. Uma alteração de fatura sugerida não altera o registro. Após a fatura ser selada, place_line recusa uma nova linha, quote_line_rate recusa uma taxa alterada, offer_discount recusa um desconto e set_invoice_due recusa uma data de vencimento movida. Essas alterações passam por suggest_invoice_change e depois accept_invoice_change, e somente quando você aprovar explicitamente essa alteração.
O assistente só chama essas ferramentas quando você e o host permitirem.
Conectar
Cursor, em ~/.cursor/mcp.json ou em um projeto .cursor/mcp.json:
{
"mcpServers": {
"invoice": {
"url": "http://127.0.0.1:3000/mcp"
}
}
}
Não adicione um bloco de cabeçalhos. O Cursor registra um cliente e abre o login.
Claude Code:
claude mcp add --transport http invoice http://127.0.0.1:3000/mcp
Não passe um cabeçalho Authorization. Outros clientes usam o mesmo endereço, escolhem OAuth e deixam client id e secret vazios. As etapas para ChatGPT, Claude, Gemini, Grok e Cursor estão na página de conexão em /connect.
Os metadados do registro para este servidor estão em server.json (io.github.LAHutchins91/invoice). A URL remota lá é https://invoice-continuity2.vercel.app/mcp.
Executar
npm install
npm test
npm run typecheck
npm run build
npm start
Quando o stdin é um terminal, o Invoice serve Streamable HTTP na porta 3000. Quando o stdin não é um terminal, ele fala MCP via stdio e ainda abre a porta HTTP. Os logs durante o modo stdio vão para o stderr para não se misturarem com o protocolo.
Os registros são armazenados de forma durável em um arquivo JSON. O caminho padrão é ~/.invoice/invoice.json. Defina INVOICE_DATA_PATH para movê-lo. Um processo do servidor é dono desse arquivo. Não o aponte para o arquivo de dados de outro produto.
O OAuth usa a mesma ideia de um servidor de autorização Supabase com registro dinâmico de cliente. Defina estas opções no processo do servidor, não em um cabeçalho MCP:
APP_BASE_URL(padrãohttp://localhost:3000)SUPABASE_URLSUPABASE_ANON_KEYSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRETSTRIPE_PRICE_MONTHLYeSTRIPE_PRICE_YEARLY(IDs de catálogo do Stripe, não preços)OPENAI_APPS_CHALLENGE(opcional; quando definido,/.well-known/openai-apps-challengeretorna esse token como texto simples)
Chamadas de ferramentas que não sejam de descoberta exigem uma conta conectada cujo status de assinatura seja active ou trialing.
Mais da Ouroboros: https://ouroborosapps.com