@frihet/mcp-server 1.17.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -348
- package/dist/agent-onboarding.d.ts +1 -1
- package/dist/agent-onboarding.js +3 -3
- package/dist/canary/mcp-harness.d.ts +1 -1
- package/dist/canary/mcp-harness.js +4 -1
- package/dist/capability-truth.js +20 -12
- package/dist/claude-candidate-contract.d.ts +482 -0
- package/dist/claude-candidate-contract.js +87 -0
- package/dist/claude-output-privacy.d.ts +17 -0
- package/dist/claude-output-privacy.js +249 -0
- package/dist/claude-profile.d.ts +18 -0
- package/dist/claude-profile.js +260 -0
- package/dist/client-interface.d.ts +26 -20
- package/dist/client.d.ts +65 -29
- package/dist/client.js +278 -167
- package/dist/demo-client.d.ts +28 -21
- package/dist/demo-client.js +32 -14
- package/dist/deposit-contract.d.ts +29 -0
- package/dist/deposit-contract.js +76 -0
- package/dist/fetch-no-redirect.d.ts +3 -0
- package/dist/fetch-no-redirect.js +16 -0
- package/dist/fiscal-aliases.d.ts +2 -2
- package/dist/fiscal-aliases.js +2 -2
- package/dist/fiscal-period.d.ts +26 -0
- package/dist/fiscal-period.js +31 -0
- package/dist/google-profile.d.ts +19 -0
- package/dist/google-profile.js +122 -0
- package/dist/index.js +31 -7
- package/dist/logger.d.ts +1 -1
- package/dist/logger.js +2 -2
- package/dist/muse-profile.d.ts +19 -0
- package/dist/muse-profile.js +122 -0
- package/dist/observability.js +3 -2
- package/dist/openai-profile.d.ts +2 -2
- package/dist/openai-profile.js +37 -11
- package/dist/openai-review-contract.d.ts +1 -1
- package/dist/openai-review-contract.js +4 -5
- package/dist/openai-review-oauth.d.ts +107 -7
- package/dist/openai-review-oauth.js +161 -17
- package/dist/prompts/register-all.js +32 -78
- package/dist/redaction.d.ts +5 -0
- package/dist/redaction.js +9 -0
- package/dist/resources/register-all.js +150 -54
- package/dist/retry-after.d.ts +19 -0
- package/dist/retry-after.js +84 -0
- package/dist/server-composition.d.ts +6 -2
- package/dist/server-composition.js +46 -5
- package/dist/tool-exposure.d.ts +7 -5
- package/dist/tool-exposure.js +21 -13
- package/dist/tools/audit_gl.js +8 -8
- package/dist/tools/backend-availability.d.ts +8 -29
- package/dist/tools/backend-availability.js +31 -30
- package/dist/tools/bank_rules.js +66 -15
- package/dist/tools/banking.js +5 -13
- package/dist/tools/clients.js +254 -6
- package/dist/tools/deposits.js +107 -97
- package/dist/tools/einvoice.d.ts +17 -3
- package/dist/tools/einvoice.js +59 -12
- package/dist/tools/fiscal.d.ts +3 -4
- package/dist/tools/fiscal.js +93 -60
- package/dist/tools/gestoria.js +15 -7
- package/dist/tools/hr.js +41 -11
- package/dist/tools/igic.d.ts +9 -8
- package/dist/tools/igic.js +34 -64
- package/dist/tools/impuesto_sociedades.d.ts +4 -5
- package/dist/tools/impuesto_sociedades.js +16 -37
- package/dist/tools/intelligence.js +164 -10
- package/dist/tools/invoices.js +109 -42
- package/dist/tools/kitchen.js +19 -9
- package/dist/tools/quotes.js +86 -25
- package/dist/tools/recurring.js +26 -25
- package/dist/tools/register-all.d.ts +2 -2
- package/dist/tools/register-all.js +9 -6
- package/dist/tools/search.d.ts +19 -0
- package/dist/tools/search.js +84 -0
- package/dist/tools/shared.d.ts +18 -38
- package/dist/tools/shared.js +96 -30
- package/dist/tools/team.js +8 -16
- package/dist/tools/time.js +4 -12
- package/dist/tools/vendors.js +242 -6
- package/dist/types.d.ts +3 -1
- package/dist/workflows/daily-operational-brief.d.ts +163 -0
- package/dist/workflows/daily-operational-brief.js +881 -0
- package/docs/agent-onboarding.json +15 -5
- package/package.json +26 -12
- package/dist/tools/onboarding.d.ts +0 -19
- package/dist/tools/onboarding.js +0 -64
package/README.md
CHANGED
|
@@ -18,12 +18,9 @@
|
|
|
18
18
|
<p align="center">
|
|
19
19
|
<a href="https://www.npmjs.com/package/@frihet/mcp-server"><img src="https://img.shields.io/npm/v/@frihet/mcp-server?style=flat&color=18181b&labelColor=09090b" alt="npm version"></a>
|
|
20
20
|
<a href="https://www.npmjs.com/package/@frihet/mcp-server"><img src="https://img.shields.io/npm/dm/@frihet/mcp-server?style=flat&color=18181b&labelColor=09090b&label=downloads" alt="npm downloads"></a>
|
|
21
|
-
<a href="https://smithery.ai/servers/frihet/frihet-mcp"><img src="https://smithery.ai/badge/frihet/frihet-mcp" alt="Smithery installs"></a>
|
|
22
21
|
<a href="https://registry.modelcontextprotocol.io/?q=io.frihet"><img src="https://img.shields.io/badge/MCP_Registry-io.frihet%2Ferp-4A90D9?style=flat&logo=anthropic&logoColor=white" alt="MCP Registry"></a>
|
|
22
|
+
<img src="https://img.shields.io/badge/catalogue-156_operations-18181b?style=flat&labelColor=09090b" alt="156 canonical catalogue operations">
|
|
23
23
|
<a href="https://github.com/Frihet-io/frihet-mcp/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-18181b?style=flat&labelColor=09090b" alt="license"></a>
|
|
24
|
-
<img src="https://img.shields.io/badge/catalogue-157_operations-18181b?style=flat&labelColor=09090b" alt="157 canonical catalogue operations">
|
|
25
|
-
<img src="https://img.shields.io/badge/node-%3E%3D20-18181b?style=flat&labelColor=09090b" alt="node >=20">
|
|
26
|
-
<a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-18181b?style=flat&labelColor=09090b" alt="TypeScript"></a>
|
|
27
24
|
</p>
|
|
28
25
|
|
|
29
26
|
<p align="center">
|
|
@@ -32,130 +29,95 @@
|
|
|
32
29
|
|
|
33
30
|
---
|
|
34
31
|
|
|
35
|
-
## Distribution
|
|
36
|
-
|
|
37
|
-
| Channel | Status | Install |
|
|
38
|
-
|---------|--------|---------|
|
|
39
|
-
| **npm** | Live | `npx @frihet/mcp-server` |
|
|
40
|
-
| **Remote endpoint** | Live | `https://mcp.frihet.io/mcp` (zero install, OAuth or API key) |
|
|
41
|
-
| **Smithery** | Live | [smithery.ai/servers/frihet/frihet-mcp](https://smithery.ai/servers/frihet/frihet-mcp) |
|
|
42
|
-
| **MCP Registry** | Live | [registry.modelcontextprotocol.io](https://registry.modelcontextprotocol.io/?q=io.frihet) |
|
|
43
|
-
| **Glama** | Live | [glama.ai/mcp/servers/Frihet-io/frihet-mcp](https://glama.ai/mcp/servers/Frihet-io/frihet-mcp) |
|
|
44
|
-
| **mcp.so** | Auto-index (unverified) | [mcp.so](https://mcp.so) — indexes from npm + GitHub |
|
|
45
|
-
| **PulseMCP** | Auto-index (unverified) | [pulsemcp.com](https://pulsemcp.com) — indexes from npm + GitHub |
|
|
46
|
-
| **Cursor Marketplace** | Coming soon | [cursor.com/marketplace](https://cursor.com/marketplace) |
|
|
47
|
-
| **ChatGPT Apps** | Coming soon | [chatgpt.com](https://chatgpt.com) |
|
|
48
|
-
| **Anthropic Claude Directory** | Coming soon | [claude.ai/settings/connectors](https://claude.ai/settings/connectors) |
|
|
49
|
-
|
|
50
|
-
> **Surface truth:** the catalogue contains 157 canonical operations. The local full profile serves those plus 5 fiscal alias names (162 names). The hosted grouped profile also adds 3 local discovery names (165 names). Catalogue membership is not a promise that a backing API is enabled for every workspace.
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
32
|
## What is this
|
|
55
33
|
|
|
56
|
-
An MCP server that connects your AI assistant to [Frihet](https://frihet.io/?utm_source=github_readme&utm_medium=mcp_readme&utm_campaign=mcp_landgrab)
|
|
34
|
+
An MCP server that connects your AI assistant to [Frihet](https://frihet.io/?utm_source=github_readme&utm_medium=mcp_readme&utm_campaign=mcp_landgrab), the AI-native ERP for businesses of any size. Ask for invoices, expenses, clients, quotes, banking and tax figures in plain language, from the tools you already use.
|
|
57
35
|
|
|
58
36
|
```
|
|
59
37
|
You: "Create an invoice for TechStart SL, 40 hours of consulting at 75 EUR/hour, due March 1st"
|
|
60
38
|
Claude: Done. Invoice INV-2026-089 created. Total: 3,000.00 EUR + 21% IVA = 3,630.00 EUR.
|
|
61
39
|
```
|
|
62
40
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
<!-- v1.12.0-beta.1 — D4-B megasprint: HR (9), payroll (2), onboarding (2), permissions (2), period close (3), webhook test (1) = +19 = 157 tools total -->
|
|
41
|
+
156 canonical operations. Five fiscal aliases. Ten prompts. The local package serves 11 resources; the hosted Worker deliberately serves the 7 static resources, while API-backed workspace resources remain local-profile only.
|
|
66
42
|
|
|
67
43
|
---
|
|
68
44
|
|
|
69
|
-
##
|
|
45
|
+
## Quick start
|
|
46
|
+
|
|
47
|
+
**Remote, one step.** Add `https://mcp.frihet.io/mcp` as a remote MCP server in any client that supports OAuth. You sign in with your browser; there is nothing to install and no key to copy.
|
|
70
48
|
|
|
71
|
-
|
|
49
|
+
**Local, with your API key** (create one in [app.frihet.io](https://app.frihet.io) under Settings > API):
|
|
72
50
|
|
|
73
51
|
```bash
|
|
74
|
-
|
|
52
|
+
claude mcp add frihet -s user -e FRIHET_API_KEY=fri_your_key_here -- npx -y @frihet/mcp-server
|
|
75
53
|
```
|
|
76
54
|
|
|
77
|
-
|
|
55
|
+
**No account yet?** Try demo mode. It answers from example data, persists nothing and makes no network calls:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
FRIHET_DEMO=1 npx -y @frihet/mcp-server
|
|
59
|
+
```
|
|
78
60
|
|
|
79
|
-
|
|
61
|
+
Local installs need Node 22.23.4+, 24.22.1+ or 26.12.1+. Other clients are covered under [Client setup](#client-setup).
|
|
80
62
|
|
|
81
63
|
---
|
|
82
64
|
|
|
83
|
-
##
|
|
84
|
-
|
|
85
|
-
If you are an agent reading this repository rather than a person reading a page, everything you need is machine-readable and generated from the running server — you do not have to parse this README.
|
|
65
|
+
## Distribution
|
|
86
66
|
|
|
87
|
-
|
|
88
|
-
|------|-------|
|
|
89
|
-
| Onboarding contract: quickstart per client, auth, safe workflow, human-authority tool lists, error recovery | [`docs/agent-onboarding.json`](./docs/agent-onboarding.json) — also shipped inside the npm package |
|
|
90
|
-
| Per-tool capability truth: `callability`, `writesFrihet`, `externalInteraction`, `externalSideEffects` | `_meta["io.frihet/capability"]` on every entry of `tools/list` |
|
|
91
|
-
| How to behave once connected | the `instructions` string returned by `initialize` — your client hands it to you automatically |
|
|
67
|
+
### Where to get it
|
|
92
68
|
|
|
93
|
-
|
|
69
|
+
| Channel | Status | Entry point |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| npm | Published | [`@frihet/mcp-server`](https://www.npmjs.com/package/@frihet/mcp-server) · `npx -y @frihet/mcp-server` |
|
|
72
|
+
| Remote MCP | Live, OAuth or API key | `https://mcp.frihet.io/mcp` (running version at [`/health`](https://mcp.frihet.io/health)) |
|
|
73
|
+
| ChatGPT app | Live | [Frihet in ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6ac6b51bd7648191a0696bd1e725bfe6) |
|
|
74
|
+
| Raycast | Coming to the Raycast Store | [Submission](https://github.com/raycast/extensions/pull/33017) |
|
|
75
|
+
| Official MCP Registry | Listed | [`io.frihet/erp`](https://registry.modelcontextprotocol.io/?q=io.frihet) |
|
|
76
|
+
| GitHub MCP Registry | Listed | [Frihet ERP](https://github.com/mcp/io.frihet/erp) |
|
|
94
77
|
|
|
95
|
-
|
|
96
|
-
2. **Draft, show, stop.** `create_invoice`, `create_quote` and `create_credit_note` all default to `status=draft` — no fiscal number, no hash, nothing sent to a tax authority. Present the draft and hand back.
|
|
97
|
-
3. **Human authority is not yours to assume.** Any tool with a non-empty `externalSideEffects` reaches a client's inbox, a webhook, money, or AEAT / VeriFactu / TicketBAI / FACe. Several also take `confirm=true`; that flag records a human decision — never set it to satisfy your own plan.
|
|
78
|
+
Also listed on [Glama](https://glama.ai/mcp/servers/Frihet-io/frihet-mcp), [Cursor Directory](https://cursor.directory/plugins/mcp-frihet), [mcp.so](https://mcp.so/servers/frihet-mcp), [mcpservers.org](https://mcpservers.org/servers/frihet-io/frihet-mcp) and the [ToolSDK registry](https://github.com/toolsdk-ai/toolsdk-mcp-registry/blob/main/packages/finance-fintech/frihet-mcp.json).
|
|
98
79
|
|
|
99
|
-
|
|
80
|
+
> **Surface truth:** the catalogue contains 156 canonical operations. The local full profile serves 161 tool names, 11 resources, and 10 prompts (156 canonical operations plus 5 fiscal aliases). The hosted grouped profile serves 164 tool names, 7 resources, and 10 prompts (the same names plus 3 discovery tools, with API-backed resources kept local-only). The separately reviewed OpenAI profile serves 33 tool names, 0 resources, and 0 prompts. These counts describe the current source release; the hosted server reports the version it is running at `/health`. Catalogue membership is not a promise that a backing API is enabled for every workspace.
|
|
100
81
|
|
|
101
82
|
---
|
|
102
83
|
|
|
103
|
-
##
|
|
104
|
-
|
|
105
|
-
### One-line (Claude Code, Cursor, Copilot, Codex, Windsurf, Gemini CLI, and more)
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
npx skills add Frihet-io/frihet-mcp
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### Claude Code plugin (skill + MCP server in one install)
|
|
84
|
+
## What you can do
|
|
112
85
|
|
|
113
|
-
|
|
86
|
+
Real prompts, grouped by area.
|
|
114
87
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
88
|
+
| Area | Try asking |
|
|
89
|
+
|------|------------|
|
|
90
|
+
| Invoicing | "Show me all unpaid invoices" · "Create an invoice for Acme SL with 10h of consulting at 95/hour" · "Mark invoice abc123 as paid" |
|
|
91
|
+
| Expenses | "Log a 59.99 EUR expense for Adobe Creative Cloud, category: software, tax-deductible" · "What did I spend on travel last quarter?" |
|
|
92
|
+
| Clients and CRM | "Add a new client: TechStart SL, NIF B12345678" · "Log a call with TechStart: discussed Q2 proposal" · "Show all activities for Acme SL" |
|
|
93
|
+
| Quotes | "Create a quote for Design Studio: logo design (2000 EUR) + brand guidelines (3500 EUR)" |
|
|
94
|
+
| Tax and reporting | "Prepare my quarterly tax summary" · "Give me this month's profit and loss" |
|
|
95
|
+
| Webhooks | "Set up a webhook to notify https://my-app.com/hook when invoices are paid" |
|
|
119
96
|
|
|
120
|
-
|
|
97
|
+
Beyond these, the catalogue covers banking, e-invoicing, time tracking, recurring invoices, HR and payroll, POS and more. See the [full catalogue](#full-catalogue).
|
|
121
98
|
|
|
122
|
-
|
|
123
|
-
/plugin marketplace add anthropics/claude-plugins-community
|
|
124
|
-
/plugin install frihet-erp@claude-community
|
|
125
|
-
```
|
|
99
|
+
---
|
|
126
100
|
|
|
127
|
-
|
|
101
|
+
## Client setup
|
|
128
102
|
|
|
129
|
-
### Claude Code
|
|
103
|
+
### Claude Code
|
|
130
104
|
|
|
131
105
|
```bash
|
|
132
106
|
claude mcp add frihet -s user -e FRIHET_API_KEY=fri_your_key_here -- npx -y @frihet/mcp-server
|
|
133
107
|
claude mcp list # verify: frihet ✓ Connected
|
|
134
108
|
```
|
|
135
109
|
|
|
136
|
-
|
|
110
|
+
Or use the hosted server: `claude mcp add --transport http frihet https://mcp.frihet.io/mcp`.
|
|
137
111
|
|
|
138
|
-
### Codex CLI
|
|
112
|
+
### Codex CLI
|
|
139
113
|
|
|
140
114
|
```bash
|
|
141
115
|
codex mcp add frihet --env FRIHET_API_KEY=fri_your_key_here -- npx -y @frihet/mcp-server
|
|
142
|
-
codex mcp list # verify
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
Codex config is **TOML**, not JSON. `codex mcp add` writes:
|
|
146
|
-
|
|
147
|
-
```toml
|
|
148
|
-
[mcp_servers.frihet]
|
|
149
|
-
command = "npx"
|
|
150
|
-
args = ["-y", "@frihet/mcp-server"]
|
|
151
|
-
|
|
152
|
-
[mcp_servers.frihet.env]
|
|
153
|
-
FRIHET_API_KEY = "fri_your_key_here"
|
|
154
116
|
```
|
|
155
117
|
|
|
156
|
-
|
|
118
|
+
Codex reads TOML, not JSON. Pasting a JSON `mcpServers` block into `~/.codex/config.toml` is a parse error that breaks the whole file, so use the command above.
|
|
157
119
|
|
|
158
|
-
### Claude Desktop, Cursor, Windsurf, Cline
|
|
120
|
+
### Claude Desktop, Cursor, Windsurf, Cline
|
|
159
121
|
|
|
160
122
|
```json
|
|
161
123
|
{
|
|
@@ -171,20 +133,14 @@ FRIHET_API_KEY = "fri_your_key_here"
|
|
|
171
133
|
}
|
|
172
134
|
```
|
|
173
135
|
|
|
174
|
-
|
|
|
136
|
+
| Client | Config file |
|
|
175
137
|
|------|------------|
|
|
176
138
|
| Claude Desktop | `~/Library/Application Support/Claude/claude_desktop_config.json` |
|
|
177
139
|
| Cursor | `.cursor/mcp.json` or `~/.cursor/mcp.json` |
|
|
178
140
|
| Windsurf | `~/.windsurf/mcp.json` |
|
|
179
141
|
| Cline | VS Code settings or `.cline/mcp.json` |
|
|
180
142
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
### Remote (no install)
|
|
184
|
-
|
|
185
|
-
Use the hosted endpoint at `mcp.frihet.io` -- zero local dependencies, runs on Cloudflare Workers.
|
|
186
|
-
|
|
187
|
-
**With API key:**
|
|
143
|
+
### Remote server with an API key
|
|
188
144
|
|
|
189
145
|
```json
|
|
190
146
|
{
|
|
@@ -200,103 +156,57 @@ Use the hosted endpoint at `mcp.frihet.io` -- zero local dependencies, runs on C
|
|
|
200
156
|
}
|
|
201
157
|
```
|
|
202
158
|
|
|
203
|
-
|
|
159
|
+
Clients that support OAuth 2.1 with PKCE can connect to the same URL and sign in through the browser instead.
|
|
204
160
|
|
|
205
|
-
|
|
161
|
+
### ChatGPT
|
|
206
162
|
|
|
207
|
-
|
|
163
|
+
Open [Frihet in ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6ac6b51bd7648191a0696bd1e725bfe6) and connect your account.
|
|
208
164
|
|
|
209
|
-
|
|
210
|
-
2. Go to **Settings > API**
|
|
211
|
-
3. Click **Create API key**
|
|
212
|
-
4. Copy the key (starts with `fri_`) -- it's only shown once
|
|
213
|
-
|
|
214
|
-
---
|
|
165
|
+
### Skill for coding agents
|
|
215
166
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
Talk to your ERP. These are real prompts, not marketing copy.
|
|
219
|
-
|
|
220
|
-
### Invoicing
|
|
221
|
-
|
|
222
|
-
```
|
|
223
|
-
"Show me all unpaid invoices"
|
|
224
|
-
"Create an invoice for Acme SL with 10h of consulting at 95/hour"
|
|
225
|
-
"Mark invoice abc123 as paid"
|
|
226
|
-
"How much has ClientName been invoiced this year?"
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
### Expenses
|
|
230
|
-
|
|
231
|
-
```
|
|
232
|
-
"Log a 59.99 EUR expense for Adobe Creative Cloud, category: software, tax-deductible"
|
|
233
|
-
"List all expenses from January"
|
|
234
|
-
"What did I spend on travel last quarter?"
|
|
167
|
+
```bash
|
|
168
|
+
npx skills add Frihet-io/frihet-mcp
|
|
235
169
|
```
|
|
236
170
|
|
|
237
|
-
|
|
171
|
+
Installs the Frihet skill for Claude Code, Cursor, Codex, Windsurf, Gemini CLI and others. It routes requests to the MCP tools and asks for confirmation before writes. Tax figures come from your Frihet data, not from the skill. [Skill docs](https://docs.frihet.io/desarrolladores/skill-claude-code).
|
|
238
172
|
|
|
239
|
-
|
|
240
|
-
"Add a new client: TechStart SL, NIF B12345678, email admin@techstart.es"
|
|
241
|
-
"Show me all my clients"
|
|
242
|
-
"Update ClientName's address to Calle Mayor 1, Madrid 28001"
|
|
243
|
-
```
|
|
173
|
+
### Get your API key
|
|
244
174
|
|
|
245
|
-
|
|
175
|
+
1. Log into [app.frihet.io](https://app.frihet.io)
|
|
176
|
+
2. Go to **Settings > API**
|
|
177
|
+
3. Click **Create API key**
|
|
178
|
+
4. Copy the key (starts with `fri_`). It is only shown once.
|
|
246
179
|
|
|
247
|
-
|
|
248
|
-
"Add a contact to Acme SL: Ana Garcia, CTO, ana@acme.es"
|
|
249
|
-
"Log a call with TechStart: discussed Q2 proposal, they're interested in upgrade"
|
|
250
|
-
"Add a note to ClientName: prefers invoices in English, payment NET 30"
|
|
251
|
-
"Show me all activities for Acme SL"
|
|
252
|
-
```
|
|
180
|
+
---
|
|
253
181
|
|
|
254
|
-
|
|
182
|
+
## For AI agents
|
|
255
183
|
|
|
256
|
-
|
|
257
|
-
"Create a quote for Design Studio: logo design (2000 EUR) + brand guidelines (3500 EUR)"
|
|
258
|
-
"Show me all pending quotes"
|
|
259
|
-
```
|
|
184
|
+
If you are an agent reading this repository, the contract is machine-readable and generated from the running server.
|
|
260
185
|
|
|
261
|
-
|
|
186
|
+
| What | Where |
|
|
187
|
+
|------|-------|
|
|
188
|
+
| Onboarding contract: quickstart per client, auth, safe workflow, human-authority tool lists, error recovery | [`docs/agent-onboarding.json`](./docs/agent-onboarding.json), also shipped in the npm package |
|
|
189
|
+
| Per-tool capability truth: `callability`, `writesFrihet`, `externalInteraction`, `externalSideEffects` | `_meta["io.frihet/capability"]` on every entry of `tools/list` |
|
|
190
|
+
| How to behave once connected | the `instructions` string returned by `initialize` |
|
|
262
191
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
```
|
|
192
|
+
1. **Orient before acting.** `get_business_context` and the `frihet://tax/rates` resource decide the correct fiscal treatment. Do not recall a tax rate from memory.
|
|
193
|
+
2. **Draft, show, stop.** `create_invoice`, `create_quote` and `create_credit_note` default to `status=draft`: no fiscal number, no hash, nothing sent to a tax authority.
|
|
194
|
+
3. **Human authority is not yours to assume.** Any tool with a non-empty `externalSideEffects` reaches a client's inbox, a webhook, money, or a tax authority. Several also take `confirm=true`; that flag records a human decision.
|
|
267
195
|
|
|
268
196
|
---
|
|
269
197
|
|
|
270
198
|
## What to expect
|
|
271
199
|
|
|
272
|
-
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. Most of the
|
|
273
|
-
|
|
274
|
-
**Works great:**
|
|
275
|
-
|
|
276
|
-
```
|
|
277
|
-
"Create an invoice for TechStart SL, 40h consulting at 75 EUR/h" --> creates the invoice
|
|
278
|
-
"Show unpaid invoices over 1,000 EUR" --> queries and filters
|
|
279
|
-
"Log a 120 EUR expense for the Madrid train, category: travel" --> records the expense
|
|
280
|
-
"Update client Acme's email to billing@acme.es" --> modifies the record
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
**Does not do:**
|
|
200
|
+
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. Most of the 156 canonical operations are CRUD operations over the REST API; the rest are read-only summaries and fiscal/e-invoice actions. Alias and discovery names are counted separately.
|
|
284
201
|
|
|
285
|
-
|
|
286
|
-
- File upload or attachment handling
|
|
287
|
-
- Image processing of any kind
|
|
288
|
-
|
|
289
|
-
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:
|
|
290
|
-
|
|
291
|
-
```
|
|
292
|
-
1. Scan/photograph the invoice
|
|
293
|
-
2. Use Claude Vision: "Read this invoice image and extract the vendor, items, amounts, and dates"
|
|
294
|
-
3. Then: "Create an expense in Frihet for [extracted data]"
|
|
295
|
-
```
|
|
202
|
+
It does not do OCR, PDF scanning, file upload or image processing. To digitize a paper invoice, extract the data first (a vision model, an OCR service, or manual entry), then ask the assistant to create the record. One API key maps to one Frihet workspace, and you need a Frihet account at [app.frihet.io](https://app.frihet.io).
|
|
296
203
|
|
|
297
204
|
---
|
|
298
205
|
|
|
299
|
-
##
|
|
206
|
+
## Full catalogue
|
|
207
|
+
|
|
208
|
+
<details>
|
|
209
|
+
<summary><strong>All 156 canonical operations, resources and prompts</strong></summary>
|
|
300
210
|
|
|
301
211
|
### Invoices (12)
|
|
302
212
|
|
|
@@ -404,7 +314,7 @@ If you need to digitize paper invoices or receipts, extract the data first (e.g.
|
|
|
404
314
|
| Tool | What it does |
|
|
405
315
|
|------|-------------|
|
|
406
316
|
| `send_einvoice` | Dispatch an invoice in 11 formats (XRechnung, Factur-X, FatturaPA, PEPPOL, Facturae, UBL, CII) via email / Chorus Pro / SDI / PEPPOL / download |
|
|
407
|
-
| `get_einvoice_status` | Poll
|
|
317
|
+
| `get_einvoice_status` | Poll an e-invoice dispatch until it succeeds or fails; returns ackId, XML URL and PDF/A-3 URL |
|
|
408
318
|
| `validate_einvoice_xml` | Validate raw XML against format schema + schematron rules (KOSIT / Mustang / XSD / Schematron) |
|
|
409
319
|
| `export_datev` | Export accounting data as DATEV EXTF (Buchungsstapel / Debitoren / Kreditoren) in CP1252 encoding |
|
|
410
320
|
| `einvoice_export` | Export e-invoice data in machine-readable formats (JSON/XML) for archival or integration |
|
|
@@ -412,7 +322,7 @@ If you need to digitize paper invoices or receipts, extract the data first (e.g.
|
|
|
412
322
|
| `face_status` | Poll submission status from FACe for a submitted invoice |
|
|
413
323
|
| `ticketbai_submit` | Submit TicketBAI fiscal record to Basque Country tax authority (Hacienda) |
|
|
414
324
|
| `ticketbai_status` | Poll TicketBAI submission status from the Basque tax authority |
|
|
415
|
-
| `ksef_submit` |
|
|
325
|
+
| `ksef_submit` | **NOT_DEPLOYED**: submit an invoice to KSeF (Poland). Returns a labeled "unavailable" error until activated |
|
|
416
326
|
|
|
417
327
|
### Time Tracking (6)
|
|
418
328
|
|
|
@@ -436,7 +346,7 @@ If you need to digitize paper invoices or receipts, extract the data first (e.g.
|
|
|
436
346
|
| `pause_recurring_invoice` | Pause an active template — no invoices generated while paused |
|
|
437
347
|
| `resume_recurring_invoice` | Resume a paused template — next invoice on next scheduled cycle |
|
|
438
348
|
| `delete_recurring_invoice` | Permanently delete a template (confirm=true required) |
|
|
439
|
-
| `run_recurring_now` |
|
|
349
|
+
| `run_recurring_now` | Generate the next recurring invoice with explicit `confirm=true` in full and grouped modes; workspace settings may trigger fiscal issuance, submission and webhooks |
|
|
440
350
|
|
|
441
351
|
### Team Management (4)
|
|
442
352
|
|
|
@@ -461,8 +371,8 @@ If you need to digitize paper invoices or receipts, extract the data first (e.g.
|
|
|
461
371
|
|
|
462
372
|
| Tool | What it does |
|
|
463
373
|
|------|-------------|
|
|
464
|
-
| `frihet_gl_entry_approve` | Approve a GL journal entry (gestor/admin only
|
|
465
|
-
| `frihet_gl_entry_reject` | Reject a GL entry with a mandatory reason (
|
|
374
|
+
| `frihet_gl_entry_approve` | Approve a GL journal entry (gestor/admin only, restricted) |
|
|
375
|
+
| `frihet_gl_entry_reject` | Reject a GL entry with a mandatory reason (restricted) |
|
|
466
376
|
| `frihet_gl_entry_audit_log` | Retrieve full audit trail for a GL entry |
|
|
467
377
|
|
|
468
378
|
### White-label Portal Domain (3)
|
|
@@ -484,17 +394,17 @@ If you need to digitize paper invoices or receipts, extract the data first (e.g.
|
|
|
484
394
|
|
|
485
395
|
| Tool | What it does |
|
|
486
396
|
|------|-------------|
|
|
487
|
-
| `frihet_modelo_415_summary` | M415 annual operations >€3,005 (Canarias equivalent of M347) |
|
|
488
|
-
| `frihet_modelo_425_summary` | M425 annual IGIC recap for Canary Islands businesses |
|
|
489
|
-
| `frihet_modelo_418_summary` | M418 monthly IGIC return
|
|
490
|
-
| `frihet_aiem_calculate` |
|
|
397
|
+
| `frihet_modelo_415_summary` | M415 annual operations >€3,005 (Canarias equivalent of M347) — not deployed, returns `NOT_DEPLOYED` |
|
|
398
|
+
| `frihet_modelo_425_summary` | M425 annual IGIC recap for Canary Islands businesses — not deployed, returns `NOT_DEPLOYED` |
|
|
399
|
+
| `frihet_modelo_418_summary` | M418 monthly individual IGIC return, régimen especial del grupo de entidades — not deployed, returns `NOT_DEPLOYED` |
|
|
400
|
+
| `frihet_aiem_calculate` | AIEM (Arbitrio Importación) calculation for Canarias — not deployed, returns `NOT_DEPLOYED` |
|
|
491
401
|
|
|
492
402
|
### Impuesto sobre Sociedades — Corporate Tax (2)
|
|
493
403
|
|
|
494
404
|
| Tool | What it does |
|
|
495
405
|
|------|-------------|
|
|
496
|
-
| `frihet_modelo_200_summary` | Modelo 200 annual IS return
|
|
497
|
-
| `frihet_modelo_202_summary` | Modelo 202 installment payments (1P
|
|
406
|
+
| `frihet_modelo_200_summary` | Modelo 200 annual IS return — not deployed, returns `NOT_DEPLOYED` |
|
|
407
|
+
| `frihet_modelo_202_summary` | Modelo 202 installment payments (1P/2P/3P) — not deployed, returns `NOT_DEPLOYED` |
|
|
498
408
|
|
|
499
409
|
### Bank Categorization Rules (2)
|
|
500
410
|
|
|
@@ -513,7 +423,7 @@ If you need to digitize paper invoices or receipts, extract the data first (e.g.
|
|
|
513
423
|
| `update_deposit` | Update deposit fields |
|
|
514
424
|
| `delete_deposit` | Delete a deposit (confirm=true required) |
|
|
515
425
|
| `apply_deposit` | Apply a deposit balance against an invoice |
|
|
516
|
-
| `refund_deposit` |
|
|
426
|
+
| `refund_deposit` | Record a deposit refund in Frihet bookkeeping with `confirm=true`; optional `amount` records that portion, omission records the remaining refundable balance. Does not transfer money |
|
|
517
427
|
|
|
518
428
|
### Vendors (5)
|
|
519
429
|
|
|
@@ -542,11 +452,10 @@ If you need to digitize paper invoices or receipts, extract the data first (e.g.
|
|
|
542
452
|
| `get_modelo_303_summary` | Quarterly IVA return (Modelo 303) — collected vs deductible, net payable |
|
|
543
453
|
| `get_modelo_130_summary` | Quarterly IRPF installment for self-employed (Modelo 130) |
|
|
544
454
|
| `get_modelo_390_summary` | Annual IVA summary (Modelo 390) |
|
|
545
|
-
| `get_modelo_180_summary` | Annual withholding summary for rentals (Modelo 180) |
|
|
455
|
+
| `get_modelo_180_summary` | Annual withholding summary for rentals (Modelo 180) — not deployed, returns `NOT_DEPLOYED` |
|
|
546
456
|
| `get_modelo_347_summary` | Annual third-party transactions >€3,005 (Modelo 347) |
|
|
547
457
|
| `verifactu_status` | Get VeriFactu submission status for a fiscal record |
|
|
548
458
|
| `verifactu_resubmit` | Resubmit a rejected VeriFactu fiscal record |
|
|
549
|
-
| `ticketbai_status` | Poll TicketBAI submission status — *cross-reference from E-Invoicing (10); NOT counted toward this section's 7* |
|
|
550
459
|
|
|
551
460
|
### Vacation Rentals / Stay (5)
|
|
552
461
|
|
|
@@ -599,12 +508,6 @@ If you need to digitize paper invoices or receipts, extract the data first (e.g.
|
|
|
599
508
|
| `payroll_export` | Read normalized payroll-ready employee data; the format value is an echoed destination label, not a generated file |
|
|
600
509
|
| `payroll_checklist` | List payable employees with payroll-profile readiness, missing fields, and monthly review state |
|
|
601
510
|
|
|
602
|
-
### Onboarding (2)
|
|
603
|
-
|
|
604
|
-
| Tool | What it does |
|
|
605
|
-
|------|-------------|
|
|
606
|
-
| `onboarding_status` | Get onboarding completion status for the current workspace |
|
|
607
|
-
| `onboarding_persona_set` | Set or update the business persona (freelancer, SME, gestoría, etc.) |
|
|
608
511
|
|
|
609
512
|
### Permissions (2)
|
|
610
513
|
|
|
@@ -618,8 +521,8 @@ If you need to digitize paper invoices or receipts, extract the data first (e.g.
|
|
|
618
521
|
| Tool | What it does |
|
|
619
522
|
|------|-------------|
|
|
620
523
|
| `period_close_status` | Get the current or selected YYYY fiscal-year range, open/closed state, and nullable closing details |
|
|
621
|
-
| `period_close` | Close an accounting period (gestor/admin only
|
|
622
|
-
| `period_reopen` | Reopen a closed period with a mandatory reason (
|
|
524
|
+
| `period_close` | Close an accounting period (gestor/admin only, restricted) |
|
|
525
|
+
| `period_reopen` | Reopen a closed period with a mandatory reason (restricted) |
|
|
623
526
|
|
|
624
527
|
All canonical operations (and their aliases) return **structured output** via `outputSchema` -- typed JSON, not raw text. List response shapes follow their API family; not every list endpoint is paginated.
|
|
625
528
|
|
|
@@ -632,11 +535,9 @@ On the full MCP surfaces, every `tools/list` entry includes `_meta["io.frihet/ca
|
|
|
632
535
|
- `writesFrihet`, `externalInteraction`, and `externalSideEffects` distinguish state changes and calls to external entities/providers;
|
|
633
536
|
- MCP action annotations remain the standard source for read-only, destructive, idempotent, and open-world hints.
|
|
634
537
|
|
|
635
|
-
The ChatGPT
|
|
636
|
-
|
|
637
|
-
---
|
|
538
|
+
The ChatGPT app uses a separately reviewed profile of 33 business operations, with no discovery meta-tools, prompts or resources. Its 17 reads and 16 writes are deliberately narrow, and every write requires literal `confirm=true`. Do not infer it from the full catalogue.
|
|
638
539
|
|
|
639
|
-
|
|
540
|
+
### Resources
|
|
640
541
|
|
|
641
542
|
Context the AI can read to make smarter decisions.
|
|
642
543
|
|
|
@@ -652,7 +553,7 @@ The local package serves 11 resources: 7 static references plus 4 API-backed wor
|
|
|
652
553
|
| Expense Categories | `frihet://config/expense-categories` | 8 categories with deductibility rules, IVA treatment, amortization |
|
|
653
554
|
| Invoice Statuses | `frihet://config/invoice-statuses` | Status flow (draft > sent > paid/overdue > cancelled), transition rules, webhook events |
|
|
654
555
|
| Currencies | `frihet://config/currencies` | 40 supported currencies with ISO codes, symbols, decimal places, locale formatting |
|
|
655
|
-
| Countries | `frihet://config/countries` |
|
|
556
|
+
| Countries | `frihet://config/countries` | Supported countries with fiscal zones, default tax rates, currencies, invoice prefixes |
|
|
656
557
|
|
|
657
558
|
**Dynamic** (live data from your account):
|
|
658
559
|
|
|
@@ -663,9 +564,7 @@ The local package serves 11 resources: 7 static references plus 4 API-backed wor
|
|
|
663
564
|
| Overdue Invoices | `frihet://overdue-invoices` | All invoices past due date (up to 100) |
|
|
664
565
|
| Plan Limits | `frihet://status/plan-limits` | Live plan tier, usage counters, invoices/month, API rate limits |
|
|
665
566
|
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
## Prompts (10)
|
|
567
|
+
### Prompts (10)
|
|
669
568
|
|
|
670
569
|
Pre-built workflows the AI can execute as guided multi-step operations.
|
|
671
570
|
|
|
@@ -682,37 +581,11 @@ Pre-built workflows the AI can execute as guided multi-step operations.
|
|
|
682
581
|
| `invoice-aging-review` | AR aging analysis: group unpaid invoices by bucket (0-30/31-60/61-90/90+ days), top debtors, collection actions | -- |
|
|
683
582
|
| `expense-batch` | Process expenses in bulk: categorize, apply tax rates, flag missing receipts | `fiscalZone?` |
|
|
684
583
|
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
## How it works
|
|
688
|
-
|
|
689
|
-
```mermaid
|
|
690
|
-
graph LR
|
|
691
|
-
AI["Your AI assistant"]
|
|
692
|
-
MCP["frihet-mcp"]
|
|
693
|
-
API["api.frihet.io"]
|
|
694
|
-
DB["Frihet ERP"]
|
|
695
|
-
|
|
696
|
-
AI -- "create_invoice()" --> MCP
|
|
697
|
-
MCP -- "POST /v1/invoices" --> API
|
|
698
|
-
API --> DB
|
|
699
|
-
DB -- "201 + invoice data" --> API
|
|
700
|
-
API -- "structured JSON" --> MCP
|
|
701
|
-
MCP -- "typed response + suggestions" --> AI
|
|
702
|
-
|
|
703
|
-
style AI fill:#09090b,stroke:#4ade80,color:#fafafa
|
|
704
|
-
style MCP fill:#09090b,stroke:#fafafa,color:#fafafa
|
|
705
|
-
style API fill:#09090b,stroke:#3f3f46,color:#a1a1aa
|
|
706
|
-
style DB fill:#09090b,stroke:#3f3f46,color:#a1a1aa
|
|
707
|
-
```
|
|
584
|
+
</details>
|
|
708
585
|
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
Two transports:
|
|
712
|
-
- **stdio** (local) -- `npx @frihet/mcp-server` with `FRIHET_API_KEY`
|
|
713
|
-
- **Streamable HTTP** (remote) -- `https://mcp.frihet.io/mcp` with Bearer token or OAuth 2.0+PKCE
|
|
586
|
+
---
|
|
714
587
|
|
|
715
|
-
|
|
588
|
+
## Configuration
|
|
716
589
|
|
|
717
590
|
| Variable | Required | Default |
|
|
718
591
|
|----------|----------|---------|
|
|
@@ -720,136 +593,35 @@ Two transports:
|
|
|
720
593
|
| `FRIHET_API_URL` | No | `https://api.frihet.io/v1` |
|
|
721
594
|
| `FRIHET_TOOL_MODE` | No | `full` |
|
|
722
595
|
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
## Tool exposure: depth served on demand
|
|
596
|
+
`FRIHET_TOOL_MODE=grouped` is progressive disclosure: each tool description collapses to one line and three discovery tools (`list_tool_groups`, `search_tools`, `describe_tool`) are added, so an agent loads full schemas only for the tools it needs. Operation names, input schemas and handlers do not change. The hosted server runs in grouped mode.
|
|
726
597
|
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
`FRIHET_TOOL_MODE` lets you choose how that depth is exposed.
|
|
730
|
-
|
|
731
|
-
| Mode | Behavior |
|
|
732
|
-
|------|----------|
|
|
733
|
-
| `full` (default) | Canonical tools and fiscal aliases are exposed with full descriptions and schemas. Public descriptors add conservative callability and side-effect truth; operation names, schemas and handlers are unchanged. |
|
|
734
|
-
| `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. |
|
|
735
|
-
|
|
736
|
-
In `grouped` mode operation names, input schemas and handlers are unchanged. Descriptors also expose the same conservative capability and action truth as the full profile. Discovery flows through three meta-tools:
|
|
737
|
-
|
|
738
|
-
- **`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.
|
|
739
|
-
- **`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`.
|
|
740
|
-
- **`describe_tool(name)`** — the full original description and input fields for one tool, on demand, before you call it.
|
|
741
|
-
|
|
742
|
-
```jsonc
|
|
743
|
-
// claude_desktop_config.json — opt in to grouped mode
|
|
598
|
+
```json
|
|
744
599
|
{
|
|
745
600
|
"mcpServers": {
|
|
746
601
|
"frihet": {
|
|
747
602
|
"command": "npx",
|
|
748
603
|
"args": ["@frihet/mcp-server"],
|
|
749
|
-
"env": {
|
|
750
|
-
"FRIHET_API_KEY": "fri_...",
|
|
751
|
-
"FRIHET_TOOL_MODE": "grouped"
|
|
752
|
-
}
|
|
604
|
+
"env": { "FRIHET_API_KEY": "fri_...", "FRIHET_TOOL_MODE": "grouped" }
|
|
753
605
|
}
|
|
754
606
|
}
|
|
755
607
|
}
|
|
756
608
|
```
|
|
757
609
|
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
---
|
|
761
|
-
|
|
762
|
-
## API limits
|
|
763
|
-
|
|
764
|
-
| Limit | Value |
|
|
765
|
-
|-------|-------|
|
|
766
|
-
| Requests per minute | 100 per API key |
|
|
767
|
-
| Results per page | 100 max (50 default) |
|
|
768
|
-
| Request body | 1 MB max |
|
|
769
|
-
| Webhook payload | 100 KB max |
|
|
770
|
-
| Webhooks per account | 20 max |
|
|
771
|
-
|
|
772
|
-
Rate limiting is handled automatically with exponential backoff.
|
|
773
|
-
|
|
774
|
-
---
|
|
775
|
-
|
|
776
|
-
## Claude Code Skill
|
|
777
|
-
|
|
778
|
-
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.
|
|
779
|
-
|
|
780
|
-
### Install the skill
|
|
781
|
-
|
|
782
|
-
```bash
|
|
783
|
-
git clone https://github.com/Frihet-io/frihet-mcp.git
|
|
784
|
-
ln -s "$(pwd)/frihet-mcp/skill" ~/.claude/skills/frihet
|
|
785
|
-
```
|
|
786
|
-
|
|
787
|
-
Or with the universal installer:
|
|
788
|
-
|
|
789
|
-
```bash
|
|
790
|
-
npx skills add Frihet-io/frihet-mcp
|
|
791
|
-
```
|
|
792
|
-
|
|
793
|
-
### Commands
|
|
794
|
-
|
|
795
|
-
| Command | What it does |
|
|
796
|
-
|---------|-------------|
|
|
797
|
-
| `/frihet status` | Account overview, recent activity, pending payments |
|
|
798
|
-
| `/frihet invoice` | Create, list, search invoices |
|
|
799
|
-
| `/frihet expense` | Log and query expenses |
|
|
800
|
-
| `/frihet clients` | Manage client database |
|
|
801
|
-
| `/frihet quote` | Create and manage quotes |
|
|
802
|
-
| `/frihet report` | Financial summaries (P&L, quarterly, overdue) |
|
|
803
|
-
| `/frihet webhooks` | Configure automation triggers |
|
|
804
|
-
| `/frihet setup` | Guided setup and connection test |
|
|
805
|
-
|
|
806
|
-
The skill knows about IVA rates, IRPF retention, Modelo 303 prep, expense deductibility rules, and VeriFactu compliance.
|
|
807
|
-
|
|
808
|
-
Full documentation: [docs.frihet.io/desarrolladores/skill-claude-code](https://docs.frihet.io/desarrolladores/skill-claude-code)
|
|
809
|
-
|
|
810
|
-
---
|
|
811
|
-
|
|
812
|
-
## Development
|
|
813
|
-
|
|
814
|
-
```bash
|
|
815
|
-
git clone https://github.com/Frihet-io/frihet-mcp.git
|
|
816
|
-
cd frihet-mcp
|
|
817
|
-
npm install
|
|
818
|
-
npm run build
|
|
819
|
-
```
|
|
820
|
-
|
|
821
|
-
Run locally:
|
|
822
|
-
|
|
823
|
-
```bash
|
|
824
|
-
FRIHET_API_KEY=fri_xxx node dist/index.js
|
|
825
|
-
```
|
|
826
|
-
|
|
827
|
-
Test with the [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector):
|
|
828
|
-
|
|
829
|
-
```bash
|
|
830
|
-
npx @modelcontextprotocol/inspector node dist/index.js
|
|
831
|
-
```
|
|
610
|
+
Rate limits depend on your plan; the server retries with exponential backoff on 429. See the [API reference](https://docs.frihet.io/desarrolladores/api-rest).
|
|
832
611
|
|
|
833
612
|
---
|
|
834
613
|
|
|
835
|
-
##
|
|
836
|
-
|
|
837
|
-
Contributions are welcome. Please open an issue first to discuss what you'd like to change.
|
|
614
|
+
## Development and contributing
|
|
838
615
|
|
|
839
616
|
```bash
|
|
840
617
|
git clone https://github.com/Frihet-io/frihet-mcp.git
|
|
841
618
|
cd frihet-mcp
|
|
842
619
|
npm install
|
|
843
620
|
npm run build # must pass before submitting
|
|
621
|
+
FRIHET_API_KEY=fri_xxx node dist/index.js
|
|
844
622
|
```
|
|
845
623
|
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
## Current limitations
|
|
849
|
-
|
|
850
|
-
- **No OCR or file upload** -- the MCP works with structured data, not images or PDFs.
|
|
851
|
-
- **Single company** -- one API key maps to one Frihet workspace.
|
|
852
|
-
- **Frihet account required** -- you need an active account at [app.frihet.io](https://app.frihet.io) and an API key (starts with `fri_`).
|
|
624
|
+
Test with the [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector): `npx @modelcontextprotocol/inspector node dist/index.js`. Open an issue before large changes. Report vulnerabilities as described in [SECURITY.md](./SECURITY.md).
|
|
853
625
|
|
|
854
626
|
---
|
|
855
627
|
|
|
@@ -857,28 +629,14 @@ npm run build # must pass before submitting
|
|
|
857
629
|
|
|
858
630
|
| Package | What it is |
|
|
859
631
|
|---------|-----------|
|
|
860
|
-
| [`@frihet/mcp-server`](https://www.npmjs.com/package/@frihet/mcp-server) | This MCP server (
|
|
632
|
+
| [`@frihet/mcp-server`](https://www.npmjs.com/package/@frihet/mcp-server) | This MCP server (156 canonical operations + 5 alias names; 11 local resources; 10 prompts) |
|
|
861
633
|
| [`@frihet/sdk`](https://github.com/Frihet-io/frihet-sdk) | TypeScript SDK (`frihet.invoices.create()`) |
|
|
862
634
|
| [`frihet`](https://www.npmjs.com/package/frihet) | CLI (`frihet invoices list --status overdue`) |
|
|
863
635
|
| [`n8n-nodes-frihet`](https://www.npmjs.com/package/n8n-nodes-frihet) | n8n community node for workflow automation |
|
|
864
636
|
| [REST API](https://docs.frihet.io/desarrolladores/api-rest) | OpenAPI 3.1 at `api.frihet.io/v1` |
|
|
865
|
-
| [Remote MCP](https://mcp.frihet.io) | Hosted endpoint on Cloudflare Workers (zero install) |
|
|
866
637
|
| [Webhooks](https://docs.frihet.io/desarrolladores/webhooks) | Real-time events with HMAC-SHA256 |
|
|
867
638
|
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
- [Frihet](https://frihet.io) -- The product
|
|
871
|
-
- [Documentation](https://docs.frihet.io) -- Full docs
|
|
872
|
-
- [API reference](https://docs.frihet.io/desarrolladores/api-rest) -- REST API
|
|
873
|
-
- [MCP server docs](https://docs.frihet.io/desarrolladores/mcp-server) -- Setup guides, troubleshooting
|
|
874
|
-
- [npm](https://www.npmjs.com/package/@frihet/mcp-server) -- Package registry
|
|
875
|
-
- [Smithery](https://smithery.ai/servers/frihet/frihet-mcp) -- Smithery marketplace
|
|
876
|
-
- [MCP Registry](https://registry.modelcontextprotocol.io/?q=io.frihet) -- Anthropic official registry
|
|
877
|
-
- [Remote endpoint](https://mcp.frihet.io) -- Hosted MCP server (Cloudflare Workers)
|
|
878
|
-
- [OpenAPI spec](https://api.frihet.io/openapi.json) -- Machine-readable API definition
|
|
879
|
-
- [Security policy](./SECURITY.md) -- Private vulnerability reporting guidance
|
|
880
|
-
|
|
881
|
-
---
|
|
639
|
+
[Frihet](https://frihet.io) · [Documentation](https://docs.frihet.io) · [MCP server docs](https://docs.frihet.io/desarrolladores/mcp-server) · [OpenAPI spec](https://api.frihet.io/openapi.json)
|
|
882
640
|
|
|
883
641
|
## License
|
|
884
642
|
|