Interact with Yandex 360 services (Wiki, Tracker, Forms, …) from a CLI, an MCP server, or a Python SDK.
Project description
ycli
One Yandex 360 toolkit — four ways to use it. Drive Tracker, Wiki, and Forms from a CLI, an MCP server, a Python SDK, or a Claude Code plugin. Built for AI agents first — pleasant for humans too.
Why ycli
- 🧩 One SDK, four surfaces — write logic once, use it as a CLI, an MCP server, a Python library, or a Claude Code plugin.
- 🤖 Agent-native — the MCP server exposes read-only
tracker_*,wiki_*,forms_*tools so agents explore safely; writes stay in the CLI/SDK. - 🛡️ Trustworthy — typed pydantic models, the real Yandex API quirks handled for you, and a test suite kept at 100% coverage.
- ⚡ Zero-friction start —
uv add yandex-cli, two env vars, go.
Install
uv add yandex-cli # CLI + Python SDK
uv add 'yandex-cli[mcp]' # …plus the MCP server (`ycli mcp start`)
Run it without installing, or install it as a standalone tool:
uvx yandex-cli --help # one-off, no install
uv tool install yandex-cli # persistent CLI
uv tool install 'yandex-cli[mcp]' # …with the MCP server
pip install yandex-cli works too. The CLI ships as both yandex-cli and the short ycli.
Quick start
Pick the surface that fits how you work.
CLI
uv add yandex-cli
ycli --help
ycli tracker issues get TRACKER-1
ycli wiki pages get onboarding
Output formats — a global --format / -o picks how results print:
ycli tracker issues get TRACKER-1 # auto: a pretty table on a TTY…
ycli tracker issues get TRACKER-1 | jq . # …and raw JSON when piped (agent/script-safe)
ycli -o yaml wiki pages get onboarding # or: -o json | -o yaml | -o pretty
MCP server (read-only)
Run it over stdio (needs the mcp extra):
ycli mcp start
List the exposed tool names without running the server:
ycli mcp methods
Point an MCP client at it — no prior install needed via uvx (tools are namespaced
tracker_*, wiki_*, forms_*):
{
"mcpServers": {
"yandex": {
"command": "uvx",
"args": ["--from", "yandex-cli[mcp]", "ycli", "mcp", "start"],
"env": {
"YANDEX_ID_OAUTH_TOKEN": "...",
"YANDEX_ID_ORGANIZATION_ID": "..."
}
}
}
}
Python SDK
from ycli.yandex.tracker.client import TrackerClient
tracker = TrackerClient(oauth_token="…", organization_id="…")
issue = tracker.issues.get("TRACKER-1")
print(issue.summary)
Claude Code plugin
/plugin marketplace add bim-ba/ycli
/plugin install yandex-360@ycli
Teaches an agent to drive Yandex 360 through ycli — including the real API quirks.
See plugins/yandex-360/.
Skills (Claude Code plugin)
| Skill | Use for |
|---|---|
yandex-360 |
Entry point — install + auth, pick a surface (CLI/MCP/SDK), route to a domain |
yandex-360-tracker |
Issues, epics, comments, transitions, links, worklog, changelog |
yandex-360-wiki |
Wiki pages, page tree, comments, attachments, YFM authoring |
yandex-360-forms |
Forms, questions/schema, responses, pagination |
The skills encode the read/write commands and the gnarly Yandex API quirks
(epic-vs-parent, transition discovery, permanent wiki slugs, fields= rules, Forms
host/header traps, answers pagination).
What's covered
Reads ship across SDK + CLI + MCP; writes across SDK + CLI only (the MCP server is read-only by design).
Tracker
| Resource | Operations | SDK | CLI | MCP |
|---|---|---|---|---|
| issues | get · full · search · list · count | ✅ | ✅ | ✅ |
| issues | create · update | ✅ | ✅ | — |
| comments | list | ✅ | ✅ | ✅ |
| comments | add | ✅ | ✅ | — |
| links | list | ✅ | ✅ | ✅ |
| links | add | ✅ | ✅ | — |
| transitions | list | ✅ | ✅ | ✅ |
| transitions | execute | ✅ | ✅ | — |
| worklog · changelog · priorities · issuetypes · linktypes | list | ✅ | ✅ | ✅ |
Wiki
| Resource | Operations | SDK | CLI | MCP |
|---|---|---|---|---|
| pages | get · descendants | ✅ | ✅ | ✅ |
| pages | meta (metadata-only) | — | — | ✅ |
| pages | create · update | ✅ | ✅ | — |
| comments | list | ✅ | ✅ | ✅ |
| attachments | list | ✅ | ✅ | ✅ |
Forms (read-only today)
| Resource | Operations | SDK | CLI | MCP |
|---|---|---|---|---|
| me | get (whoami) | ✅ | ✅ | ✅ |
| surveys | list · get | ✅ | ✅ | ✅ |
| questions | list | ✅ | ✅ | ✅ |
| answers | list (drains all pages) | ✅ | ✅ | ✅ |
Mail and more — coming. See
docs/api-coverage.mdfor the full gap analysis and prioritized roadmap.
Configure
cp .env.example .env
YANDEX_ID_OAUTH_TOKEN=... # get one at https://oauth.yandex.ru/
YANDEX_ID_ORGANIZATION_ID=... # from the Yandex 360 admin panel
Header casing differs per service (Tracker X-Org-ID, Wiki/Forms X-Org-Id) — ycli
handles it for you.
Project layout
src/ycli/
├── cli.py # root Typer CLI → `ycli` / `yandex-cli`
├── mcp.py # root FastMCP server → `ycli mcp start` (read-only, `[mcp]` extra)
├── log.py # central loguru config
└── yandex/
├── tracker/ # per-domain SDK …
├── wiki/ # each resource group has:
└── forms/ # client.py · cli.py · mcp.py · models.py
plugins/yandex-360/ # distributable Claude Code plugin (skills + instructions)
docs/references/ # vendored Yandex API reference docs
Development
uv sync --all-extras # --all-extras pulls in the `mcp` extra the tests exercise
uv run pytest # 100% coverage gate; HTTP stubbed with `responses` (no live network)
See CONTRIBUTING.md for conventions. Contributions welcome — the coverage roadmap is a good place to find a first issue.
License
MIT © 2026 Sava Znatnov
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 yandex_cli-0.9.0.tar.gz.
File metadata
- Download URL: yandex_cli-0.9.0.tar.gz
- Upload date:
- Size: 45.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
534be5e751619fba11eb68e0ebe13f69b35ef00e5096b9d9da521b8733afcf86
|
|
| MD5 |
5e815796d39c0b0dc0006afd42ec2e75
|
|
| BLAKE2b-256 |
4517a7e31118a4b7cabf7a58ae220a8cbef841395da8b1ce08d1f423c524be06
|
File details
Details for the file yandex_cli-0.9.0-py3-none-any.whl.
File metadata
- Download URL: yandex_cli-0.9.0-py3-none-any.whl
- Upload date:
- Size: 90.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce86919f31a49a2b98147d3a6a10396a2642e397a769ff654b498681c9f55601
|
|
| MD5 |
f169962ea534c7d73b7996ea7cf49e9b
|
|
| BLAKE2b-256 |
fa4e4c3fcc793de85a25352cdf31929102b110475e35441221c8d023c31c51a5
|