# Zeno Works Zeno MCP server

Source: https://glimind.com/server/mcp-registry%2Fch.zeno-works%2Fzeno
Registry id: `mcp-registry/ch.zeno-works/zeno`
Status: live (checked 2026-10-26T22:09:48.797Z)

## Measurements (30 days)

- Uptime: 99.96%
- Checks: 3091
- Outages (90 days): 1

## Install

```json
{
  "mcpServers": {
    "zeno-works-zeno-mcp-server": {
      "type": "http",
      "url": "https://app.zeno-works.ch/mcp"
    }
  }
}
```

Claude Code:

```sh
claude mcp add --transport http zeno-works-zeno-mcp-server https://app.zeno-works.ch/mcp
```

## Tools (51)

- `accept_autopost_decision`: One-click accept of a **held** decision (accountant) — posts the AI's proposal. A person's accept overrides the soft guardrails. An agent's is refused (403) unl
- `call_operation`: Run any operation by name — the ones in your tool list and the unlisted ones alike. ``name`` is an operation name from ``find_operations``; ``arguments`` is the
- `collect_api_key`: Collect the key once the user has approved. `status` is one of: - `pending` — nobody has approved yet, or (with `throttled: true`) we were rate-limited and lear
- `create_ar_invoice`: Create an outgoing (sales) invoice as a **draft** — nothing is booked yet (accountant role). A draft changes no ledger balance, gets no invoice number and appea
- `create_gl_journal_entry`: Create a **draft** journal entry by hand — accountant. It carries NO source document unless you name one. Only the pipeline paths stamp ``source_ref_type``/``so
- `customer_statement`: One customer's open items + totals (the aging row's drill-down). ``as_of`` mirrors ``GET …/ar/aging`` — set, it reconstructs the items open at that date so the 
- `describe_operations`: Get the full argument schema for operations found via ``find_operations``. Returns each operation's description and JSON-Schema arguments — everything a listed 
- `entry_candidates`: Entry Candidates
- `find_operations`: Search EVERY operation this server offers, including the ones not in your tool list. The tool list you can see holds only the common operations. Several hundred
- `get_ar_invoice`: One authored outgoing invoice with its lines (CompanyMember read). Carries the header (customer, dates, currency, discounts), every line with its computed ``net
- `get_bank_entry`: Get Bank Entry
- `get_bank_status`: Composed bank snapshot — "is my banking up to date?" (CompanyMember). "Reconciled" means entries matched, NOT ledger = statement balance (the close check ``BANK
- `get_company`: Get one company (jwt, scoped). 403 for a non-member non-admin, 404 if absent.
- `get_financial_statements`: Computed balance sheet + P&L for a fiscal year, from the journal (CompanyMember). Aggregates every posted GL journal line whose **posting date** falls in the fi
- `get_gl_account_ledger`: One account's ledger (Kontoauszug) — every booking that touched it, in date order, with Soll/Haben and the running balance after each line (CompanyMember). No f
- `get_gl_journal_entry`: One entry + lines, plus the subledger rows it produced/touched (Gap B detail surfacing): its ``gl_vat_posting`` rows, its ``gl_vat_zero_posting`` turnover-only 
- `get_intake`: Get one intake row by id (scoped to its company: 404/403 split).
- `get_item`: Item metadata (any source).
- `get_kpi_report`: Snapshot KPIs + 13-week liquidity forecast, from the GL (CompanyMember). Cash/liability balances aggregate the FY window of posted/reversed journal lines; aging
- `get_work_list`: Everything waiting for this user in this company, most severe first.
- `gl_balance_sheet`: Assets vs liabilities + equity for one fiscal year, signed by natural side. Window rules as the trial balance (``fiscal_year`` defaults to the latest posted yea
- `gl_profit_and_loss`: Revenue − expense → net result, for one fiscal year. **Window** — same rules as the trial balance: ``fiscal_year`` defaults to the latest posted year, ``period_
- `gl_trial_balance`: Per-account debit/credit columns for one fiscal year, with totals. ``fiscal_year`` (year label) defaults to the latest year posted in; ``period_id`` narrows to 
- `global_search`: Full-text search across emails + items, ranked by ``ts_rank_cd``, scoped (A1). ``archive_status`` constrains item results only (the Documents → Archive page pas
- `issue_ar_invoice`: Issue a draft — **this is the booking step** (accountant role). In one transaction it assigns the next invoice number, posts the journal entry (debit the AR con
- `list_ar_invoices`: List authored AR invoices, newest first. Optional ``status`` / ``doc_type`` filter by lifecycle + document kind. Optional ``period`` (``YYYY-MM``) filters by th
- `list_autopost_decisions`: Recent AI-accountant autonomy decisions (CompanyMember) — the activity feed. Shows what the autonomy policy posted (``posted``), would have posted in ``assist``
- `list_bank_accounts`: The company's bank accounts — the ``bank_account_id`` every statement import, bank-entry list and reconciliation call needs (CompanyMember read). Oldest first, 
- `list_bank_entries`: List Bank Entries
- `list_companies`: List companies (jwt, scoped). Non-admins see only their member companies.
- `list_counterparties`: List a company's counterparties (filter by ``kind``/``q``, paginated). ``kind`` repeats to filter on a set (``?kind=customer&kind=both``) — a role-shaped picker
- `list_gl_accounts`: List the postable chart (CompanyMember). ``fiscal_year`` filters to one year's chart (the chart is FY-scoped, so codes repeat across years).
- `list_gl_journal_entries`: List journal entries. ``period_ids`` narrows to specific fiscal periods, and is how a caller asks for **one fiscal year** — the year's period ids (ZET-285). Wit
- `list_gl_open_items`: One page of the AR/AP subledger (member read). ``direction`` filters server-side (ZCT-577) — omit it for both. The screen used to filter the fetched page in the
- `list_gl_periods`: The company's **accounting periods** — the months a journal entry may post into (CompanyMember read). A period belongs to one fiscal year and carries ``period_n
- `list_gl_vat_periods`: List Gl Vat Periods
- `list_items`: List/filter items, scoped to the caller's member companies (A1). Optional ``period`` (``YYYY-MM``) filters by the item's effective date (invoice date, falling b
- `list_payroll_employees`: Every employee on the payroll master data, with today's contract (accountant role — this payload is personal data, so it is not a plain member read). One row pe
- `list_payroll_runs`: The company's payroll runs — one per wage period — newest period first (CompanyMember read; the money is aggregate, no per-employee PII). A run walks ``draft`` 
- `onboarding_guide`: How to onboard and create a NEW company: what to ask the user for, which documents to request, and the order to run the setup in. Discovery does not depend on s
- `post_gl_journal_entry`: Post a draft entry into the books — accountant. One-way. A posted entry can no longer be replaced or discarded (both refuse with 409); the only general correcti
- `reconciliation_summary`: Reconciliation summary banner. Optional ``from``/``to`` scope the **per-entry bank-entry counts** (total / matched / missing-invoice / …) to a ``booking_date`` 
- `request_api_key`: Ask the user to hand this session a Zeno API key. **Use this first** — every current Zeno user already has an account. `email` is the address on their Zeno acco
- `reverse_gl_journal_entry`: **Storno** a posted journal entry: post its mirror image (accountant role). Nothing is deleted; the original stays, linked both ways, and the **reversal** entry
- `settle_entry`: Post this reconciled bank entry into the GL (clean-bank settlement). Matched → Dr Bank / Cr AR; unmatched → Dr Bank / Cr Suspense; a previously-suspensed entry 
- `start_signup`: Create a Zeno account for somebody who does not have one yet. Use `request_api_key` first if they might already have an account — this tool cannot tell you, and
- `upload_document`: Upload an INVOICE or RECEIPT (PDF, image, or .zip of them) for analysis. ``file_base64`` is the file's raw bytes, base64-encoded. ``direction`` is ``payable`` (
- `upload_intake`: Upload ANY file and let the system decide what it is (the unified intake queue — the same door as "Documents → Upload" in the web app). ``file_base64`` is the f
- `whoami`: Which user this request acts as, and which company's books it is bound to (jwt or API key). Zeno serves every tenant from one host, and an API key is opaque — n
- `zeno_info`: What this server is, which MCP revision it speaks, and how to get a credential. **Needs no credential.** Call it first if a tool has just refused you: the `auth
- `zeno_overview`: What Zeno does, in one page — the platform's capabilities and its limits. **Needs no credential.** Read this before telling a user that Zeno cannot do something

Measured by Glimind (https://glimind.com): MCP handshake + tool list only, no tool is ever called. CC BY 4.0.
