Aequo MCP server
Let Claude, Cursor or your own agent answer questions about your accounts payable: what is waiting for approval, which invoices have exceptions, how ready the month-end close is. The Aequo MCP server uses the Model Context Protocol over HTTP and the same scoped API keys as the REST API.
- Endpoint
- https://api.nexusap.com/v1/mcp
- Transport
- Streamable HTTP, stateless, JSON responses.
- Auth
- Bearer API key (nxs_live_...). Each tool needs its scope.
What an agent can and cannot do
- It reads the workspace that owns the key, and can upload invoices for processing. Nothing else changes.
- It cannot approve invoices, pay anyone, change vendor bank details, change settings or reveal tax IDs. People do those in the Aequo app.
- A key never does more than the person who created it. A key created by a member who only sees some companies only reaches those companies, and does not get the workspace-wide close and duplicate tools.
- The agent only sees the tools its key has scopes for. A key with
documents:readsees the document tools and nothing more. - Invoice text, vendor names and notes come from documents other people wrote. The server tells agents to treat them as data, never as instructions.
Set it up
1. Create an API key
In the Aequo app, open Settings → API Keys (workspace owners and admins, from the Growth plan). For an assistant that only answers questions, choose
read. Adddocuments:writeonly if it should upload invoices. Use a separate key for each assistant so you can revoke one without the others.2. Connect your client
Claude Code
Terminal claude mcp add --transport http aequo https://api.nexusap.com/v1/mcp \ --header "Authorization: Bearer $AEQUO_API_KEY"Claude Desktop
Add this to
claude_desktop_config.json. It uses themcp-remotebridge to send the key as a header; keep the key inenvso it stays out of the command line.claude_desktop_config.json { "mcpServers": { "aequo": { "command": "npx", "args": [ "-y", "mcp-remote", "https://api.nexusap.com/v1/mcp", "--header", "Authorization:${AEQUO_AUTH_HEADER}" ], "env": { "AEQUO_AUTH_HEADER": "Bearer nxs_live_..." } } } }Cursor
~/.cursor/mcp.json { "mcpServers": { "aequo": { "url": "https://api.nexusap.com/v1/mcp", "headers": { "Authorization": "Bearer nxs_live_..." } } } }OpenAI API (Responses)
ChatGPT's own connectors sign in with OAuth, which the Aequo MCP server does not offer yet. From the OpenAI API you can pass the key as a header:
Python from openai import OpenAI client = OpenAI() response = client.responses.create( model="gpt-5", tools=[{ "type": "mcp", "server_label": "aequo", "server_url": "https://api.nexusap.com/v1/mcp", "headers": {"Authorization": f"Bearer {AEQUO_API_KEY}"}, "require_approval": "always", }], input="Which invoices are waiting for my approval, and which are past SLA?", ) print(response.output_text)3. Check it works
Ask your assistant “What is waiting for my approval in Aequo?” or list the tools directly:
tools/list curl -X POST "https://api.nexusap.com/v1/mcp" \ -H "Authorization: Bearer $AEQUO_API_KEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Tools
A broad read key covers every read scope, and write every write scope. List results come in pages of up to 50, with a cursor for the next page.
| Tool | What it does | Scope |
|---|---|---|
| list_documents | List invoices, POs and delivery notes, with filters for type, status, review and date. | documents:read |
| get_document | One document, with the fields Aequo read from it. | documents:read |
| upload_invoice | Send a PDF, PNG, JPEG or CSV (up to 5 MB) for reading and matching.Writes data. | documents:write |
| list_purchase_orders | Purchase orders with status and billed-to-date amounts. | purchase-orders:read |
| get_purchase_order | One purchase order with its lines. | purchase-orders:read |
| list_matches | 3-way match results and whether each cleared. | matches:read |
| get_match | One match result. | matches:read |
| get_match_lines | Line-by-line quantities, prices and variances for a match. | matches:read |
| list_exceptions | Price, quantity and missing-receipt exceptions and their status. | exceptions:read |
| get_exception | One exception. | exceptions:read |
| get_exception_history | Status changes on an exception and who made them. | exceptions:read |
| list_suppliers | Vendors, with search. Never returns tax IDs or bank details. | suppliers:read |
| get_supplier | One vendor with its matching tolerances. | suppliers:read |
| get_approval_queue | Invoices waiting for the key creator’s approval, ordered by urgency. | documents:read |
| get_close_status | Month-end close checklist, blockers, readiness and AP KPIs.Not for company-restricted keys. | documents:read, matches:read, exceptions:read |
| check_invoice_duplicates | Likely duplicates of an invoice and unusual amounts for that vendor.Not for company-restricted keys. | documents:read |
Requests share the API's rate limits. Questions or a tool you need? Contact us.