ai-usage-mcp
AI Usage Dash
Панель метрик использования AI на работе, с фокусом на точные (оплачиваемые) токены, собираемые автоматически через хуки во время сессии — вам не нужно запускать никакой сборщик, и не нужно держать запущенным сервер.
Три независимых слоя:
Сбор (через хуки) — хуки конца хода записывают точное использование напрямую в локальный файл SQLite (lib/db.mjs). Никакого демона, никакого HTTP.
Хранение — один файл SQLite (
metrics.db) через встроенныйnode:sqliteиз Node (без нативных зависимостей, без шага сборки). WAL +busy_timeoutпозволяют конкурентным писателям-хукам и MCP-читателю безопасно работать с ним.Запрос/анализ — read-only MCP-сервер (stdio, запускается по требованию клиентом), который потребляют Claude и Cursor для построения графиков (артефакты / canvas).
Контракт событий (src/types.ts) связывает три слоя вместе. Токены — поля первого класса.
Как точный токен появляется автоматически
Работает на 100% локально на вашей машине — хуки — это короткоживущие процессы node, которые открывают
файл SQLite, записывают события хода и завершаются. Ничего не слушает порт.
Клиент | Хук | Что делает | Требования |
Claude Code |
| Читает | ничего — 100% локально |
Cursor |
| (1) сразу записывает активность хода; (2) с админ-ключом получает точные токены из Admin API |
|
⚠️ Почему Cursor нужен API-ключ. Оплачиваемое количество токенов Cursor не существует на машине: хук Cursor не получает токены, а в локальной БД есть только оценки контекста. Точное число существует только на стороне сервера (Admin API, тариф Team/Business). Хук автоматизирует этот запрос — вам по-прежнему ничего не нужно запускать — но без админ-ключа вы сможете видеть только активность, а не токены.
Related MCP server: MCP Database Bridge
Установка
npm install # no native build — uses Node's built-in SQLite
npm link # puts the ai-usage-* commands on your PATH
cp .env.example .envnpm link предоставляет каждый инструмент как команду, которую можно вызывать по имени (ai-usage-claude-hook,
ai-usage-cursor-hook, ai-usage-mcp, ai-usage-stats, …), поэтому нигде ниже не захардкожен абсолютный
путь к этому репозиторию. Каждая команда сама определяет своё расположение, поэтому работает из любой
директории. (Не хотите глобальную ссылку? Запускайте их из репозитория через npx ai-usage-<name>,
или используйте node ./hooks/<file>.mjs с путём.)
Нет сервиса, который нужно запускать. Хуки пишут в БД напрямую, а MCP-сервер запускается
по требованию вашим клиентом. БД по умолчанию находится в metrics.db в корне репозитория; установите
IA_USAGE_DASHBOARD_DB_PATH, только если храните её в другом месте:
export IA_USAGE_DASHBOARD_DB_PATH="$HOME/somewhere/metrics.db" # optional; the commands find the repo DB by default1. Включите хук Claude Code
Зарегистрируйте хук в ~/.claude/settings.json:
{
"hooks": {
"Stop": [
{ "hooks": [{ "type": "command", "command": "ai-usage-claude-hook" }] }
],
"SubagentStop": [
{ "hooks": [{ "type": "command", "command": "ai-usage-claude-hook" }] }
]
}
}Готово — с этого момента каждый ход Claude Code сам записывает точное использование. Хук молчалив и никогда не блокирует Claude Code; если запись когда-либо не удастся, он просто повторит попытку в следующем ходе.
2. Включите хук Cursor
Создайте ~/.cursor/hooks.json (или <project>/.cursor/hooks.json) — см. пример в
hooks/cursor-hooks.example.json:
{ "version": 1, "hooks": { "stop": [{ "command": "ai-usage-cursor-hook" }] } }Для точных токенов Cursor также экспортируйте админ-ключ (Cursor Dashboard → Settings → Cursor Admin API Keys):
export CURSOR_API_KEY=<cursor-admin-key>3. Зарегистрируйте read-only MCP (Claude / Cursor)
claude mcp add ai-usage -- ai-usage-mcpДля Cursor в репозитории уже есть .cursor/mcp.json (запускает npm run mcp
из репозитория — путь не нужен).
В клиенте: "используй инструмент token_usage (период 30д, group_by model) и построй столбчатую диаграмму" → артефакт/canvas.
Инструменты запросов (MCP)
Инструмент | Что возвращает |
| AI-усилия по задаче/тикету (Jira и т.д.): токены, сообщения, инструменты, ошибки, сессии |
| сумма точных токенов (вход/выход/кэш) + стоимость, по дню/модели/источнику/пользователю/проекту/задаче |
| задержка на ход: среднее, p50, p95, максимум — по дню или модели |
| самые используемые инструменты + доля ошибок (ошибки/использования) + веб-поиск/загрузка |
| распределение |
| Cursor: доля принятия кода и вкладок, принятые/отклонённые строки |
| количество событий по дню/пользователю/проекту/инструменту/источнику |
| самые используемые инструменты |
| сводка по сессиям с длительностью |
Метрики, собираемые для каждого события
message(Claude Code и Cursor): точные токены,model, и вmeta:stop_reason,latency_ms(время хода),n_tools,tools,web_search/web_fetch,gitBranch.tool_use: по одному на каждый вызванный инструмент (питаетtop_tools/tool_stats).error: по одному наtool_resultс ошибкой (знаменатель =tool_use→ доля ошибок).productivity(Cursor, ежедневно): добавленные/принятые строки, показанные/принятые вкладки, применения.
Связь задачи (Jira/тикета) с сессией
Каждая AI-сессия связана с задачей, чтобы измерять AI-усилия по тикету. Определение происходит автоматически в начале сессии, в порядке точности:
.dash-task— файл в корне репозитория с ID (явное переопределение).Git-ветка — ID в стиле Jira в имени ветки (
feature/PROJ-123-...→PROJ-123).Промпт пользователя — упомянутый ID или явный маркер
#task PROJ-123(можно исправить в любое время).Если ни один из вышеперечисленных не даёт точного результата → хук
SessionStartвнедряет контекст, инструктирующий Claude спросить пользователя об ID перед началом (best-effort — хукSessionStartне может блокировать, поэтому модель может пропустить вопрос). Независимо от того, задаёт ли он вопрос, ответ перехватывается отдельно хукомUserPromptSubmit, поэтому гарантированные способы задать задачу — это.dash-task, имя ветки или#task PROJ-123.
Задействованные хуки (зарегистрированы в ~/.claude/settings.json):
"SessionStart": [{ "hooks": [{ "type": "command", "command": "ai-usage-session-task" }] }],
"UserPromptSubmit":[{ "hooks": [{ "type": "command", "command": "ai-usage-task-capture" }] }]Шаблон ID настраивается через DASH_TASK_PATTERN (регулярное выражение). По умолчанию — стиль Jira
(PROJ-123). task_id становится полем первого класса для каждого события; запрашивайте его через
by_task или token_usage group_by=task_id.
Слэш-команда /dash_stats
Запрос статистики задачи прямо из Claude Code:
/dash_stats DEMO-100 → stats for the given task
/dash_stats → uses the ACTIVE task of the current sessionВозвращает токены (вход/выход/кэш), сообщения, вызовы инструментов + долю ошибок, p50/p95 задержку, разбивку по моделям и топ инструментов — всё для этого тикета.
Компоненты: команда ai-usage-stats (scripts/task-stats.mjs —
определяет задачу и читает локальную БД SQLite напрямую через taskStats() в
lib/db.mjs) + команда в ~/.claude/commands/dash_stats.md. Запускайте как
ai-usage-stats DEMO-100 (или npm run stats -- DEMO-100 из репозитория). Укажите нестандартную
БД через IA_USAGE_DASHBOARD_DB_PATH. Активная задача — это самое последнее состояние задачи в сессии.
Обратное заполнение истории (опционально, запускается один раз)
Хуки собирают данные с этого момента. Чтобы импортировать ВСЮ существующую историю один раз:
npm run collect:claude # scans ~/.claude/projects/**.jsonl
CURSOR_API_KEY=<key> npm run collect:cursorОбе команды идемпотентны (дедупликация по ext_id) — повторный запуск не создаёт дубликатов.
Следующие шаги
Стоимость Claude Code (токены × таблица цен по моделям).
Фиксированные дашборды (HTML) помимо артефактов по запросу.
Миграция SQLite → Postgres (заменить только lib/db.mjs).
Сбор с нескольких машин — если БД когда-либо понадобится разместить вне машины, добавьте тонкий ingest-эндпоинт перед
insertEvents()(сейчас он работает однопользовательски на машине, напрямую в файл).
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only analytics for Convex apps, queryable via MCP from Claude, Cursor, and other clients.
Hosted SQL Server MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Analytics for MCP servers. Query your tool calls, first-call success, retries and schema cost.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
Related MCP Servers
- AlicenseAqualityBmaintenanceLocal-first dashboard + MCP server that parses Claude Code and Codex JSONL files into a SQLite cost / token tracker. Per-MCP and per-tool breakdown, session drill-down, dedup by request_id; never talks to vendor APIs587 npm1MIT
- FlicenseNot gradedqualityCmaintenanceA secure, read-only MCP server that empowers Claude Desktop and AI agents to safely query and inspect local SQLite databases.-
- AlicenseAqualityBmaintenanceRead-only MCP server for querying PostgreSQL, MySQL, and SQLite from AI agents — multi-database, safe by default.46 npm1ISC
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for SQLite databases, enabling AI assistants to safely query and inspect database schemas without write access.MIT