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). Хук автоматизирует этот запрос — вам по-прежнему ничего не нужно запускать — но без админ-ключа вы сможете видеть только активность, а не токены.
Установка
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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/flaviozantut/ai-usage-dashboard'
If you have feedback or need assistance with the MCP directory API, please join our Discord server