Docs
/
EN DE

Tools

The MCP server describes its tools itself: tools/list returns each tool with its title, description and full JSON input schema, so clients need no hand-written setup. This page is the overview — what exists, what each tool needs, and the rules all of them follow.

tools/list only lists the tools the connection can use, given its scopes and the person’s role.

Conventions

  • One company. No tool takes a dataset: the connection decides it.
  • Dates are ISO YYYY-MM-DD.
  • Amounts are in the company’s base currency unless a field names another currency (curr).
  • vc selects the side: customer for receivables (AR), vendor for payables (AP). Journal-entry tools have no vc.
  • IDs come from the list tools (list_contacts, list_arap_transactions, …) and are the same IDs the REST API uses. Field names follow the REST API as well.
  • Same figures as the app. Reports and transactions are produced by the same code as the screens, so a total through the MCP server is the total in the app.

Results and errors

A successful call returns the data both as structuredContent and as JSON text in content. get_document and get_invoice_pdf return the file as an embedded resource.

A call that can’t be carried out returns a normal result with isError: true and a message meant for the person, for example:

{
  "content": [{ "type": "text", "text": "Your role in this dataset does not allow this (Post a journal entry)." }],
  "isError": true
}

Validation errors (Invalid arguments: …), closed periods, duplicate numbers and other rules of the company come back the same way. A missing scope is an HTTP 403 instead — see Errors.

Read tools

Read tools carry the annotation readOnlyHint: true, so a client can let them run without asking each time.

Company and accounting

Tool Scope Returns
get_company_info any Company name and address, base currency, other currencies, the date the books are closed to, VAT method, today’s date. Call it first.
list_accounts accounting:read or invoices:read Chart of accounts, with an optional text search
list_tax_codes accounting:read or invoices:read VAT codes with rate, validity and reverse-charge account
list_fiscal_years accounting:read Closing date, year-end closings, first and last posting date
get_trial_balance accounting:read Trial balance for a period, as Reports → Trial Balance
get_income_statement accounting:read Income statement for a period or up to 12 periods side by side, optionally vs. the previous year, per department or project, accrual or cash method
get_balance_sheet accounting:read Balance sheet at a date or up to 12 dates side by side
get_vat_return accounting:read Swiss VAT return for a period with the ESTV figures (Ziffer) and the VAT payable, as Reports → VAT Report
get_vat_summary accounting:read Tax postings per tax account for a period
list_gl_transactions accounting:read Journal entries with their lines, filtered by date, reference, text or account
get_gl_transaction accounting:read One journal entry with lines and attached files
list_ledger_lines accounting:read Posted ledger lines across journal entries, invoices and bills; for one account, with opening and closing balance

Invoices and bills

Tool Scope Returns
list_arap_transactions invoices:read Customer invoices or vendor bills, filtered by date, number, name, open or overdue
get_arap_transaction invoices:read One invoice or bill with lines, items, taxes, payments and files
get_aging invoices:read Open items by age (current, 1–30, 31–60, 61–90, over 90 days)
list_services invoices:read Services that can be put on an invoice
get_invoice_pdf invoices:read The PDF of a customer invoice or a payment reminder, as neoo prints it
get_workstation_queue invoices:read The person’s workstations and the documents waiting there

Contacts, bank and documents

Tool Scope Returns
list_contacts contacts:read Customers or vendors with address and open balance
list_bank_transactions bank:read Imported bank transactions (matched or open) and the balance per bank account
list_documents documents:read Files attached to an invoice, bill or journal entry
get_document documents:read One attached file (PDF or image, up to 5 MB)
get_inbox_status documents:read Documents in the AI inbox with their processing status

Tools that change data

Tool Scope Does
create_gl_transaction accounting:write Post a journal entry (debits must equal credits)
edit_gl_transactions accounting:write Change up to 25 journal entries: date, reference, texts, department, currency, lines
update_gl_transactions accounting:write Batch update of journal entries: date, department, project, account
update_gl_texts accounting:write Change description, notes and line texts of up to 100 journal entries
create_invoice invoices:write Create a customer invoice with services
create_arap_transaction invoices:write Post a customer invoice or vendor bill with account lines, or save it as pending
edit_invoices invoices:write Change up to 25 invoices with services
edit_arap_transactions invoices:write Change up to 25 invoices or bills with account lines
update_arap_transactions invoices:write Batch update of invoices or bills: dates, customer or vendor, department, project, accounts
update_transaction_texts invoices:write Change description, notes, internal notes and line or item texts of up to 100 invoices or bills
record_payment invoices:write Record a payment against one or more open invoices of a customer or vendor
send_invoice_email invoices:write E-mail an invoice or a payment reminder (1st, 2nd or 3rd) with its PDF
create_contact contacts:write Create a customer or vendor
update_contact contacts:write Change fields of a customer or vendor (bank details are not changed this way)
upload_document documents:write Send a PDF, PNG or JPEG (up to 10 MB, base64) to the AI inbox
confirm_action — Carry out a change another tool previewed

upload_document is the one tool that acts at once: the file goes into the Inbox and through the same processing and workstation review as an upload in the app — nothing is booked by it directly. Every other tool here only prepares a change.

Nothing can be deleted through the MCP server.

How changes are confirmed

A change never happens on the first call. It takes three steps:

1. The tool returns a preview. Calling, say, create_gl_transaction checks everything a save in the app would check and returns what would happen — nothing is written yet:

{
  "status": "confirmation_required",
  "summary": "Post journal entry with the next number dated 2026-10-31: 2 lines, 2500 CHF",
  "preview": {
    "transdate": "2026-10-31",
    "reference": "(next number, assigned when posting)",
    "lines": [ … ],
    "total_debit": 2500,
    "total_credit": 2500
  },
  "confirmation": {
    "token": "…",
    "expires_at": "2026-10-31T09:15:00Z",
    "instructions": "Nothing has been changed yet. Show this preview to the user and ask them to confirm it in writing. …"
  }
}

2. The person confirms in the chat. The assistant shows the preview and waits for a written answer such as “Yes, post it.”

3. The assistant calls confirm_action with the token and the person’s words, quoted:

{
  "name": "confirm_action",
  "arguments": {
    "token": "…",
    "user_confirmation": "Yes, post it."
  }
}

The result has "status": "done", the summary and the created or changed records.

Rules of the confirmation:

  • A token is valid for 15 minutes and works once. A repeated call — a retry, a replay — is refused and changes nothing.
  • A token belongs to the connection, the person and the exact arguments of the previewed call.
  • Before carrying out the change, neoo checks the data again. If it changed since the preview — the invoice was paid in the meantime, a period was closed — confirm_action returns a new preview instead, to be confirmed again.
  • The person’s permissions and the connection’s scopes are checked again as well.

Tools that work on many transactions (edit_*, update_*) show them all in one preview and need one confirmation. The text tools (update_transaction_texts, update_gl_texts) save all together or not at all; the edit_* tools save one transaction after another, each like a save in the app, and report the result of each.

Audit trail

Every change made through the MCP server appears in the company’s audit log under the person’s name, marked as made through an AI connection. The written confirmation is recorded with it.