yandex-tracker-mcp-lite
Unofficial MCP server for Yandex Tracker that keeps your agent's context for your work: 9 tools, about 1.2k tokens of tool definitions. The official server costs about 24.8k tokens before you ask anything, the most popular community server about 20.7k.
Лёгкий неофициальный MCP-сервер для Яндекс Трекера: 9 инструментов, около 1,2 тыс. токенов на описания инструментов вместо 24,8 тыс. у официального и 20,7 тыс. у aikts, ответы в 1,4–30 раз короче, всё остальное API доступно через один инструмент
call_api. Настройка одной командой:uvx yandex-tracker-mcp-lite setup.
uvx yandex-tracker-mcp-lite setup
Measured
Same organisation, same questions, measured with bench/measure.py on 2026-11-08 against the official server at mcp.tracker.yandex.net and aikts/yandex-tracker-mcp (commit 51a0c0d, default settings and with TRACKER_ENTITIES_ENABLED). Character counts are exact; tokens are estimated at 3.3 characters per token.
Tool definitions. "Seen by the model" is name + description + input schema, the part a client sends to the model in every session. The full tools/list also carries output schemas and annotations, which clients keep to themselves; for aikts those output schemas are 128k of its 201k characters.
| tools | tools/list chars |
seen by the model, chars | ≈ tokens | |
|---|---|---|---|---|
| official | 71 | 84,684 | 81,761 | 24,776 |
| aikts | 55 | 200,864 | 68,226 | 20,675 |
| aikts + entities | 94 | 468,529 | 144,825 | 43,886 |
| lite | 9 | 4,355 | 4,044 | 1,225 |
Answers to the same questions, characters returned (aikts needs two calls for an issue with comments):
| question | official | aikts | lite |
|---|---|---|---|
| who am I | 107 | 206 | 74 |
| read an issue | 707 | 2,561 | 511 |
| issue + last 5 comments | 1,454 | 4,000 | 691 |
| search a queue (12 issues) | 3,537 | 27,785 | 918 |
| available transitions | 1,022 | 210 | 31 |
Clients that load MCP tools on demand (Claude Code's tool search) pay less of the definitions up front; Codex, Cursor and Claude Desktop pay all of it in every session. The answers are smaller everywhere.
Set up in two minutes
You need: a Tracker organisation you belong to, uv (for uvx), and a browser where you are signed in to Yandex with the account you use in Tracker.
The quick way
Run this in your own terminal (not through an agent's shell: the token would end up in its transcript):
uvx yandex-tracker-mcp-lite setup
It walks you through the steps below, opens the right pages, reads the token with a hidden prompt, detects whether your organisation is Yandex Cloud or Yandex 360, checks access, explains what is wrong if it fails, and adds the server to Claude Code. For other clients it prints ready configs (the token masked unless you pass --show-token).
By hand
1. Create an OAuth app at oauth.yandex.ru/client/new:
- choose «Для доступа к API или отладки» (API access or debugging). "No access to user data" there refers to the Yandex ID profile, not to Tracker;
- name it anything, give a contact email;
- in «Доступ к данным» type «трекер» and add «Чтение из трекера» (
tracker:read) and «Запись в трекер» (tracker:write); - «Создать приложение», copy the ClientID. You don't need the client secret.
2. Issue a token. Open this link with your ClientID, check that the account in the corner is the one you use in Tracker, press «Разрешить» and copy the token (y0_…, valid for a year):
https://oauth.yandex.ru/authorize?response_type=token&client_id=<ClientID>
3. Find the organisation id. Tracker → Администрирование → Организации, field «Идентификатор». The card's title tells you which variable to use:
| card title | variable |
|---|---|
| Yandex Cloud Organization | TRACKER_CLOUD_ORG_ID |
| Яндекс 360 для бизнеса | TRACKER_ORG_ID |
4. Check it works (replace the two values, keep the quotes):
export TRACKER_TOKEN='y0_...'
export TRACKER_CLOUD_ORG_ID='bpf...' # or TRACKER_ORG_ID for Yandex 360
curl -s https://api.tracker.yandex.net/v3/myself \
-H "Authorization: OAuth $TRACKER_TOKEN" \
-H "X-Cloud-Org-ID: $TRACKER_CLOUD_ORG_ID" # X-Org-ID for Yandex 360
You should see your login. If not, see Troubleshooting.
5. Add the server. In the same shell:
Claude Code:
claude mcp add --scope user tracker \
-e TRACKER_TOKEN="$TRACKER_TOKEN" \
-e TRACKER_CLOUD_ORG_ID="$TRACKER_CLOUD_ORG_ID" \
-- uvx yandex-tracker-mcp-lite
Codex (~/.codex/config.toml):
[mcp_servers.tracker]
command = "uvx"
args = ["yandex-tracker-mcp-lite"]
env = { TRACKER_TOKEN = "y0_...", TRACKER_CLOUD_ORG_ID = "bpf..." }
Cursor, Claude Desktop, anything else (mcpServers JSON):
{
"mcpServers": {
"tracker": {
"command": "uvx",
"args": ["yandex-tracker-mcp-lite"],
"env": { "TRACKER_TOKEN": "y0_...", "TRACKER_CLOUD_ORG_ID": "bpf..." }
}
}
}
Restart the client and ask something like «что у меня в работе в трекере?».
Troubleshooting
| you see | it means | fix |
|---|---|---|
tracker:read OAuth scope is required |
the OAuth app has no Tracker access | add both Tracker accesses to the app (step 1), then issue a new token (step 2) |
401 … expired_token / INVALID |
wrong or expired token | copy it again, or issue a new one |
403 Organization is not available, not ready or not found |
wrong org id, wrong header, or the token belongs to another account | re-copy the id; try the other variable; sign in to the right account and repeat step 2 |
OAuth token … issued after '2026-06-01', is not supported for IAM token exchange |
you went the yc CLI route |
yc tokens no longer exchange for IAM tokens; use the OAuth app above |
| everything is read-only in Tracker | the organisation's free period ended | add a billing account in Tracker; reads keep working |
Keep the token secret. It acts as you in Tracker. If it leaks (pasted into a chat, committed), revoke it in Yandex ID → Безопасность and issue a new one.
Variables
| variable | |
|---|---|
TRACKER_TOKEN |
OAuth token. Or TRACKER_IAM_TOKEN (12 h, Yandex Cloud orgs, e.g. from a service account). |
TRACKER_CLOUD_ORG_ID / TRACKER_ORG_ID |
organisation id, see step 3 |
TRACKER_READ_ONLY=1 |
optional: only whoami, search_issues, get_issue and GET-only call_api (≈ 600 tokens) |
Saving the extra process. uvx keeps a small uv process (~26 MB) alongside the server. To avoid it, install once with uv tool install yandex-tracker-mcp-lite and use yandex-tracker-mcp-lite as the command instead of uvx yandex-tracker-mcp-lite. Update with uv tool upgrade yandex-tracker-mcp-lite.
The names match aikts/yandex-tracker-mcp, so switching is a change of command.
Tools
| tool | what it does |
|---|---|
whoami |
login, name, email; a quick check that the token works |
search_issues |
Tracker query language or a preset (mine, created, following). One line per issue: key | status | assignee | updated | summary, with a next-page hint |
get_issue |
all fields in one call; comments=N adds the last N comments, attachments=true downloads images to local files the agent can open, changelog=true adds field history |
add_comment |
markdown comment, optionally summoning people |
transition_issue |
without status: lists the transitions available now; with it: matches an id, a name or the target status |
update_issue |
any fields: {"assignee": "me", "tags": {"add": ["x"]}, "deadline": "2026-12-01"} |
create_issue |
new issue, any extra fields |
link_issues |
relates, depends on, subtask, duplicates, epic |
call_api |
any Tracker API v3 request: boards, sprints, worklogs, checklists, projects, queues |
How it stays small
Following Anthropic's Writing effective tools for agents and the Claude Code MCP docs:
- A few tools for whole workflows, one escape hatch for the rest.
get_issueanswers "what's going on with DEV-123" in one call instead of four. Rare operations go throughcall_api(method, path, body), which costs ~200 tokens and covers the whole API. - Server instructions that say when to look here. With tool search only tool names and server instructions load up front, so the instructions lead with the words people use: Yandex Tracker, Яндекс Трекер, задачи, тикеты, issue keys like DEV-123.
- Help arrives with the error. The query-language cheat sheet is not in any schema. When Tracker rejects a query, the error comes back with it. 401/403/404 errors say what to check next, and a search that has more pages says how to get them.
- Answers are shrunk, not dumped. Reference objects become their display text (
"assignee": "Анна Петрова","parent": "DEV-0 Auth epic"), bookkeeping fields (self,version, uids, counters) and empty values are dropped, timestamps lose their seconds, JSON has no indentation.call_apikeeps ids and keys, because follow-up calls need them. - People by name.
assignee,followersandsummontake a login, an email, a display name orme. If a name matches several people the call fails with the candidates instead of guessing. - Annotations that clients act on. Read tools are
readOnlyHint(Claude Code runs them in parallel),update_issueisidempotentHint(safe to retry after a dropped connection), creating tools are non-destructive. - Schemas without pydantic decoration. No auto-generated
titles, noanyOf: [X, null].
Limitations
- File upload is not supported yet (
call_apisends JSON). - Name resolution loads the organisation's user list once per session (up to 1000 users).
- Not affiliated with Yandex.
Development
uv run pytest # offline tests
TRACKER_TEST_QUEUE=TEST uv run pytest -m live -s # creates, edits, links and closes issues in TEST
uv run python bench/measure.py --issue TEST-1 --queue TEST [--aikts ~/src/yandex-tracker-mcp]
MIT licence.
Metadata
Release files for yandex-tracker-mcp-lite 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| yandex_tracker_mcp_lite-0.1.1.tar.gz | 97.6 kB | Without provenance | Details for yandex_tracker_mcp_lite-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| yandex_tracker_mcp_lite-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for yandex_tracker_mcp_lite-0.1.1-py3-none-any.whl |
Total release size: 116.9 kB
Release files / yandex_tracker_mcp_lite-0.1.1.tar.gz
| Download URL | yandex_tracker_mcp_lite-0.1.1.tar.gz |
|---|---|
| Size | 97.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
504b4bcb48039211a8546685b90396f89633a44d95911db22078b088c4c6b1c0
|
|
BLAKE2b-256 checksum How to use checksums |
5037d44c6ba834f36392df23f3ef2c49c132ad0ab94c44cc9b6cf563acb4212a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"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}
|
Release files / yandex_tracker_mcp_lite-0.1.1-py3-none-any.whl
| Download URL | yandex_tracker_mcp_lite-0.1.1-py3-none-any.whl |
|---|---|
| Size | 19.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
18938078bb6db89afeba4739cfad4d53fd95643ee455cde5e10f2d44d6e84931
|
|
BLAKE2b-256 checksum How to use checksums |
e2368be19f0d519da42339a0b098767a57221cdfd42357638e88e6832bc33896
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"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}
|
Security for yandex-tracker-mcp-lite 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.