
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
tallystick-mcp
Advanced tools
MCP server that reads, validates and writes e-invoices on your own machine. XRechnung, ZUGFeRD, Factur-X, UBL, CII, Peppol.
Read, check and write e-invoices from inside your agent. Everything runs on your own machine: there is no upload path in this package.
A UBL or CII invoice is six to nine hundred lines of XML, and a ZUGFeRD invoice hides its XML inside a PDF where an agent cannot reach it at all. This turns either one into about forty lines of clean JSON, with every amount as an exact decimal string rather than a float.
uvx tallystick-mcp
That is the whole command, and it is the same in every client. No Python environment to prepare.
Setup snippets for Claude Desktop, Cursor, VS Code, Windsurf, Cline, Zed, Gemini CLI and the OpenAI Agents SDK are at https://tally-stick.com/mcp/setup.
Minimal config for a client that uses the common shape:
{
"mcpServers": {
"tallystick": {
"command": "uvx",
"args": ["tallystick-mcp"],
"env": { "TALLYSTICK_LICENSE_KEY": "TS-XXXX-XXXX-XXXX-XXXX" }
}
}
}
| Tool | What it does |
|---|---|
detect_invoice_format | Names the syntax, and says whether a PDF carries embedded XML |
read_invoice | One file to canonical JSON: parties, lines, tax, totals |
validate_invoice | Consistency and mandatory-field findings, with codes |
read_invoices_table | A folder as one flat table, one row per invoice |
export_invoices | Excel, CSV, JSON or QBO out of many invoices |
build_einvoice | Structured data to compliant EN 16931 XML |
All six need a licence key. One payment, one seat, no subscription, and it keeps working offline once the machine has activated.
Reads UBL 2.x, UN/CEFACT CII, Factur-X, ZUGFeRD, XRechnung, Peppol BIS, and digital PDFs through per-supplier templates.
Writes UBL 2.1 and CII in nine profiles: xrechnung-3.0, peppol-bis-3.0,
en16931, nlcius, pint-aunz, pint-jp, pint-my, pint-sg, pint-ae.
It refuses to emit XML when a mandatory field is missing and tells you which
one, because a file that is quietly non-compliant is worse than no file.
Every monetary value comes back as a string holding an exact decimal:
{ "totals": { "net": "1000.00", "tax": "190.00", "gross": "1190.00" } }
Parse them as decimals. Float arithmetic on invoice totals is how a reconciled ledger stops reconciling.
One request, once: activation sends your licence key and an opaque hash of the machine, and gets back a signed token. After that the token is checked locally against a public key compiled into this package, and the machine can stay offline until it expires.
No filename, no path and no invoice content is ever sent anywhere. There is no code here that could send one.
MIT for this package. A commercial licence key unlocks the tools: one seat, one payment, no subscription. https://tally-stick.com/mcp
mcp-name: com.tally-stick/tallystick
FAQs
MCP server that reads, validates and writes e-invoices on your own machine. XRechnung, ZUGFeRD, Factur-X, UBL, CII, Peppol.
We found that tallystick-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.