Is the Zeno Works Zeno MCP server down?

mcp-registry/ch.zeno-works/zeno · v0.1.0+e37236f17

healthy
Last checked 2026-10-23 05:39 UTC · handshake 526ms

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.

uptime (30d checks)
100%
checks observed
2,117
outages (90d)
1
tools
51

AI bookkeeper for Swiss small companies: books invoices, reconciles the bank, keeps VAT current.

Install Zeno Works Zeno MCP server

Add to Cursor Add to VS Code

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.

Agent-readiness: D (61/100)

D (61/100): 0 error(s), 5 warning(s) across 51 tool(s); ~12,674 tokens of tool definitions.
Scores higher than 0% of 15,586 MCP servers Glimind has audited.
Its tool list costs an agent ~12,674 tokens per session — more than 85% of servers.
60 → 61 since 2026-10-17
no tool-poisoning patterns
Schemas100
Descriptions16
Safety hints14
Token cost75
Client compatibility70
Protocol100
Reliability100
Stability88

What to fix (7)

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 →

Tools: accept_autopost_decision, call_operation, collect_api_key, create_ar_invoice, create_gl_journal_entry and 46 more

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 →

Tools: accept_autopost_decision, call_operation, collect_api_key, create_ar_invoice, create_gl_journal_entry and 41 more

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 →

Tools: entry_candidates, get_bank_entry, list_bank_entries, list_gl_vat_periods

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 →

Tools: create_ar_invoice, create_gl_journal_entry, post_gl_journal_entry, settle_entry

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 →

Auto-fix: 36 corrected tool definitions

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

create_ar_invoice 1 change
{
  "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
  }
}
create_gl_journal_entry 1 change
{
  "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
  }
}
describe_operations 1 change
{
  "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 alerted

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.

Passed

Largest tool definitions

Static 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:

Markdown
[![MCP agent-readiness](https://glimind.com/v1/readiness/badge/mcp-registry%2Fch.zeno-works%2Fzeno.svg)](https://glimind.com/server/mcp-registry%2Fch.zeno-works%2Fzeno?ref=badge)
HTML
<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>
reStructuredText
.. 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

Tool-definition log

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.

Tools (51)

Compare: most reliable finance servers · most reliable code servers · most reliable security servers · most reliable data servers · most reliable knowledge servers

Know before your agent calls it

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.

Add Glimind — free, no signup:

Add to Cursor Add to VS Code

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"
    }
  }
}

FAQ

Is the Zeno Works Zeno MCP server down right now?

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.

How many tools does Zeno Works Zeno MCP server provide?

Zeno Works Zeno MCP server advertises 51 tools, including accept_autopost_decision, call_operation, collect_api_key, create_ar_invoice, create_gl_journal_entry.

How do I install Zeno Works Zeno MCP server?

Point your MCP client at this streamable-http endpoint: https://app.zeno-works.ch/mcp

Is the Zeno Works Zeno MCP server safe to connect to an AI agent?

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.

Operator of Zeno Works Zeno MCP server?

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.

Feedback
Help us improve