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). vcselects the side:customerfor receivables (AR),vendorfor payables (AP). Journal-entry tools have novc.- 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_actionreturns 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.