Usage & quota tracker for AI subscription accounts (StepFun, Command Code)
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
English | 简体中文
A usage & quota tracker for AI subscription accounts. It pulls the balances, subscription expiry dates and rate-limit windows that are scattered across vendor dashboards into one place, and exposes them through both a REST management API and an MCP query surface — point your agent (Hermes, Claude Code, …) at it with one config line and it can answer "how much quota do I have left?" on its own.
Two platforms supported today:
| Platform | Data source | Credential | What you can see |
|---|---|---|---|
StepFun (阶跃星辰, .ai intl / .com China) | platform.stepfun.{ai,com} console Connect RPC | Browser session (Oasis-Token, ~2 h, auto-renewed) + optional plan key | Plan & expiry, 5-hour / weekly / subscription credit windows, access keys under the account, session health |
| Command Code (commandcode.ai) | Undocumented /alpha/* endpoints on api.commandcode.ai | A single Bearer API key | Plan (GOAT/Pro/Max/…), 5-hour / weekly / monthly windows, balances, billing-period request stats |
Highlights:
After startup:
http://127.0.0.1:8780/healthz health checkhttp://127.0.0.1:8780/api/stepfun/accounts REST listhttp://127.0.0.1:8780/mcp MCP endpointThe alpha/API-key plane is the easy one — a permanent Bearer key:
Get the key from commandcode.ai/settings/keys (shown once at creation). The server validates it with whoami first and refuses to store a rejected key.
The internal/session plane mirrors the browser: pass session_text (the whole Cookie: header, a document.cookie dump, or the bare __Secure-commandcode_prod_.session_token value). It is validated against billing/credits and never stored unless it passes. Sessions expire, so refresh them from CookieCloud or by copying the cookie again from DevTools:
When both are stored the API key wins. Each enrol overwrites the credential planes it was given — re-enrolling with only api_key clears any stored session, and vice-versa, so a rotation is never silently skipped.
Oasis-Token is an HttpOnly cookie, so document.cookie cannot read it — copy it from a request header in DevTools. Paste the whole Cookie: header (or the bare token) to the server:
Protocol findings from real-world testing (all handled in code):
.ai Oasis-Token cookie value is two JWTs concatenated (8 segments); the console only accepts the whole value — a single segment gets you token is illegal.ai returns second-level strings, .com returns milliseconds; the code infers by magnitude.com device tokens live only 30 minutes and its RefreshToken returns a degraded token — .com sessions need periodic re-importmode 1, data plane always token is illegal), so renewal must happen before expiry; a degradation guard refuses to store such tokensTwo ways to connect — pick either:
1. Streamable HTTP (served on /mcp) — for always-on deployments:
2. stdio — for clients that spawn the server themselves (Claude Code, containers, mcp-publisher-style registry installs):
Works the same way from Claude Code or any other MCP client.
All tools are read-only:
| Tool | Description |
|---|---|
quota_list_accounts | List every account: plan, expiry, remaining quota, session/key status (masked) |
quota_probe_account | Live-probe one account (hits upstream, takes a few seconds) |
quota_probe_all | Serially probe all accounts and refresh the cache |
quota_status | Summary: per-platform counts of serving / limited / invalid / needs-relogin, plus a one-line status per account |
quota_check_alerts | Firing alerts: low quota, upcoming expiry, dead session, rejected key, window exceeded |
quota_report | The scheduled-digest payload: all account numbers + current alerts |
quota-mcp owns condition detection (it holds the data and runs a 60 s background loop); scheduling and delivery belong to your agent platform. A hermes-style wiring:
A background evaluator refreshes stale probe data (>5 min), evaluates rules, keeps a
firing/resolved state machine in SQLite (alert_events), and POSTs only the transitions
to a webhook — the same alert never repeats until it clears and fires again.
Rules: credit_low (remaining share below threshold), expiring_soon (subscription/billing
period ending within N days), session_dead (StepFun console session needs re-import),
key_rejected (Command Code key got 401/403), window_limited (rate window exceeded).
Payload pushed on each transition:
No webhook? No problem — hermes (or anything) can poll instead:
then have a hermes cron every 15–30 min call quota_check_alerts and hermes send anything
new. Same for GET /api/alerts?history=20.
quota_report (or GET /api/report) returns a stable, agent-friendly payload: every account's
plan / expiry / remaining quota / session state / window usage / request stats, plus current
alerts. Point hermes's existing 09:30 cron at it: one turn calls the tool, composes the message,
and delivers via hermes send. No scheduler is duplicated inside quota-mcp.
| Variable | Default | Meaning |
|---|---|---|
QUOTA_MCP_ALERT_CREDIT_PCT | 0.2 | Fires when remaining share drops below this |
QUOTA_MCP_ALERT_EXPIRY_DAYS | 7 | Fires when subscription/billing period ends within N days |
QUOTA_MCP_ALERT_WEBHOOK_URL | — | POST target for alert transitions; empty = record only (pull mode) |
Example (quota_status output — what an agent would read to answer "how much quota is left?"):
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/quota-mcp)<a href="https://allmcps.com/mcp/quota-mcp"><img src="https://allmcps.com/api/badge/quota-mcp?style=directory" alt="Quota MCP on AllMCPs" /></a>