noxctl 0.7.2 → 0.7.4
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
CHANGED
|
@@ -1,32 +1,67 @@
|
|
|
1
1
|
# noxctl
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/Magnus-Gille/noxctl/actions/workflows/ci.yml) [](https://www.npmjs.com/package/noxctl) [](https://www.npmjs.com/package/noxctl) [](LICENSE)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Fortnox from the terminal — or from an MCP-compatible AI assistant.**
|
|
6
|
+
|
|
7
|
+
noxctl is a command-line interface (CLI) and Model Context Protocol (MCP) server for
|
|
8
|
+
invoices, customers, suppliers, bookkeeping, VAT, payroll, and more. Fortnox operations
|
|
9
|
+
share the same CLI and MCP command surface, so you can use noxctl interactively, in
|
|
10
|
+
scripts, or through tools such as Claude Code.
|
|
11
|
+
|
|
12
|
+
You bring your own Fortnox developer app. Credentials stay in your operating system's
|
|
13
|
+
secure store, and requests go directly from your machine to the Fortnox API — there is
|
|
14
|
+
no shared credential and no backend operated by this project.
|
|
15
|
+
|
|
16
|
+
> [!IMPORTANT]
|
|
17
|
+
> noxctl is an independent, **unofficial** open-source project. It is **not affiliated
|
|
18
|
+
> with, endorsed by, or certified by Fortnox AB.** You remain responsible for reviewing
|
|
19
|
+
> every operation and complying with applicable terms and accounting, tax, payroll, and
|
|
20
|
+
> privacy rules. See the full [Disclaimer](#disclaimer).
|
|
21
|
+
|
|
22
|
+
## Why noxctl?
|
|
23
|
+
|
|
24
|
+
- **One interface, two ways to work:** Fortnox operations are available from both the
|
|
25
|
+
CLI and MCP; local setup and profile utilities stay in the CLI.
|
|
26
|
+
- **Safe writes by default:** mutations prompt for confirmation, fail closed when piped,
|
|
27
|
+
and support `--dry-run` / `dryRun` previews.
|
|
28
|
+
- **Built for automation:** human-readable tables in a terminal and stable JSON when
|
|
29
|
+
piped or requested explicitly.
|
|
30
|
+
- **Local credential control:** OAuth credentials are stored in macOS Keychain, Linux
|
|
31
|
+
Secret Service, or a DPAPI-protected Windows store.
|
|
32
|
+
- **Multiple companies:** named profiles keep Fortnox tenants separate.
|
|
33
|
+
|
|
34
|
+
## Quick start
|
|
35
|
+
|
|
36
|
+
You need Node.js 22.12+, a Fortnox account with API access, and your own Fortnox
|
|
37
|
+
developer app. Linux also requires `secret-tool` for secure credential storage.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm install --global noxctl
|
|
6
41
|
noxctl init # interactive setup wizard
|
|
7
|
-
noxctl company info # verify connection
|
|
42
|
+
noxctl company info # verify the connection
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Then explore from the terminal:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
8
48
|
noxctl customers list # list customers
|
|
9
49
|
noxctl invoices list --filter unpaid # unpaid invoices
|
|
10
50
|
noxctl -o json invoices list | jq . # JSON output for scripting/AI
|
|
11
51
|
```
|
|
12
52
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
noxctl is an independent, **unofficial** open-source project. It is **not affiliated with, endorsed by, or certified by Fortnox AB.**
|
|
53
|
+
Prefer not to install globally? Skip the install command and run CLI commands as `npx noxctl <command>` instead.
|
|
16
54
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- **Node.js** 22.12+
|
|
22
|
-
- **Fortnox account** with API (Application Programming Interface) access
|
|
23
|
-
- **Your own Fortnox developer app** with the required scopes enabled
|
|
24
|
-
- **Linux only:** `secret-tool` available for secure credential storage
|
|
25
|
-
|
|
26
|
-
Fortnox product plans, API activation requirements, and integration licensing can change. Verify the current Fortnox requirements before publishing or relying on this setup for business-critical work.
|
|
55
|
+
**Documentation:** [full setup](#setup) · [profiles](#profiles-multi-tenant) ·
|
|
56
|
+
[commands and MCP tools](#tools) · [mutation safety](#mutation-safety) ·
|
|
57
|
+
[troubleshooting](#troubleshooting) · [contributing](CONTRIBUTING.md)
|
|
27
58
|
|
|
28
59
|
## Setup
|
|
29
60
|
|
|
61
|
+
Fortnox product plans, API activation requirements, and integration licensing can
|
|
62
|
+
change. Verify the current Fortnox requirements before publishing or relying on this
|
|
63
|
+
setup for business-critical work.
|
|
64
|
+
|
|
30
65
|
### How it connects to Fortnox
|
|
31
66
|
|
|
32
67
|
noxctl is a thin client over the **Fortnox REST API (v3)** at `https://api.fortnox.se/3`. It uses a **bring-your-own-app** model — there is no shared backend and no middleman:
|
package/dist/cli.js
CHANGED
|
@@ -22,7 +22,7 @@ process.stdout.on('error', (err) => {
|
|
|
22
22
|
program
|
|
23
23
|
.name('noxctl')
|
|
24
24
|
.description('CLI and MCP server for Fortnox accounting')
|
|
25
|
-
.version('0.7.
|
|
25
|
+
.version('0.7.4')
|
|
26
26
|
.addOption(new Option('-o, --output <format>', 'Output format (default: table on TTY, json when piped)')
|
|
27
27
|
.choices(['json', 'table'])
|
|
28
28
|
.default(undefined))
|
package/dist/index.js
CHANGED
|
@@ -33,7 +33,7 @@ import { registerScheduleTimeTools } from './tools/scheduletimes.js';
|
|
|
33
33
|
export function createServer() {
|
|
34
34
|
const server = new McpServer({
|
|
35
35
|
name: 'fortnox-mcp',
|
|
36
|
-
version: '0.7.
|
|
36
|
+
version: '0.7.4',
|
|
37
37
|
});
|
|
38
38
|
registerCustomerTools(server);
|
|
39
39
|
registerInvoiceTools(server);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"financial-reports.d.ts","sourceRoot":"","sources":["../../src/operations/financial-reports.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"financial-reports.d.ts","sourceRoot":"","sources":["../../src/operations/financial-reports.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,kBAAkB,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,aAAa,EAAE,CAAC;IACtC,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAqND,wBAAsB,kBAAkB,CACtC,MAAM,GAAE,qBAA0B,GACjC,OAAO,CAAC,eAAe,CAAC,CAqB1B;AAED,wBAAsB,eAAe,CAAC,MAAM,GAAE,qBAA0B,GAAG,OAAO,CAAC,YAAY,CAAC,CAwB/F"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { fortnoxRequest } from '../fortnox-client.js';
|
|
2
|
+
const VOUCHER_DETAIL_CONCURRENCY = 5;
|
|
2
3
|
// BAS account plan groupings
|
|
3
4
|
const INCOME_STATEMENT_GROUPS = [
|
|
4
5
|
{ range: [3000, 3999], label: 'Nettoomsättning (Revenue)' },
|
|
@@ -74,17 +75,37 @@ async function fetchVoucherSums(financialYear, fromDate, toDate) {
|
|
|
74
75
|
totalPages = data.MetaInformation?.['@TotalPages'] ?? 1;
|
|
75
76
|
page++;
|
|
76
77
|
} while (page <= totalPages);
|
|
77
|
-
// Step 2: Fetch
|
|
78
|
+
// Step 2: Fetch voucher details concurrently. The shared client still owns
|
|
79
|
+
// rate limiting; this pool only keeps network latency from serialising reads.
|
|
78
80
|
const yearParam = financialYear ? `?financialyear=${financialYear}` : '';
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
let nextVoucherIndex = 0;
|
|
82
|
+
let failure;
|
|
83
|
+
async function worker() {
|
|
84
|
+
while (failure === undefined) {
|
|
85
|
+
const voucherIndex = nextVoucherIndex++;
|
|
86
|
+
if (voucherIndex >= vouchers.length)
|
|
87
|
+
return;
|
|
88
|
+
const voucher = vouchers[voucherIndex];
|
|
89
|
+
try {
|
|
90
|
+
const detail = await fortnoxRequest(`vouchers/${encodeURIComponent(voucher.series)}/${voucher.number}${yearParam}`);
|
|
91
|
+
for (const row of detail.Voucher.VoucherRows ?? []) {
|
|
92
|
+
if (row.Removed === true)
|
|
93
|
+
continue;
|
|
94
|
+
const existing = sums.get(row.Account) ?? { debit: 0, credit: 0 };
|
|
95
|
+
existing.debit += row.Debit || 0;
|
|
96
|
+
existing.credit += row.Credit || 0;
|
|
97
|
+
sums.set(row.Account, existing);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
failure = error;
|
|
102
|
+
}
|
|
86
103
|
}
|
|
87
104
|
}
|
|
105
|
+
const workerCount = Math.min(VOUCHER_DETAIL_CONCURRENCY, vouchers.length);
|
|
106
|
+
await Promise.all(Array.from({ length: workerCount }, () => worker()));
|
|
107
|
+
if (failure !== undefined)
|
|
108
|
+
throw failure;
|
|
88
109
|
return sums;
|
|
89
110
|
}
|
|
90
111
|
/** Compute closing balances: BalanceBroughtForward + debit - credit for each account. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"financial-reports.js","sourceRoot":"","sources":["../../src/operations/financial-reports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"financial-reports.js","sourceRoot":"","sources":["../../src/operations/financial-reports.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "noxctl",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4",
|
|
4
4
|
"mcpName": "io.github.magnus-gille/noxctl",
|
|
5
|
-
"description": "CLI and MCP server for Fortnox
|
|
5
|
+
"description": "CLI and MCP server for Fortnox \u2014 invoices, bookkeeping, VAT, payroll, and automation",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"noxctl": "dist/cli.js"
|
|
@@ -27,7 +27,10 @@
|
|
|
27
27
|
},
|
|
28
28
|
"keywords": [
|
|
29
29
|
"mcp",
|
|
30
|
+
"model-context-protocol",
|
|
30
31
|
"fortnox",
|
|
32
|
+
"cli",
|
|
33
|
+
"automation",
|
|
31
34
|
"accounting",
|
|
32
35
|
"invoicing",
|
|
33
36
|
"bookkeeping",
|
|
@@ -35,6 +38,14 @@
|
|
|
35
38
|
],
|
|
36
39
|
"author": "Magnus Gille",
|
|
37
40
|
"license": "MIT",
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/Magnus-Gille/noxctl.git"
|
|
44
|
+
},
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/Magnus-Gille/noxctl/issues"
|
|
47
|
+
},
|
|
48
|
+
"homepage": "https://github.com/Magnus-Gille/noxctl#readme",
|
|
38
49
|
"engines": {
|
|
39
50
|
"node": ">=22.12.0"
|
|
40
51
|
},
|