scribo
io.github.causa-prima-ai/scriboVersion 1.0.0EN 16931-compliant e-invoices: XRechnung, ZUGFeRD, Factur-X, Peppol BIS, Facturae or US PDF. Free.
Status
Responds140 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:47 UTC
- Latency
- 140 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 22:14 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://scribo.causaprima.ai/mcpResponds140 msNo sign-in
Claude Code
claude mcp add --transport http scribo https://scribo.causaprima.ai/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: scribo
Remote MCP server URL: https://scribo.causaprima.ai/mcpCursor
{
"mcpServers": {
"scribo": {
"url": "https://scribo.causaprima.ai/mcp"
}
}
}VS Code
code --add-mcp '{"name":"scribo","type":"http","url":"https://scribo.causaprima.ai/mcp"}'Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
4 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
create_invoiceGenerate an invoice. **Phase 1 supports Germany (DE) and the United States (US) only** — DE emits an EN 16931-compliant XRechnung (UBL by default, CII via format_override) or ZUGFeRD COMFORT, US emits a plain PDF. Any other sender jurisdiction is rejected with `unsupported_jurisdiction`. The format is selected automatically from the sender's country (override with `format_override`, or auto-select XRechnung UBL by setting `recipient.leitweg_id`); German output is validated against EN 16931 before bytes are returned. **B2G submission is NOT included yet** — for XRechnung the response carries the legally binding XML, a PDF preview, and a `submission` object explaining how to upload the XML manually (ZRE / OZG-RE / Peppol direct send is on the roadmap). Surface that limitation to the user before they commit to a B2G invoice. After email verification succeeds, returns a durable download URL plus the resolved format. Synchronous — blocks until validation passes; use `get_invoice` afterwards to re-mint the download URL on demand. Safe to retry with identical inputs: when no `idempotency_key` is supplied the client derives one, so repeats return the original invoice. The exception is `invoice_source_review_required`: the invoice number is already used for that recipient with different facts, or the recipient matches more than one business partner or its name or tax ID conflicts with the business partner on record, and nothing was recorded — do not retry unchanged; when `details.reason` is `unresolved_parties` ask the user to check the recipient's name and tax ID, otherwise ask for a different invoice number. `invoice_admission_busy` means another invoice is being recorded; retry the same call shortly. `invoice_storage_unavailable` means storing the invoice timed out and nothing was recorded; retry the same call shortly. If this returns `verification_required`, ask the user to paste the 8-character code from the verification email, call `verify_email_code`, then retry this | No | No | Yes | Yes |
get_invoiceFetch a previously generated invoice by its `invoice_id` and return its current metadata plus a fresh download URL. It creates nothing, but it may email the sender a verification code. Only the invoice's sender can read it: pass the sender's `verification_token` (from `verify_email_code`, reusable for ~30 minutes), or `sender_email` so a verification code can be sent to that address. Without either, a token cached earlier in this session is used. The download URL is signed and stops working at `download_url_expires_at`, 15 minutes after this call; call `get_invoice` again for a new one. Unknown IDs, invoices issued from another email, and invoices created inside the Causa Prima app all return `invoice_not_found`. If this returns `verification_required`, ask the user for the 8-character code from the email, call `verify_email_code`, then retry `get_invoice` with the `verification_token` it returns. | No | No | No | Yes |
list_supported_jurisdictionsList jurisdictions Scribo can emit invoices for, with each jurisdiction's available formats and the default format applied when no override is given. Phase 1 returns Germany (DE — XRechnung / ZUGFeRD) and the United States (US — plain PDF) only. Read-only and side-effect-free; safe to call before `create_invoice` to confirm a country is supported. Returns an array of `{ jurisdiction, formats[], default_format }`. | No | Yes | Yes | Yes |
verify_email_codeUse this after `create_invoice` or `get_invoice` returns `verification_required`. Arguments: `{ challenge_id, code }`. On success returns a `verification_token`. Retry the same call with the same arguments plus that `verification_token` passed in its `verification_token` field. The token is reusable for ~30 min, so thread the same one into every subsequent `create_invoice` for the same sender email until it expires. Only ever call this with a code the user gave you: attempts are capped and the fifth wrong code revokes the challenge, after which (or once it expires after 15 minutes) no code works. `verification_revoked` means exactly that, so call the tool that sent the code (`create_invoice` or `get_invoice`) again to send the user a new code, never retry this one; on the hosted endpoint such a challenge reports `verification_invalid` instead, so after five failed codes do the same. A `rate_limited` error means stop and tell them to wait, not retry. | Not declared | Not declared | Not declared | Not declared |
Details
- Registry status
- Active
- Published
- Jun 6, 2026
- Updated
- Jun 6, 2026
- Categories (suggested)
- Invoicing and accountingSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared