tokencast

tokencast

Pre-execution cost estimation for LLM agent workflows, providing cost estimates before running tasks and improving accuracy over time through calibration.

Category
访问服务器

README

<p align="center"> <img src="assets/tokencast-logo.svg" alt="tokencast logo" width="150"> </p>

CI PyPI

<!-- mcp-name: io.github.krulewis/tokencast -->

tokencast

Pre-execution cost estimation for LLM agent workflows. Get a cost estimate before running any agent task, then let tokencast learn from actuals to improve accuracy over time.

Available as a Claude Code plugin (recommended — one command delivers everything) or as an MCP server for Cursor, VS Code + Copilot, and Windsurf.


Installation

Claude Code (Recommended)

Install tokencast as a Claude Code plugin — delivers the MCP server, calibration hooks, and estimation skill in two commands:

/plugin marketplace add krulewis/tokencast
/plugin install tokencast@tokencast

The first command registers the tokencast marketplace. The second installs the plugin from it.

Prerequisites: uv must be installed for the MCP server to function. Install with: curl -LsSf https://astral.sh/uv/install.sh | sh

This delivers:

  • MCP server (estimate_cost, get_calibration_status, get_cost_history, report_session, report_step_cost)
  • Calibration hooks (auto-learning at session end, mid-session cost warnings, agent timeline tracking)
  • SKILL.md (estimation algorithm auto-trigger after plans)

Calibration data is stored in ~/.tokencast/calibration/ (global across projects, preserved on uninstall).

Scope options: --scope user (recommended — installs globally for all projects) or --scope project (per-project only).

Other IDEs (MCP Server)

Install the package:

pip install tokencast

Or with uvx (no install required — runs directly from PyPI):

uvx tokencast

Configure your IDE — replace /path/to/your/project with your actual project path in the config snippets below.

Cursor

Create or update .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "tokencast": {
      "command": "tokencast-mcp",
      "args": [
        "--calibration-dir", "/path/to/your/project/calibration",
        "--project-dir", "/path/to/your/project"
      ]
    }
  }
}

VS Code + GitHub Copilot

Create or update .vscode/mcp.json in your project root:

{
  "servers": {
    "tokencast": {
      "type": "stdio",
      "command": "tokencast-mcp",
      "args": [
        "--calibration-dir", "/path/to/your/project/calibration",
        "--project-dir", "/path/to/your/project"
      ]
    }
  }
}

Windsurf

Add to your Windsurf MCP config:

{
  "mcpServers": {
    "tokencast": {
      "command": "tokencast-mcp",
      "args": [
        "--calibration-dir", "/path/to/your/project/calibration",
        "--project-dir", "/path/to/your/project"
      ]
    }
  }
}

Full config examples are in docs/ide-configs/.

Available tools

Once configured, tokencast exposes five MCP tools in your IDE:

Tool What it does
estimate_cost Estimate API cost for a planned task before running it
get_calibration_status Check whether your estimates are well-calibrated
get_cost_history Browse past estimates vs actuals
report_session Report actual cost at session end to improve calibration
report_step_cost Record the cost of a single pipeline step during a session

Example — estimate before starting work:

Estimate the cost for: size=M, files=8, complexity=high

Example — report actuals after finishing:

Report session cost: actual_cost=4.20

Telemetry

tokencast includes opt-out anonymous usage telemetry. It is on by default — data is collected unless you explicitly disable it.

What is collected: session count, mean accuracy ratio, calibrated factor count, client name, framework, tool name, package version. What is NOT collected: project names, file paths, cost amounts, or any personal data.

To disable:

  • Call the disable_telemetry MCP tool (permanent opt-out, creates ~/.tokencast/no-telemetry)
  • Pass --no-telemetry to the MCP server command
  • Set TOKENCAST_TELEMETRY=0 in your environment

Precedence (highest to lowest):

  1. TOKENCAST_TELEMETRY=0 → always disables
  2. TOKENCAST_TELEMETRY=1 → always enables (overrides --no-telemetry and the no-telemetry file)
  3. ~/.tokencast/no-telemetry file exists → disables
  4. Default (no flags, no env var) → enabled

To delete your install ID: rm ~/.tokencast/install_id.

Data is sent to PostHog (US region). A random UUID is generated locally as your install ID — it contains no personal information. See the wiki for full details.


MCP Server Flags

Flag Default Description
--calibration-dir PATH ~/.tokencast/calibration Where calibration data is stored
--project-dir PATH None Project root for file measurement
--no-telemetry Off Disable anonymous usage telemetry (on by default)
--version Print version and exit

Claude Code Skill (Legacy)

The Claude Code plugin (recommended) delivers everything in one command. Use this only if you prefer the SKILL.md workflow without the plugin system.

If you use Claude Code and prefer the skill-based (SKILL.md) workflow, you can install tokencast as a Claude Code skill instead:

# Clone the repo (anywhere — it doesn't need to live inside your project)
git clone https://github.com/krulewis/tokencast.git

# Install into your project (quote paths with spaces)
bash tokencast/scripts/install-hooks.sh "/path/to/your-project"

Paths with spaces: Always wrap the project path in quotes. Without them the install script will fail on paths like /Volumes/Macintosh HD2/....

This does three things:

  1. Symlinks the skill into <project>/.claude/skills/tokencast/
  2. Adds a Stop hook for auto-learning at session end
  3. Adds a PostToolUse hook to nudge estimation after planning agents

The SKILL.md workflow is Claude Code-specific. The MCP server works in any MCP-compatible client and is the recommended path for new users.


How It Works

  1. Infers size, file count, complexity from the plan in conversation
  2. Reads reference files for pricing and token heuristics
  3. Loads learned calibration factors (if any exist)
  4. Computes per-step token estimates using activity decomposition
  5. Applies complexity multiplier, context accumulation (K+1)/2, and cache rates
  6. Splits into Optimistic / Expected / Pessimistic bands
  7. If PR Review Loop is in scope, computes loop cost using geometric decay across N review cycles
  8. Applies calibration correction to Expected band
  9. Records the estimate for later comparison with actuals

Example output:

## tokencast estimate

Change: size=M, files=5, complexity=medium
Calibration: 1.12x from 8 prior runs

| Step                  | Model  | Optimistic | Expected | Pessimistic |
|-----------------------|--------|------------|----------|-------------|
| Research Agent        | Sonnet | $0.60      | $1.17    | $4.47       |
| Architect Agent       | Opus   | $0.67      | $1.18    | $3.97       |
| ...                   | ...    | ...        | ...      | ...         |
| TOTAL                 |        | $3.37      | $6.26    | $22.64      |

Confidence Bands

Band Cache Hit Multiplier Meaning
Optimistic 60% 0.6x Best case — focused agent work
Expected 50% 1.0x Typical run
Pessimistic 30% 3.0x With rework loops, debugging, retries

Calibration

Calibration is fully automatic once you report actuals:

  • 0-2 sessions: No correction applied. "Collecting data" status.
  • 3-10 sessions: Global correction factor via trimmed mean of actual/expected ratios (trim_fraction=0.1).
  • 10+ sessions: EWMA with recency weighting. Per-size-class factors activate when a class has 3+ samples.
  • Outlier filtering: Sessions with actual/expected ratio >3.0x or <0.2x are excluded from calibration.

Calibration data lives in ~/.tokencast/calibration/ (gitignored, local to each user).


Python API

from tokencast import estimate_cost, report_session, report_step_cost
from tokencast import get_calibration_status, get_cost_history

# Estimate before running a task
result = estimate_cost(
    {"size": "M", "files": 5, "complexity": "medium"},
    calibration_dir="./calibration",
)

# Report actuals at session end
report_session({"actual_cost": 4.20}, calibration_dir="./calibration")

# Check calibration health
status = get_calibration_status({}, calibration_dir="./calibration")

# Browse history
history = get_cost_history({"window": "30d"}, calibration_dir="./calibration")

# Report a single step's cost
report_step_cost(
    {"step_name": "Research Agent", "cost": 0.85},
    calibration_dir="./calibration",
)

Manual Invocation (Skill mode)

In Claude Code with SKILL.md installed, you can invoke explicitly:

/tokencast size=L files=12 complexity=high
/tokencast steps=implement,test,qa
/tokencast review_cycles=3
/tokencast review_cycles=0

Files

SKILL.md                        — Skill definition (auto-trigger, algorithm)
references/pricing.md           — Model prices, cache rates, step→model map
references/heuristics.md        — Token budgets, pipeline decompositions, multipliers
references/examples.md          — Worked examples with arithmetic
references/calibration-algorithm.md — Detailed calibration algorithm reference
docs/ide-configs/               — Per-IDE MCP config examples
src/tokencast/                  — Core estimation engine (Python package)
src/tokencast_mcp/              — MCP server (Python package)
scripts/
  install-hooks.sh              — One-time project setup (skill mode)
  disable.sh                    — Remove from project (skill mode)
  tokencast-learn.sh            — Stop hook: auto-captures actuals (skill mode)
  tokencast-track.sh            — PostToolUse hook: nudges estimation after plans
  sum-session-tokens.py         — Parses session JSONL for actual costs
  update-factors.py             — Computes calibration factors from history
calibration/                    — Per-user local data (gitignored)
  history.jsonl                 — Estimate vs actual records
  factors.json                  — Learned correction factors
  active-estimate.json          — Transient marker for current estimate

Limitations

  • Pipeline step names reflect a default workflow — map your own steps to the closest defaults. Formulas are pipeline-agnostic (see references/heuristics.md)
  • Heuristics assume typical 150-300 line source files
  • Calibration requires 3+ completed sessions before corrections activate
  • Pricing data embedded; check last_updated in references/pricing.md
  • Multi-session tasks only capture the session containing the estimate

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选