
MCP Cost Tracker Router
from dbsectrainer
Real-time cost awareness for MCP agent workflows โ track spend, set budgets, and route by model pricing
MCP Cost Tracker & Router
npm mcp-cost-tracker-router package
Local-first cost awareness for MCP agent workflows. Token counts are calculated offline using js-tiktoken โ no proxy, no API round-trip, no spend data leaving your machine. When costs climb, routing suggestions point you to cheaper models before the invoice arrives.
Tool reference | Configuration | Contributing | Troubleshooting
Key features
- Per-tool cost breakdown: See exactly which tool calls are consuming the most tokens and budget.
- Budget alerts: Set a session spend threshold and get warned at 80% and 100% before you exceed it.
- Offline token counting: Uses js-tiktoken for accurate counts โ no API calls required.
- Model routing suggestions: Recommends cheaper models for the current task type (advisory, never enforced without opt-in).
- Multi-provider pricing: Tracks costs across Claude, OpenAI, and Gemini models from a single configurable pricing table.
- Spend history: Query daily, weekly, and monthly totals by model or tool.
- Project cost allocation: Tag sessions to named projects and generate chargeback reports.
- HTML spend reports: Export a single-file, self-contained HTML report with charts and budget status.
- Audit log: Append-only log of every budget enforcement decision.
Why this over proxy-based cost trackers?
Most cost-tracking tools work by routing all your API traffic through their server and measuring tokens server-side. That means your prompts and responses transit a third-party service, and you're dependent on their uptime.
| mcp-cost-tracker-router | Proxy-based trackers (Helicone, LLMonitor, etc.) | |
|---|---|---|
| Token counting | Offline via js-tiktoken โ no network call | Counted server-side after traffic is proxied |
| Data residency | Local SQLite only | Prompts + responses pass through vendor servers |
| Model routing | Built-in suggest_model_routing tool | Rarely included; usually a separate paid tier |
| Multi-provider | Claude, OpenAI, Gemini in one pricing table | Often single-provider or requires separate setup |
| Uptime dependency | None โ fully offline | Breaks if proxy is down |
If your prompts contain sensitive information or you can't route traffic through a third party, this is the right tool. If you need a managed dashboard with team sharing, a proxy-based service may suit you better.
Disclaimers
mcp-cost-tracker-router stores tool call metadata (token counts, model names, timestamps) locally in SQLite. It does not store prompt or response content. Cost calculations are estimates based on a local pricing table and may not exactly match your provider's invoice.
Your first prompt
Enter the following in your MCP client to verify everything is working:
How much has this session cost so far?Your client should return a token and USD cost summary for the current session.
Tools
Session (4 tools)
get_session_costโ Returns token totals and USD cost estimates for the current session. Read-only.get_tool_costsโ Returns per-tool cost breakdown for the session, sorted by cost descending. Read-only.reset_sessionโ Start a new cost-tracking session. Previous session data is retained in history.record_usageโ Record token usage for a tool call. Takestool_name,model(optional),input_tokens, andoutput_tokens. Emits a budget warning notification if 80% of threshold is reached.
Budgets & routing (3 tools)
set_budget_alertโ Set a budget threshold in USD (threshold_usd). Warns at 80% and 100% of the threshold. Use with--enforce-budgetto block calls beyond the limit.suggest_model_routingโ Heuristic model recommendation by task type. Takestask_descriptionand optionalconstraints.max_cost_usd. Returns recommended model with reasoning and estimated cost.check_routing_policyโ Check whether a model is allowed for a given task type under the routing policy. Takestask_typeandmodel.
History & reports (4 tools)
get_spend_historyโ Query historical spend aggregated byperiod(day/week/month). Returns breakdown by model and tool. Read-only.estimate_workflow_costโ Pre-run cost estimation for a multi-step workflow. Takes astepsarray withtool_name,estimated_input_tokens,estimated_output_tokens, and optionalmodel. Read-only.export_spend_reportโ Generate a single-file HTML spend report with session breakdown, historical spend, model cost comparison, and budget status. Read-only.export_budget_auditโ Export the audit log of budget enforcement decisions. Accepts optionalfrom_date,to_date, andformat(json/csv). Read-only.
Project allocation (4 tools)
set_projectโ Create or update a project with an optionalbudget_usd. Takesproject_name.tag_sessionโ Tag the current session with aproject_namefor cost allocation.get_project_costsโ Get cost report for a project. Takesproject_nameand optionalsince(ISO date). Read-only.export_chargebackโ Generate a chargeback report for internal billing. Takesfrom_date,to_date, optionalgroup_by(project/session), and optionalformat(json/csv). Read-only.
Supported models and pricing
Built-in pricing table (USD per 1K tokens):
| Model | Input | Output |
|---|---|---|
| claude-opus-4-6 | $0.0150 | $0.0750 |
| claude-sonnet-4-6 | $0.0030 | $0.0150 |
| claude-haiku-4-5 | $0.0008 | $0.0040 |
| gpt-4o | $0.0025 | $0.0100 |
| gpt-4o-mini | $0.000150 | $0.000600 |
| gemini-1.5-pro | $0.001250 | $0.005000 |
| gemini-1.5-flash | $0.000075 | $0.000300 |
| gemini-2.0-flash | $0.000100 | $0.000400 |
Override individual model prices with --pricing-table. All costs are estimates.
Verification
Before publishing a new version, verify the server with MCP Inspector to confirm all tools are exposed correctly and the protocol handshake succeeds.
Interactive UI (opens browser):
npm run build && npm run inspectCLI mode (scripted / CI-friendly):
# List all tools
npx @modelcontextprotocol/inspector --cli node dist/index.js --method tools/list
# List resources and prompts
npx @modelcontextprotocol/inspector --cli node dist/index.js --method resources/list
npx @modelcontextprotocol/inspector --cli node dist/index.js --method prompts/list
# Call a read-only tool
npx @modelcontextprotocol/inspector --cli node dist/index.js \
--method tools/call --tool-name get_session_cost
# Call record_usage with arguments
npx @modelcontextprotocol/inspector --cli node dist/index.js \
--method tools/call --tool-name record_usage \
--tool-arg tool_name=my_tool --tool-arg input_tokens=500 --tool-arg output_tokens=200Run before publishing to catch regressions in tool registration and runtime startup.
MCP Registry & Marketplace
This plugin is available on:
Search for mcp-cost-tracker-router.
# List all tools
npx @modelcontextprotocol/inspector --cli node dist/index.js --method tools/list
# List resources and prompts
npx @modelcontextprotocol/inspector --cli node dist/index.js --method resources/list
npx @modelcontextprotocol/inspector --cli node dist/index.js --method prompts/list
# Call a read-only tool
npx @modelcontextprotocol/inspector --cli node dist/index.js \
--method tools/call --tool-name get_session_cost
# Call record_usage with arguments
npx @modelcontextprotocol/inspector --cli node dist/index.js \
--method tools/call --tool-name record_usage \
--tool-arg tool_name=my_tool --tool-arg input_tokens=500 --tool-arg output_tokens=200Requirements
- Node.js v20.19 or newer.
- npm.
Getting started
Add the following config to your MCP client:
{
"mcpServers": {
"cost-tracker": {
"command": "npx",
"args": ["-y", "mcp-cost-tracker-router@latest"]
}
}
}To set a session budget alert:
{
"mcpServers": {
"cost-tracker": {
"command": "npx",
"args": ["-y", "mcp-cost-tracker-router@latest", "--budget-alert=5.00"]
}
}
}MCP Client configuration
Amp ยท Claude Code ยท Cline ยท Cursor ยท VS Code ยท Windsurf ยท Zed
Configuration
--budget-alert
Session spend threshold in USD. A warning is returned when session costs reach 80% and again at 100% of this threshold.
Type: number
--db / --db-path
Path to the SQLite database file used to store cost history.
Type: string
Default: ~/.mcp/costs.db
--pricing-table
Path to a JSON file containing custom model pricing ($/1K tokens). Merged with the built-in table; missing models fall back to defaults.
Type: string
--default-model
Model name to attribute costs to when no model can be inferred from context.
Type: string
Default: claude-sonnet-4-6
--enforce-budget
Block tool calls that would cause the session to exceed the budget alert threshold. Requires --budget-alert to be set.
Type: boolean
Default: false
--http-port
Start in HTTP mode using Streamable HTTP transport instead of stdio. Useful for sharing a single cost-tracking instance across a team.
Type: number
Default: disabled (uses stdio)
Pass flags via the args property in your JSON config:
{
"mcpServers": {
"cost-tracker": {
"command": "npx",
"args": [
"-y",
"mcp-cost-tracker-router@latest",
"--budget-alert=2.00",
"--enforce-budget"
]
}
}
}No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.
Licensed under MITโ you can use, modify, and redistribute it under that license's terms.
View the full license file on GitHub โ