Fortnox MCP Integration
FORTNOX-MCP · Rev R0
Integrating an MCP server for the Fortnox Swedish accounting system so LLMs can manage invoices, customers, suppliers, orders, vouchers, and accounting data. Evaluating and standing up an existing open-source Fortnox MCP server as the base.
Everything here lives inside a Project (a code + revision, e.g. ESH10000540 R3).
The backbone is the V-model, read top-to-bottom: define what the product must do, plan how to prove it,
execute the proof on real units, then learn from the field — and the Loop closes back up to the top.
This map is live: a block is green with a count when this project actually has that entity,
and dashed/dim when it’s empty. Click any block to open its tab; hover for details.
Arrows are the meaningful links; the implicit “belongs to this Project” edge is left out for legibility.
What each thing means
- Requirement
- One thing the product must do or satisfy — the “what”.
- Test Case
- A defined check that proves one or more requirements — the “how we prove it”. A verified_by trace link ties a test case to the requirement(s) it covers; that link is exactly what Coverage % counts. (So: a test case refers to the requirements it verifies.)
- Verification Plan
- A named grouping of test cases, approved before a test campaign and optionally gated by a milestone.
- Verification Record
- The result of running one test case against one unit: pass / fail / error / na. This is the evidence a requirement is actually met.
- DUT
- Device Under Test — an individual physical unit (by serial number) that records and test data attach to.
- Deviation
- A documented waiver against a verification record (e.g. accept a known non-conformance, with justification).
- Entry
- A knowledge note: a decision (settled choice), notice (assumption / risk / open question), issue (tracked problem), or concept (idea under exploration). It can attach to any other entity.
- Design Rule
- A reusable, checkable engineering constraint. Running the checks turns each violation into a Conflict.
- Conflict
- An open flag raised by a failed design-rule check (or an end-of-life / component-library issue) that needs resolving.
- Milestone
- A dated gate; verification plans can be tied to it.
- Field Issue (RMA)
- A failure reported from the field on a returned unit; Root-Cause Analysis explains why it happened.
- The Loop (S-16)
loop_tracereconciles a field issue against that unit’s own verification record (did it pass at the edge of the band?).closes_looprecords the corrective decision or design rule so the lesson is captured — and clears the project’s open-loop count.- Interface / Port
- A contract between projects; each port can be driven by a requirement (and cascade one into the connected project).
- BOM Component
- A part on this project’s bill of materials, optionally linked to the shared Component Library.
- GRR Study
- A Gauge R&R study measuring how repeatable a test case’s measurement is.
- Test Data
- Production / Maestro run results recorded against DUTs — the population behind a single verification record.
Timeline
Color = derived gate state · hover a tile for its note.Status & gates
Chronological — Release is the final gate. Derived & read-only; edit viatrace_milestone_* tools.Release / Readiness not started 2/6 met
pending Requirements approved
- No requirements in scope
pending Coverage ≥ 100%
- No requirements in scope
pending All test cases pass
- No test cases in scope
pending No blocking issues open
- E-006: open blocker
Coverage — 0.0% · Done — 0.0%
| Code | Kind | Title | Severity | Scope | Status | Milestone | Created |
|---|---|---|---|---|---|---|---|
E-001 |
decision | Use erp-mafia/fortnox-mcp as the base MCP server | info | record | open | — | 2026-06-06 |
E-002 |
decision | Run server from built source on main, not npx/v1.0.1 | info | record | open | — | 2026-06-06 |
E-003 |
issue | Leaked hardcoded credentials in get-token.ts (v1.0.1) | warning | record | open | — | 2026-06-06 |
E-004 |
notice | Server built & smoke-tested; deps patched (0 prod vulns) | warning | action | closed | — | 2026-06-06 |
E-005 |
decision | Local patch: FORTNOX_TOKEN_FILE for per-instance token caches (arbitrary companies) | info | record | open | — | 2026-06-06 |
E-006 |
issue | Company 2 cannot be integrated — no API/integration license | blocking | action | open | — | 2026-06-06 |
E-007 |
notice | get-token.ts local fixes + E# wired up (7 scopes, connected) | info | record | open | — | 2026-06-06 |
E-008 |
decision | Hardened the MCP server: fixed 4 data-integrity/reliability bugs, contributed upstream via PR #6 | info | record | open | — | 2026-06-06 |
E-009 |
decision | Deployment architecture: shared-account Docker server on LAN behind a bearer-token reverse proxy | info | action | open | — | 2026-06-06 |
E-010 |
notice | Deployment LIVE on factory.local:9000 — Docker stack verified end-to-end | info | record | open | — | 2026-06-06 |
E-011 |
notice | How to get access: connecting to the shared Fortnox MCP server | info | record | open | — | 2026-06-06 |