{"slug": "issue-brazilian-invoices-from-claude-with-an-mcp-server-and-a-human-approval", "title": "Issue Brazilian invoices from Claude with an MCP server (and a human approval step)", "summary": "SendNF released an MCP server that exposes Brazilian invoice issuance (NFS-e, NFC-e and NF-e) to AI agents through 44 tools, including CNPJ lookup, service-code search, DPS validation and document previews and issuance. By default, any key used over MCP requires human approval: drafts are left as pending_approval with a PDF preview and nothing reaches the tax authority until a person signs off in the dashboard or via an approver link, with a 7-day expiry and an audit log recording approver, time and IP. The server uses Streamable HTTP without sessions and returns 401 without a key; the manifest and examples are public on GitHub while the product code is private.", "body_md": "Brazilian service invoices (NFS-e) are issued per city or through a national system, and every field is checked by tax authorities. SendNF exposes this as an API and as an MCP server, so an AI agent can look up a company by CNPJ, preview an invoice and issue it.\n\n**What you need**\n\n`nt_test_` are sandbox keys (no tax value). `nt_live_` keys issue real invoices.\n**Configure**\n\n```\n{\n  \"mcpServers\": {\n    \"sendnf\": {\n      \"type\": \"http\",\n      \"url\": \"https://api.sendnf.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer nt_test_YOUR_KEY\" }\n    }\n  }\n}\n```\n\nThe server uses Streamable HTTP, with no session. Without a key it answers 401.\n\n**What the agent can do (44 tools)**\n\n`lookup_cnpj` (public data from the tax authority, and which city system applies), `search_service_codes` (national service list, LC 116, with NBS), `check_readiness` (what is still missing for a company), `validate_dps` (checks a DPS XML against the official layout; it does not guarantee acceptance by the city).`preview_nfse`, `preview_nfce`, `preview_nfe`.` issue_nfse`, `issue_nfce`, `issue_nfe`, and `cancel_document`.\n**The human approval step**\n\nBy default, any key used through MCP requires approval. `create_note_draft` builds the invoice, validates it and leaves it as `pending_approval` with a PDF preview. Nothing goes to the tax authority until a person approves in the dashboard or through the approver link. Approval expires in 7 days, and the audit log records who approved, when and from which IP.\n\n**Limits**\n\nThe repository [https://github.com/sendnf/sendnf-mcp](https://github.com/sendnf/sendnf-mcp) has the manifest, examples and tool list; the product code is private. SendNF issues NFS-e, NFC-e and NF-e (model 55) for MEI and Simples Nacional; it does not issue CT-e or MDF-e. Docs: [https://sendnf.com/mcp/](https://sendnf.com/mcp/) . Plans and prices: [https://sendnf.com/precos/](https://sendnf.com/precos/) .", "url": "https://wpnews.pro/news/issue-brazilian-invoices-from-claude-with-an-mcp-server-and-a-human-approval", "canonical_source": "https://dev.to/cendyandreoli/issue-brazilian-invoices-from-claude-with-an-mcp-server-and-a-human-approval-step-edi", "published_at": "2026-11-09 20:19:34+00:00", "updated_at": "2026-11-09 20:25:26.850317+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools", "developer-tools"], "entities": ["SendNF", "Claude", "GitHub", "NFS-e", "NFC-e", "NF-e"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/issue-brazilian-invoices-from-claude-with-an-mcp-server-and-a-human-approval", "markdown": "https://wpnews.pro/news/issue-brazilian-invoices-from-claude-with-an-mcp-server-and-a-human-approval.md", "text": "https://wpnews.pro/news/issue-brazilian-invoices-from-claude-with-an-mcp-server-and-a-human-approval.txt", "jsonld": "https://wpnews.pro/news/issue-brazilian-invoices-from-claude-with-an-mcp-server-and-a-human-approval.jsonld"}}