MCP
Neno MCP server
1.0.0MCP 2026-07-28Neno MCP connects a compatible AI assistant to the companies you choose in Neno. The connection uses your own permissions. Its available tools depend on the access you approved and your permissions in each company.
What it can do
The server has 15 tools across 9 scopes. You agree to the scopes when you connect a client, and each tool still checks your own permissions in the company.
MCP or the REST API
The REST API is for code you write. It returns JSON. The MCP server is for AI assistants. Its tools return text written for a model to read and pass on, and it acts as the person who connected it. Both accept the same neno_api_ keys, and a key's scopes decide what it can do on each.
Companies
When you connect a client, you choose the companies it may act on. Every tool except list_workspaces takes an optional workspace argument with the company's id. With one company it's filled in for you. With several, a call that leaves it out comes back asking which company you mean, if the client can show that question.
Every result starts with the company it applies to, for example Company: Studio Veld BV.
Server conventions
The server sends these rules to the client as its instructions, and the client puts them in its model's context. They're also what to expect when you read results yourself.
- Amounts are euros, already formatted (€1.234,56). Ask a tool for a total instead.
- Dates are YYYY-MM-DD.
- A bill's supplier, amount and due date stay hidden until an accountant has reviewed it. "Details pending review" means the figures are not trustworthy yet, not that they are missing.
- Every result names the company it applies to. Pass that on, rather than leaving it implicit.
- A list result states how many rows matched and whether it holds all of them. "No more rows remain (nextCursor: null)" is the complete answer to the question as asked — do not repeat the call with a narrower filter looking for rows it left out. A result that hands back a cursor is continued by calling the same tool again with that cursor and the same filters.
- A document you are holding as a file takes two calls:
create_bill_uploadfor an upload URL, PUT the file to it, thenupload_billwith the token to file a bill, orrespond_to_taskwith the token to answer a task. No tool takes a document inside a tool call, so never shrink, re-encode or split one. If you cannot PUT,create_bill_uploadsays what to tell the user. - A bill already sitting in the user's own mailbox is better forwarded than uploaded: call
get_bill_forwarding_addressand forward the supplier's original message there, from one of the authorized addresses it names. Mail from any other address is dropped without a bounce.