Yandex 360 (ycli)

السجل الرسمي أخرى

Yandex 360 Tracker, Wiki and Forms: read and write tools with honest read-only annotations.

التثبيت

أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: ‏.cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).

PYPI package yandex-cli
Claude Code
claude mcp add yandex-360-ycli -e 'YANDEX_ID_OAUTH_TOKEN=<your yandex_id_oauth_token>' -e 'YANDEX_ID_ORGANIZATION_ID=<YANDEX_ID_ORGANIZATION_ID>' -- uvx yandex-cli==0.142.0 mcp start
إعداد JSON (Claude Desktop وCursor وVS Code)
{
    "mcpServers": {
        "yandex-360-ycli": {
            "command": "uvx",
            "args": [
                "yandex-cli==0.142.0",
                "mcp",
                "start"
            ],
            "env": {
                "YANDEX_ID_OAUTH_TOKEN": "<your yandex_id_oauth_token>",
                "YANDEX_ID_ORGANIZATION_ID": "<YANDEX_ID_ORGANIZATION_ID>"
            }
        }
    }
}

متغيرات البيئة

  • YANDEX_ID_OAUTH_TOKEN إلزامي سري Yandex OAuth token with Tracker, Wiki and Forms access.
  • YANDEX_ID_ORGANIZATION_ID إلزامي Yandex 360 organization id (sent as X-Org-Id).
OCI package ghcr.io/bim-ba/ycli:0.142.0
Claude Code
claude mcp add yandex-360-ycli -e 'YANDEX_ID_OAUTH_TOKEN=<your yandex_id_oauth_token>' -e 'YANDEX_ID_ORGANIZATION_ID=<YANDEX_ID_ORGANIZATION_ID>' -- docker run -i --rm ghcr.io/bim-ba/ycli:0.142.0
إعداد JSON (Claude Desktop وCursor وVS Code)
{
    "mcpServers": {
        "yandex-360-ycli": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/bim-ba/ycli:0.142.0"
            ],
            "env": {
                "YANDEX_ID_OAUTH_TOKEN": "<your yandex_id_oauth_token>",
                "YANDEX_ID_ORGANIZATION_ID": "<YANDEX_ID_ORGANIZATION_ID>"
            }
        }
    }
}

متغيرات البيئة

  • YANDEX_ID_OAUTH_TOKEN إلزامي سري Yandex OAuth token with Tracker, Wiki and Forms access.
  • YANDEX_ID_ORGANIZATION_ID إلزامي Yandex 360 organization id (sent as X-Org-Id).

التوثيق

مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.

المحتويات
  1. ycli
  2. Install
  3. Use it
  4. Configure
  5. Coverage
  6. Development
  7. License

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 · Русский

  • 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

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

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

Automation & bulk

Entities, users & search

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

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)

Async & uploads

Identity

ResourceOperationsCLIMCP
meget✅✅
Forms

16 resources · 86 operations · 79 MCP tools

Surveys & questions

Responses & export

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

Entries

Data

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

Charts, dashboards, reports & pages

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: modifiedthe 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: modifiedthe 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

الأسئلة الشائعة

ما هو Yandex 360 (ycli)؟

Yandex 360 Tracker, Wiki and Forms: read and write tools with honest read-only annotations.

كيف أثبّت Yandex 360 (ycli)؟

يعمل على جهازك. في Claude Code: claude mcp add yandex-360-ycli -e 'YANDEX_ID_OAUTH_TOKEN=<your yandex_id_oauth_token>' -e 'YANDEX_ID_ORGANIZATION_ID=<YANDEX_ID_ORGANIZATION_ID>' -- uvx yandex-cli==0.142.0 mcp start. وفي العملاء الآخرين، الصق إعداد JSON من هذه الصفحة في إعدادات MCP الخاصة بهم.

هل يحتاج Yandex 360 (ycli) إلى مفتاح API؟

نعم. يتطلب YANDEX_ID_OAUTH_TOKEN, YANDEX_ID_ORGANIZATION_ID، وتضبطها في إعداداته.

هل Yandex 360 (ycli) مفتوح المصدر؟

نعم. شيفرته متاحة على GitHub بترخيص MIT.

من يصون Yandex 360 (ycli)؟

ينشره bim-ba. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.

من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.