npm.io
1.15.0 • Published 4h agoCLI

@frihet/mcp-server

Licence
MIT
Version
1.15.0
Deps
1
Size
1.6 MB
Vulns
0
Weekly
0
Stars
8
Install scriptsThis package runs scripts during installation (preinstall/install/postinstall)

frihet-mcp

AI-native MCP server for business management.
Servidor MCP nativo con IA para gestión empresarial.

npm version npm downloads Smithery installs MCP Registry license 157 tools node >=18 TypeScript


Distribution

Channel Status Install
npm Live npx @frihet/mcp-server
Remote endpoint Live https://mcp.frihet.io/mcp (zero install, OAuth or API key)
Smithery Live smithery.ai/server/frihet/frihet-mcp
MCP Registry Live registry.modelcontextprotocol.io
Glama Live glama.ai/mcp/servers/@Frihet-io/frihet-mcp
mcp.so Auto-index (unverified) mcp.so — indexes from npm + GitHub
PulseMCP Auto-index (unverified) pulsemcp.com — indexes from npm + GitHub
Cursor Marketplace Coming soon cursor.com/marketplace
ChatGPT Apps Coming soon chatgpt.com
Anthropic Claude Directory Coming soon claude.ai/settings/connectors

Tool count: npm latest (1.15.0) 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.


Install

One-line (Claude Code, Cursor, Copilot, Codex, Windsurf, Gemini CLI, and more)
npx skills add Frihet-io/frihet-mcp
Claude Code / Claude Desktop
{
  "mcpServers": {
    "frihet": {
      "command": "npx",
      "args": ["-y", "@frihet/mcp-server"],
      "env": {
        "FRIHET_API_KEY": "fri_your_key_here"
      }
    }
  }
}
Tool Config file
Claude Code ~/.claude/mcp.json
Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json
Cursor .cursor/mcp.json or ~/.cursor/mcp.json
Windsurf ~/.windsurf/mcp.json
Cline VS Code settings or .cline/mcp.json
Codex CLI ~/.codex/config.toml (MCP section)

The JSON config is identical for all tools. Only the file path changes.

Remote (no install)

Use the hosted endpoint at mcp.frihet.io -- zero local dependencies, runs on Cloudflare Workers.

With API key:

{
  "mcpServers": {
    "frihet": {
      "type": "streamable-http",
      "url": "https://mcp.frihet.io/mcp",
      "headers": {
        "Authorization": "Bearer fri_your_key_here"
      }
    }
  }
}

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.

Get your API key
  1. Log into app.frihet.io
  2. Go to Settings > API
  3. Click Create API key
  4. 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 admin@techstart.es"
"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, ana@acme.es"
"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 billing@acme.es"                     --> 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_modelo_347_summary Annual third-party transactions >€3,005 (Modelo 347)
verifactu_status Get VeriFactu submission status for a fiscal record
verifactu_resubmit Resubmit a rejected VeriFactu fiscal record
ticketbai_status Poll TicketBAI submission status (also available in E-Invoicing section)
Vacation Rentals / Stay (5)
Tool What it does
list_reservations List rental reservations with filters
get_reservation Get reservation details
create_reservation Create a new reservation
list_properties List all rental properties
sync_channel Trigger OTA channel sync (Airbnb, Booking.com, etc.)
POS — Point of Sale (4)
Tool What it does
list_terminals List registered POS terminals
get_sale Get details for a POS sale transaction
list_sales List POS sales with pagination
refund_sale Issue a refund for a POS sale
HR — Human Resources (9)
Tool What it does
leave_request_create Create a leave request (vacation, sick, personal)
leave_approve Approve a pending leave request
leave_reject Reject a leave request with a reason
leave_cancel Cancel an approved or pending leave request
leave_list List leave requests with filters (user, status, date range)
attendance_clock_in Record clock-in for an employee
attendance_clock_out Record clock-out for an employee
overtime_report Generate overtime report for a period
anomaly_list List attendance anomalies (missing punches, excessive overtime)
Payroll (2)
Tool What it does
payroll_export Export payroll data for a period (CSV/PDF for gestoría)
payroll_checklist Generate pre-payroll checklist: pending leaves, anomalies, overtime
Onboarding (2)
Tool What it does
onboarding_status 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.

Static (reference data, no API calls):

Resource URI What it provides
API Schema frihet://api/schema OpenAPI summary: endpoints, auth, rate limits, pagination, error codes
Tax Rates frihet://tax/rates Tax rates by Spanish fiscal zone: IVA, IGIC, IPSI, EU reverse charge, IRPF
Tax Calendar frihet://tax/calendar Quarterly filing deadlines: Modelo 303, 130, 390, 420, VeriFactu timeline
Expense Categories frihet://config/expense-categories 8 categories with deductibility rules, IVA treatment, amortization
Invoice Statuses frihet://config/invoice-statuses Status flow (draft > sent > paid/overdue > cancelled), transition rules, webhook events
Currencies frihet://config/currencies 40 supported currencies with ISO codes, symbols, decimal places, locale formatting
Countries frihet://config/countries 61 supported countries with fiscal zones, default tax rates, currencies, invoice prefixes

Dynamic (live data from your account):

Resource URI What it provides
Business Profile frihet://business-profile Your business info, plan, defaults, recent activity, top clients
Monthly Snapshot frihet://monthly-snapshot Current month P&L, revenue, expenses, tax liability
Overdue Invoices frihet://overdue-invoices All invoices past due date (up to 100)
Plan Limits frihet://status/plan-limits Live plan tier, usage counters, invoices/month, API rate limits

Prompts (10)

Pre-built workflows the AI can execute as guided multi-step operations.

Prompt What it does Arguments
monthly-close Close the month: review unpaid invoices, categorize expenses, check tax obligations, generate summary month? (YYYY-MM)
onboard-client Set up a new client with correct tax rates by location, optionally create a welcome quote clientName, country?, region?
quarterly-tax-prep Prepare quarterly tax filing: calculate IVA/IGIC, identify deductibles, preview Modelo 303/130/420 quarter?, fiscalZone?
overdue-followup Find overdue invoices, draft follow-up messages, suggest payment reminders --
new-client-invoice Create a client + first invoice in one workflow with tax rate lookup clientName, country?
expense-report Generate expense report grouped by category with deductible totals month? (YYYY-MM)
year-end-close Full annual closing: quarterly review, pending invoices, uncategorized expenses, year-end checklist year (YYYY)
cash-flow-forecast Project cash flow for coming months: recurring income, expenses, overdue receivables, tax deadlines months? (default: 3)
invoice-aging-review 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.
// claude_desktop_config.json — opt in to grouped mode
{
  "mcpServers": {
    "frihet": {
      "command": "npx",
      "args": ["@frihet/mcp-server"],
      "env": {
        "FRIHET_API_KEY": "fri_...",
        "FRIHET_TOOL_MODE": "grouped"
      }
    }
  }
}

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.

Install the skill
git clone https://github.com/Frihet-io/frihet-mcp.git
ln -s "$(pwd)/frihet-mcp/skill" ~/.claude/skills/frihet

Or with the universal installer:

npx skills add Frihet-io/frihet-mcp
Commands
Command What it does
/frihet status Account overview, recent activity, pending payments
/frihet invoice Create, list, search invoices
/frihet expense Log and query expenses
/frihet clients Manage client database
/frihet quote Create and manage quotes
/frihet report Financial summaries (P&L, quarterly, overdue)
/frihet webhooks Configure automation triggers
/frihet setup Guided setup and connection test

The skill knows about IVA rates, IRPF retention, Modelo 303 prep, expense deductibility rules, and VeriFactu compliance.

Full documentation: docs.frihet.io/desarrolladores/skill-claude-code


Development

git clone https://github.com/Frihet-io/frihet-mcp.git
cd frihet-mcp
npm install
npm run build

Run locally:

FRIHET_API_KEY=fri_xxx node dist/index.js

Test with the MCP Inspector:

npx @modelcontextprotocol/inspector node dist/index.js

Contributing

Contributions are welcome. Please open an issue first to discuss what you'd like to change.

git clone https://github.com/Frihet-io/frihet-mcp.git
cd frihet-mcp
npm install
npm run build   # must pass before submitting

Current limitations

  • No OCR or file upload -- the MCP works with structured data, not images or PDFs.
  • Single company -- one API key maps to one Frihet workspace.
  • Frihet account required -- you need an active account at app.frihet.io and an API key (starts with fri_).

Ecosystem

Package What it is
@frihet/mcp-server This MCP server (157 tools, 11 resources, 10 prompts)
@frihet/sdk TypeScript SDK (frihet.invoices.create())
frihet CLI (frihet invoices list --status overdue)
n8n-nodes-frihet n8n community node for workflow automation
REST API OpenAPI 3.1 at api.frihet.io/v1
Remote MCP Hosted endpoint on Cloudflare Workers (zero install)
Webhooks Real-time events with HMAC-SHA256

License

MIT. See LICENSE.

Built by Frihet.

Keywords