Integrations

MCP server in your assistant.

The Disputek MCP server lets an AI assistant look up chargebacks and push document bundles through your Disputek workspace. It works in Claude Code, Claude Desktop, Cursor, and any other MCP client.

What the assistant can do

  • disputek_healthChecks API connectivity and database status. Worth calling first when an assistant claims it cannot reach Disputek - it separates a broken client from a bad key.
  • disputek_list_chargebacksLists chargebacks, optionally filtered by a since timestamp, a search term, a limit, and an opaque cursor from a previous page. The response says whether more exist, so an assistant can tell a complete listing from a capped one instead of reporting the page size as the total. This is how an assistant answers 'what did we lose to Walmart last quarter'.
  • disputek_get_chargebackOne chargeback in full: the discrepancies Disputek found, what that retailer requires to win, and the filing and paperwork deadlines. The list gives ids and amounts; only this gives the analysis behind them.
  • disputek_generate_packetGenerates the dispute packet - the PDF and cover letter a supplier would send a retailer - and marks the chargeback FILED. Needs an API key with the packets:write scope, which a new key does not get by default. Nothing here submits anything: a person still uploads the document in the retailer's portal.
  • disputek_push_documentsUploads an EDI bundle - 850, 856, 810, 812 - and runs analysis. This is the write path, and the reason an assistant can start a recovery run instead of only describing one.
  • disputek_update_dispute_statusFiles a chargeback, or records what happened to one: FILED, WON, LOST or PREVENTED. Forward-only, and an illegal transition is refused rather than forced. Needs an API key with the chargebacks:write scope, which a new key does not get by default - WON and PREVENTED record a recovery fee against the account.

The server is a stateless proxy. It forwards your key to the Disputek API and stores no credentials of its own, so authorization stays on the Disputek side where your workspace rules already live. Your assistant never gains access you have not already granted.

Two transports, one package

  • Local (stdio) - the easy default. The client spawns the server on your machine and the key comes from the environment. Nothing to host, nothing to expose. Use this for Claude Desktop or Cursor.
  • Remote (Streamable HTTP) - for shared or hosted setups. The server runs as a service and the key rides on every request as a bearer token. Use this when several people, or a hosted assistant, need the same workspace.

Install it locally

  1. 1Create a Disputek API key: Settings - API Keys in the dashboard. It is shown once and can be revoked at any time.
  2. 2Add the Disputek server to your client's MCP configuration - for Claude Code, a .mcp.json in your project; for Claude Desktop or Cursor, their MCP config file.
  3. 3Paste the config below, filling in your API base URL and key.
  4. 4Ask the assistant something it can only answer from Disputek. If it says it cannot reach the server, call disputek_health first - that isolates a connectivity problem from a bad key.

The package is @disputek/mcp-server and the CLI is disputek-mcp. It is not published to npm yet, so npm install and npx @disputek/mcp-server will fail. Run it from a clone instead — or, far simpler, use the hosted endpoint above, which needs nothing but the API key you already have.

git clone https://github.com/AliRezaei-Code/trydisputek-monorepo
cd trydisputek-monorepo && npm install && npm run build --workspace @disputek/mcp-server
{
  "mcpServers": {
    "disputek": {
      "command": "node",
      "args": ["apps/mcp/dist/index.js", "--stdio"],
      "env": {
        "DISPUTEK_API_URL": "https://api.disputek.com",
        "DISPUTEK_API_KEY": "dk_..."
      }
    }
  }
}

Run it as a hosted server

For a shared or hosted assistant, run the same package in remote mode. It exposes the MCP endpoint at POST /mcp and a liveness probe at GET /health.

DISPUTEK_API_URL=https://api.disputek.com node apps/mcp/dist/index.js

Environment: DISPUTEK_API_URL is required (the API base URL, with or without a trailing slash). DISPUTEK_API_KEY is required in stdio mode and travels on the Authorization header in remote mode. PORT is optional and defaults to 4001.

{
  "mcpServers": {
    "disputek": {
      "type": "http",
      "url": "https://your-mcp-host/mcp",
      "headers": { "Authorization": "Bearer dk_..." }
    }
  }
}

Any client that supports Streamable HTTP with custom headers works the same way as this remote configuration.

One thing to get right

The MCP server carries whatever access your API key grants, and the key belongs to you - so treat it like a password, not a config value. Give the assistant a key scoped to the work it actually does, keep it out of shared config files and version control, and revoke it from Settings - API Keys the moment it stops being needed. A leaked key is a leaked integration, and revoking takes one click.