Usual Docs
View as Markdown

Usual Subagent

Usual Subagent is how your own AI agent runs your subscriptions: an MCP server built into Usual. Connect Claude, Cursor or any MCP client and your agent can look up subscriptions, explain what happened, handle a customer's cancel request, fix failed payments, and make changes, each one previewed first and recorded.

Addresshttps://regular-subs.fly.dev/mcp (Streamable HTTP)
Sign-inAn Agent key from Usual → Developers, sent as Authorization: Bearer <key>

Use an Agent key rather than an API key: agent keys always get a plan first, must say why, and need a person's approval for riskier or bigger changes (see Approvals). Give it only the permissions the job needs.

Claude Code

bash
claude mcp add --transport http usual https://regular-subs.fly.dev/mcp \
  --header "Authorization: Bearer $USUAL_KEY"

Cursor

In ~/.cursor/mcp.json (or .cursor/mcp.json in a project):

json
{
  "mcpServers": {
    "usual": {
      "url": "https://regular-subs.fly.dev/mcp",
      "headers": { "Authorization": "Bearer usk_..." }
    }
  }
}

VS Code

In .vscode/mcp.json:

json
{
  "servers": {
    "usual": {
      "type": "http",
      "url": "https://regular-subs.fly.dev/mcp",
      "headers": { "Authorization": "Bearer ${input:usual-key}" }
    }
  },
  "inputs": [{ "id": "usual-key", "type": "promptString", "description": "Usual agent key", "password": true }]
}

Claude Desktop and other clients

Clients that only run local servers can connect through mcp-remote:

json
{
  "mcpServers": {
    "usual": {
      "command": "npx",
      "args": ["mcp-remote", "https://regular-subs.fly.dev/mcp", "--header", "Authorization: Bearer ${USUAL_KEY}"],
      "env": { "USUAL_KEY": "usk_..." }
    }
  }
}

Connecting from Claude.ai or ChatGPT with a "sign in to your store" button is coming soon.

What your agent sees

The server tells the agent how to work when it connects, so you don't need to explain it. In short:

  1. Look things up with get_overview, find_subscriptions and get_subscription.
  2. See what it may change with list_commands: every command its key allows, with the input schema, risk and whether it can be undone.
  3. Preview with plan_change. Nothing changes yet. The plan says exactly what would change.
  4. Apply with apply_plan, after showing you the plan if you're there. If it needs approval, it tells you and waits; you approve it in Usual → Activity.
  5. Explain or reverse with list_activity and undo_change.

All the tools are listed in MCP tools.

Try asking

  • "How are subscriptions doing this month? Anything broken?"
  • "Which payments are failing, and why? Send card-update emails to the ones with expired cards."
  • "Maria wants to cancel because she has too much coffee. What can we offer her?"
  • "Pause every subscription for the Cold Brew Pack until the new batch arrives."
  • "What changed yesterday, and who did it?"
  • "We're moving from Recharge. Walk me through it."