MSP Renewals MCP Server

Work your renewals from wherever you already talk to an AI. The MCP server exposes your MSP Renewals organization to Claude (Code and Desktop), Cursor, VS Code, and any client that speaks the Model Context Protocol. Ask “what’s expiring at Riverside Medical this quarter?”, paste a spreadsheet and say “load these firewalls”, or “request a quote for serial FGT60F…” — the assistant calls the tools below on your behalf.

Endpoint and authentication

Remote server, Streamable HTTP transport, stateless. Create an API key in Settings → API Keys (organization admins only) and send it as a Bearer token. Every tool is scoped to the organization that owns the key — it cannot see or change anyone else’s data.

URL:     https://app.msprenewals.com/api/mcp
Header:  Authorization: Bearer mspr_live_YOUR_KEY

Connect your client

Claude Code

claude mcp add --transport http msp-renewals https://app.msprenewals.com/api/mcp \
  --header "Authorization: Bearer mspr_live_YOUR_KEY"

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "msp-renewals": {
      "url": "https://app.msprenewals.com/api/mcp",
      "headers": { "Authorization": "Bearer mspr_live_YOUR_KEY" }
    }
  }
}

VS Code (GitHub Copilot agent mode)

Add to .vscode/mcp.json:

{
  "servers": {
    "msp-renewals": {
      "type": "http",
      "url": "https://app.msprenewals.com/api/mcp",
      "headers": { "Authorization": "Bearer mspr_live_YOUR_KEY" }
    }
  }
}

Claude Desktop and other stdio-only clients

Clients that only launch local servers can bridge to the remote endpoint with mcp-remote:

{
  "mcpServers": {
    "msp-renewals": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "https://app.msprenewals.com/api/mcp",
        "--header", "Authorization: Bearer mspr_live_YOUR_KEY"
      ]
    }
  }
}

The claude.ai web app and ChatGPT connectors require OAuth for remote servers rather than a static key. OAuth sign-in for those clients is on the roadmap; the clients above work today.

Tools

ToolTypeWhat it does
get_organization_summaryread-onlyClient and device counts, how many expire in 30 / 90 days, how many are already expired, open quotes by status.
list_clientsread-onlyYour clients with contact details and active device counts.
list_expiring_devicesread-onlyDevices expiring within N days (default 90), optionally for one client. Includes days-until-expiration.
get_deviceread-onlyOne device by serial number, its open quotes, and the license tiers available for its vendor.
list_quotesread-onlyThe renewal pipeline — every open quote, or filter by status or client — with device lines and pricing.
get_action_queueread-onlyWhat needs you right now: automation errors, approved quotes to close, received quotes to price, devices with nothing in flight.
upsert_deviceswritesAdd or update up to 100 devices by serial. Clients are found-or-created. Only the fields you pass change.
request_distributor_quotewritesSend a renewal RFQ to the distributor mapped to the device's vendor. Sends a real email; creates the quote if none is open.

Things to try

  • “What needs my attention on renewals today?” → get_action_queue
  • “Which firewalls expire before the end of the quarter, grouped by client?” → list_expiring_devices
  • “Here’s our WatchGuard export as CSV — load every serial with its site and expiration.” → upsert_devices
  • “Request a 1-year Total Security renewal quote for D0260…” → request_distributor_quote
  • “Draft an email to Riverside Medical listing what’s due in October with the quote numbers.” → list_quotes + your assistant’s writing

Limits & behavior

  • 240 requests per minute per key. Responses are JSON; no long-lived streams.
  • Write tools change only what you pass. Renewal dates are never overwritten by automation, only by you.
  • request_distributor_quote sends a real email to your distributor. Assistants that ask before acting will confirm first — say yes deliberately.
  • Closing a renewal (rolling the expiration and recording the license) stays in the app for now.
  • Revoke a key in Settings → API Keys and every client using it stops immediately.

Building something on top of this? The same keys work with the REST API. Questions: support@msprenewals.com.