MCP server that connects Claude (Desktop, Code, or any MCP client) to FattureInCloud, the leading Italian SaaS for electronic invoicing. Manage invoices, credit notes, proformas, clients, suppliers, cost/revenue centers, and supplier expenses through natural language. Italy mandates B2B/B2C e-invoicing through the Sistema di Interscambio (SDI) — this server brings AI-assisted billing to that compliance-driven workflow.
⚠️ Unofficial integration. Not affiliated with, endorsed by, or sponsored by TeamSystem S.p.A., owner of the FattureInCloud trademark. The trademark is used here for descriptive purposes only.
| Tool | Description |
|---|---|
list_invoices |
List issued invoices / credit notes / proformas by year / month |
get_invoice |
Full document detail by ID |
get_pdf_url |
PDF URL and web link for a document |
list_clients |
List clients with optional filter |
get_company_info |
Connected company info |
create_client |
Create a new client |
update_client |
Update an existing client |
create_invoice |
Create a draft invoice (optional revenue_center) |
create_credit_note |
Create a draft credit note (optional revenue_center) |
create_proforma |
Create a draft proforma (optional revenue_center) |
convert_proforma_to_invoice |
Convert a proforma into a draft electronic invoice (optional revenue_center) |
update_document |
Partial update of a draft document (optional revenue_center) |
duplicate_invoice |
Duplicate an invoice with a new date (optional revenue_center) |
delete_invoice |
Delete a draft document |
send_to_sdi |
Send invoice / credit note to the Italian e-invoice system (SDI) |
get_invoice_status |
E-invoice status for a document |
send_email |
Send a courtesy copy by email |
list_received_documents |
List supplier documents (exposes cost_center when present) |
get_received_document |
Full detail of a received document by ID |
create_received_document |
Create a passive document / expense (optional cost_center) |
list_cost_centers |
List configured cost / revenue centers |
get_situation |
Yearly dashboard: net revenue, collected, outstanding, costs, margin |
check_numeration |
Verify invoice numbering continuity |
Marking payments as "paid" is intentionally not exposed: the FattureInCloud API requires a payment account that cannot be reliably retrieved through the SDK. Use the FattureInCloud web panel for that operation.
- Download the latest
fattureincloud.mcpbfrom the GitHub Releases page. - Drag the
.mcpbfile onto Claude Desktop, or use Settings → Extensions → Install from file. - When prompted, fill in your FattureInCloud API token, company ID, and (optional) sender email.
That's it — no Python setup, no virtualenv.
For Claude Code users or any MCP client that reads claude_desktop_config.json-style configuration:
pip install fattureincloud-mcpThen add to your MCP client configuration (for Claude Desktop, ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"fattureincloud": {
"command": "python",
"args": ["-m", "fattureincloud_mcp"],
"env": {
"FIC_ACCESS_TOKEN": "a/xxxxx.yyyyy.zzzzz",
"FIC_COMPANY_ID": "123456",
"FIC_SENDER_EMAIL": "billing@yourcompany.com"
}
}
}
}Restart your MCP client after editing the config.
| Env var | Required | Description |
|---|---|---|
FIC_ACCESS_TOKEN |
yes | Personal API access token (starts with a/) |
FIC_COMPANY_ID |
yes | Numeric company ID, visible in the URL when logged into FattureInCloud |
FIC_SENDER_EMAIL |
required for send_email |
Sender mailbox for courtesy copies |
FIC_CACHE_DIR |
no | Override cache directory (default ~/.fattureincloud-mcp/cache) |
FIC_CACHE_DISABLED |
no | Set to 1 to disable the local cache |
How to get the FattureInCloud credentials: log into FattureInCloud, go to Settings → API and Integrations, create a Manual Token with the permissions you need. The COMPANY_ID is in the URL after /c/ once you select a company.
"Find client 'Acme Srl' and create a draft invoice for €1,500 + VAT for consulting services in November 2026, payable in 30 days, on revenue center 'Project Alpha'."
Claude will:
- Call
list_clients(cached) and pick the matching client - Call
list_cost_centers(cached) to validateProject Alphaexists - Call
create_invoicewithclient_id, items, dates, payment terms, andrevenue_center="Project Alpha" - Return the draft number and ask whether to send it to SDI
"How much did I bill on the 'Project Alpha' revenue center in 2025? Break down by month."
Claude will:
- Call
list_cost_centersto confirm the label - Call
list_invoicesfor year 2025 (the result includesrevenue_centerper invoice when set) - Filter by
revenue_center == "Project Alpha"and aggregate by month
"Duplicate every invoice issued to 'Recurring Customer Co' in October 2025, set the new dates in November, keep 30-day payment terms."
Claude will:
- Call
list_invoiceswithquery="Recurring Customer Co"andmonth=10,year=2025 - For each result, call
duplicate_invoicewithnew_dateset in November - Return the list of new draft invoices and ask before sending
To minimize redundant calls to the FattureInCloud API, this server caches client lookups and the cost-centers list locally as JSON files (default location ~/.fattureincloud-mcp/cache/, scoped per company_id, 24-hour TTL). The cache is transparent: tool signatures don't change.
# Force refresh:
rm -rf ~/.fattureincloud-mcp/cache
# Disable temporarily:
export FIC_CACHE_DISABLED=1FattureInCloud uses one shared registry for cost centers (on supplier documents) and revenue centers (on issued documents). With this server you can:
list_cost_centers— read the registryrevenue_center="<label>"— assign oncreate_invoice,create_credit_note,create_proforma,convert_proforma_to_invoice,update_document,duplicate_invoicecost_center="<label>"— assign oncreate_received_document
The label must already exist; centers are managed from FattureInCloud's web UI (Settings → Cost Centers). Passing an unknown label returns the list of valid labels in the error message.
- API calls go directly from your machine to FattureInCloud's servers (
api-v2.fattureincloud.it). No data is routed through Mediaform or any third-party server. - The local cache is plaintext JSON in your home directory. You control it.
- Credentials live only in your
.env(gitignored), shell, or MCP clientuser_config. They are never logged or transmitted to anyone other than FattureInCloud. - Full Privacy Policy: https://media-form.it/privacy-policy.html
- See also
docs/PRIVACY.mdfor a mirrored copy of the policy.
- Invoice duplication may fail for some clients. A specific client configuration triggers a failure path that hasn't been reproduced yet. Workaround: duplicate manually from the FattureInCloud web panel. Tracked in
docs/KNOWN_ISSUES.md— please report a reproducible case via GitHub issues.
Issues and pull requests welcome at https://github.com/aringad/fattureincloud-mcp.
For any code change:
- Fork and branch from
main(feat/...,fix/...,docs/...). - Run
pytest tests/— all 39 tests must stay green. - New code targeting cost-center / cache / new tools should ship with tests (target ≥80% coverage on new modules).
- Conventional commits style (
feat:,fix:,docs:,chore:,test:). - Open a PR. The maintainer reviews changes against the FattureInCloud API contract.
For vulnerability disclosure see SECURITY.md. Preferred channel: GitHub Security Advisories.
MIT — see LICENSE.
"FattureInCloud" is a trademark of TeamSystem S.p.A. This is an independent, community-built integration. It is not affiliated with, endorsed by, or sponsored by TeamSystem S.p.A. The trademark is used solely for descriptive purposes (to indicate the third-party service this software interoperates with).
- Maintainer: Mediaform s.c.r.l. — Genova, Italy
- Issues: https://github.com/aringad/fattureincloud-mcp/issues
- Email: assistenza@mediaform.it