Skip to main content

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.

CI Coverage PyPI Python License Ask DeepWiki

ycli in action

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 startuv 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.md for 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yandex_cli-0.9.0.tar.gz (45.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yandex_cli-0.9.0-py3-none-any.whl (90.5 kB view details)

Uploaded Python 3

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

Hashes for yandex_cli-0.9.0.tar.gz
Algorithm Hash digest
SHA256 534be5e751619fba11eb68e0ebe13f69b35ef00e5096b9d9da521b8733afcf86
MD5 5e815796d39c0b0dc0006afd42ec2e75
BLAKE2b-256 4517a7e31118a4b7cabf7a58ae220a8cbef841395da8b1ce08d1f423c524be06

See more details on using hashes here.

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

Hashes for yandex_cli-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ce86919f31a49a2b98147d3a6a10396a2642e397a769ff654b498681c9f55601
MD5 f169962ea534c7d73b7996ea7cf49e9b
BLAKE2b-256 fa4e4c3fcc793de85a25352cdf31929102b110475e35441221c8d023c31c51a5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page