Buyer-scoped MCP server for Keitaro Tracker — analytics-only access (clicks, conversions, reports) filtered by sub_id_3 = buyer_id.
Project description
Keitaro MCP — Buyer Edition
MCP-сервер для доступа к твоей аналитике в Keitaro Tracker из Claude Code и Claude Desktop. Видишь только данные своего трафика (по sub_id_3 = buyer_id), чужие кампании и конфиг трекера недоступны.
Что получишь
Четыре инструмента в Claude:
| Инструмент | Что делает |
|---|---|
keitaro_list_instances |
список подключённых трекеров |
keitaro_build_report |
аналитические отчёты (метрики × дименшины × фильтры) |
keitaro_get_clicks |
сырые клики |
keitaro_get_conversions |
сырые конверсии |
Все запросы автоматически фильтруются по твоему buyer_id. Подмена sub_id_3 блокируется до выхода на wire.
1. Что подготовить (один раз)
1.1 Установить uv
uv — менеджер Python-окружений, нужен для запуска сервера.
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
Проверь: uv --version должно отдать номер версии.
1.2 Получить у админа трекера 4 значения
| Переменная | Что это | Где взять |
|---|---|---|
KEITARO_URL |
URL трекера, без слэша в конце | у админа, пример: https://tracker.example.com |
KEITARO_API_KEY |
твой API-ключ | админ создаёт в Maintenance → Users → твой логин → API keys |
KEITARO_LOGIN |
твой логин в Keitaro в точности как в колонке "Логін" (со всеми пробелами и пайпами) | у админа в Users, пример: TEAM | FB1 | ivanov |
KEITARO_BUYER_ID |
значение, которое летит в sub_id_3 на твоём трафике |
у админа |
1.3 Скачать MCP-сервер
git clone https://github.com/okosenko-commits/kt-mcp-buyercentric.git ~/kt-mcp-buyercentric
cd ~/kt-mcp-buyercentric
uv sync
Папка может быть любой, главное запомни абсолютный путь — он понадобится дальше.
2. Подключение к Claude Code (терминал)
В любой папке выполни:
claude mcp add keitaro -s user \
-e "KEITARO_URL=https://tracker.example.com" \
-e "KEITARO_API_KEY=<твой_ключ>" \
-e "KEITARO_LOGIN=<твой_логин_как_в_keitaro>" \
-e "KEITARO_BUYER_ID=<твой_buyer_id>" \
-- uv --directory ~/kt-mcp-buyercentric run python -m keitaro_mcp
Флаг
-s userсохранит конфиг в~/.claude.json— он будет доступен из любой cwd. Если хочешь поднять только в конкретном проекте — замени на-s projectи запусти команду из корня проекта (запишется в<project>/.mcp.json).
Проверь подключение:
claude mcp get keitaro
Ожидаемый вывод:
Status: ✓ Connected
Перезапусти Claude Code (если был запущен) — новые MCP-сервера подхватываются только при старте сессии. Теперь в чате можно писать естественным языком:
Покажи мои кампании за последнюю неделю с группировкой по странам, сортировка по revenue
Claude сам вызовет нужный инструмент.
3. Подключение к Claude Desktop (приложение)
Открой config-файл:
macOS:
open -e "$HOME/Library/Application Support/Claude/claude_desktop_config.json"
Windows:
notepad %APPDATA%\Claude\claude_desktop_config.json
Linux:
nano ~/.config/Claude/claude_desktop_config.json
Если файл пустой — вставь полностью:
{
"mcpServers": {
"keitaro": {
"command": "uv",
"args": [
"--directory", "/АБСОЛЮТНЫЙ/путь/к/kt-mcp-buyercentric",
"run", "python", "-m", "keitaro_mcp"
],
"env": {
"KEITARO_URL": "https://tracker.example.com",
"KEITARO_API_KEY": "<твой_ключ>",
"KEITARO_LOGIN": "<твой_логин_как_в_keitaro>",
"KEITARO_BUYER_ID": "<твой_buyer_id>"
}
}
}
}
Если уже есть другие MCP-сервера — добавь блок "keitaro": { ... } внутрь существующего mcpServers.
⚠️ Путь должен быть абсолютный.
~в JSON не раскрывается. На macOS обычно/Users/<имя>/kt-mcp-buyercentric.
Сохрани файл и полностью выйди из Claude Desktop (Cmd+Q на macOS / закрыть через трей на Windows). Запусти заново. В чате должны появиться keitaro_* инструменты.
4. Где хранятся твои креденшалы
| Клиент | Файл | Формат |
|---|---|---|
| Claude Code | ~/.claude.json |
plain JSON |
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
plain JSON |
| Claude Desktop (Windows) | %APPDATA%\Claude\claude_desktop_config.json |
plain JSON |
| Claude Desktop (Linux) | ~/.config/Claude/claude_desktop_config.json |
plain JSON |
Ключи лежат в открытом виде на твоём диске. Никаких облаков, шифрования или Keychain. Файлы доступны только твоему системному пользователю (права 600/644). Если делишь компьютер с кем-то — учти.
В памяти процесса MCP api_key хранится только в одном объекте KeitaroClient и никогда не возвращается через keitaro_list_instances — наружу видны name / url / login / buyer_id / description.
5. Что MCP видит и не видит
✅ Видит:
- Клики и конверсии с
sub_id_3равным твоемуbuyer_id - Все стандартные метрики Keitaro:
clicks, conversions, revenue, profit, roi, cr, epc, cpc, cpa, leads, sales, bot_shareи др. - Все дименшины:
campaign, offer, landing, country, device_type, browser, os, day, hour, sub_id_1..30и др.
🚫 Не видит / не может:
- Данные других buyer-ов
- Конфигурацию трекера: список всех кампаний / офферов / лендингов / доменов / трафик-источников
- Создание / редактирование / удаление чего-либо
Если попросишь "покажи все кампании трекера" — Claude вернёт ошибку. Спроси иначе: "покажи мои кампании за неделю" — он сделает отчёт с группировкой по
campaign, и ты увидишь только те, где был твой трафик.
6. Troubleshooting
Status: ✗ Failed to connect
Запусти сервер вручную в терминале и посмотри лог:
KEITARO_URL=https://... \
KEITARO_API_KEY=... \
KEITARO_LOGIN="..." \
KEITARO_BUYER_ID=... \
uv --directory ~/kt-mcp-buyercentric run python -m keitaro_mcp
Чтобы выйти — Ctrl+C.
Что искать в выводе:
| Сообщение | Что значит | Что делать |
|---|---|---|
Missing required env vars: ... |
пропущена переменная | проверь все 4 |
HTTP 401 ... Invalid API key |
ключ битый или истёк | взять у админа новый |
Login '...' not found among Keitaro users |
логин не совпал с тем что в трекере | проверь точное написание (пробелы, пайпы) |
api_key OK | login NOT verified |
это не ошибка — у тебя user-level ключ, MCP не может строго сверить логин, но ключ работает | продолжай работать |
[<name>] login OK: <login> (USER/ADMIN) |
строгая проверка прошла, всё ок | продолжай работать |
"uv: command not found"
uv не в PATH. На macOS добавь в ~/.zshrc:
export PATH="$HOME/.local/bin:$PATH"
И перезапусти терминал.
Claude Code не видит keitaro-тулы
Перезапусти сессию (exit → claude снова, или Ctrl+C если открыт интерактивный режим). MCP-сервера подхватываются только при старте.
"Claude говорит что не может вызвать keitaro_list_campaigns"
By design. В buyer-edition доступны только 4 аналитических инструмента. Все запросы на конфиг трекера и CRUD блокируются. Если нужно «список кампаний» — спроси "кампании по которым у меня шёл трафик" — Claude использует keitaro_build_report с группировкой по campaign.
7. Несколько трекеров (опционально)
Если работаешь с двумя+ трекерами, замени env-vars на путь к JSON-файлу:
claude mcp add keitaro -s user \
-e "KEITARO_CONFIG_FILE=$HOME/keitaro-instances.json" \
-- uv --directory ~/kt-mcp-buyercentric run python -m keitaro_mcp
Файл ~/keitaro-instances.json:
[
{
"name": "main",
"url": "https://main.tracker.com",
"api_key": "...",
"login": "...",
"buyer_id": "...",
"description": "Основной"
},
{
"name": "test",
"url": "https://test.tracker.com",
"api_key": "...",
"login": "...",
"buyer_id": "...",
"description": "Тестовый"
}
]
В чате после этого можно явно указывать: "отчёт из инстанса test за вчера".
8. Обновление
cd ~/kt-mcp-buyercentric
git pull
Перезапусти Claude Code/Desktop — он автоматически подхватит новый код. Переустанавливать ничего не надо.
9. Удаление
Claude Code:
claude mcp remove keitaro -s user
Claude Desktop: удали блок "keitaro": { ... } из claude_desktop_config.json и перезапусти приложение.
Папку ~/kt-mcp-buyercentric можно потом просто стереть.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kt_mcp_bc-0.3.0.tar.gz.
File metadata
- Download URL: kt_mcp_bc-0.3.0.tar.gz
- Upload date:
- Size: 28.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6aa23646750781f1adadedd62baed6eed4fc8b93a8ca4c2d0fd4e503fa2baad
|
|
| MD5 |
c1121e00235fa73e0b6ac4ea2276f339
|
|
| BLAKE2b-256 |
096467ec9ca7746b32533e5600e8f0d00cd8a4cd3c7f9f8547d90085da03cf38
|
File details
Details for the file kt_mcp_bc-0.3.0-py3-none-any.whl.
File metadata
- Download URL: kt_mcp_bc-0.3.0-py3-none-any.whl
- Upload date:
- Size: 22.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf43cf0d7ac7a25edb34f860fd3ac71bd3c3c4e7f41b39b3bc6e3fdf4a24e529
|
|
| MD5 |
06caeca06bc24c560a4c8f6c71b2f553
|
|
| BLAKE2b-256 |
a89a89b53b092fa6b8cc82d1d731bd6c2542db44e95855241273e7c3c4c05c55
|