Skip to content
Back to skills

Yandex 360

ASecurity

Use first for any Yandex 360 task — Yandex Tracker, Yandex Wiki, Yandex Forms, a Yandex issue key, or the `ycli` command — to set up auth, pick a surface (CLI / MCP / SDK), and route to the right domain skill.

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 3, 2026
ai-agentspythongoshellbashrailsapi

Works with

  • claude code
  • terminal
  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add bim-ba/ycli --skill yandex-360 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Yandex 360?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Yandex 360
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/bim-ba-yandex-360/badge)](https://www.skillsdirectory.com/skills/bim-ba-yandex-360)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: yandex-360
description: >-
  Use first for any Yandex 360 task — Yandex Tracker, Yandex Wiki, Yandex Forms,
  a Yandex issue key, or the `ycli` command — to set up auth, pick a surface
  (CLI / MCP / SDK), and route to the right domain skill.
---
# Yandex 360 (ycli)

`ycli` talks to Yandex 360 services through one codebase exposed three ways. This skill
gets access configured and routes you to the right domain skill.

## When to use

- Before the first Yandex 360 call in a session — to set up auth and pick a surface.
- To decide **which surface** (CLI / MCP / SDK) fits the task.
- To decide **which domain skill** to load next.

## When NOT to use

- Once access is configured and you know the domain — load the domain skill directly
  (`yandex-360-tracker`, `yandex-360-wiki`, `yandex-360-forms`, `yandex-360-datalens`).

## 1. Install

`ycli` is published on PyPI as **`yandex-cli`** (managed with `uv`):

```bash
uv add yandex-cli           # into a project (CLI + SDK)
uv add 'yandex-cli[mcp]'    # …with the MCP server
# or run ad-hoc:
uvx yandex-cli --help
```

## 2. Authenticate (required before any call)

Both variables must be set in the environment:

```bash
export YANDEX_ID_OAUTH_TOKEN=...        # OAuth token — https://oauth.yandex.ru/
export YANDEX_ID_ORGANIZATION_ID=...    # Yandex 360 organization id (admin panel)
```

A missing or empty variable stops the CLI, and fails an MCP tool call, with a message naming
it and pointing at `ycli auth login`. `ycli auth status` (the `status_get` MCP tool) reports
whose token it is (Yandex ID), the organization (its id, and its name when the token has the
`directory:read_organization` scope) and whether each service accepts the token;
`ycli <service> auth status` probes just one. The SDK clients never read the environment: they
take the values as constructor arguments and raise `ValueError` on an empty one.
Every service takes the org id in one canonical header, `X-Org-Id` (HTTP header names are
case-insensitive per RFC 9110, so casing never matters — even in raw HTTP). The clients set
it for you.

## 3. Pick a surface

| Surface | Use when | How |
|---------|----------|-----|
| **CLI** | Interactive / shell / scripting | `uv run ycli <domain> <group> <cmd>` (e.g. `uv run ycli tracker issues get ISSUE_KEY`) |
| **MCP server** | An LLM agent needs Yandex 360 tools | Run `ycli mcp start` (stdio; needs the `[mcp]` extra); read/write tools namespaced `tracker_*`, `wiki_*`, `forms_*`, plus `status_get` and `schema_get` (`ycli mcp methods` lists them). A tool whose body is too large to list shows it as a free-form object and names its schema: read it with `schema_get`, one definition at a time. `ycli mcp start --read-only` serves the reads-only view; `--toolsets core` (about 40 everyday tools) or `--toolsets tracker,wiki` narrows the set when a host caps tools per request (VS Code: 128) |
| **Python SDK** | Programmatic use inside Python | `from ycli.yandex.tracker.client import TrackerClient` → `TrackerClient(oauth_token=…, organization_id=…)` |

An endpoint no command wraps: `ycli api PATH --service tracker|wiki|forms` (`gh api`-style `-f`/`-F` fields, `--paginate` for Tracker and Wiki; CLI only).

Registering the MCP server with a client (e.g. Claude Code `.mcp.json`):

```json
{
  "mcpServers": {
    "yandex": { "command": "uvx", "args": ["--from", "yandex-cli[mcp]", "ycli", "mcp", "start"] }
  }
}
```

> **Reads vs writes on MCP:** the server is **read/write** with honest annotations.
> Reads carry `readOnlyHint=True`; writes carry `readOnlyHint=False` plus an explicit
> `destructiveHint` (`true` on delete/clear/abort-class tools) and `idempotentHint` on
> PATCH-style edits. Treat `destructiveHint=true` tools with care — prefer confirming
> with the user before calling them. For cautious deployments, `ycli mcp start
> --read-only` hides every write tool. Binary **downloads** (attachments, exports,
> keyset files) are CLI/SDK-only — MCP excludes raw-bytes output.

## 4. Route to a domain skill

| Task is about… | Load |
|----------------|------|
| Issues, epics, comments, transitions, links, worklog, changelog | **`yandex-360-tracker`** |
| Wiki pages, full-text search, page tree, page moves, revisions, backlinks, comments, attachments, page access, YFM authoring | **`yandex-360-wiki`** |
| Forms, questions/schema, responses, publishing | **`yandex-360-forms`** |
| DataLens: signing in and the instance (in progress) | **`yandex-360-datalens`** |

Each domain skill documents its CLI commands, MCP tools, SDK client, and the API quirks
that matter for that service.

## 5. Read Yandex API docs as Markdown

When a question goes beyond what the skills cover (an unwrapped endpoint, a field's exact
semantics, a service ycli does not wrap yet), read the official docs directly, as Markdown:

- **Index first:** each docs site publishes an `llms.txt` page index whose links already
  point at Markdown, e.g. `https://yandex.ru/support/tracker/ru/llms.txt`,
  `https://yandex.ru/support/wiki/ru/llms.txt`, `https://yandex.ru/support/forms/ru/llms.txt`,
  `https://yandex.ru/dev/api360/doc/ru/llms.txt`.
- **Any page as Markdown:** append `.md` to a docs page URL, e.g.
  `https://yandex.ru/support/tracker/ru/api-ref/issues/get-issue.md` returns
  `text/markdown` instead of the HTML page.
- **Machine-readable specs** where Yandex publishes them: Wiki
  `https://api.wiki.yandex.net/v1/openapi.json`, Forms
  `https://api.forms.yandex.net/v1/openapi.json`.

## Guardrails

- **Never hardcode the token or org id** — always read them from the environment.
- **Respect the MCP annotations** — write tools declare `readOnlyHint=False`; anything
  with `destructiveHint=true` deletes data, so confirm intent before calling it. If the
  session must not write at all, run the server with `ycli mcp start --read-only`.
- **CLI deletes ask first** — a command that deletes data prompts on a terminal and, without
  one (an agent's shell), exits 2 unless given `--yes`; confirm intent with the user before
  adding it. `--dry-run` prints the write request instead of sending it, the JSON result pipes
  to `jq`, and the exit code says what failed (3 not found, 4 auth, 5 rate limited,
  6 transient).
- **Binary payloads stay on the CLI/SDK** — attachment/export/keyset downloads are not
  MCP tools; fetch them with `ycli … download` commands.
- **One token, three services** — the same OAuth token works for Tracker, Wiki, and Forms
  provided it carries the needed scopes (Forms needs `forms:read` / `forms:write`; MCP
  writes need the write scopes too).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.