mcpField
Y
Yandex 360 (ycli)

Yandex 360 (ycli)

Local
github.comProductivity5Updated 3w ago

About Yandex 360 (ycli)

ycli gives people and agents access to Yandex 360 Tracker, Wiki, Forms, and DataLens through a CLI, Python SDK, and MCP server. The same operations are available across these interfaces, with MCP tools labeled by read, write, and destructive behavior.

Key features

  1. 01Tracker, Wiki, Forms, and DataLens coverage
  2. 02CLI output in JSON, YAML, and other formats
  3. 03Dry runs for write operations
  4. 04Typed Python SDK
  5. 05MCP tools labeled by operation impact

Use cases

  1. 01Query or update Tracker issues from scripts
  2. 02Read and write Wiki pages through an MCP client
  3. 03Give agents read-only access to Yandex 360 data

MCP support

Exposes Yandex 360 operations through an MCP server. It can serve read-only tools or restrict availability to selected toolsets.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"bim-ba-ycli": {
"command": "uvx",
"args": [
"yandex-cli"
],
"env": {
"YANDEX_ID_OAUTH_TOKEN": "<YANDEX_ID_OAUTH_TOKEN>",
"YANDEX_ID_ORGANIZATION_ID": "<YANDEX_ID_ORGANIZATION_ID>"
}
}
}
}
Run commanduvx yandex-cli
Environment variables to set
YANDEX_ID_OAUTH_TOKENSecretYandex OAuth token with Tracker, Wiki and Forms access.
YANDEX_ID_ORGANIZATION_IDYandex 360 organization id (sent as X-Org-Id).

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypiyandex-cli0.142.0
ocighcr.io/bim-ba/ycli:0.142.0

Tools

458

Saved tool list · updated 2w ago

This tool takes no parameters.

Details

From the project README

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.

ExtraAddsInstall
mcpthe MCP server, ycli mcp startuv tool install 'yandex-cli[mcp]'
service-accountthe SDK's ServiceAccountAuth for a Yandex Cloud service-account keyuv 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.

ClientFastest way
Claude Code/plugin marketplace add bim-ba/ycli, then /plugin install yandex-360@ycli
Claude Desktopopen the .mcpb bundle from the latest release
Cursorone-click install
VS Codeone-click install
Windsurf (Devin Desktop)config file
Zedconfig file
Codexconfig file
Gemini CLIconfig file
opencodeconfig file
Any other MCP clientthree 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 | csv | markdown | ndjson | name
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

468 operations across 88 resources: Tracker 190, Wiki 58, Forms 86, DataLens 134

ycli wraps 468 operations across 88 resources of the Tracker, Wiki, Forms, and DataLens API. Every one is reachable from the Python SDK and the CLI, and 458 MCP tools serve them to agents (456 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

ResourceOperationsCLIMCP
issuesget · search · count · create · update · move · suggest · scroll_clear · update_bulk · move_bulk · transition_bulk · import_✅✅
commentslist · get · create · update · delete · reactions_create · import_✅✅
linkslist · list_filtered · create · delete · import_✅✅
transitionslist · execute✅✅
workloglist · search · list_global · create · update · delete · import_✅✅
changeloglist✅✅
checklistslist · create · update · delete · clear✅✅
attachmentslist · download · thumbnails_download · get · delete · upload · upload_temp · import_ · import_for_comment✅✅
remotelinkslist · create · delete✅✅

Agile boards

ResourceOperationsCLIMCP
boardslist · get · create · update · delete✅✅
sprintslist · get · create · update · delete · start · archive✅✅
columnslist · get · create · update · delete✅✅

Dictionaries

ResourceOperationsCLIMCP
prioritieslist · create · update✅✅
statuseslist · create · update✅✅
resolutionslist · create · update✅✅
issuetypeslist · create · update✅✅
linktypeslist✅✅

Fields, queues & structure

ResourceOperationsCLIMCP
fieldslist · get · create · update · categories_create · categories_update✅✅
localfieldslist · get · create · update✅✅
componentslist · create · update · list_for_queue · get · delete · user_permissions_get · group_permissions_get✅✅
queueslist · 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✅✅
workflowslist · get · list_for_queue · create · update · actions_update · delete✅✅
projectslist · get · queues_list · create · update · delete✅✅

Automation & bulk

ResourceOperationsCLIMCP
macroslist · get · create · update · delete✅✅
triggerslist · get · create · update · webhook_log_list✅✅
autoactionsget · create · logs_list · logs_get✅✅
dashboardscreate · widgets_create_cycle_time✅✅
bulkget · issues_list✅✅

Entities, users & search

ResourceOperationsCLIMCP
entitiescreate · 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✅✅
usersget · list✅✅
applicationslist✅✅
filtersget · create · update · delete✅✅
gapscreate · search · delete✅✅
meget✅✅

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

ResourceOperationsCLIMCP
pagesget_by_id · get · descendants_list · descendants_list_by_id · grids_list · create · update · delete · append · clone · move · revisions_list · backlinks_list · search✅✅
resourceslist✅✅
recoveryrecover✅✅

Collaboration

ResourceOperationsCLIMCP
commentslist · thread_list · thread_get · create · delete✅✅
attachmentslist · get · previews_download · download · download_by_url · delete · attach · upload✅✅
accesscreate · update · delete · clear✅✅

Grids (dynamic tables)

ResourceOperationsCLIMCP
gridsget · 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

ResourceOperationsCLIMCP
operationsclone_get · clone_inline_grid_get · move_get✅✅
uploadsessionscreate · get · parts_upload · finish · abort · abort_all✅✅

Identity

ResourceOperationsCLIMCP
meget✅✅
Forms
16 resources · 86 operations · 79 MCP tools

Surveys & questions

ResourceOperationsCLIMCP
surveyslist · get ◐ · create ◐ · update ◐ · delete · publish · unpublish✅✅
questionsget · list · create ◐ · update ◐ · delete ◐ · move✅✅
conditionsquestion_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✅✅
accesslist · update · grant · revoke✅✅
historylist✅✅

Responses & export

ResourceOperationsCLIMCP
answersget · list · columns_list · export · export_results_get · export_download · integrations_list · delete · restore✅✅
operationsget✅✅

Integrations

ResourceOperationsCLIMCP
hookslist · get · create · update · delete✅✅
subscriptionslist · get · create ◐ · update ◐ · delete · attach✅✅
variableslist✅✅
notificationslist · get · status_get · restart · cancel · errors_list✅✅

Distribution

ResourceOperationsCLIMCP
keysetslist · get · create · update · delete · download✅✅
fillingget · submit · suggest✅✅

Media

ResourceOperationsCLIMCP
filesupload · verify · download · delete✅✅
imagesupload · clone✅✅

Identity

ResourceOperationsCLIMCP
meget✅✅
DataLens
28 resources · 134 operations · 134 MCP tools

Organization

ResourceOperationsCLIMCP
tenantdetails_get✅✅
memberslist✅✅
licensinglicenses_list · licenses_assign · limit_get · limit_set✅✅

Collections & workbooks

ResourceOperationsCLIMCP
collectionsget · list_by_ids · content_list · breadcrumbs_list · permissions_get_root · access_bindings_list · create · update · move · move_bulk · delete · delete_bulk · access_bindings_update✅✅
workbooksget · list · list_by_ids · access_bindings_list · entries_list · create · update · move · move_bulk · delete · delete_bulk · access_bindings_update✅✅
workbookexportsstart · status_get · result_get · cancel✅✅
workbookimportsstart · status_get✅✅

Entries

ResourceOperationsCLIMCP
entrieslist · relations_list · permissions_get · revisions_list · rename✅✅
entrylockscreate · extend · delete✅✅
permissionsget_bulk✅✅
sharedentriesaccess_bindings_list · access_bindings_update✅✅
auditentries_updates_list · entry_permissions_get✅✅

Data

ResourceOperationsCLIMCP
connectionsget · create · update · delete✅✅
datasetsget · create · update · delete · validate · data_get✅✅

Charts, dashboards, reports & pages

ResourceOperationsCLIMCP
chartsdata_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✅✅
dashboardsget · create · update · delete✅✅
reportsget · create · update · delete✅✅
htmlpagesget · create · update · delete · preview_url_get✅✅

SQL

ResourceOperationsCLIMCP
sqlqueriesget · create · update · delete · run✅✅

Cloud environments

ResourceOperationsCLIMCP
cloudenvironmentslist · get · create · update · delete✅✅
cloudenvironmentstoragebucket_objects_list · bucket_object_metadata_get · bucket_download_url_create · bucket_upload_url_create✅✅
restcatalogslist · create✅✅
lakehouseoperationsget✅✅
trinoclusterslist · get · create · delete · start · stop · catalog_create · catalog_delete · resource_presets_list · resource_preset_get✅✅
sparkclusterslist · get · create · delete · start · stop · resource_presets_list · resource_presets_get✅✅
sparkapplicationslist · get · create · cancel · log_list✅✅

Embedding

ResourceOperationsCLIMCP
embedslist · create · update · delete✅✅
embeddingsecretsget · list · create · delete✅✅

Not covered (9)

  • ○ POST /rpc/checkFavorites: new section published 2026-10, wrapping not decided
  • ○ 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/listFavorites: new section published 2026-10, wrapping not decided
  • ○ 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)

Every resource and operation above deep-links to the Yandex API reference: 406 of 468 operations resolve to their own endpoint page and 20 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.

ServicePublishedWrappedNot wrappedOperations that differBodies comparedSource
Tracker1901880 (+2 on purpose)0—API reference
Wiki56560024 of 24OpenAPI
Forms84840826 of 30OpenAPI
DataLens1431340 (+9 on purpose)0131 of 131OpenAPI
Tracker: what differs

Not wrapped on purpose

OperationWhy
GET /boardsboards list reads the paginated GET /boards/_paginate
GET /usersusers list reads the paginated GET /users/_relative

Sent by ycli, not published

ycliIts request
entities.attachments_downloadGET /attachments/{file_id}/{filename}
linktypes.listGET /linktypes
Wiki: what differs
Forms: what differs

Parameters and fields

OperationycliDifferenceWhy it stays
POST /surveyssurveys.createbody 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.getmodel fields that are not published: modifiedthe API returns it (checked live on 2026-10-04), the published schema omits it
PATCH /surveys/{survey_id}surveys.updatebody 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}/subscriptionssubscriptions.createbody fields ycli sends that are not published: idone model builds the body and reads the reply, which carries id
PATCH /surveys/{survey_id}/hooks/{hook_id}/subscriptions/{subscription_id}subscriptions.updatebody fields ycli sends that are not published: idone model builds the body and reads the reply, which carries id
POST /surveys/{survey_id}/questionsquestions.createbody fields ycli sends that are not published: idthe API accepts it and ignores it (checked live on 2026-10-04)
DELETE /surveys/{survey_id}/questions/{question_id}questions.deletequery parameters ycli sends that are not published: forcethe API accepts it and ignores it (checked live on 2026-10-04)
PATCH /surveys/{survey_id}/questions/{question_id}questions.updatebody fields ycli sends that are not published: idthe API accepts it and ignores it (checked live on 2026-10-04)
DataLens: what differs

Not wrapped on purpose

OperationWhy
POST /rpc/checkFavoritesnew section published 2026-10, wrapping not decided
POST /rpc/createFolderthe old placement model (folders); the organization has none to check it on (#394)
POST /rpc/deleteFolderthe old placement model (folders); the organization has none to check it on (#394)
POST /rpc/dlsSuggestthe old placement model (folders); the organization has none to check it on (#394)
POST /rpc/getPermissionsthe old placement model (folders); the organization has none to check it on (#394)
POST /rpc/listDirectorythe old placement model (folders); the organization has none to check it on (#394)
POST /rpc/listFavoritesnew section published 2026-10, wrapping not decided
POST /rpc/modifyPermissionsthe old placement model (folders); the organization has none to check it on (#394)
POST /rpc/moveFolderEntrythe 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

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.