Skip to content

MCP ​

subtrack implements an MCP (Model Context Protocol) server that allows AI assistants — such as Claude Desktop, Cursor, and Windsurf — to read and manage your subscriptions directly.

Starting the server ​

bash
subtrack mcp

The server runs on stdio. It prints newline-delimited JSON-RPC 2.0 messages over stdout and reads NDJSON (or Content-Length-framed) messages from stdin. This is the standard transport used by all MCP hosts.

Integration examples ​

Claude Desktop ​

Add to your claude_desktop_config.json:

json
{
  "mcpServers": {
    "subtrack": {
      "command": "subtrack",
      "args": ["mcp"]
    }
  }
}

Cursor ​

In Cursor settings, add an MCP server:

Name: subtrack
Type: command
Command: subtrack mcp

Windsurf ​

In Windsurf settings, add an MCP server pointing to the same command.

Available tools ​

The MCP server exposes 20 tools covering subscription management, analytics, tagging, and LLM API usage tracking.

Subscription CRUD ​

ToolDescription
list_subscriptionsList all subscriptions with optional sort and paging
get_subscriptionGet a single subscription by ID
add_subscriptionAdd a new subscription
edit_subscriptionEdit an existing subscription
delete_subscriptionDelete a subscription by ID
search_subscriptionsSearch by name, notes, or tags

Analytics & Reports ​

ToolDescription
get_summarySubscription summary statistics
get_analyticsAnalytics: summary plus per-status breakdown
get_upcomingUpcoming bills within N days
get_calendarCalendar entries for a month
get_forecastSpending forecast with what-if scenarios
compareCompare current vs previous period spending
get_historyPrice change history

Tags ​

ToolDescription
list_tagsList all tags with subscription counts
get_tag_subscriptionsSubscriptions matching one or more tags (AND logic)

LLM API Usage ​

ToolDescription
get_usage_totalAggregated usage: cost, tokens, provider/model breakdown
list_usageList usage entries with provider/date filters

Data Management ​

ToolDescription
export_dataExport as CSV, JSON, or Markdown
bulk_operationsBulk status change, delete, or tag operations
get_trialsTrial periods with optional expiring-soon filter

Tool schemas ​

Each tool accepts a JSON object with the following parameters:

list_subscriptions

  • sort (string, optional): Sort field — name, price, currency, cycle, status
  • desc (boolean, optional): Sort descending
  • limit (number, optional): Max entries to return
  • offset (number, optional): Skip the first N entries (for paging)

get_subscription

  • id (number, required): Subscription ID

add_subscription

  • name (string, required): Subscription name
  • price (number, required): Price in major currency units (for example, 14.99 USD)
  • currency (string, required): Currency code (e.g. USD, JPY)
  • cycle (string, required): Billing cycle — weekly, bi-weekly, monthly, quarterly, semi-annual, yearly, or Nd for a custom day count (e.g. 3d, 1–365)
  • tags (string, optional): Comma-separated tags
  • billingDay (number, optional): Billing day of month (1–31)
  • status (string, optional): active, paused, cancelled
  • paymentMethod (string, optional): Payment method
  • notes (string, optional): Notes

edit_subscription

  • id (number, required): Subscription ID
  • All other fields same as add_subscription (all optional except id)

delete_subscription

  • id (number, required): Subscription ID

search_subscriptions

  • query (string, required): Search query
  • names (boolean, optional): Search in names
  • notes (boolean, optional): Search in notes
  • tags (boolean, optional): Search in tags

get_upcoming

  • days (number, optional): Number of days (default: 7)

get_calendar

  • month (number, optional): Month (1–12)
  • year (number, optional): Year

get_forecast

  • months (number, optional): Number of months (default: 12)
  • currency (string, optional): Convert to target currency
  • cancel (string, optional): Comma-separated names to exclude

compare

  • period (string, optional): monthly, quarterly, yearly
  • currency (string, optional): Convert to target currency

export_data

  • format (string, required): csv, json, or md

bulk_operations

  • action (string, required): status, delete, tag_add, tag_remove
  • status (string, optional): Target status for status action
  • tag_name (string, optional): Tag name for tag actions
  • filter_tag (string, optional): Filter by tag
  • filter_status (string, optional): Filter by status
  • filter_name (string, optional): Filter by name pattern
  • confirm (boolean, optional): Must be true for destructive delete actions

get_history

  • id (number, optional): Filter by subscription ID
  • days (number, optional): Recent days to include

get_trials

  • expiring_soon (number, optional): Filter trials expiring within N days

list_tags

  • No parameters

get_tag_subscriptions

  • tag (string, required): Comma-separated tag names (all must match)

get_usage_total

  • from (string, optional): Start date YYYY-MM-DD (default: current month)
  • to (string, optional): End date YYYY-MM-DD (default: current month)
  • Returns total (cost in USD cents), tokens, byProvider, and byModel

list_usage

  • provider (string, optional): Filter by provider
  • from (string, optional): Start date YYYY-MM-DD
  • to (string, optional): End date YYYY-MM-DD
  • limit (number, optional): Max entries (default: 100)

Validation ​

add_subscription and edit_subscription validate currency (supported ISO 4217 codes), cycle (weekly, bi-weekly, monthly, quarterly, semi-annual, yearly, or Nd for a custom day count, 1–365), and status (active, paused, cancelled, archived). Invalid values are rejected with an error. bulk_operations validates the target status the same way and reports per-entry errors instead of silently skipping them.

Example usage ​

Ask your AI assistant:

"Add a Netflix subscription for ¥1,980/month, tagged as video and entertainment."

"Show me my total monthly spending in JPY."

"What subscriptions are due in the next 7 days?"

"Find subscriptions with the tag 'music'."

The assistant will use the MCP tools to read and modify your subtrack database.

Released under the MIT License.