Skip to main content

scribo

io.github.causa-prima-ai/scriboVersion 1.0.0

EN 16931-compliant e-invoices: XRechnung, ZUGFeRD, Factur-X, Peppol BIS, Facturae or US PDF. Free.

Status

Responds140 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
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 ms
No sign-in

Claude Code

claude mcp add --transport http scribo https://scribo.causaprima.ai/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: scribo
Remote MCP server URL: https://scribo.causaprima.ai/mcp

Cursor

{
  "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.

Host your own MCP server on run.zero

Tools

4 tools

Tools of scribo
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 NoNoYesYes
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.NoNoNoYes
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 }`.NoYesYesYes
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 declaredNot declaredNot declaredNot 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

Are you the operator? Claim this listing