invoiceninja-mcp-server
Provides tools for interacting with Invoice Ninja v5 (self-hosted) API, enabling management of invoices, clients, payments, and other resources through CRUD operations, bulk actions, and reports.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@invoiceninja-mcp-server list my recent invoices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Invoice Ninja MCP Server
An MCP (Model Context Protocol) server for Invoice Ninja v5, connecting your self-hosted invoicing data to AI tools.
Quick start
Claude
bash (macOS/Linux):
INVOICENINJA_BASE_URL="https://invoicing.yourdomain.com"
INVOICENINJA_API_TOKEN="your-api-token"
claude mcp add invoiceninja \
--env INVOICENINJA_BASE_URL="$INVOICENINJA_BASE_URL" \
--env INVOICENINJA_API_TOKEN="$INVOICENINJA_API_TOKEN" \
-- npx -y @nightsquawktech/invoiceninja-mcp-serverPowerShell (Windows):
$INVOICENINJA_BASE_URL = "https://invoicing.yourdomain.com"
$INVOICENINJA_API_TOKEN = "your-api-token"
claude mcp add invoiceninja `
--env "INVOICENINJA_BASE_URL=$INVOICENINJA_BASE_URL" `
--env "INVOICENINJA_API_TOKEN=$INVOICENINJA_API_TOKEN" `
-- npx -y @nightsquawktech/invoiceninja-mcp-serverCursor
Or put the mcp.json block in .cursor/mcp.json, then verify with:
agent mcp list(The Cursor CLI manages configured servers but has no mcp add; install is via the button or mcp.json.)
VS Code
bash (macOS/Linux):
INVOICENINJA_BASE_URL="https://invoicing.yourdomain.com"
INVOICENINJA_API_TOKEN="your-api-token"
code --add-mcp '{"name":"invoiceninja","command":"npx","args":["-y","@nightsquawktech/invoiceninja-mcp-server"],"env":{"INVOICENINJA_BASE_URL":"'"$INVOICENINJA_BASE_URL"'","INVOICENINJA_API_TOKEN":"'"$INVOICENINJA_API_TOKEN"'"}}'PowerShell (Windows):
$INVOICENINJA_BASE_URL = "https://invoicing.yourdomain.com"
$INVOICENINJA_API_TOKEN = "your-api-token"
$config = @{
name = "invoiceninja"
command = "npx"
args = @("-y", "@nightsquawktech/invoiceninja-mcp-server")
env = @{
INVOICENINJA_BASE_URL = $INVOICENINJA_BASE_URL
INVOICENINJA_API_TOKEN = $INVOICENINJA_API_TOKEN
}
} | ConvertTo-Json -Compress
code --add-mcp $configCodex
bash (macOS/Linux):
INVOICENINJA_BASE_URL="https://invoicing.yourdomain.com"
INVOICENINJA_API_TOKEN="your-api-token"
codex mcp add invoiceninja \
--env INVOICENINJA_BASE_URL="$INVOICENINJA_BASE_URL" \
--env INVOICENINJA_API_TOKEN="$INVOICENINJA_API_TOKEN" \
-- npx -y @nightsquawktech/invoiceninja-mcp-serverPowerShell (Windows):
$INVOICENINJA_BASE_URL = "https://invoicing.yourdomain.com"
$INVOICENINJA_API_TOKEN = "your-api-token"
codex mcp add invoiceninja `
--env "INVOICENINJA_BASE_URL=$INVOICENINJA_BASE_URL" `
--env "INVOICENINJA_API_TOKEN=$INVOICENINJA_API_TOKEN" `
-- npx -y @nightsquawktech/invoiceninja-mcp-serverOr add it to ~/.codex/config.toml under [mcp_servers.invoiceninja].
mcp.json
Every environment variable the server reads, with recommended values:
{
"mcpServers": {
"invoiceninja": {
"command": "npx",
"args": ["-y", "@nightsquawktech/invoiceninja-mcp-server"],
"env": {
"INVOICENINJA_BASE_URL": "https://invoicing.yourdomain.com",
"INVOICENINJA_API_TOKEN": "your-api-token",
"INVOICENINJA_TIMEOUT_MS": "30000"
}
}
}
}File locations: .mcp.json in your project root (Claude Code), claude_desktop_config.json (Claude Desktop), .cursor/mcp.json (Cursor).
Related MCP server: FreshBooks MCP Server
Configuration
Variable | Required | Default | Purpose |
| yes | Your Invoice Ninja v5 instance URL, no trailing slash, no | |
| yes | API token from Settings > Account Management > Integrations > API tokens, sent as | |
| no |
| HTTP timeout for API requests, minimum 1000 |
Security & write safety
Invoice Ninja credentials: create a dedicated API token under a restricted user (Settings > User Management) and grant that user only the permissions the assistant needs; the token inherits the user's permissions.
Read-only endpoints (186 GETs) execute freely.
Mutating endpoints (193 POST/PUT/DELETE operations) are refused unless the call carries
authorization_confirmed: trueand a non-emptyauthorization_notedescribing the user's explicit approval. There is no blanket write mode: authorization is per call.Before every mutating call, the server writes a JSON backup of the full request to a local temp directory. For updates and deletes it also fetches the current record first (best-effort) and stores it in the backup, so the change is reversible. The backup file path is returned in the tool response.
Any
{action}route (email, mark_paid, archive, restore, delete, clone) is treated as mutating even when registered as a GET, so destructive actions can never slip past the guard.All requests go directly from your machine to your Invoice Ninja instance; nothing passes through third parties.
The authorization gate is a guardrail, not a security boundary.INVOICENINJA_API_TOKEN in your MCP config is a real Invoice Ninja API token, and an AI agent with shell access can bypass the MCP tools and call the Invoice Ninja API directly with it. If you need hard read-only, enforce it at the source: issue the token under a user whose permissions are scoped down in Invoice Ninja itself.
Tools
Instead of one tool per endpoint (379 tools would drown any model's tool selection), this server ships a generated endpoint catalog behind three generic tools: list_endpoints to discover operations, describe_endpoint for the exact parameter spec of one operation, and call_endpoint to execute it. The pattern comes from mcp-core, the shared catalog runtime used across NightSquawk MCP servers.
list_endpoints List/filter all 379 endpoints by category, read-vs-mutating, or search term
describe_endpoint Full spec for one endpoint: method, path, params, body fields, mutating flag
call_endpoint Execute an endpoint; mutating calls need per-call authorization and are backed up firstAPI coverage
379 operations covered: 186 read-only, 193 mutating.
Category | Operations |
reports | 27 |
clients | 14 |
invoices | 12 |
quotes | 12 |
bank_integrations | 11 |
payments | 11 |
purchase_orders | 11 |
recurring_invoices | 11 |
users | 11 |
companies | 10 |
tasks | 10 |
bank_transactions | 9 |
credits | 9 |
expenses | 9 |
group_settings | 9 |
products | 9 |
projects | 9 |
recurring_expenses | 9 |
recurring_quotes | 9 |
vendors | 9 |
bank_transaction_rules | 8 |
company_gateways | 8 |
designs | 8 |
expense_categories | 8 |
payment_terms | 8 |
subscriptions | 8 |
tags | 8 |
task_status | 8 |
tokens | 8 |
webhooks | 8 |
client_gateway_tokens | 7 |
locations | 7 |
task_schedulers | 7 |
tax_rates | 7 |
auth | 6 |
activities | 4 |
charts | 4 |
imports | 3 |
migration | 3 |
postmark | 3 |
ping | 2 |
preview | 2 |
system_logs | 2 |
templates | 2 |
update | 2 |
claim_license | 1 |
company_ledger | 1 |
company_user | 1 |
connected_account | 1 |
documents | 1 |
emails | 1 |
export | 1 |
health_check | 1 |
logout | 1 |
one_time_token | 1 |
refresh | 1 |
scheduler | 1 |
search | 1 |
statics | 1 |
support | 1 |
webcron | 1 |
yodlee | 1 |
Method | Path | Operation ID |
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
POST |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
GET |
|
|
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
DELETE |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
POST |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
DELETE |
|
|
GET |
|
|
PUT |
|
|
GET |
|
|
POST |
|
|
GET |
|
|
Method | Path | Operation ID |
POST |
|
|
POST |
|
|
GET |
|
|
POST |
|
|
DELETE |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
GET |
|
|
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
GET |
|
|
Method | Path | Operation ID |
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
GET |
|
|
Method | Path | Operation ID |
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
Method | Path | Operation ID |
GET |
|
|
Method | Path | Operation ID |
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
Method | Path | Operation ID |
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
Method | Path | Operation ID |
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
Method | Path | Operation ID |
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
Method | Path | Operation ID |
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
Method | Path | Operation ID |
POST |
|
|
Method | Path | Operation ID |
GET |
|
|
Method | Path | Operation ID |
POST |
|
|
Contributing
Contributions and issues are welcome. Please open an issue first before submitting a PR.
License
AGPL-3.0: free for personal and open-source use. Organizations that cannot comply with the AGPL can purchase a commercial license, and hosted/managed versions are available. See COMMERCIAL.md or contact hello@nightsquawk.tech.
Copyright
For copyright concerns or takedown requests, contact hello@nightsquawk.tech.
Available Tools
3 toolscall_endpointA
Call an Invoice Ninja API endpoint and return its response. Validates the endpoint name and required path parameters against the catalog before calling. Mutating endpoints (POST/PUT/DELETE) require authorization_confirmed=true and an authorization_note and are backed up before execution. Use describe_endpoint first to learn the exact parameters.
Inputs: params (required).
describe_endpointA
Get the full specification for a single Invoice Ninja endpoint: HTTP method, path, path/query parameters, request-body fields (types, required, enums, descriptions), and whether it mutates data. Call this before call_endpoint to know exactly what to pass.
Inputs: params (required).
list_endpointsA
List Invoice Ninja API endpoints (slug, method, path, category, mutating, summary). Filter by category, read-vs-mutating, or a search term. Use this to discover which endpoint to call, then describe_endpoint for its parameters and call_endpoint to execute it.
Inputs: params (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
Each tool has a clear, distinct role: list_endpoints for discovery, describe_endpoint for details, and call_endpoint for execution. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern with snake_case (list_endpoints, describe_endpoint, call_endpoint), making the pattern predictable.
With only 3 tools, the set is minimal but well-suited for its meta-API exploration purpose. The count feels slightly low but efficient for the intended workflow.
The tool set covers the full lifecycle of API interaction: discover endpoints, inspect parameters, and execute calls. There are no missing operations for this domain.
Maintenance
Related MCP Connectors
Manage Invoice Ninja clients, invoices, quotes, expenses, tasks and projects.
Create invoices, clients, and Stripe payment links from any agent. 7 tools. No email or deletes.
Malaysian SME accounting, e-Invoice and payroll for your AI. 77 tools; writes are approved drafts.
Every Canopy public API operation as a tool, run as you after a browser sign-in or on an API key.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI to dynamically discover and invoke any Cin7 Core API endpoint using three generic tools (list, describe, invoke) plus a bug-report tool, covering the entire API surface without predefined endpoints.4MIT
- FlicenseNot gradedqualityDmaintenanceProvides 29 tools for Claude to query and update FreshBooks directly, including invoices, clients, estimates, expenses, payments, timesheets, and reports.-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with FreshBooks accounting API for managing clients, invoices, payments, and more through natural language.-
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients like Claude Desktop to interact with Invoice Ninja v5, providing tools to read and write contacts, customers, quotes, projects, products, and optionally invoices, with configurable permissions.1MIT