RevKeen MCP
Connect RevKeen billing tools to AI hosts over the Model Context Protocol
RevKeen MCP lets AI hosts like Claude, Cursor, and VS Code query your billing, customer, subscription, and usage data through the Model Context Protocol — an open standard for connecting AI assistants to external tools securely.
The RevKeen Assistant on this site answers documentation questions only. MCP connects your AI client to authorised merchant data through OAuth or a headless Bearer API key. Never paste a dashboard API key into a conversation, skill file, or MCP configuration JSON that you share.
Quick start
Connect using native Streamable HTTP and browser OAuth. Your client receives only the merchant data permitted by your role and granted scopes.
Cursor installs https://mcp.revkeen.com/mcp and opens RevKeen's browser OAuth screen. Grant the scopes you need and you are connected.
Claude Code:
claude mcp add --transport http revkeen https://mcp.revkeen.com/mcpTry asking:
"List all overdue invoices from the last 30 days"
Connect from other hosts
If you are not using Claude Code, pick your host below. Cursor and VS Code have one-click install; JSON is the fallback. Prefer native Streamable HTTP. Use the third-party mcp-remote bridge only when the host requires stdio. That package is published as mcp-remote, not under Anthropic's npm scope.
Claude web / custom connectors:
URL https://mcp.revkeen.com/mcp
Auth OAuth
Claude Desktop (stdio fallback):
{
"mcpServers": {
"revkeen": {
"command": "npx",
"args": ["-y", "mcp-remote@0.8.3", "https://mcp.revkeen.com/mcp"]
}
}
}
Claude Code:
claude mcp add --transport http revkeen https://mcp.revkeen.com/mcpstdio-only hosts that cannot speak Streamable HTTP can use the third-party mcp-remote bridge:
{
"mcpServers": {
"revkeen": {
"command": "npx",
"args": ["-y", "mcp-remote@0.8.3", "https://mcp.revkeen.com/mcp"]
}
}
}Use a secret live merchant key (rk_live_…) from a vault or environment variable for the Headless tab. https://mcp.revkeen.com/mcp rejects sandbox rk_sandbox_… keys. Never put the raw key in a committed file or in chat. Publishable rk_pk_… keys cannot authenticate MCP. The MCP server introspects the key as the mcp-server workload and never forwards it to Engine as Authorization.
After an OAuth host connects, RevKeen opens a browser-based consent flow. The granted scopes become the tool permissions for that session.
Verify your connection
- Sign in as a member of the intended merchant and review the requested scopes.
- Open the client's tool list and check for
customers_listafter granting customer read access. - Ask: “List up to five customers for the connected merchant.”
- Compare the merchant and results with your dashboard. An empty list can be valid.
Use only filters present in the tool schema. A prompt does not add an API filter or permission. A health or metadata URL returning successfully does not prove authenticated access.
Disconnect and revoke
Disconnect RevKeen in your client's settings. In Codex, use codex mcp logout revkeen
to clear local OAuth credentials and codex mcp remove revkeen to remove configuration.
Removing local configuration is not proof of server-side revocation. For a compromised
connection, ask your merchant administrator or support
to revoke the relevant authorisation; never include tokens in the report.
Review the AI client's data retention and sharing policies before connecting merchant data. Treat returned customer text as data, not as instructions to export data or grant access.
Example prompts
Once connected, try these prompts in your AI host to see what RevKeen MCP can do:
| Prompt | What it uses |
|---|---|
| "List all overdue invoices from the last 30 days" | invoices_list with status filter |
| "What's going on with customer X?" | customer_state_get |
| "Show me the details for customer Jane Smith" | customers_list (search) then customers_get |
| "What needs attention in billing?" | billing_overview_get |
| "Why is this invoice high?" | invoice_usage_explain |
| "Which subscriptions are currently in dunning?" | subscriptions_list_in_dunning |
| "What is the total usage for meter X this billing period?" | usage_events_aggregate |
| "List payments for this customer" | payments_list with customer filter |
| "Check the usage balance for subscription abc-123" | usage_balance_get |
| "List all active subscriptions for customer def-456" | subscriptions_list with customer filter |
| "Dry-run a usage event to validate my payload" | usage_events_dry_run |
| "Is Cart ready, and which products can be sold?" | storefront_status_get then storefront_products_list |
| "Find the checkout session for this payment link" | search_tools then execute_tool (checkout_sessions_get / payment_links_get) |
| "Show fulfillment for this order — not the invoice" | orders_get |
Your AI host translates these into the appropriate tool calls automatically.
Invoice is commercial truth. Order is fulfillment. Dunning lives on the subscription. Polar's order object is not a RevKeen order.
Available tools
The default profile exposes 33 read-only tools across 10 areas. Write operations are behind a separate rollout policy.
Discovery
| Tool | Description | Scope |
|---|---|---|
search_tools | Classification: READ. Search RevKeen Engine objects that are not listed in every session (checkout sessions, payment links, transactions, payment methods, entitlements, and proposal tools). Use RevKeen nouns: invoice is commercial truth; order is fulfillment. | (session) |
describe_tools | Classification: READ. Describe discovered MCP tools and their input fields after search_tools. | (session) |
execute_tool | Classification: READ. Execute a discovered read tool or a proposal stub. Never mutates invoices, payments, or orders. Action-class writes are refused. | (session) |
Customers
| Tool | Description | Scope |
|---|---|---|
customers_list | Classification: READ. List customers. Filter by email. | customers:read |
customers_get | Classification: READ. Get detailed customer information including address and metadata. | customers:read |
customer_state_get | Classification: READ. WHEN to call: the merchant asks what is going on with a customer. Returns identity, subscriptions, and recent invoices (with overdue flags) in one call. Do not chain customers_get then subscriptions_list then invoices_list for this job. | customers:read, subscriptions:read, invoices:read |
Invoices
| Tool | Description | Scope |
|---|---|---|
invoices_list | Classification: READ. List all invoices. Filter by status, customer, date range. | invoices:read |
invoices_get | Classification: READ. Get detailed information about a specific invoice by ID. | invoices:read |
invoice_line_items_list_usage_events | Classification: READ. Trace a usage invoice line back to the billing entries, meter matches, and events that produced it. | invoices:read |
invoice_usage_explain | Classification: READ. WHEN to call: the merchant asks why an invoice is high, what usage drove it, or to explain a billed amount. Returns line attribution and usage event counts in one call. Do not chain invoices_get then invoice_line_items_list_usage_events for this job. | invoices:read |
billing_overview_get | Classification: READ. WHEN to call: the merchant asks what needs attention in billing — overdue invoices, dunning, or usage overage. Returns that snapshot in one call. Do not chain invoices_list then subscriptions_list_in_dunning for this job. | invoices:read |
Payments
| Tool | Description | Scope |
|---|---|---|
payments_list | Classification: READ. List payments. Filter by customer, invoice, or status. | payments:read |
payments_get | Classification: READ. Get payment details including status, amounts, and gateway info. | payments:read |
Orders
| Tool | Description | Scope |
|---|---|---|
orders_list | Classification: READ. List orders. Filter by customer, status, or billing type. | orders:read |
orders_get | Classification: READ. Get order details including line items and fulfillment info. | orders:read |
Subscriptions
| Tool | Description | Scope |
|---|---|---|
subscriptions_list | Classification: READ. List subscriptions. Filter by status or customer. | subscriptions:read |
subscriptions_get | Classification: READ. Get subscription details. Past-due subscriptions include dunning summary. | subscriptions:read |
subscriptions_list_in_dunning | Classification: READ. List subscriptions currently in dunning (past_due). Includes dunning phase and retry info. | subscriptions:read |
Meters and pricing
| Tool | Description | Scope |
|---|---|---|
meters_list | Classification: READ. List usage meters. Filter by active/archived status. | prices:read |
meters_get | Classification: READ. Get detailed meter configuration including aggregation, filters, and event name. | prices:read |
meters_list_prices | Classification: READ. List all prices attached to a meter, including tier configurations. | prices:read |
Storefront
| Tool | Description | Scope |
|---|---|---|
storefront_products_list | Classification: READ. List active, cart-eligible products with browser-safe display data, live prices, and derived availability. Requires Cart to be enabled (403 CART_DISABLED otherwise). | products:read |
storefront_products_get | Classification: READ. Get one cart-eligible product by UUID, merchant product reference, or slug — same browser-safe projection as the list tool. | products:read |
storefront_availability_get | Classification: READ. Get a product's availability (status plenty/low/soldout, remaining, display_mode). Products that do not track availability return status 'unknown'. | products:read |
storefront_status_get | Classification: READ. Cart integration readiness report (activation, keys, origins, product-read, webhooks, availability) — the same semantics as revkeen cart status and the dashboard health panel. Never returns key material. | apps:read |
product_collections_list | Classification: READ. List the merchant's product collections (storefront catalogue groups), with member product ids in display order. Not Direct Debit collections. | products:read |
product_collections_get | Classification: READ. Get one product collection by id or URL handle: name, description and member product ids in display order. | products:read |
Usage billing
| Tool | Description | Scope |
|---|---|---|
usage_events_list | Classification: READ. Query usage events. Filter by meter, customer, subscription, or time range. | usage:read |
usage_events_aggregate | Classification: READ. Get aggregated usage summary for a meter over a time range. Returns total value and event count. | usage:read |
usage_events_dry_run | Classification: READ. Default MCP affordance for validating usage attribution without persisting or creating a billable fact. Returns would_ingest/would_skip/would_fail status per event. | usage:read |
usage_balance_get | Classification: READ. Get current usage balance for a customer or subscription. Returns per-meter breakdown with included allowance, overage, estimated charges, estimated AI provider costs, and recorded payment-processing costs (Direct Debit collection costs only; card processing fees are not recorded). | usage:read |
Integrations
| Tool | Description | Scope |
|---|---|---|
integrations_list_packages | Classification: READ. List packages from an external integration provider (e.g., PracticeHub). | integrations:read |
integrations_list_mappings | Classification: READ. List product mappings between external packages and RevKeen products. | integrations:read |
All 33 tools are read-only. Write and destructive operations (create, update, delete, send) are not exposed in the default profile. RevKeen is rolling these out behind a separate policy as the tool contract stabilizes.
Scope model
Access is controlled through read-focused OAuth scopes. Each scope unlocks specific tools. When you connect, the OAuth consent screen lets you choose which scopes to grant.
| Scope | What it unlocks |
|---|---|
invoices:read | invoices_list, invoices_get, invoice_line_items_list_usage_events, invoice_usage_explain, billing_overview_get, customer_state_get |
customers:read | customers_list, customers_get, customer_state_get |
subscriptions:read | customer_state_get, subscriptions_list, subscriptions_get, subscriptions_list_in_dunning |
payments:read | payments_list, payments_get |
orders:read | orders_list, orders_get |
prices:read | meters_list, meters_get, meters_list_prices |
usage:read | usage_events_list, usage_events_aggregate, usage_events_dry_run, usage_balance_get |
integrations:read | integrations_list_packages, integrations_list_mappings |
products:read | storefront_products_list, storefront_products_get, storefront_availability_get, product_collections_list, product_collections_get |
apps:read | storefront_status_get |
Scopes only narrow the signed-in member's team role. MCP is a channel, not a seventh role — there is no MCP-specific permission. Empty scopes grant nothing. Write actions (including creating webhook endpoints) are not in the default read-only profile; when they land they use the same Engine checks as the Dashboard and REST API.
If your AI host connects but tools are missing, check that you granted the right scopes during OAuth.
How access works
Your host connects
Your MCP host sends a connection request to https://mcp.revkeen.com/mcp using Streamable HTTP transport.
OAuth consent in your browser
RevKeen redirects you to a browser-based OAuth 2.1 consent screen. You sign in with your RevKeen account and select which scopes (customers, invoices, payments, etc.) to grant for this session.
Scoped session created
RevKeen issues an access token scoped to your merchant and the approved scopes. The token is audience-bound to the RevKeen MCP resource and is not forwarded to the underlying RevKeen API.
Tool calls enforced server-side
Every tool call is checked against your scopes, RevKeen role and permissions, merchant isolation, and rate limits. Engine API makes the authoritative permission decision and applies tenant safety controls before data is returned. The MCP server manages the session lifecycle. Tool results can contain merchant and customer data; review the receiving client's data-handling policies.
This is the key difference between MCP and handing an AI tool a raw API key. The MCP server enforces access boundaries, tenant isolation, and tool contracts — the AI host cannot bypass them.
Compatibility and limits
The generated catalogue above describes the default tool profile. Check the changelog for changes. Handle rate-limit errors with bounded backoff and the retry hint returned by the service. Do not infer a guaranteed throughput or retention period from a successful connection.
Operational endpoints
| Endpoint | Purpose |
|---|---|
https://mcp.revkeen.com/ | Root metadata and public server information |
https://mcp.revkeen.com/healthz | Health check (returns 200 OK when healthy) |
https://mcp.revkeen.com/mcp | Remote MCP endpoint (Streamable HTTP) |
Troubleshooting
Host cannot connect
- Confirm the URL is
https://mcp.revkeen.com/mcp— not an older SSE or stdio endpoint. - Check that your host supports Streamable HTTP transport. Prefer native remote HTTP where available. A stdio-only client can use the third-party
mcp-remote@0.8.3bridge (not an Anthropic package). - Verify your network allows outbound HTTPS to
mcp.revkeen.com.
OAuth window does not open
- Check for browser popup blockers — the OAuth flow opens in a new browser tab.
- If you are behind a corporate proxy, ensure
mcp.revkeen.comand your OAuth provider are allowlisted. - Try disconnecting and reconnecting in your host to re-trigger the flow.
Connected but tools are missing
- Reconnect with the scopes you actually need. If you only granted
customers:read, invoice tools will not appear. - Some hosts cache the tool list. Try reloading or restarting the host after reconnecting.
Tool call returns 403
- The authenticated user may not have access to the target merchant. Verify your RevKeen account has the correct merchant role.
- Check that the tool's required scope was granted during OAuth.
Tool call returns rate limit error
- Wait for the
retry_afterperiod indicated in the error response. - If you are running automated workflows, add backoff logic between tool calls.
- Coordinate concurrent workflows with teammates and respect server retry hints.
Data looks stale or empty
- MCP reads live data from RevKeen. If results are empty, verify the merchant has the expected data in the RevKeen Dashboard.
- The MCP server does not cache business data between calls.
When to use MCP vs SDKs vs REST vs CLI
| Surface | Best for | Tradeoffs |
|---|---|---|
| MCP → | AI hosts and agent workflows — natural language queries, copilot integrations | Read-only today, scope-limited, requires OAuth |
| SDKs → | Application code you own and deploy — type-safe, full API coverage | Requires API key management, no AI-native features |
| API Reference → | Raw HTTP integrations, webhook receivers, protocol details | Most flexible but most manual |
| CLI → | Terminal workflows, operator scripts, quick lookups | Best for humans, not for code |
If you are building an AI agent that needs to take actions (create invoices, process refunds), use the REST API → with an API key today. MCP write tools are coming soon.
Self-hosting and local development
For contributors or advanced local development, you can run the MCP server from the RevKeen monorepo:
pnpm --filter @revkeen/mcp-server devThis contributor workflow requires the repository's configured infrastructure and authentication. It is not a standalone public installation guide.
See also
API Reference
The canonical REST contract behind the broader platform.
SDKs
Use the official clients for application code you own and deploy.
OAuth 2.1
Understand the OAuth model used by MCP and third-party integrations.
MCP Protocol
Learn more about the Model Context Protocol standard.
Usage investigation
Use bounded, read-only requests and name the customer and time window explicitly:
- “For this customer, list at most ten usage events in this billing period and explain which meter matched.” Use
usage_events_listwith the documented filters. - “Validate this five-event example without recording or billing it.” Use
usage_events_dry_run; inspect validation failures before changing your ingestion producer. - “Explain the consumption and allowance for this customer and subscription.” Use
usage_balance_get, and distinguish quantity from money. - “Trace this invoice line to the events included and excluded from its calculation, one page at a time.” Use
invoice_line_items_list_usage_events.
The REST quantities and individual-event endpoints do not currently have corresponding approved MCP tool names. Use the public REST read for those tasks. Do not invent meters_quantities or usage_events_get as MCP tools. Meter writes and usage_events_ingest remain deferred; a read-only demonstration must not record billable usage.
Capability matrix
| Availability | Execution class | Tools |
|---|---|---|
| Default | read | 33 |
| Deferred | action | 24 |
| Deferred | read | 10 |
| Deferred | proposal | 1 |
Exposure and authority
The available-tool tables follow the default launch policy; the capability matrix also shows deferred registry entries. A registry entry or a REST endpoint is not a promise that the remote MCP server exposes it. OAuth scopes are necessary but do not override merchant membership, Engine authorization, state rules, or machine-action restrictions.
| Surface | Availability |
|---|---|
| Approved v1 tools | Read-only; subject to the connected merchant's access. |
| Deferred reads/proposals | Not in the default customer tool set. |
| Action tools | Not enabled merely by requesting a write scope or changing a client setting. |
| Internal tools | Not a public integration contract. |
After connecting, inspect the host's actual tools/list and make one bounded read. A health endpoint or successful OAuth redirect alone does not verify merchant access. If the tool list is stale, reconnect through OAuth, verify the merchant and granted scopes, and retry the read. Revoke a retired grant through its account management flow rather than merely deleting the local server entry.
Client troubleshooting
Prefer native Streamable HTTP where the host supports it. The pinned mcp-remote bridge is a fallback for hosts requiring stdio. One-click configuration installs a server entry; it does not grant data access until OAuth succeeds. A marketplace/plugin listing is not proof that the installed client has completed authorization.
For 401, reconnect an expired or revoked credential. For 403, verify the selected merchant and granted access. For 429, honour retry timing and narrow the query. Never solve a denial by placing a merchant secret key in the prompt. The docs Assistant answers documentation questions and is separate from merchant MCP access.
Owner: david · Reviewed 30 Sep 2026 · Next review 30 Oct 2026