Serveur MCP de gestion d'entreprise natif IA — 31 outils pour factures, dépenses, clients, produits, devis et conformité fiscale. 40 devises, OCR, Stripe Connect. Sous licence MIT.
Tool count: npm latest (1.14.5) ships all 157 tools, same as the remote endpoint (mcp.frihet.io).
What is this
An MCP server that connects your AI assistant to Frihet. Create invoices by talking. Query expenses in natural language. Manage your entire business from your IDE.
You: "Create an invoice for TechStart SL, 40 hours of consulting at 75 EUR/hour, due March 1st"
Claude: Done. Invoice INV-2026-089 created. Total: 3,000.00 EUR + 21% IVA = 3,630.00 EUR.
157 tools. 11 resources. 10 prompts. Structured output on every tool. Zero boilerplate.
With OAuth 2.0 + PKCE (browser-based login, no API key needed):
Clients that support OAuth (Claude Desktop, Smithery, etc.) can connect directly to https://mcp.frihet.io/mcp and authenticate via browser. The server implements the full OAuth 2.1 authorization code flow with PKCE.
Copy the key (starts with fri_) -- it's only shown once
What you can do
Talk to your ERP. These are real prompts, not marketing copy.
Invoicing
"Show me all unpaid invoices"
"Create an invoice for Acme SL with 10h of consulting at 95/hour"
"Mark invoice abc123 as paid"
"How much has ClientName been invoiced this year?"
Expenses
"Log a 59.99 EUR expense for Adobe Creative Cloud, category: software, tax-deductible"
"List all expenses from January"
"What did I spend on travel last quarter?"
Clients
"Add a new client: TechStart SL, NIF B12345678, email [email protected]"
"Show me all my clients"
"Update ClientName's address to Calle Mayor 1, Madrid 28001"
CRM
"Add a contact to Acme SL: Ana Garcia, CTO, [email protected]"
"Log a call with TechStart: discussed Q2 proposal, they're interested in upgrade"
"Add a note to ClientName: prefers invoices in English, payment NET 30"
"Show me all activities for Acme SL"
Quotes
"Create a quote for Design Studio: logo design (2000 EUR) + brand guidelines (3500 EUR)"
"Show me all pending quotes"
Webhooks
"Set up a webhook to notify https://my-app.com/hook when invoices are paid"
"List all my active webhooks"
What to expect
This MCP is a structured data interface -- you describe what you want in natural language, and the AI creates, queries, or modifies business records in Frihet. All 157 tools are CRUD operations over the REST API.
Works great:
"Create an invoice for TechStart SL, 40h consulting at 75 EUR/h" --> creates the invoice
"Show unpaid invoices over 1,000 EUR" --> queries and filters
"Log a 120 EUR expense for the Madrid train, category: travel" --> records the expense
"Update client Acme's email to [email protected]" --> modifies the record
Does not do:
OCR or PDF scanning -- you cannot upload an invoice image and have it read
File upload or attachment handling
Image processing of any kind
If you need to digitize paper invoices or receipts, extract the data first (e.g., Claude Vision API, a dedicated OCR service, or manual entry), then use the MCP to create the record:
1. Scan/photograph the invoice
2. Use Claude Vision: "Read this invoice image and extract the vendor, items, amounts, and dates"
3. Then: "Create an expense in Frihet for [extracted data]"
Tools (157)
Invoices (12)
Tool
What it does
list_invoices
List invoices with pagination
get_invoice
Get full invoice details by ID
create_invoice
Create a new invoice with line items
update_invoice
Update any invoice field
delete_invoice
Permanently delete an invoice
search_invoices
Find invoices by client name, date, or status
send_invoice
Email invoice to client (PDF attachment)
mark_invoice_paid
Mark an invoice as paid with optional payment date
get_invoice_pdf
Get a download URL for the invoice PDF
get_invoice_einvoice
Get the e-invoice XML for a given invoice ID
create_credit_note
Create a credit note linked to an existing invoice
apply_late_fee
Apply a late payment fee to an overdue invoice
Expenses (5)
Tool
What it does
list_expenses
List expenses with pagination
get_expense
Get expense details
create_expense
Record a new expense
update_expense
Modify an expense
delete_expense
Delete an expense
Clients (5)
Tool
What it does
list_clients
List all clients
get_client
Get client details
create_client
Register a new client
update_client
Update client info
delete_client
Remove a client
CRM: Contacts (3)
Tool
What it does
list_client_contacts
List all contacts for a client
create_client_contact
Add a contact person to a client
delete_client_contact
Remove a contact from a client
CRM: Activities (2)
Tool
What it does
list_client_activities
List CRM activities (calls, emails, meetings, tasks)
log_client_activity
Log a call, email, meeting, or task against a client
CRM: Notes (3)
Tool
What it does
list_client_notes
List all notes for a client
create_client_note
Add a free-form note to a client
delete_client_note
Remove a note from a client
Products (5)
Tool
What it does
list_products
List products and services
get_product
Get product details
create_product
Add a product or service
update_product
Update pricing or details
delete_product
Remove a product
Quotes (6)
Tool
What it does
list_quotes
List all quotes
get_quote
Get quote details
create_quote
Draft a new quote
update_quote
Modify a quote
delete_quote
Delete a quote
send_quote
Email quote to client for acceptance
Webhooks (6)
Tool
What it does
list_webhooks
List configured webhooks
get_webhook
Get webhook details
create_webhook
Register a new webhook endpoint
update_webhook
Modify events or URL
delete_webhook
Remove a webhook
test_webhook
Send a test payload to a configured webhook endpoint
Intelligence (4)
Tool
What it does
get_business_context
Full snapshot: profile, plan, recent activity, top clients, current month
get_monthly_summary
Monthly P&L: revenue, expenses, profit, tax liability, top clients by revenue
get_quarterly_taxes
Quarterly tax prep: Modelo 303/130 fields, collected vs deductible, liability
duplicate_invoice
Clone an invoice for recurring billing (copies items/client/tax, starts as draft)
E-Invoicing (10)
Tool
What it does
send_einvoice
Dispatch an invoice in 11 formats (XRechnung, Factur-X, FatturaPA, PEPPOL, Facturae, UBL, CII) via email / Chorus Pro / SDI / PEPPOL / download
get_einvoice_status
Poll Hatchet workflow run status until succeeded/failed — returns ackId, XML URL, PDF/A-3 URL
validate_einvoice_xml
Validate raw XML against format schema + schematron rules (KOSIT / Mustang / XSD / Schematron)
export_datev
Export accounting data as DATEV EXTF (Buchungsstapel / Debitoren / Kreditoren) in CP1252 encoding
einvoice_export
Export e-invoice data in machine-readable formats (JSON/XML) for archival or integration
face_submit
Submit invoice to FACe (Spain B2G government e-invoicing platform)
face_status
Poll submission status from FACe for a submitted invoice
ticketbai_submit
Submit TicketBAI fiscal record to Basque Country tax authority (Hacienda)
ticketbai_status
Poll TicketBAI submission status from the Basque tax authority
ksef_submit
Submit invoice to KSeF (Poland national e-invoicing system)
Time Tracking (6)
Tool
What it does
list_time_entries
List time entries with filter by user, project, date range, billable status
get_time_entry
Get full details of a single time entry by ID
create_time_entry
Log hours for a project (billable flag, description, date)
update_time_entry
Update any field on an existing time entry (PATCH semantics)
delete_time_entry
Soft-delete a time entry (confirm=true required)
get_time_summary
Aggregate total/billable/non-billable hours for a period, with optional groupBy (user/project/day)
Recurring Invoices (8)
Tool
What it does
list_recurring_invoices
List all recurring invoice templates (filter by active/paused)
get_recurring_invoice
Get full details of a recurring template by ID
create_recurring_invoice
Create a new recurring invoice template (daily/weekly/monthly/quarterly/yearly)
update_recurring_invoice
Update template fields — affects future generated invoices only
pause_recurring_invoice
Pause an active template — no invoices generated while paused
resume_recurring_invoice
Resume a paused template — next invoice on next scheduled cycle
delete_recurring_invoice
Permanently delete a template (confirm=true required)
run_recurring_now
Manually trigger immediate generation of the next invoice instance
Team Management (4)
Tool
What it does
list_team_members
List all workspace members with role and invite status
invite_team_member
Invite a new member by email with role (admin/member/viewer)
update_team_member_role
Change an existing member's role
remove_team_member
Remove a member from the workspace (confirm=true required)
Gestoria — Accountants (5)
Tool
What it does
gestoria_message_send
Send a message in a contextual thread (documentRequest / filingItem / obligation)
gestoria_messages_list
List messages in a thread, newest first; paginate backwards with before
gestoria_template_create
Create a reusable document request template with variables + due-date offset
gestoria_template_bulk_send
Bulk send a template to up to 500 client workspaces in one call
gestoria_aging_consolidated
Cross-client AR aging report (buckets, per-workspace breakdown, top overdue)
Audit GL (3)
Tool
What it does
frihet_gl_entry_approve
Approve a GL journal entry (gestor/admin only — TRUST AREA)
frihet_gl_entry_reject
Reject a GL entry with a mandatory reason (TRUST AREA)
frihet_gl_entry_audit_log
Retrieve full audit trail for a GL entry
White-label Portal Domain (3)
Tool
What it does
frihet_portal_domain_add
Add a custom domain to the client portal (returns DNS CNAME records)
frihet_portal_domain_verify
Verify DNS propagation for a custom portal domain
frihet_portal_domain_remove
Remove a custom portal domain (reverts to default Frihet subdomain)
Self-onboard & VIES (2)
Tool
What it does
frihet_portal_onboard_link_generate
Generate a time-limited self-onboard link for a prospective client
frihet_tax_id_vies_lookup
Validate an EU VAT number (CIF intracomunitario) via VIES
IGIC — Canary Islands Indirect Tax (4)
Tool
What it does
frihet_modelo_415_summary
M415 annual operations >€3,005 (Canarias equivalent of M347)
frihet_modelo_425_summary
M425 annual IGIC recap for Canary Islands businesses
frihet_modelo_418_summary
M418 monthly IGIC return for large enterprises (grandes empresas)
frihet_aiem_calculate
Calculate AIEM (Arbitrio Importación) for imported/produced goods in Canarias
Impuesto sobre Sociedades — Corporate Tax (2)
Tool
What it does
frihet_modelo_200_summary
Modelo 200 annual IS return (taxable base, deductions, net payable)
frihet_modelo_202_summary
Modelo 202 installment payments (1P April, 2P October, 3P December)
Bank Categorization Rules (2)
Tool
What it does
frihet_bank_rules_list
List all bank auto-categorization rules (conditions + actions + status)
frihet_bank_rule_create
Create a new rule to auto-categorize transactions by description, amount, counterparty
Deposits (7)
Tool
What it does
list_deposits
List deposits with pagination
get_deposit
Get deposit details by ID
create_deposit
Record a new client deposit
update_deposit
Update deposit fields
delete_deposit
Delete a deposit (confirm=true required)
apply_deposit
Apply a deposit balance against an invoice
refund_deposit
Issue a refund for a deposit
Vendors (5)
Tool
What it does
list_vendors
List all vendors/suppliers
get_vendor
Get vendor details
create_vendor
Add a new vendor
update_vendor
Update vendor info
delete_vendor
Remove a vendor
Banking (5)
Tool
What it does
list_bank_accounts
List connected bank accounts
get_bank_account
Get details for a bank account
list_transactions
List bank transactions with filters
categorize_transaction
Assign a category and expense/income type to a transaction
match_transaction_to_invoice
Link a bank transaction to an existing invoice
Fiscal — Spanish Tax Models (8)
Tool
What it does
get_modelo_303_summary
Quarterly IVA return (Modelo 303) — collected vs deductible, net payable
get_modelo_130_summary
Quarterly IRPF installment for self-employed (Modelo 130)
get_modelo_390_summary
Annual IVA summary (Modelo 390)
get_modelo_180_summary
Annual withholding summary for rentals (Modelo 180)
Get onboarding completion status for the current workspace
onboarding_persona_set
Set or update the business persona (freelancer, SME, gestoría, etc.)
Permissions (2)
Tool
What it does
permissions_matrix
Get the full permissions matrix for all roles in the workspace
permissions_me
Get the current API key's effective permissions
Period Close (3)
Tool
What it does
period_close_status
Get the close status for an accounting period
period_close
Close an accounting period (gestor/admin only — TRUST AREA)
period_reopen
Reopen a closed period with a mandatory reason (TRUST AREA)
All 157 tools return structured output via outputSchema -- typed JSON, not raw text. List tools return paginated results ({ data, total, limit, offset }).
Resources (11)
Context the AI can read to make smarter decisions.
AR aging analysis: group unpaid invoices by bucket (0-30/31-60/61-90/90+ days), top debtors, collection actions
--
expense-batch
Process expenses in bulk: categorize, apply tax rates, flag missing receipts
fiscalZone?
How it works
graph LR
AI["Your AI assistant"]
MCP["frihet-mcp"]
API["api.frihet.io"]
DB["Frihet ERP"]
AI -- "create_invoice()" --> MCP
MCP -- "POST /v1/invoices" --> API
API --> DB
DB -- "201 + invoice data" --> API
API -- "structured JSON" --> MCP
MCP -- "typed response + suggestions" --> AI
style AI fill:#09090b,stroke:#4ade80,color:#fafafa
style MCP fill:#09090b,stroke:#fafafa,color:#fafafa
style API fill:#09090b,stroke:#3f3f46,color:#a1a1aa
style DB fill:#09090b,stroke:#3f3f46,color:#a1a1aa
The server translates tool calls into REST API requests. It handles authentication, rate limiting (automatic retry with backoff on 429), pagination, and error mapping.
Two transports:
stdio (local) -- npx @frihet/mcp-server with FRIHET_API_KEY
Streamable HTTP (remote) -- https://mcp.frihet.io/mcp with Bearer token or OAuth 2.0+PKCE
Environment variables
Variable
Required
Default
FRIHET_API_KEY
Yes (stdio)
--
FRIHET_API_URL
No
https://api.frihet.io/v1
FRIHET_TOOL_MODE
No
full
Tool exposure: depth served on demand
Frihet's differentiator is depth — full ES/EU fiscal coverage plus native compliance (VeriFactu, TicketBAI, Facturae/FACe/KSeF), banking, CRM, HR/payroll, stay/PMS and POS. But a flat list of every tool, loaded into an agent's context up front, is the 2026 context-rot problem: it crowds out the task and degrades tool selection before any work begins.
FRIHET_TOOL_MODE lets you choose how that depth is exposed.
Mode
Behavior
full (default)
All tools are exposed with their full descriptions and schemas. Unchanged from previous releases — existing setups are unaffected.
grouped
Progressive disclosure. Each tool's description collapses to a one-line [group] summary — full schema via describe_tool('name'), and three lightweight discovery tools are added. The agent loads depth only for the tools it actually needs.
In grouped mode the tools are unchanged — same names, same input schemas, same behavior. Only the up-front context cost changes. Discovery flows through three meta-tools:
list_tool_groups() — the domain map (invoicing, expenses, fiscal/compliance, banking, CRM, HR/payroll, stay/PMS, POS, intelligence, products, platform) with a one-line blurb and tool count for each.
search_tools(query) — free-text search across tool name, title, summary and group; returns matching tools with their group, summary, read-only flag and input fields. Optional group filter and limit.
describe_tool(name) — the full original description and input fields for one tool, on demand, before you call it.
This is an opt-in exposure layer only — it never changes a tool's logic, name or behavior, and full mode is byte-identical to before. The same interceptor pattern powers the OpenAI-safe profile (FRIHET_OPENAI_MODE).
API limits
Limit
Value
Requests per minute
100 per API key
Results per page
100 max (50 default)
Request body
1 MB max
Webhook payload
100 KB max
Webhooks per account
20 max
Rate limiting is handled automatically with exponential backoff.
Claude Code Skill
Beyond raw MCP tools, this repo includes a Claude Code skill that adds business context: Spanish tax rules, workflow recipes, financial reports, and natural language commands.