Repository navigation
Releases: Magnus-Gille/noxctl
Release list
noxctl 0.12.0
Highlights
- Read-only e-invoice preflight.
noxctl invoices preflight <docNumber>and thefortnox_preflight_invoiceMCP tool read an invoice and its customer and report the draft state, buyer references and EDI data they observe. Recipient connection and Peppol address are reported asunsupportedand the delivery route asunknown, so the result is alwaysready: false: exit code zero means the inspection succeeded, not that the invoice can be sent as an e-invoice. Nothing is sent, printed or bookkept. See docs/einvoice-readiness.md. - MCP capability discovery. The
noxctl://capabilitiesresource is readable without credentials or network access. It lists the server version, the tools registered on that server and whether each one reads or may mutate, and the confirmation and dry-run rules for writes.
Fixes
noxctl completion zshnow completes each command's own options with descriptions and short flags, fixed choices such as--output json|table, and file names for file options and arguments. It also keeps working when a global option precedes the command, for command aliases, and at any nesting depth. Regenerate an installed script after upgrading, for examplenoxctl completion zsh > "${fpath[1]}/_noxctl".
Existing command paths, aliases and accounting operation outputs remain compatible.
Full details: https://github.com/Magnus-Gille/noxctl/blob/main/CHANGELOG.md
noxctl 0.11.0
CLI improvements
- Start with a compact help screen and examples. Use
noxctl --help-allfor the complete command catalogue, grouped by function and alphabetized within each group. - Find clearer explanations of aliases, VAT reports and summaries, recurring invoicing, and file attachment workflows.
- Distinguish the saved default profile from a one-command
--profileoverride. Profile switching now suggests known names for likely typos and avoids displaying the old profile banner before a switch.
Existing command paths, aliases, and accounting operation outputs remain compatible.
Closes #181. See the changelog for details.
noxctl 0.10.0
Highlights
- Expanded the open-source Fortnox core API surface with read-only reference/setup resources, accrual CRUD, archive and inbox workflows, and cross-document attachment operations.
- Added read-only supplier-invoice attachment listing and downloads, including for unbooked and
authorizependinginvoices. - Added a fast general-ledger command backed by Fortnox SIE exports, with date, account, and series filters.
Fixes
- Completed customer writable-field schemas and corrected
Phone1/CountryCodehandling. - Hardened general-ledger validation and SIE escaping, accepted the
authorizependingsupplier-invoice filter, removed read-onlyTimesfrom accrual writes, and made no-argument CLI invocation show help.
Full details: https://github.com/Magnus-Gille/noxctl/blob/main/CHANGELOG.md
noxctl 0.9.0
What’s new
- Voucher attachments can now be listed and downloaded from both the CLI and MCP server.
- Customer-invoice attachments can now be uploaded and listed from both the CLI and MCP server.
- Development-dependency audit findings were remediated, and CI now requires both production and development dependency audits to pass.
Invoice attachment uploads require the opt-in archive scope. Existing users who need this feature should reauthorize with:
noxctl init --with-archiveMany thanks to @hedborg for contributing both attachment features in #144 and #145, including live Fortnox verification and regression coverage.
Full changelog: v0.8.0...v0.9.0
noxctl 0.8.0
Highlights
- Supported
noxctl/embeddedruntime API for host-injected, tenant-isolated Fortnox transports, operations and MCP servers. - Privacy-preserving MCP write-schema audit, also enforced by the weekly API-drift workflow.
- Deterministic
version:setand read-onlyversion:checktooling across package, lockfile, runtime and MCP registry metadata. - Expanded write-schema coverage for supplier invoices, invoices, offers and orders.
- Strict rejection of unknown MCP input properties.
- Fail-closed credential recovery and embedded construction, plus non-retryable invoice delivery.
Full changes: v0.7.4...v0.8.0
noxctl v0.7.4
What's changed
- Refreshed the repository front page with clearer positioning, trust model, feature summary, quick start, badges, and navigation.
- Added canonical npm repository, issues, homepage, and discovery metadata.
- Fixed stale contributor clone and security advisory links from the former repository location.
Full changelog: v0.7.3...v0.7.4
noxctl v0.7.3
Fixed
- Income statements and balance sheets now fetch voucher details through a bounded five-worker pool instead of waiting for every request sequentially. The shared Fortnox client remains the single rate-limit authority.
- Financial-report totals now exclude voucher rows marked
Removed: true, because those rows have been replaced in Fortnox.
Thanks @MountRose76 for the detailed report, real-world timings, bottleneck diagnosis, and independent comparison of the resulting income-statement totals in #108. Your work made this fix substantially faster to validate and ship.
Verification
- Codex review gate completed with no remaining findings
- CI passed on Ubuntu with Node.js 22 and 24, plus Windows with Node.js 22
- 73 test files / 833 tests
- zero production dependency vulnerabilities
- published npm tarball SHA-1:
695254e7825e4140b3b910b67829940340121c20
Merged in #109.
v0.7.2
Fixes #101, reported by @hedborg.
Fixed
fortnox_create_voucher silently dropped per-row fields. VoucherRowSchema declared four of the nine writable VoucherRow fields, and the MCP SDK strips any argument a schema doesn't declare — so a per-line note passed as TransactionInformation never reached Fortnox. No error: the voucher books correctly and the data you asked to record is simply absent.
The schema now covers the full VoucherRowSinglePayloadItem set — TransactionInformation, CostCenter, Project, Quantity and Removed. Tests assert the declared property list so it can't narrow again.
Row-level Description now documents that Fortnox normally overwrites it with the account's own registered name, and points callers at TransactionInformation for per-line free text. That overwrite behaviour is reported from real usage but not independently verified here — the guidance holds regardless, since TransactionInformation is unambiguously the per-line free-text field.
Full changelog: v0.7.1...v0.7.2
v0.7.1
Patch release. Everything user-facing landed in v0.7.0 — this is the dependency half.
Changed
@modelcontextprotocol/sdk1.29.0 → 1.30.0.- Dropped the
@hono/node-serveroverride. SDK 1.30.0 widens its dependency range to^1.19.9 || ^2.0.5, so npm resolves 2.0.11 on its own — the condition the 0.6.1 notes named for removing the pin added for GHSA-frvp-7c67-39w9. Verified the advisory stays closed:npm ls @hono/node-serverresolves 2.0.11 without the override andnpm audit --omit=devreports 0 vulnerabilities.
Internal
- Dev tooling:
eslint10.8.1,lint-staged17.3.0,typescript-eslint8.67.0. - Raised the CLI subprocess timeout in tests from 10s to 30s. Spawning
node dist/cli.json a cold Windows CI runner regularly approached the old ceiling, and the resulting failure surfaced as an empty stderr rather than a timeout.
Full changelog: v0.7.0...v0.7.1
v0.7.0
Fixes two externally reported issues — #95 and #96 — both found by @hedborg running noxctl against a live Fortnox account on Windows 11. Thank you.
Windows fixes
- OAuth setup was broken on Windows. The browser launch ran
cmd /c start <url>, and cmd.exe treats every unescaped&in the query string as a command separator — so Fortnox received the authorization URL truncated at the first parameter and rejected it. Windows now launches through PowerShellStart-Process, and the URL is printed unconditionally on every platform. - Saving credentials failed with
Unable to find type [System.Security.Cryptography.ProtectedData]on PowerShell configurations that don't preloadSystem.Security. logout --allclaimed to remove credentials that were never stored — the Windows delete usedfs.rm(..., { force: true }), which resolves for a missing file. Found by the new Windows CI leg.
OAuth scopes
project, costcenter and price were implemented but never requested, so those endpoints returned 403 even with the permissions enabled on your Fortnox app. They're now in the default set.
Offers and orders are opt-in. Fortnox gates the offer and order scopes on the Order licence, and requesting a scope the company isn't licensed for fails the entire authorization — so making them default would lock out Bokföring + Kundfaktura companies. Use noxctl init --with-orders (or FORTNOX_WITH_ORDERS=1), mirroring --with-salary.
The 403 hint also named the wrong scope for offers, orders and both payment families, and noxctl doctor / fortnox_status counted scopes they never actually probed.
Upgrading
Existing installations are unaffected until you re-run noxctl init — credentials renew against the scope set they recorded. Before re-running init, enable Projekt, Kostnadsställe and Priser on your Fortnox app, or the authorization will be rejected.
MCP tool fixes
fortnox_create_supplier/fortnox_update_supplierdeclared 10 of the Supplier resource's 41 writable fields. The MCP SDK silently strips undeclared arguments, so setting e.g.YourReferencedid nothing at all — no error, the field just never reached Fortnox. Both schemas now cover the full field set.- Voided voucher rows (
Removed: true) rendered identically to live rows, which read as a double-booking. They're now prefixed[REMOVED].
Also
- CI now runs the suite on
windows-latest. Every bug in #95 was Windows-only and Linux-only CI could not have caught any of them. - Column formatters no longer bypass terminal control-character stripping.
Full changelog: v0.6.1...v0.7.0