Setup
Connect your assistant in three steps
Connect in 30 seconds: copy one prompt, paste it into Claude Code, Codex, opencode, or Cursor. Ask in plain words. Drafts stay drafts until you confirm a send, a live link, a void, or a payment.
Paste this prompt into your agent
Connect in 30 seconds. Replace <YOUR_KEY> with the secret from Account, or use Copy setup prompt there and the key is already filled in. An active Solo or Studio trial or subscription is required. You can keep up to 5 active keys.
Setup prompt
Add the NeatInvoice MCP server to your MCP config. Server name: neatinvoice. Type: streamable HTTP. URL: https://neatinvoice.app/api/mcp. Header: Authorization: Bearer <YOUR_KEY>. Then list its tools to confirm it works.01
Create a key
Sign in, open Account, then API keys. Choose look-up, drafts, or actions. The secret is shown once.
Choose a key type
Start with Look-up and only upgrade when you need more.
Look-up (read)
Your assistant can view clients, invoices, estimates, and status. It cannot change anything.
Best for asking questions about your data.
Drafts (read & write)
Everything in Look-up, plus creating and editing draft clients, invoices, and estimates.
It cannot send email, publish, change status, or delete.
Best for having AI prepare drafts you review.
Actions
Everything in Drafts, plus sending invoices or estimates by email, publishing, recording payments, voiding, and converting estimates.
Sends and publishes use prepare, then confirm. The token expires in 10 minutes. mark_invoice_sent and set_estimate_status apply immediately.
Email is limited to 5 per hour and 20 per day.
Use it only when you want AI to act on real documents.
02
Paste this prompt into your agent
Claude Code, Codex, opencode, or Cursor can write the config. On the key screen, Copy setup prompt already includes the secret.
03
Try a prompt
Ask something ordinary, such as which invoices are overdue. The assistant uses your workspace.
Or paste a config
The endpoint is streamable HTTP at /api/mcp. Replace <YOUR_KEY> before you save. Key management stays on your signed-in session at /api/mcp-keys.
Claude Code
Run this in a terminal. It saves a user-scoped HTTP server in ~/.claude.json.
Claude Code
claude mcp add --transport http neatinvoice https://neatinvoice.app/api/mcp --scope user --header "Authorization: Bearer <YOUR_KEY>"Codex CLI
Add this table to ~/.codex/config.toml. Codex sends http_headers on the streamable HTTP connection.
Codex CLI
[mcp_servers.neatinvoice]
url = "https://neatinvoice.app/api/mcp"
http_headers = { Authorization = "Bearer <YOUR_KEY>" }
opencode
Put this in opencode.jsonc. oauth is off because the key is the only credential.
opencode
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servers": {
"neatinvoice": {
"type": "remote",
"url": "https://neatinvoice.app/api/mcp",
"oauth": false,
"headers": {
"Authorization": "Bearer <YOUR_KEY>"
}
}
}
}
}
Cursor
Save this as ~/.cursor/mcp.json (every project) or .cursor/mcp.json (one project), then restart Cursor.
Cursor
{
"mcpServers": {
"neatinvoice": {
"url": "https://neatinvoice.app/api/mcp",
"headers": {
"Authorization": "Bearer <YOUR_KEY>"
}
}
}
}
Claude Desktop
Claude Desktop's local config starts a command, so this uses mcp-remote to reach the HTTP endpoint. The header value sits in env so a space in Bearer does not break on Windows. File: ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, or %APPDATA%\Claude\claude_desktop_config.json on Windows. Restart the app after saving.
Claude Desktop
{
"mcpServers": {
"neatinvoice": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://neatinvoice.app/api/mcp",
"--header",
"Authorization:${NEATINVOICE_AUTH_HEADER}"
],
"env": {
"NEATINVOICE_AUTH_HEADER": "Bearer <YOUR_KEY>"
}
}
}
}
Try these prompts
Say them as you would to a colleague. Your key has to allow the matching step: look-up, drafts, or actions.
Ask
- “Which invoices are overdue?”
- “List estimates for Acme.”
- “What's still owed in this workspace?”
Draft
- “Draft an invoice for Acme for 10 hours of design at $80.”
- “Add Northwind Studio as a client.”
- “Duplicate last month's invoice as a new draft.”
Act
- “Prepare the email for this invoice, and wait for me to confirm.”
- “Prepare a live link for the Acme estimate.”
- “Prepare recording the $800 I received.”
Marking an invoice sent, and setting an estimate status, apply when you ask. Email, publishing, voiding, and payment records wait for a confirmation.
Confirm tokens and rate limits
- Confirmation tokens from
prepare_*tools expire after 10 minutes. Call the matchingconfirm_*tool before they expire. - Email confirm tools (5 per hour and 20 per day per key, with matching per-account caps) share limits across invoice and estimate sends.
- Document confirm tools (publish, void, payments, estimate status, convert) allow 10 confirms per hour per key and 10 per hour per account.
- Read and draft calls also have per-minute caps on the key and on your account. Heavy list tools have a lower per-minute cap than ordinary reads.
Tool referenceShow names
Names match the tools your client lists. Your client may hide tools that your key cannot call.
Read
Read key
- whoami
- list_workspaces
- get_workspace_overview
- list_invoices
- get_invoice
- list_clients
- get_client
- list_estimates
- get_estimate
Draft writes
Read and write drafts or Actions key
Creates and updates drafts only. Does not send email, publish, or change status.
- create_client
- update_client
- create_invoice_draft
- update_invoice_draft
- create_estimate_draft
- update_estimate_draft
- duplicate_invoice_as_draft
Email send
Actions key
prepare_send_* returns a token. confirm_send_* sends after you approve the prepared message.
- prepare_send_invoice
- prepare_send_estimate
- confirm_send_invoice
- confirm_send_estimate
Publish, payments, and estimates
Actions key
Most actions use prepare then confirm. mark_invoice_sent and set_estimate_status apply immediately.
- prepare_publish_invoice
- prepare_publish_estimate
- prepare_void_invoice
- prepare_record_invoice_payment
- prepare_delete_invoice_payment
- prepare_set_estimate_status
- prepare_convert_estimate
- confirm_publish_invoice
- confirm_publish_estimate
- confirm_void_invoice
- confirm_record_invoice_payment
- confirm_delete_invoice_payment
- confirm_set_estimate_status
- confirm_convert_estimate
- mark_invoice_sent
- set_estimate_status
FAQ and troubleshooting
- Why does my client show 404 for the MCP URL?
- MCP is not available for your account yet. Check that you have an active Solo or Studio trial or subscription, and that your client points at the exact endpoint above.
- Why did a write or action tool fail with scope denied?
- The key scope must match the tool. Read keys cannot call draft or action tools. Draft tools need read and write drafts or actions scope. Email and document tools need actions scope.
- Why do send and publish tools call prepare first?
- prepare_* returns a confirmation token and a summary of what will change. confirm_* applies it. Your assistant should show you that summary before confirming.
- Can I use the same key in multiple clients?
- Yes. Treat the secret like a password. Create separate labeled keys if you want to revoke one client without affecting another.
- Does MCP bypass email verification?
- No. confirm_send_* requires a verified account email, the same as sending from Share in the app.