mcp-registry/ch.zeno-works/zeno · v0.1.0+e37236f17
As of 2026-10-23 05:39 UTC, the Zeno Works Zeno MCP server is up with a Glimind reliability score of 92/100 (grade A). Over the last 30 days it answered 100% of Glimind's liveness checks. It had 1 outage in 90 days, with a median recovery of 2 minutes.
AI bookkeeper for Swiss small companies: books invoices, reconciles the bank, keeps VAT current.
Claude Code
claude mcp add --transport http zeno-works-zeno-mcp-server https://app.zeno-works.ch/mcp
Claude Desktop · Windsurf · Cline (mcpServers JSON)
{
"mcpServers": {
"zeno-works-zeno-mcp-server": {
"type": "http",
"url": "https://app.zeno-works.ch/mcp"
}
}
}
Third-party server, listed as discovered. Review its source before installing.
51 of 51 tool(s) carry no readOnlyHint/destructiveHint annotations.
Annotate read-only tools with {"readOnlyHint": true}. Agents and gateways can then run them without a confirmation prompt, and route around destructive ones. How to fix →
51 tools on one server. Tool-selection accuracy drops as the menu grows, and some clients (e.g. Cursor) cap the number of active tools.
Group tools by task into smaller servers or toolsets, and merge near-duplicates behind one tool with a mode parameter. How to fix →
178 parameter(s) across 46 tool(s) have no description.
Add a "description" to each parameter with its format and an example ("ISO 8601 date, e.g. 2026-10-17"). This is the commonest cause of wrong arguments on the first call. How to fix →
4 tool(s) have descriptions under 20 characters.
Say when to use the tool and what it returns, not just its name restated ("Get weather" → "Current weather for a city: temperature, conditions, wind. Use for 'now', not forecasts."). How to fix →
4 tool(s) look like they change state (create/send/delete/pay…) but declare no destructiveHint.
Set annotations {"readOnlyHint": false, "destructiveHint": true|false, "idempotentHint": …}. Clients use these to ask the user before a side effect and to auto-approve safe reads. How to fix →
No tool declares an outputSchema.
Declare outputSchema and return structuredContent (MCP 2025-06-18+). Agents can then parse results without guessing, and chain tools reliably. How to fix →
In the last 30 days: 0 tool(s) removed and 3 schema change(s).
Add new tools or optional parameters instead of renaming or removing; deprecate first (say so in the description) and remove later. Agents cache tool contracts. How to fix →
Paste-ready definitions with the problems above fixed. Changes marked verify need a human look. 46 tool(s) still need parameter descriptions written by someone who knows the API. All of them as JSON: /v1/readiness/mcp-registry%2Fch.zeno-works%2Fzeno/fixes
{
"name": "create_ar_invoice",
"description": "Create an outgoing (sales) invoice as a **draft** — nothing is booked yet\n(accountant role).\n\nA draft changes no ledger balance, gets no invoice number and appears in no VAT\nreturn; it exists so it can be edited. Posting happens later, at\n``POST …/ar/invoices/{invoice_id}/issue``.\n\nBody: ``issue_date`` (required), ``counterparty_id`` (the customer — required\nbefore it can be issued), ``currency``/``language``, ``due_date`` (filled from the\ncustomer's payment terms when omitted), ``doc_type`` (``",
"inputSchema": {
"type": "object",
"required": [
"company_id",
"issue_date"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"quantity": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
},
{
"type": "null"
}
]
},
"item_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"line_type": {
"enum": [
"product",
"service",
"text",
"section",
"discount"
],
"type": "string",
"default": "product"
},
"product_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sort_order": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"unit_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"unit_price": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "null"
}
]
},
"group_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"vat_code_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"account_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"line_discount_kind": {
"enum": [
"none",
"percent",
"amount"
],
"type": "string",
"default": "none"
},
"service_period_end": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"line_discount_value": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
}
],
"default": "0"
},
"service_period_start": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
}
}
}
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"default": "CHF",
"pattern": "^[A-Za-z]{3}$",
"maxLength": 3,
"minLength": 3
},
"doc_type": {
"enum": [
"invoice",
"credit_note"
],
"type": "string",
"default": "invoice"
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"enum": [
"de",
"en",
"fr",
"it"
],
"type": "string"
},
{
"type": "null"
}
]
},
"company_id": {
"type": "string"
},
"issue_date": {
"type": "string",
"format": "date"
},
"legal_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"footer_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"counterparty_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"payment_terms_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"issuer_profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"service_period_end": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"credited_invoice_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"service_period_start": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
},
"invoice_discount_kind": {
"enum": [
"none",
"percent",
"amount"
],
"type": "string",
"default": "none"
},
"invoice_discount_value": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "string",
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
}
],
"default": "0"
}
}
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false
}
}{
"name": "create_gl_journal_entry",
"description": "Create a **draft** journal entry by hand — accountant. It carries NO source document\nunless you name one.\n\nOnly the pipeline paths stamp ``source_ref_type``/``source_ref_id`` (an ingested\ndocument is ``'item'``), so by default a booking made here cannot be traced back to\nwhat justified it. ``document_id`` is the retrofit: name an existing ``gl_document``\n(create one with ``POST …/gl/documents``) and it is attached as the entry's source\ndocument, so the entry is not evidence-less. The same attach",
"inputSchema": {
"type": "object",
"required": [
"company_id",
"period_id",
"posting_date",
"lines"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"account_id",
"line_role"
],
"properties": {
"vat": {
"anyOf": [
{
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string"
},
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
},
{
"type": "null"
}
]
}
},
"description": "VAT tag for a manual journal line (Gap B — manual-booking metadata completeness).\n\nTag **both** legs of a taxable movement with the same ``code`` (a company\n``gl_vat_code``): the taxable **base** line *and* its paired **VAT-control** line —\nposting groups the entry's lines by this tag to pair base with VAT line, and the\ncomposition guard refuses (409) any VAT-control line left untagged (ZET-158: a\nbase-line-only tag has no working path). One tagged control line per code.\n``amount`` (the tax, a magnitude) is read from the **base** line's tag and falls\nback to the paired VAT line's amount — when several base lines share one VAT line,\ngive each base line its own ``amount``, or every pair books the full VAT-line\namount. Exception: a catalog-linked **zero-rated output** code (0 % rate) books no\nVAT-control line at all — tag only the base line(s); each line tagged with such a\ncode declares its turnover once. On post the entry gains ``gl_vat_posting`` rows so\nthe lines reach the MWST-Abrechnung (``doc/pipeline.md §\"VAT\"``)."
},
{
"type": "null"
}
]
},
"currency": {
"anyOf": [
{
"type": "string",
"maxLength": 3
},
{
"type": "null"
}
]
},
"line_role": {
"enum": [
"bank",
"ar",
"ap",
"revenue",
"expense",
"vat",
"payroll_liability",
"salary_expense",
"fixed_asset",
"depreciation",
"inventory",
"cogs",
"clearing",
"rounding",
"fx_gain_loss",
"suspense"
],
"type": "string"
},
"open_item": {
"anyOf": [
{
"type": "object",
"properties": {
"create": {
"type": "boolean",
"default": false
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
}
},
"description": "Open a new AR/AP subledger item from a manual control line (Gap B).\n\nSet ``create=true`` on the line posting to the AR/AP control account; ``due_date`` seeds\naging. Direction is derived from the account's ``control_type``. To settle/adjust an\n*existing* item instead, pass ``open_item_id`` on the line (its balance is rebuilt on post)."
},
{
"type": "null"
}
]
},
"account_id": {
"type": "string"
},
"amount_base": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"open_item_id": {
"anyOf": [
{
"type": "string",
"maxLength": 21
},
{
"type": "null"
}
]
},
"amount_currency": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
},
{
"type": "null"
}
]
},
"counterparty_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
},
"minItems": 1
},
"currency": {
"anyOf": [
{
"type": "string",
"maxLength": 3
},
{
"type": "null"
}
]
},
"period_id": {
"type": "string"
},
"company_id": {
"type": "string"
},
"entry_type": {
"enum": [
"manual",
"invoice",
"payment",
"bank",
"vat",
"payroll",
"accrual",
"deferral",
"depreciation",
"inventory",
"closing",
"adjustment",
"reversal"
],
"type": "string",
"default": "manual"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"document_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"posting_date": {
"type": "string",
"format": "date"
},
"auto_reverse_date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
]
}
}
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false
}
}{
"name": "describe_operations",
"description": "Get the full argument schema for operations found via ``find_operations``.\n\nReturns each operation's description and JSON-Schema arguments — everything\na listed tool would have shown you.\n\n``include_output_schema`` is the ONLY way to obtain an operation's result\nshape: ``tools/list`` publishes no output schema for any operation, listed or\nnot (they are 67 % of the payload, and a schema describing a *result* is not\nwhat you need to *choose* a tool). Ask for it when you must know the shape in\nadva",
"inputSchema": {
"type": "object",
"required": [
"names"
],
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
}
},
"include_output_schema": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true
}
}Get an email or webhook when this server's readiness drops by 10+ points, tool-poisoning text appears, or a tool breaks:
curl -X POST https://glimind.com/v1/subscriptions -H 'content-type: application/json' -d '{"tools":["mcp-registry/ch.zeno-works/zeno"],"email":"[email protected]"}'Agents: watch_tool({"toolId": "mcp-registry/ch.zeno-works/zeno"}) over MCP.
create_gl_journal_entry ~1,103 tokenslist_items ~945 tokenscreate_ar_invoice ~890 tokenslist_autopost_decisions ~537 tokenspost_gl_journal_entry ~519 tokensStatic checks of the advertised tools/list (schema, descriptions, annotations, tool-poisoning patterns, names, size) plus observed protocol, uptime, latency and contract changes. Read-only: no tool is ever called. Weights: schema 15, docs 20, safety 15, efficiency 15, compatibility 15, protocol 5, reliability 10, stability 5. Token counts are estimates (~3.6 characters per token).
Operator? Fix these, then re-check live. Embed the readiness badge:
[](https://glimind.com/server/mcp-registry%2Fch.zeno-works%2Fzeno?ref=badge)
<a href="https://glimind.com/server/mcp-registry%2Fch.zeno-works%2Fzeno?ref=badge"><img src="https://glimind.com/v1/readiness/badge/mcp-registry%2Fch.zeno-works%2Fzeno.svg" alt="MCP agent-readiness"></a>
.. image:: https://glimind.com/v1/readiness/badge/mcp-registry%2Fch.zeno-works%2Fzeno.svg :target: https://glimind.com/server/mcp-registry%2Fch.zeno-works%2Fzeno?ref=badge :alt: MCP agent-readiness
Glimind records every version of this server's tool definitions in a signed, append-only transparency log. Current manifest sha256:4291aff62512a0a2…, first seen 2026-10-19, included at leaf 26252 of 50,287. Version history · verify what your client received.
Compare: most reliable finance servers · most reliable code servers · most reliable security servers · most reliable data servers · most reliable knowledge servers
Glimind tells agents whether a server is up right now and how to call it, then fails over to a live alternative when it isn't.
Claude Code
claude mcp add --transport http glimind https://glimind.com/mcp
Claude Desktop · Windsurf · Cline (mcpServers JSON)
{
"mcpServers": {
"glimind": {
"type": "http",
"url": "https://glimind.com/mcp"
}
}
}
As of 2026-10-23 05:39 UTC, the Zeno Works Zeno MCP server is up with a Glimind reliability score of 92/100 (grade A). Over the last 30 days it answered 100% of Glimind's liveness checks. It had 1 outage in 90 days, with a median recovery of 2 minutes.
Zeno Works Zeno MCP server advertises 51 tools, including accept_autopost_decision, call_operation, collect_api_key, create_ar_invoice, create_gl_journal_entry.
Point your MCP client at this streamable-http endpoint: https://app.zeno-works.ch/mcp
Glimind scanned all 51 tool definitions for tool-poisoning patterns — hidden or invisible characters, instructions that override the model, concealment from the user, requests to read credential or MCP config files, conversation exfiltration and cross-tool shadowing — and found none. This checks what the server tells the model, not what its code does; review the source before granting access to sensitive data.
Status page: 90-day uptime, every outage and how long it lasted.
Claim this listing to get the Verified operator marker, a remediation checklist and owner analytics, or embed the live badge from any of the tool pages above. Maintainers: alerts, deploy attestation and monthly reports.
Status is an automated estimate from Glimind's liveness checks (handshake and tool listing only; no tool is ever called) and may lag or differ from your network. Glimind is not affiliated with this server or its operator. Operator? Request a correction or opt out at https://glimind.com/opt-out.