View as Markdown

MCP server

The MCP server lets AI tools work with your Pluto numbers. Ask Claude how last week performed, have an agent run your morning kill-list review, or let it log an influencer payment as ad spend. Reads return the same numbers your dashboard shows, to the cent. Writes are limited to costs and campaign labels, and every one is recorded.

Pluto follows the remote MCP specification, so the server is centrally hosted. Clients with native remote support connect directly; others use the mcp-remote proxy.


Before you start

Create an API key at app.plutoprofit.com/developers. The key is shown once. A pk_plp_ key reads your shop's data. The three write tools need an sk_plp_ key with the matching scope; a read key never sees them in the tool list. (Keys minted before 2026-07-15 may use the legacy pk_ prefix; both still work.) Every client below authenticates the same way:

MCP server
https://mcp.plutoprofit.com/mcp

Claude

Claude Desktop and claude.ai

Open Settings -> Connectors and add a custom connector pointing at https://mcp.plutoprofit.com/mcp. Static API-key headers on custom connectors are currently a beta in limited rollout at Anthropic - if your workspace has the "Request headers" field, add Authorization: Bearer pk_plp_your_key there. Otherwise use the mcp-remote bridge below (works today), or wait for OAuth sign-in (coming - no key handling at all).

Claude Code

claude mcp add --transport http pluto https://mcp.plutoprofit.com/mcp --header "Authorization: Bearer pk_plp_your_key"

Cursor

Open Cursor Settings (Ctrl+Shift+J / Cmd+Shift+J) -> MCP -> Add new global MCP server, and add this entry to your mcp.json:

{
  "mcpServers": {
    "pluto": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.plutoprofit.com/mcp",
        "--header",
        "Authorization: Bearer pk_plp_your_key"
      ]
    }
  }
}

Other clients

Most MCP-capable tools accept a stdio entry that proxies via mcp-remote. Use:

  • Name
    Command
    Description
    npx
  • Name
    Arguments
    Description

    -y mcp-remote https://mcp.plutoprofit.com/mcp --header "Authorization: Bearer pk_plp_your_key"

If your client supports remote MCP natively, point it at https://mcp.plutoprofit.com/mcp directly and set the Authorization header.


Tools

Eighteen tools in three groups. Reads return the same numbers your dashboard shows, computed by the same code, so the two can never disagree. Money is always an exact decimal string with its currency.

Read tools:

ToolReturns
get_profit_summaryNet profit, revenue, and every cost bucket for a range. Day, week, or month series on request.
get_cost_breakdownCosts decomposed: COGS, gateway fees, shipping, custom costs, ad spend, disputes.
get_channel_performanceSpend and attributed revenue per ad channel, with each platform's attribution window named, plus Pluto's deterministic attributed revenue and orders beside the platform number.
get_attribution_reportThe Attribution page's reconciliation: attributed plus unattributed equals total revenue to the cent, platform and Pluto columns side by side, journey coverage.
get_product_pnlPer-product contribution, worst margin first. The kill-list view.
get_refund_chargeback_reportRefunds by day, dispute outcomes, top refunded products.
get_cash_positionSettled payouts, upcoming committed costs, ad-spend run rate.
list_anomaliesRule hits: spend without sales, ROAS below break-even for 3 days or more, spend spikes.
accountant_exportThe period as a P&L statement plus tax totals.
get_assistant_findingsOpen data-quality and cost-accuracy issues that make profit wrong, each with the exact inputs that fired it.
get_sync_statusWhich sources are connected and when they last synced.
list_metric_definitionsWhat each metric means and how it is calculated.

Simulate tools compute what-ifs with exact decimal math. The model composes the question; it never does the arithmetic. breakeven_roas derives your break-even from actual contribution margin. price_for_margin solves the unit price for a target margin after fees and VAT. simulate_cost_change re-runs a period with one cost shifted.

Write tools need an sk_plp_ key with the matching scope. log_custom_cost records an expense (costs:write). set_product_cost sets a dated per-unit cost for a variant (products:write). classify_campaign labels a campaign prospecting, retargeting, or retention (campaigns:write). Each write goes through the same validation as the dashboard, is safe to retry, and lands in an audit log with the key that made it.

No tool can create, change, or delete orders or revenue. That is structural, not policy: the write tools have no path to order data at all.


Provenance

Every read answer carries a provenance block: when it was computed, how fresh each source was, and which cost components are measured versus estimated. An agent can always tell a real number from an estimate, and a current number from a stale one. When a component cannot be derived, the answer says so with a reason rather than guessing.


Revoking access

Delete the key at app.plutoprofit.com/developers. Revocation is immediate. The next call from any client using that key returns 401.


FAQ

  • Name
    Numbers don't match the dashboard
    Description

    Check the date range and timezone. The MCP server and the dashboard read the same data, so the same range returns the same numbers. Recent days also keep settling as ad platforms finalize their reporting. See Data freshness.

  • Name
    Write tools don't appear in the tool list
    Description

    The connected key is a read key. Write tools only exist for sk_plp_ keys carrying the matching scope. Mint one at app.plutoprofit.com/developers and pick the scopes when creating it.

  • Name
    The client reports 'unauthorized'
    Description

    The key was deleted or mistyped. Create a new one at app.plutoprofit.com/developers and update the client config.

  • Name
    'mcp-remote' fails with a network error
    Description

    npx -y needs network access on first run. Behind a proxy, install it globally with npm install -g mcp-remote and replace the npx command in your config.