Skip to main content

ycli

Yandex 360 for people and for agents.

Tracker, Wiki and Forms from a command line, an MCP server and Python: one tool, and one name for each operation everywhere.

English · Русский

CI Coverage PyPI Python License Docs DeepWiki

ycli in action
  • A command line that scripts well. JSON when piped, ready for jq, --dry-run for every write, an exit code for each kind of failure.
  • An MCP server agents can trust. Every tool says whether it reads, writes or destroys; serve only reads, or a small everyday set.
  • A typed Python SDK. Pydantic models for every answer, and examples the test suite runs.
  • Careful with your data. A delete asks first, and your token goes only to Yandex's own hosts.

Documentation: ycli.savaznatnov.dev.

Install

uv tool install 'yandex-cli[mcp]'   # the ycli command, with the MCP server
uvx yandex-cli --help               # or run it once, without installing
pipx install 'yandex-cli[mcp]'      # or with pipx

The command is ycli (also yandex-cli). Then sign in: ycli auth login (how).

Writing Python? Add the SDK to your project: uv add yandex-cli.

Extra Adds Install
mcp the MCP server, ycli mcp start uv tool install 'yandex-cli[mcp]'
service-account the SDK's ServiceAccountAuth for a Yandex Cloud service-account key uv add 'yandex-cli[service-account]'

Connect your AI client

Every client gets the same MCP server, uvx --from 'yandex-cli[mcp]' ycli mcp start, and the same two variables.

Client Fastest way
Claude Code /plugin marketplace add bim-ba/ycli, then /plugin install yandex-360@ycli
Claude Desktop open the .mcpb bundle from the latest release
Cursor one-click install
VS Code one-click install
Windsurf (Devin Desktop) config file
Zed config file
Codex config file
Gemini CLI config file
opencode config file
Any other MCP client three values to copy

Also: a Docker image, ghcr.io/bim-ba/ycli (as a server or a plain CLI), pipelines, and the official MCP Registry entry io.github.bim-ba/ycli.

Something not working? If it does not work.

Use it

Command line

ycli tracker issues get TRACKER-1                  # a table at a terminal
ycli tracker issues get TRACKER-1 | jq .summary    # JSON when piped
ycli -o yaml wiki pages get onboarding             # or pick: -o json | yaml | pretty
ycli tracker boards delete 7 --dry-run             # print the request a write would send
ycli tracker boards delete 7 --yes                 # a delete asks first; --yes answers
ycli api issues/TRACKER-1 --service tracker        # an endpoint ycli does not wrap

More: Script the CLI, Call an unwrapped endpoint, the CLI reference.

MCP server

ycli mcp start                     # every tool, reads and writes
ycli mcp start --read-only         # reads only
ycli mcp start --toolsets core     # about 40 everyday tools, for a client that caps the count
ycli mcp methods --toolsets core   # list the tool names without starting the server

More: Serve the MCP server, Self-host over HTTP for a team, the tool reference.

Python

from ycli.yandex.tracker.client import TrackerClient

tracker = TrackerClient(oauth_token="…", organization_id="…")
print(tracker.issues.get("TRACKER-1").summary)

More: the SDK reference.

Claude Code plugin

/plugin marketplace add bim-ba/ycli
/plugin install yandex-360@ycli

It adds the MCP server and five skills (yandex-360, yandex-360-tracker, yandex-360-wiki, yandex-360-forms, yandex-360-datalens) that teach an agent the commands and the API's quirks. Source: plugins/yandex-360/.

Configure

ycli auth login     # gets a token through Yandex ID, finds your organization, saves both to .env
ycli auth status    # whose token it is, and whether each service accepts it
ycli doctor         # something not working? every check in order, with the fix

ycli auth login needs a Yandex OAuth app of your own the first time: Authenticate walks you through it. ycli reads two variables, from the environment or a .env file:

YANDEX_ID_OAUTH_TOKEN=...        # a Yandex OAuth token with Tracker, Wiki and Forms access
YANDEX_ID_ORGANIZATION_ID=...    # your Yandex 360 organization id

Timeouts, retries, limits, logging and the exit codes are in the configuration reference.

Coverage

467 operations across 88 resources: Tracker 190, Wiki 58, Forms 85, DataLens 134

ycli wraps 467 operations across 88 resources of the Tracker, Wiki, Forms, and DataLens API. Every one is reachable from the Python SDK and the CLI, and 457 MCP tools serve them to agents (455 per service plus schema_get, status_get).

Legend. ✅ in CLI or MCP means the resource is reachable on that surface; MCP tools carry honest hints (reads are readOnlyHint, writes say whether they are destructive or idempotent), and ycli mcp start --read-only serves only the reads. Resource and operation names link to the official Yandex API reference. An operation has one of three states against what Yandex publishes. Covered (no mark): ycli sends every published parameter and reads every published field. Partial (◐): ycli wraps it and differs somewhere; the mark links to the row that says where and why. Not covered (○): Yandex publishes it and ycli does not wrap it; these are listed under each service. Wiki, Forms and DataLens are measured against their OpenAPI documents; Tracker publishes none, so its state is measured against the reference pages (operations, and query parameters where a page lists them). DataLens is in progress, wrapped section by section: the operations of a section ycli has not begun are pending, not missing. Generated from the code by scripts/gen_coverage.py; do not edit by hand.

Tracker

34 resources · 190 operations · 187 MCP tools

Issues & work items

Resource Operations CLI MCP
issues get · search · count · create · update · move · suggest · scroll_clear · update_bulk · move_bulk · transition_bulk · import_ ✅ ✅
comments list · get · create · update · delete · reactions_create · import_ ✅ ✅
links list · list_filtered · create · delete · import_ ✅ ✅
transitions list · execute ✅ ✅
worklog list · search · list_global · create · update · delete · import_ ✅ ✅
changelog list ✅ ✅
checklists list · create · update · delete · clear ✅ ✅
attachments list · download · thumbnails_download · get · delete · upload · upload_temp · import_ · import_for_comment ✅ ✅
remotelinks list · create · delete ✅ ✅

Agile boards

Resource Operations CLI MCP
boards list · get · create · update · delete ✅ ✅
sprints list · get · create · update · delete · start · archive ✅ ✅
columns list · get · create · update · delete ✅ ✅

Dictionaries

Resource Operations CLI MCP
priorities list · create · update ✅ ✅
statuses list · create · update ✅ ✅
resolutions list · create · update ✅ ✅
issuetypes list · create · update ✅ ✅
linktypes list ✅ ✅

Fields, queues & structure

Resource Operations CLI MCP
fields list · get · create · update · categories_create · categories_update ✅ ✅
localfields list · get · create · update ✅ ✅
components list · create · update · list_for_queue · get · delete · user_permissions_get · group_permissions_get ✅ ✅
queues list · get · tags_list · versions_list · fields_list · create · delete · restore · permissions_update · tags_delete · versions_create · versions_get · versions_update · versions_delete · user_permissions_get · group_permissions_get ✅ ✅
workflows list · get · list_for_queue · create · update · actions_update · delete ✅ ✅
projects list · get · queues_list · create · update · delete ✅ ✅

Automation & bulk

Resource Operations CLI MCP
macros list · get · create · update · delete ✅ ✅
triggers list · get · create · update · webhook_log_list ✅ ✅
autoactions get · create · logs_list · logs_get ✅ ✅
dashboards create · widgets_create_cycle_time ✅ ✅
bulk get · issues_list ✅ ✅

Entities, users & search

Resource Operations CLI MCP
entities create · get · update · delete · search · events_list · permissions_get · permissions_update · permissions_get_direct · permissions_update_direct · update_bulk · bulk_get · reports_create · comments_list · comments_list_relative · comments_get · comments_create · comments_update · comments_delete · checklists_create · checklists_update · checklists_items_update · checklists_delete · checklists_items_delete · checklists_move · links_list · links_create · links_delete · attachments_list · attachments_get · attachments_download · attachments_attach · attachments_delete ✅ ✅
users get · list ✅ ✅
applications list ✅ ✅
filters get · create · update · delete ✅ ✅
gaps create · search · delete ✅ ✅
me get ✅ ✅

Not covered (2)

  • ○ GET /boards: boards list reads the paginated GET /boards/_paginate
  • ○ GET /users: users list reads the paginated GET /users/_relative

Wiki

10 resources · 58 operations · 56 MCP tools

Pages

Resource Operations CLI MCP
pages get_by_id · get · descendants_list · descendants_list_by_id · grids_list · create · update · delete · append · clone · move · revisions_list · backlinks_list · search ✅ ✅
resources list ✅ ✅
recovery recover ✅ ✅

Collaboration

Resource Operations CLI MCP
comments list · thread_list · thread_get · create · delete ✅ ✅
attachments list · get · previews_download · download · download_by_url · delete · attach · upload ✅ ✅
access create · update · delete · clear ✅ ✅

Grids (dynamic tables)

Resource Operations CLI MCP
grids get · create · update · delete · rows_create · rows_delete · rows_move · columns_create · columns_delete · columns_move · cells_update · clone · columns_suggest · columns_update · rows_update ✅ ✅

Async & uploads

Resource Operations CLI MCP
operations clone_get · clone_inline_grid_get · move_get ✅ ✅
uploadsessions create · get · parts_upload · finish · abort · abort_all ✅ ✅

Identity

Resource Operations CLI MCP
me get ✅ ✅

Forms

16 resources · 85 operations · 78 MCP tools

Surveys & questions

Resource Operations CLI MCP
surveys list · get ◐ · create ◐ · update ◐ · delete · publish · unpublish ✅ ✅
questions get · list · create ◐ · update ◐ · delete ◐ · move ✅ ✅
conditions question_list · question_get · question_create · question_update · question_delete · question_update_operator · page_list · page_get · page_create · page_update · page_delete · page_update_operator · submit_list · submit_get · submit_create · submit_update · submit_delete · submit_update_operator · hook_list · hook_get · hook_create · hook_update · hook_delete · hook_update_operator ✅ ✅
access list · update · grant · revoke ✅ ✅
history list ✅ ✅

Responses & export

Resource Operations CLI MCP
answers get · list · export · export_results_get · export_download · integrations_list · delete · restore ✅ ✅
operations get ✅ ✅

Integrations

Resource Operations CLI MCP
hooks list · get · create · update · delete ✅ ✅
subscriptions list · get · create ◐ · update ◐ · delete · attach ✅ ✅
variables list ✅ ✅
notifications list · get · status_get · restart · cancel · errors_list ✅ ✅

Distribution

Resource Operations CLI MCP
keysets list · get · create · update · delete · download ✅ ✅
filling get · submit · suggest ✅ ✅

Media

Resource Operations CLI MCP
files upload · verify · download · delete ✅ ✅
images upload · clone ✅ ✅

Identity

Resource Operations CLI MCP
me get ✅ ✅

DataLens

28 resources · 134 operations · 134 MCP tools

Organization

Resource Operations CLI MCP
tenant details_get ✅ ✅
members list ✅ ✅
licensing licenses_list · licenses_assign · limit_get · limit_set ✅ ✅

Collections & workbooks

Resource Operations CLI MCP
collections get · list_by_ids · content_list · breadcrumbs_list · permissions_get_root · access_bindings_list · create · update · move · move_bulk · delete · delete_bulk · access_bindings_update ✅ ✅
workbooks get · list · list_by_ids · access_bindings_list · entries_list · create · update · move · move_bulk · delete · delete_bulk · access_bindings_update ✅ ✅
workbookexports start · status_get · result_get · cancel ✅ ✅
workbookimports start · status_get ✅ ✅

Entries

Resource Operations CLI MCP
entries list · relations_list · permissions_get · revisions_list · rename ✅ ✅
entrylocks create · extend · delete ✅ ✅
permissions get_bulk ✅ ✅
sharedentries access_bindings_list · access_bindings_update ✅ ✅
audit entries_updates_list · entry_permissions_get ✅ ✅

Data

Resource Operations CLI MCP
connections get · create · update · delete ✅ ✅
datasets get · create · update · delete · validate · data_get ✅ ✅

Charts, dashboards, reports & pages

Resource Operations CLI MCP
charts data_get · wizard_get · wizard_create · wizard_update · wizard_delete · ql_get · ql_create · ql_update · ql_delete · editor_get · editor_create · editor_update · editor_delete ✅ ✅
dashboards get · create · update · delete ✅ ✅
reports get · create · update · delete ✅ ✅
htmlpages get · create · update · delete · preview_url_get ✅ ✅

SQL

Resource Operations CLI MCP
sqlqueries get · create · update · delete · run ✅ ✅

Cloud environments

Resource Operations CLI MCP
cloudenvironments list · get · create · update · delete ✅ ✅
cloudenvironmentstorage bucket_objects_list · bucket_object_metadata_get · bucket_download_url_create · bucket_upload_url_create ✅ ✅
restcatalogs list · create ✅ ✅
lakehouseoperations get ✅ ✅
trinoclusters list · get · create · delete · start · stop · catalog_create · catalog_delete · resource_presets_list · resource_preset_get ✅ ✅
sparkclusters list · get · create · delete · start · stop · resource_presets_list · resource_presets_get ✅ ✅
sparkapplications list · get · create · cancel · log_list ✅ ✅

Embedding

Resource Operations CLI MCP
embeds list · create · update · delete ✅ ✅
embeddingsecrets get · list · create · delete ✅ ✅

Not covered (7)

Every resource and operation above deep-links to the Yandex API reference: 406 of 467 operations resolve to their own endpoint page and 19 to their resource's page. No public API reference exists yet for datalens.cloudenvironments, datalens.cloudenvironments.create, datalens.cloudenvironments.delete, datalens.cloudenvironments.get, datalens.cloudenvironments.list, datalens.cloudenvironments.update, datalens.cloudenvironmentstorage, datalens.cloudenvironmentstorage.bucket_download_url_create, datalens.cloudenvironmentstorage.bucket_object_metadata_get, datalens.cloudenvironmentstorage.bucket_objects_list, datalens.cloudenvironmentstorage.bucket_upload_url_create, datalens.lakehouseoperations, datalens.lakehouseoperations.get, datalens.restcatalogs, datalens.restcatalogs.create, datalens.restcatalogs.list, datalens.sparkapplications, datalens.sparkapplications.cancel, datalens.sparkapplications.create, datalens.sparkapplications.get, datalens.sparkapplications.list, datalens.sparkapplications.log_list, datalens.sparkclusters, datalens.sparkclusters.create, datalens.sparkclusters.delete, datalens.sparkclusters.get, datalens.sparkclusters.list, datalens.sparkclusters.resource_presets_get, datalens.sparkclusters.resource_presets_list, datalens.sparkclusters.start, datalens.sparkclusters.stop, datalens.sqlqueries, datalens.sqlqueries.create, datalens.sqlqueries.delete, datalens.sqlqueries.get, datalens.sqlqueries.run, datalens.sqlqueries.update, datalens.tenant, datalens.tenant.details_get, datalens.trinoclusters, datalens.trinoclusters.catalog_create, datalens.trinoclusters.catalog_delete, datalens.trinoclusters.create, datalens.trinoclusters.delete, datalens.trinoclusters.get, datalens.trinoclusters.list, datalens.trinoclusters.resource_preset_get, datalens.trinoclusters.resource_presets_list, datalens.trinoclusters.start, datalens.trinoclusters.stop, tracker.linktypes, tracker.linktypes.list, shown as plain text. See CONTRIBUTING.md for the intentional exclusions (UI-only endpoints with no public REST API) and per-method notes.

Against the published API

What ycli sends, replayed from its contract tests, compared with what Yandex publishes: the Wiki, Forms and DataLens OpenAPI documents and Tracker's API reference (prose, so only operations and the query parameters a page lists are compared). A request body is compared only where ycli has a typed model for it and the model is closed; the Bodies compared column says how many that is, so an empty list is not read as a match. The published side is the snapshot in scripts/api_snapshot/; a weekly job fetches it again and opens an issue when Yandex has changed it.

Service Published Wrapped Not wrapped Operations that differ Bodies compared Source
Tracker 190 188 0 (+2 on purpose) 0 — API reference
Wiki 56 56 0 0 24 of 24 OpenAPI
Forms 84 84 0 8 26 of 30 OpenAPI
DataLens 141 134 0 (+7 on purpose) 0 131 of 131 OpenAPI
Tracker: what differs

Not wrapped on purpose

Operation Why
GET /boards boards list reads the paginated GET /boards/_paginate
GET /users users list reads the paginated GET /users/_relative

Sent by ycli, not published

ycli Its request
entities.attachments_download GET /attachments/{file_id}/{filename}
linktypes.list GET /linktypes
Wiki: what differs
Forms: what differs

Parameters and fields

Operation ycli Difference Why it stays
POST /surveys surveys.create body fields ycli sends that are not published: is_public, is_published, language
model fields that are not published: modified
the API accepts it and ignores it (checked live on 2026-10-04)
the API returns it (checked live on 2026-10-04), the published schema omits it
GET /surveys/{survey_id} surveys.get model fields that are not published: modified the API returns it (checked live on 2026-10-04), the published schema omits it
PATCH /surveys/{survey_id} surveys.update body fields ycli sends that are not published: is_public, is_published, language
model fields that are not published: modified
the API accepts it and ignores it (checked live on 2026-10-04)
the API returns it (checked live on 2026-10-04), the published schema omits it
POST /surveys/{survey_id}/hooks/{hook_id}/subscriptions subscriptions.create body fields ycli sends that are not published: id one model builds the body and reads the reply, which carries id
PATCH /surveys/{survey_id}/hooks/{hook_id}/subscriptions/{subscription_id} subscriptions.update body fields ycli sends that are not published: id one model builds the body and reads the reply, which carries id
POST /surveys/{survey_id}/questions questions.create body fields ycli sends that are not published: id the API accepts it and ignores it (checked live on 2026-10-04)
DELETE /surveys/{survey_id}/questions/{question_id} questions.delete query parameters ycli sends that are not published: force the API accepts it and ignores it (checked live on 2026-10-04)
PATCH /surveys/{survey_id}/questions/{question_id} questions.update body fields ycli sends that are not published: id the API accepts it and ignores it (checked live on 2026-10-04)
DataLens: what differs

Not wrapped on purpose

Operation Why
POST /rpc/createFolder the old placement model (folders); the organization has none to check it on (#394)
POST /rpc/deleteFolder the old placement model (folders); the organization has none to check it on (#394)
POST /rpc/dlsSuggest the old placement model (folders); the organization has none to check it on (#394)
POST /rpc/getPermissions the old placement model (folders); the organization has none to check it on (#394)
POST /rpc/listDirectory the old placement model (folders); the organization has none to check it on (#394)
POST /rpc/modifyPermissions the old placement model (folders); the organization has none to check it on (#394)
POST /rpc/moveFolderEntry the old placement model (folders); the organization has none to check it on (#394)

Development

uv sync --all-extras   # the tests use every extra
uv run pytest          # 100% coverage gate; HTTP is stubbed, no live network

The layout and the invariants that keep it regular are in ARCHITECTURE.md; CONTRIBUTING.md has the conventions and how to add an endpoint. Contributions are welcome.

License

MIT © 2026 Sava Znatnov

Metadata

Release files for yandex-cli 0.124.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yandex-cli 0.124.0
File Size Uploaded
yandex_cli-0.124.0.tar.gz 658.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yandex-cli 0.124.0
File Interpreter ABI Platform
yandex_cli-0.124.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.6 MB

Release files / yandex_cli-0.124.0.tar.gz

Download URL yandex_cli-0.124.0.tar.gz
Size 658.6 kB
Tags Source
SHA-256 checksum
How to use checksums
ecac1dda7deca82a16b72b34d9941a9900abc64bb3b2897013caef880fe9ad8e
BLAKE2b-256 checksum
How to use checksums
63bd94f657d851c3f2eb74858db2e5311cb6935996f046d22e517c1420e00395
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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}

Release files / yandex_cli-0.124.0-py3-none-any.whl

Download URL yandex_cli-0.124.0-py3-none-any.whl
Size 945.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
76a674d130106792cbef50ac86c49783b9aa64c515a336ff33033317f430083e
BLAKE2b-256 checksum
How to use checksums
7b9cc2c2b781035069f8899b6e1e490daf5635501527bf07f740714135efcb34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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}

Release history Release notifications | RSS feed

This release

0.124.0 This release

2 release files

0.17.1

2 release files

0.16.1

2 release files

0.16.0

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.1

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page