> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.solvimon.com/mcp-server/developing-for-solvimon/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.solvimon.com/_mcp/server. # Developing for Solvimon Use LLMs and AI coding agents to build your Solvimon integration: machine-readable docs, an installable agent skill, plus an MCP server that lets your agent call the Solvimon API directly. > **Note** > > Looking to use Claude as a billing copilot rather than build an integration? See the [Claude integration](/integrations/ai-assistants/claude) instead. --- ## Using the documentation with LLMs ### llms.txt The [llms.txt standard](https://llmstxt.org) helps LLMs index documentation efficiently, similar to how a sitemap helps search engines. We host two files: * [docs.solvimon.com/llms.txt](https://docs.solvimon.com/llms.txt) lists every page in these docs with a short description, so an agent can find and fetch the pages it needs. * [docs.solvimon.com/llms-full.txt](https://docs.solvimon.com/llms-full.txt) contains the full documentation in a single file, useful for loading everything into a model's context at once. Paste either URL into your AI tool, or reference it from your agent's instructions file (for example `CLAUDE.md` or `.cursorrules`): **`Agent instructions`** ```markdown Agent instructions When working on Solvimon billing code, consult https://docs.solvimon.com/llms.txt to find the relevant documentation pages. ``` ### The Solvimon agent skill [Agent Skills](https://agentskills.io) are instruction files that coding agents such as Claude Code load on demand. The `solvimon` skill gives your agent a working knowledge of the platform: the API surface across all four domains, status lifecycles, the meter-to-invoice setup workflow, event ingestion semantics, and common pitfalls like invoice grace periods and asynchronous event deduplication. Install it with the [skills CLI](https://www.skills.sh): ```bash npx skills add https://docs.solvimon.com ``` The skill pairs well with the MCP server below: the skill tells your agent how Solvimon works, and the MCP server lets it act on your sandbox. ## The Solvimon MCP server The [Model Context Protocol](https://modelcontextprotocol.io) (MCP) is an open standard that lets AI tools call external services. The Solvimon MCP server exposes the Solvimon API as a set of tools, so a coding agent can create meters, pricing plans, and test customers in your sandbox while you build, instead of you hand-writing API calls to set up test data. The server runs at `https://test.mcp.solvimon.com` and authenticates with your test API key (Desk → **Settings → API keys**). > **Warning** > > **Test environment.** The `test.mcp.solvimon.com` endpoint connects to your test sandbox, so agents can experiment freely without touching live billing data. Use your test API key; live keys will not work against this endpoint. Production access is enabled per account; [contact us](https://www.solvimon.com/contact) to get set up. ### Connect your coding agent #### Claude Code Run the following command, replacing `` with your test API key: **`Add Solvimon's MCP to Claude Code`** ```bash title="Add Solvimon's MCP to Claude Code" claude mcp add solvimon-test -- npx mcp-remote https://test.mcp.solvimon.com --header "X-API-KEY:" ``` CodeGroup> #### Cursor 1. Open the command palette (Command + Shift + P, or Ctrl + Shift + P on Windows) 2. Search for "Open MCP settings" and select **Add custom MCP** 3. Configure the server: **`mcp.json`** ```json mcp.json { "mcpServers": { "solvimon-test": { "url": "https://test.mcp.solvimon.com", "headers": { "X-API-KEY": "" } } } } ``` #### VS Code Create a `.vscode/mcp.json` file in your project: **`.vscode/mcp.json`** ```json .vscode/mcp.json { "servers": { "solvimon-test": { "type": "http", "url": "https://test.mcp.solvimon.com", "headers": { "X-API-KEY": "" } } } } ``` For Claude Desktop setup, see the [Claude integration](/integrations/ai-assistants/claude). --- ## Tool reference The MCP server exposes 13 tools. Most follow the same input pattern: | Field | Meaning | | --------------- | ---------------------------------------------------------------------------- | | `action` | What to do: `list`, `get`, `create`, `update`, and tool-specific actions | | `resource_type` | Which resource, for tools that cover more than one | | `id` | Resource id or reference, for single-resource actions | | `body` | Request body for create/update, same shape as the [REST API](/api-reference) | | `filter` | Query params for list actions, e.g. `{"limit": "20"}` | ### Overview | Tool | What it does | | ----------------------------------------------------- | ---------------------------------------------------------------- | | [`get_solvimon_account`](#get_solvimon_account) | Verify the API key and list billing entities. Call first. | | [`manage_billing_entities`](#manage_billing_entities) | Billing entities and tax registrations | | [`manage_product_catalog`](#manage_product_catalog) | Product categories, products, product items, features | | [`create_meter_setup`](#create_meter_setup) | Shortcut: meter, meter value, and calculation in one call | | [`manage_metering`](#manage_metering) | Meters, event ingestion, meter data | | [`manage_pricing_plans`](#manage_pricing_plans) | Pricing plans and plan versions | | [`manage_customers`](#manage_customers) | Customers, including search, GDPR forget, entitlements | | [`manage_subscriptions`](#manage_subscriptions) | Subscriptions and subscription groups | | [`create_checkout_link`](#create_checkout_link) | Hosted checkout URL for self-serve signup | | [`manage_invoices`](#manage_invoices) | Invoices, payments, payment schedules | | [`manage_wallets_credits`](#manage_wallets_credits) | Credit types, wallet types, wallets | | [`analytics`](#analytics) | Read-only queries on dashboard data (revenue, MRR, churn, usage) | | [`solvimon_api_call`](#solvimon_api_call) | Raw API passthrough for anything not covered above | A typical setup flow chains the tools in dependency order: ``` get_solvimon_account → manage_product_catalog → create_meter_setup (if usage-based) → manage_pricing_plans → create_checkout_link or manage_subscriptions (init) ``` ### `get_solvimon_account` Verifies credentials and returns the billing entities available to the API key. Takes no input. This is a good first call to confirm the server is correctly configured. ### `manage_billing_entities` **Actions:** `list`, `get`, `update`, `list_tax_registrations`, `add_tax_registration`, `remove_tax_registration` **`Get a billing entity`** ```json Get a billing entity {"action": "get", "id": "bile_Kq2mVx8RnT4uLpWe9AhZ3"} ``` ### `manage_product_catalog` **Actions:** `list`, `get`, `create`, `update`, `delete`, `activate`, `archive`, `deprecate` **Resource types:** `product_categories`, `products`, `product_items`, `features` **`Create a usage-based product item`** ```json Create a usage-based product item { "action": "create", "resource_type": "product_items", "body": { "name": "API calls", "reference": "api-calls", "product_id": "prod_Xw3nQr7KmY2vBs8TfLc41", "model_type": "USAGE_BASED", "meter_value_calculation_id": "mvc_Jh5tRw9PnX3kMq7VbYd28" } } ``` > **Note** > > `model_type` is immutable after creation. ### `create_meter_setup` Creates a meter, a meter value, and a meter value calculation in one call. Returns the `mvc_...` id to use in usage-based pricing configurations and product items. | Parameter | Required | Description | | ------------------ | -------- | ------------------------------------------------------------------------- | | `meter_name` | Yes | Display name for the meter (e.g. `"API requests"`) | | `meter_reference` | Yes | Unique reference slug (e.g. `"api-requests"`) | | `value_name` | Yes | Display name for the meter value (e.g. `"count"`) | | `value_reference` | Yes | Unique reference for the meter value | | `calculation_type` | No | Aggregation method: `SUM` (default), `MAX`, `MIN`, `AVERAGE`, or `UNIQUE` | | `value_type` | No | Data type of the meter value. Default `NUMBER`. | | `persist` | No | Whether to persist the calculation output. Default `false`. | **`Create a meter setup`** ```json Create a meter setup { "meter_name": "API requests", "meter_reference": "api-requests", "value_name": "count", "value_reference": "api-requests-count" } ``` ### `manage_metering` **Actions:** `list`, `get`, `delete`, `ingest`, `batch_ingest`, `calculate` **Resource types:** `meters`, `meter_values`, `meter_value_calculations`, `meter_properties`, `meter_data`, `events` Creating meters goes through [`create_meter_setup`](#create_meter_setup); this tool covers everything else, including sending test usage events. **`Ingest a usage event`** ```json Ingest a usage event { "action": "ingest", "resource_type": "events", "body": { "meter_reference": "api-calls", "value": 1, "customer_id": "cust_AbD3DqausjOYiMNDZY11F" } } ``` ### `manage_pricing_plans` **Actions:** `list`, `get`, `create`, `update`, `delete` **Resource types:** `pricing_plans`, `pricing_plan_versions` **`Get a plan version`** ```json Get a plan version {"action": "get", "resource_type": "pricing_plan_versions", "id": "ppve_Zt6yUw2QmK9nXr4VcHb37"} ``` > **Note** > > To change pricing, create a new plan **version**, never a new plan. ### `manage_customers` **Actions:** `list`, `get`, `create`, `update`, `delete`, `search`, `activate`, `archive`, `forget`, `entitlements` **`Create a customer`** ```json Create a customer { "action": "create", "body": { "type": "ORGANIZATION", "reference": "acme-001", "billing_entity_id": "bile_Kq2mVx8RnT4uLpWe9AhZ3", "country_code": "NL", "timezone": "Europe/Amsterdam", "organization": {"legal_name": "Acme Corp"} } } ``` > **Note** > > `type`, `country_code`, and `timezone` are immutable after creation. ### `manage_subscriptions` **Actions:** `list`, `get`, `create`, `update`, `delete`, `cancel`, `archive`, `void`, `copy`, `init` **Resource types:** `pricing_plan_subscriptions`, `pricing_plan_subscription_groups` The `init` action subscribes an existing customer directly, without a checkout: **`Subscribe an existing customer`** ```json Subscribe an existing customer { "action": "init", "resource_type": "pricing_plan_subscriptions", "body": { "pricing_plan_version_id": "ppve_Zt6yUw2QmK9nXr4VcHb37", "customer_id": "cust_AbD3DqausjOYiMNDZY11F", "billing_period": {"type": "MONTH", "value": 1} } } ``` ### `create_checkout_link` Returns a hosted checkout URL. The customer and subscription are created automatically when the end-customer completes checkout. | Parameter | Required | Description | | ------------------------- | -------- | ----------------------------------------------------- | | `pricing_plan_version_id` | Yes | `ppve_...` id of the plan version to activate | | `billing_entity_id` | No | `bile_...` id. Defaults to your first billing entity. | | `billing_period` | No | e.g. `{"type": "MONTH", "value": 1}` | | `billing_time` | No | `EXACT` (default) or `END_OF_PERIOD` | | `expiry_days` | No | Link lifetime in days. Default `30`. | | `success_url` | No | HTTPS URL to redirect the customer to after checkout | **`Create a checkout link`** ```json Create a checkout link { "pricing_plan_version_id": "ppve_Zt6yUw2QmK9nXr4VcHb37", "billing_period": {"type": "MONTH", "value": 1}, "success_url": "https://acme.com/billing/done" } ``` ### `manage_invoices` **Actions:** `list`, `get`, `create`, `update`, `preview`, `pay`, `refund`, `credit`, `archive`, `send_by_email`, `authorize`, `activate`, `cancel`, `pause` **Resource types:** `invoices`, `payments`, `payment_schedules` **`Preview an invoice`** ```json Preview an invoice { "action": "preview", "resource_type": "invoices", "body": { "customer_id": "cust_AbD3DqausjOYiMNDZY11F", "billing_currency": "EUR" } } ``` ### `manage_wallets_credits` **Actions:** `list`, `get`, `create`, `update`, `activate`, `deactivate`, `archive` **Resource types:** `wallets`, `wallet_types`, `credit_types` **`Create a credit type`** ```json Create a credit type { "action": "create", "resource_type": "credit_types", "body": {"name": "API Credits", "reference": "api-credits"} } ``` ### `analytics` Read-only queries over dashboard data (revenue, MRR, churn, usage). Use the three actions in sequence: 1. `list_datasets` returns available datasets and their `datasetId` 2. `list_fields` returns exact field names in `model.field` form 3. `query` runs the query The optional `customer_id` parameter scopes results to one or more customers. **`Query invoiced revenue by product`** ```json Query invoiced revenue by product { "action": "query", "query": { "datasetId": "dast_Vc7wPx3TnR8mKq5YbJd92", "measures": ["invoice_v2.invoice_line_base_rep_amount_sum"], "dimensions": ["invoice_v2.product_names"] } } ``` ### `solvimon_api_call` Raw API request. Use when no other tool fits. | Parameter | Required | Description | | --------- | -------- | ----------------------------------------------------------------------------------- | | `method` | Yes | HTTP method: `GET`, `POST`, `PATCH`, `PUT`, or `DELETE` | | `path` | Yes | API path starting with `/v1/...` (e.g. `/v1/customers`) | | `target` | No | Solvimon service to call: `CONFIG` (default), `TRANSACTION`, `EVENT`, or `IDENTITY` | | `body` | No | Request body | | `query` | No | Query parameters as a map of `string → string` | **`List products via the raw API`** ```json List products via the raw API {"method": "GET", "path": "/v1/products", "query": {"limit": "10"}} ``` --- ## Related #### [Claude integration](/integrations/ai-assistants/claude) Use the same MCP server with Claude Desktop as a billing copilot: set up pricing and answer revenue questions in plain language. #### [API quickstart](/platform-guides/getting-started/onboarding-and-tutorials/api-quickstart) Make your first request against the test environment.