Kema Invoice MCP connector

MCP serverCommerce & finance

Compliant invoicing for freelancers: create, issue and track invoices from your AI agent.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use Kema Invoice MCP connector

From the project's README

As published by Kema-Studio/kema-invoice-mcp in README.md.

Kema Invoice is compliant e-invoicing software that AI agents can operate through the Model Context Protocol. Connect the remote MCP server to Claude, Cursor or any MCP client, authorize once with OAuth 2.1, and your agent can create, issue, send and track invoices, quotes and retainers in plain language. Invoices are generated as Factur-X (EN 16931) and transmitted through an accredited platform. Nothing to install: the server runs at https://mcp.kema-studio.com/api/mcp.

Website · Documentation · Connect your agent · MCP Registry entry · Version française

What this repository is

The connector is a remote MCP server (Streamable HTTP + OAuth 2.1). There is no package to install and the server code is not published here. This repository holds what an integrator or a directory needs:

FilePurpose
tools.jsonThe 41 tools with title, description, group and access hints. Generated from the server code, never edited by hand.
server.jsonThe declaration published to the official MCP Registry (com.kema-studio/invoice).
examples/Ready-to-paste client configurations and a prompt playbook.
scripts/verify-connection.tsA small open-source script that runs the OAuth flow and lists the tools, to check a connection end to end.
CHANGELOG.mdConnector versions.

Connect in two minutes

ClientHow
claude.ai / Claude DesktopSettings › Connectors › Add custom connector, paste https://mcp.kema-studio.com/api/mcp, authorize once.
Claude Codeclaude mcp add kema-invoice --transport http --url https://mcp.kema-studio.com/api/mcp
CursorAdd examples/cursor-mcp.json to .cursor/mcp.json.
Any MCP clientStreamable HTTP transport, URL above, OAuth 2.1 with PKCE and dynamic client registration (RFC 7591). Authorization server metadata is discovered from /.well-known/oauth-protected-resource.

The first call opens a consent page on auth.kema-studio.com. You sign in with your Kema Invoice account, approve, and the client stores the token. Access can be revoked at any time from the app or from the client.

No account yet? Create one: 14-day trial with 10 invoices included, one user, no credit card. Then a single plan at €10 per user per month excl. VAT, every feature included, cancel at any time.

What your agent can do

Invoices (16)

ToolWhat it doesAccess
create_invoiceCreate a new invoice in Draft status for a company, with line items. The invoice is NOT sent or certified - a human issues it from the app (or use issue_invoice). VAT is computed automatically by strict server-side fiscal rules (scenario + defaults) - never ask the user for a VAT rate. The fiscal scenario and client snapshot are frozen at creation.write
issue_invoiceIssue a Draft invoice - the legal act of CREATING the invoice (the product calls this 'Créer la facture'; the old 'send' concept is obsolete). The draft becomes a certified, immutable invoice (status Sent, displayed as 'Créée') and is IMMEDIATELY submitted for fiscal certification. IRREVERSIBLE and legally binding under French law - undone only with a credit note. ALWAYS show the user the invoice details and get their explicit approval before calling with confirm:true. Without confirm, returns a preview of what will be certified.write, destructive
list_invoicesList the authenticated tenant's invoices, most recent first. Supports filtering by status, document type, and a free-text search on invoice number or client name, plus pagination.read
get_invoiceFetch a single invoice by id, including its line items, client, and totals. Returns null-shaped error if the invoice is not visible to the caller.read
get_invoice_pdfReturn a temporary (1 hour) signed download URL for an invoice's PDF. Works for any document visible to the caller: imported invoices return their uploaded file; invoices issued in Kema Invoice (by the app or an agent) are rendered server-side with the workspace branding and, once certified, embed the Factur-X XML. Drafts render too (flagged is_draft: true) but are not legal documents yet.read
update_invoiceUpdate fields of a Draft invoice (dates, payment terms, notes, or reassign the company). Only Draft invoices can be modified - a Sent/certified invoice is immutable.write
delete_invoiceSoft-delete a Draft invoice. Irreversible from the user's view. Call with confirm:true to actually delete; without it, returns a preview of what would be deleted.write, destructive
cancel_invoiceCancel a non-paid invoice (status → Cancelled). Irreversible. For a certified (Sent) invoice, French law generally requires a credit note (create_credit_note) rather than a plain cancel. Call with confirm:true to act; otherwise returns a preview.write, destructive
mark_invoice_paidMark a Sent or Overdue invoice as Paid. Optionally set the payment date (defaults to now).write
add_invoice_itemAdd a line item to a Draft invoice. Totals are recalculated automatically.write
update_invoice_itemUpdate a line item on a Draft invoice. Totals are recalculated automatically. Item ids come from get_invoice or add_invoice_item.write
delete_invoice_itemRemove a line item from a Draft invoice. Totals are recalculated automatically. Item ids come from get_invoice or add_invoice_item. Call with confirm:true to delete; without it, returns a preview of the item.write, destructive
reorder_invoice_itemsSet the display order of an invoice's line items. Pass the full desired order: every item id with its 0-based display_order. Item ids come from get_invoice or add_invoice_item.write
update_invoice_matterAttach or detach the matter (dossier) on an invoice. Purely organizational - allowed even after the invoice is Sent, but not on a Cancelled invoice. Pass matter_id null to detach.write
check_certification_statusRefresh an issued invoice's fiscal certification status by querying the certification provider and reconciling it into the database. Use after issue_invoice when certification_status is 'processing' or looks stale.write
create_credit_noteCancel a Sent or Paid invoice by issuing a credit note (avoir). The credit note is a legal fiscal document (fiscally certified when the original was certified) and is IMMUTABLE once created. IRREVERSIBLE. ALWAYS get the user's explicit approval before calling with confirm:true. Without confirm, returns a preview.write, destructive

Rectification and import (3)

ToolWhat it doesAccess
rectify_invoiceCreate a rectifying invoice (facture rectificative) for a Sent or Paid invoice: a NEW Draft invoice pre-filled from the original (same client, copied line items unless overridden) and legally linked to it. The original is marked Rectified only when the rectificative is issued. Call with confirm:true to create; without it, returns a preview.write
get_rectification_linksFor one invoice, return the rectification chain: the original it replaces (if it is a rectificative) and/or the rectificative that replaced it (if it was rectified). Both null when the invoice is not part of a chain.read
import_external_invoiceImport a historical/external invoice with its OWN invoice number (kept verbatim), totals, and status - no line items. Use for migrating past invoices issued outside Kema Invoice; NOT for creating new invoices (use create_invoice).write

Quotes (5)

ToolWhat it doesAccess
create_quoteCreate a Draft quote (devis) for a company. Quotes are not fiscal documents - no certification. Dates default server-side (issue today, due/valid +30 days). Requires a matter id (dossier) the quote belongs to.write
send_quoteTransition a Draft quote to Sent (the client-facing state). No certification is involved - quotes are commercial documents. French B2B validation (SIREN/VAT) applies when the tenant is French.write, destructive
accept_quoteMark a Sent quote as Accepted by the client. Follow up with convert_quote_to_invoice to bill it.write, destructive
reject_quoteMark a Sent quote as Rejected by the client. This ends the quote's lifecycle. Call with confirm:true to apply; without it, returns a preview.write, destructive
convert_quote_to_invoiceCreate a new Draft invoice from an Accepted quote (line items copied, source_quote_id set for traceability). The invoice then follows the normal lifecycle (issue_invoice to make it legally binding). Call with confirm:true to apply; without it, returns a preview.write

Retainers (6)

ToolWhat it doesAccess
create_provisionCreate a provision document (avance sur honoraires, retainer) in Draft status for a company, optionally attached to a matter. NOT issued or certified - use send_provision for the legal issuance. VAT is computed automatically by strict server-side fiscal rules - never ask the user for a VAT rate. Provisions use their own PROV number series and, once paid, become a client credit deductible from the final invoice (apply_provisions_to_invoice).write
send_provisionIssue a Draft provision - the legal act of creating it. The draft becomes a certified document (status Sent) and is IMMEDIATELY submitted for fiscal certification (PROV series). IRREVERSIBLE and legally binding under French law. ALWAYS show the user the provision details and get their explicit approval before calling with confirm:true. Without confirm, returns a preview of what will be certified.write, destructive
mark_provision_paidMark an issued provision (status Sent/Overdue) as Paid. A paid provision becomes a client credit that can be deducted from that client's final invoice with apply_provisions_to_invoice.write
list_available_provisionsList PAID provisions (avances sur honoraires, retainers) that have not been applied to a final invoice yet - the deductible client credit. Without matter_id, lists the standalone retainers (no matter), which is the normal case in Kema Invoice; with matter_id, lists that matter's retainers. Use before apply_provisions_to_invoice.read
apply_provisions_to_invoiceDeduct one or more PAID provisions from a DRAFT final invoice of the same client (and of the same matter when one is attached). Updates the invoice's advances_total and amount_due. Reversible while the invoice is still Draft (remove_provision_from_invoice).write
remove_provision_from_invoiceDetach a provision from a DRAFT final invoice and recalculate its advances_total / amount_due. The provision becomes available again for that matter.write

Customers (5)

ToolWhat it doesAccess
list_companiesList the authenticated tenant's client companies (name, email, VAT/tax id, country). Useful to resolve a company id before other lookups.read
get_companyFetch one customer company with the full billing-relevant record: legal identity, VAT/SIREN, address, contact details, and client profile classification.read
create_companyCreate a customer company for the tenant. A VAT/tax id is required later to bill it as B2B.write
update_companyUpdate fields of an existing client company (name, contact info, address, VAT number, SIREN). Only provided fields change. Fixing the VAT number / SIREN / address here is often required before an invoice for this client can be certified.write
delete_companySoft-delete a client company. Blocked when contacts are still linked to it. Call with confirm:true to delete; without it, returns a preview.write, destructive

Customer profiles (3)

ToolWhat it doesAccess
get_invoice_client_profilePer-company invoicing defaults (payment terms, delivery channel, custom invoice prefix). Returns {profile: null} when the company has none - profiles are created lazily.read
upsert_invoice_client_profileCreate or update a company's invoicing defaults (payment terms, delivery channel, invoice prefix). These defaults pre-fill future invoices for that client.write
delete_invoice_client_profileRemove a company's invoicing defaults (the company itself is untouched). Call with confirm:true to actually delete; without it, returns a preview.write, destructive

Reporting (3)

ToolWhat it doesAccess
get_revenue_summaryAggregate revenue figures: collected in the period (by payment date), current outstanding and overdue (point-in-time), documents issued in the period, draft count, and net credit-note effect. Defaults to the current month.read
get_settingsRead-only snapshot of the tenant's invoicing settings: legal identity, fiscal country and regime, default VAT rate and payment terms, billing email, and the caller's UI language. Settings can only be CHANGED from the app.read
list_mcp_activityThe tenant's recent agent activity log: one entry per successful MCP tool call (tool name, related invoice number when known, timestamp). Newest first.read

Design rules the server follows: one title per tool, readOnlyHint on reads and an explicit destructiveHint on writes, a description on every parameter, an outputSchema and structuredContent on every result. Tool names are frozen: your prompts and automations keep working across versions.

A refused call (no active subscription, quota reached) is returned as a tool result written for the model, not as a transport error: the connector stays connected and keeps listing its tools.

Try it

Ask your agent, in your language:

  • "Invoice 3 days of consulting to Dupont SARL at €800 per day."
  • "List my unpaid invoices and mark FAC-2026-0412 as paid."
  • "Turn quote DEV-2026-0031 into an invoice and send it."

More in examples/prompts.md.

Compliance and data

  • Invoices are produced as Factur-X (PDF/A-3 with embedded EN 16931 XML) and transmitted through an accredited platform, ready for the French e-invoicing mandate.
  • Data is hosted in the European Union (database and authentication on AWS eu-north-1, Stockholm; edge and storage in the EU). Sub-processors and retention periods are listed in the privacy policy.
  • Every MCP call is logged in the app under Agent activity, so you always see what your agent did.
  • Terms · Legal notice

Verify a connection

git clone https://github.com/Kema-Studio/kema-invoice-mcp && cd kema-invoice-mcp
npm install
npm run verify        # opens the consent page, then lists the tools

Support

  • Questions about your account or your invoices: support from the app (Help button), or hello@kema-studio.com.
  • Bugs of the connector itself (a tool that errors, a schema problem): open an issue.

License

The contents of this repository (documentation, examples, scripts) are released under the MIT License. The Kema Invoice service and its server are proprietary software of Kema Studio.


Version française

Kema Invoice est un logiciel de facturation électronique conforme que les agents IA pilotent par le Model Context Protocol. Branchez le serveur MCP distant à Claude, Cursor ou tout client MCP, autorisez une fois en OAuth 2.1, et votre agent crée, émet, envoie et suit factures, devis et provisions en langage naturel. Les factures sont produites en Factur-X (EN 16931) et transmises par une plateforme agréée. Rien à installer : le serveur répond sur https://mcp.kema-studio.com/api/mcp.

Se connecter

ClientComment
claude.ai / Claude DesktopParamètres › Connecteurs › Ajouter un connecteur personnalisé, coller https://mcp.kema-studio.com/api/mcp, autoriser une fois.
Claude Codeclaude mcp add kema-invoice --transport http --url https://mcp.kema-studio.com/api/mcp
CursorAjouter examples/cursor-mcp.json à .cursor/mcp.json.
Autre client MCPTransport Streamable HTTP, OAuth 2.1 avec PKCE et enregistrement dynamique de client (RFC 7591).

Pas encore de compte ? Créez-le : essai de 14 jours avec 10 factures incluses, un utilisateur, sans carte bancaire. Ensuite une offre unique à 10 € HT par utilisateur et par mois, toutes fonctionnalités comprises, sans engagement.

Ce que votre agent sait faire

Factures (16)

OutilCe qu'il faitAccès
create_invoiceCreate a new invoice in Draft status for a company, with line items. The invoice is NOT sent or certified - a human issues it from the app (or use issue_invoice). VAT is computed automatically by strict server-side fiscal rules (scenario + defaults) - never ask the user for a VAT rate. The fiscal scenario and client snapshot are frozen at creation.écriture
issue_invoiceIssue a Draft invoice - the legal act of CREATING the invoice (the product calls this 'Créer la facture'; the old 'send' concept is obsolete). The draft becomes a certified, immutable invoice (status Sent, displayed as 'Créée') and is IMMEDIATELY submitted for fiscal certification. IRREVERSIBLE and legally binding under French law - undone only with a credit note. ALWAYS show the user the invoice details and get their explicit approval before calling with confirm:true. Without confirm, returns a preview of what will be certified.écriture, destructif
list_invoicesList the authenticated tenant's invoices, most recent first. Supports filtering by status, document type, and a free-text search on invoice number or client name, plus pagination.lecture
get_invoiceFetch a single invoice by id, including its line items, client, and totals. Returns null-shaped error if the invoice is not visible to the caller.lecture
get_invoice_pdfReturn a temporary (1 hour) signed download URL for an invoice's PDF. Works for any document visible to the caller: imported invoices return their uploaded file; invoices issued in Kema Invoice (by the app or an agent) are rendered server-side with the workspace branding and, once certified, embed the Factur-X XML. Drafts render too (flagged is_draft: true) but are not legal documents yet.lecture
update_invoiceUpdate fields of a Draft invoice (dates, payment terms, notes, or reassign the company). Only Draft invoices can be modified - a Sent/certified invoice is immutable.écriture
delete_invoiceSoft-delete a Draft invoice. Irreversible from the user's view. Call with confirm:true to actually delete; without it, returns a preview of what would be deleted.écriture, destructif
cancel_invoiceCancel a non-paid invoice (status → Cancelled). Irreversible. For a certified (Sent) invoice, French law generally requires a credit note (create_credit_note) rather than a plain cancel. Call with confirm:true to act; otherwise returns a preview.écriture, destructif
mark_invoice_paidMark a Sent or Overdue invoice as Paid. Optionally set the payment date (defaults to now).écriture
add_invoice_itemAdd a line item to a Draft invoice. Totals are recalculated automatically.écriture
update_invoice_itemUpdate a line item on a Draft invoice. Totals are recalculated automatically. Item ids come from get_invoice or add_invoice_item.écriture
delete_invoice_itemRemove a line item from a Draft invoice. Totals are recalculated automatically. Item ids come from get_invoice or add_invoice_item. Call with confirm:true to delete; without it, returns a preview of the item.écriture, destructif
reorder_invoice_itemsSet the display order of an invoice's line items. Pass the full desired order: every item id with its 0-based display_order. Item ids come from get_invoice or add_invoice_item.écriture
update_invoice_matterAttach or detach the matter (dossier) on an invoice. Purely organizational - allowed even after the invoice is Sent, but not on a Cancelled invoice. Pass matter_id null to detach.écriture
check_certification_statusRefresh an issued invoice's fiscal certification status by querying the certification provider and reconciling it into the database. Use after issue_invoice when certification_status is 'processing' or looks stale.écriture
create_credit_noteCancel a Sent or Paid invoice by issuing a credit note (avoir). The credit note is a legal fiscal document (fiscally certified when the original was certified) and is IMMUTABLE once created. IRREVERSIBLE. ALWAYS get the user's explicit approval before calling with confirm:true. Without confirm, returns a preview.écriture, destructif

Rectification et import (3)

OutilCe qu'il faitAccès
rectify_invoiceCreate a rectifying invoice (facture rectificative) for a Sent or Paid invoice: a NEW Draft invoice pre-filled from the original (same client, copied line items unless overridden) and legally linked to it. The original is marked Rectified only when the rectificative is issued. Call with confirm:true to create; without it, returns a preview.écriture
get_rectification_linksFor one invoice, return the rectification chain: the original it replaces (if it is a rectificative) and/or the rectificative that replaced it (if it was rectified). Both null when the invoice is not part of a chain.lecture
import_external_invoiceImport a historical/external invoice with its OWN invoice number (kept verbatim), totals, and status - no line items. Use for migrating past invoices issued outside Kema Invoice; NOT for creating new invoices (use create_invoice).écriture

Devis (5)

OutilCe qu'il faitAccès
create_quoteCreate a Draft quote (devis) for a company. Quotes are not fiscal documents - no certification. Dates default server-side (issue today, due/valid +30 days). Requires a matter id (dossier) the quote belongs to.écriture
send_quoteTransition a Draft quote to Sent (the client-facing state). No certification is involved - quotes are commercial documents. French B2B validation (SIREN/VAT) applies when the tenant is French.écriture, destructif
accept_quoteMark a Sent quote as Accepted by the client. Follow up with convert_quote_to_invoice to bill it.écriture, destructif
reject_quoteMark a Sent quote as Rejected by the client. This ends the quote's lifecycle. Call with confirm:true to apply; without it, returns a preview.écriture, destructif
convert_quote_to_invoiceCreate a new Draft invoice from an Accepted quote (line items copied, source_quote_id set for traceability). The invoice then follows the normal lifecycle (issue_invoice to make it legally binding). Call with confirm:true to apply; without it, returns a preview.écriture

Provisions (6)

Shortened here. Read the whole README on GitHub.

Advanced
Delivery
invoice MCP server → your ahel gateway (mcp.ahel.ai) → every connected AI client.
Catalog kind
mcp-server
Gateway key
com-kema-studio-invoice
Source
github.com/Kema-Studio/kema-invoice-mcp
Hosted endpoint
https://mcp.kema-studio.com/api/mcp