Yandex Tracker Mcp Server について
Yandex Tracker MCP Server は、認証を用いて Yandex Tracker の課題、キュー、ユーザーなどのデータに AI アシスタントからアクセスし、管理できる MCP サーバーです。応答時間を改善するため、Redis キャッシュを任意で利用できます。
主な機能
- 01キュー、課題、コメント、作業ログの管理
- 02ステータス遷移の実行と課題のクローズ
- 03Yandex Tracker クエリ言語による検索
- 04任意の Redis キャッシュ層
- 05stdio および HTTP トランスポートと OAuth 2.0 認証への対応
活用シーン
- 01AI アシスタントによる Tracker 課題の作成や更新
- 02AI クライアントからのキューと課題ステータスの照会
- 03キューへのアクセス範囲の制限による権限管理
MCP 対応
本プロジェクトは MCP サーバーとして、Yandex Tracker のキュー、課題、コンポーネントの操作を MCP クライアントにツールとして公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e TRACKER_TOKEN -e TRACKER_CLOUD_ORG_ID -e TRACKER_ORG_ID ghcr.io/aikts/yandex-tracker-mcp:latestTRACKER_TOKENシークレットTRACKER_CLOUD_ORG_IDTRACKER_ORG_IDローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/aikts/yandex-tracker-mcp:lateststdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Yandex Tracker MCP サーバー
mcp-name: io.github.aikts/yandex-tracker-mcp
AI アシスタントが Yandex Tracker API と連携できる、包括的な Model Context Protocol(MCP)サーバーです。このサーバーは、Yandex Tracker の課題、キュー、コメント、作業ログ、検索機能への安全な認証済みアクセスを提供し、パフォーマンス向上のための Redis キャッシュもオプションで利用できます。
ロシア語のドキュメントはこちらでご覧いただけます / Документация на русском языке доступна здесь.
機能
- キュー管理の完全サポート:ページネーション、タグの取得、詳細なメタデータに対応し、利用可能なすべての Yandex Tracker キューを一覧表示してアクセスできます
- プロジェクト、ポートフォリオ、目標:Tracker の「entities」API における各エンティティタイプ専用の読み取り・書き込みツールを、明示的なスキーマとともに提供します(
TRACKER_ENTITIES_ENABLEDでオプトイン) - ユーザー管理:ログイン情報、メールアドレス、ライセンスの状態、組織データなど、ユーザーアカウント情報を取得できます
- 課題の全ライフサイクル:カスタムフィールド、添付ファイル、ワークフロー遷移に対応し、課題の作成、読み取り、更新、管理ができます
- ステータスワークフロー管理:ステータス遷移を実行し、解決内容を指定して課題をクローズし、複雑なワークフローを操作できます
- フィールド管理:グローバルフィールド、キュー固有のローカルフィールド、ステータス、課題タイプ、優先度、解決内容にアクセスできます
- ボードとスプリント:アジャイルボードとそのスプリントを一覧表示し、課題計画に必要なスプリント ID を確認できます
- 高度なクエリ言語:複雑なフィルタリング、ソート、日付関数に対応した、Yandex Tracker Query Language の完全なサポート
- パフォーマンスキャッシュ:レスポンス時間を短縮するための Redis キャッシュレイヤーをオプションで利用できます
- セキュリティ制御:キューへのアクセス制限を設定でき、トークンを安全に扱えます
- 複数のトランスポートオプション:柔軟な統合に対応するため、stdio、SSE(非推奨)、HTTP トランスポートをサポートします
- OAuth 2.0 認証:静的 API トークンに代わる選択肢として、自動更新に対応した動的なトークンベース認証を利用できます
- 組織のサポート:標準の組織 ID とクラウド組織 ID の両方に対応します
組織 ID の設定
Yandex の組織タイプに応じて、以下のいずれかを選択してください。
- Yandex Cloud 組織:Yandex Cloud が管理する組織では、後で
TRACKER_CLOUD_ORG_ID環境変数を使用します - Yandex 360 組織:Yandex 360 組織では、後で
TRACKER_ORG_ID環境変数を使用します
組織 ID は、Yandex Tracker の URL または組織の設定で確認できます。
MCP クライアントの設定
Claude Desktop への拡張機能のインストール
Yandex Tracker MCP Server は、拡張機能として Claude Desktop にワンクリックでインストールできます。
インストール
- GitHub Releasesから
*.mcpbファイルをダウンロードします。 - ダウンロードしたファイルをダブルクリックして、Claude Desktop にインストールします。

- 求められたら、Yandex Tracker の OAuth トークンを入力します。

- 拡張機能が有効になっていることを確認してください。これで、この MCP サーバーを使用できます。
手動インストール
前提条件
- uv がグローバルにインストールされていること
- 適切な権限を持つ有効な Yandex Tracker API トークン
以下のセクションでは、さまざまな AI クライアント向けに MCP サーバーを設定する方法を説明します。uvx yandex-tracker-mcp@latest または Docker イメージ ghcr.io/aikts/yandex-tracker-mcp:latest のどちらかを使用できます。どちらも次の環境変数が必要です。
- 認証(以下のいずれか):
TRACKER_TOKEN- Yandex Tracker の OAuth トークンTRACKER_IAM_TOKEN- IAM トークンTRACKER_SA_KEY_ID、TRACKER_SA_SERVICE_ACCOUNT_ID、TRACKER_SA_PRIVATE_KEY- サービスアカウントの認証情報
- 組織 - 以下のいずれか1つ:
TRACKER_CLOUD_ORG_ID- Yandex Cloud の組織 IDTRACKER_ORG_ID- Yandex 360 の組織 ID
2つのうちいずれか1つを設定してください。両方を設定すると、すべての Tracker 呼び出しが失敗し、
Only one of org_id or cloud_org_id should be provided.と表示されます。以下の例ではTRACKER_CLOUD_ORG_IDを使用しています。Yandex 360 を使用する場合は、このキーをTRACKER_ORG_IDに置き換えてください。
Claude Desktop
設定ファイルのパス:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
uvx を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
Docker を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
Claude Code
uvx を使用する場合:
claude mcp add yandex-tracker uvx yandex-tracker-mcp@latest \
-e TRACKER_TOKEN=your_tracker_token_here \
-e TRACKER_CLOUD_ORG_ID=your_cloud_org_id_here \
-e TRANSPORT=stdio
Docker を使用する場合:
claude mcp add yandex-tracker docker "run --rm -i -e TRACKER_TOKEN=your_tracker_token_here -e TRACKER_CLOUD_ORG_ID=your_cloud_org_id_here -e TRANSPORT=stdio ghcr.io/aikts/yandex-tracker-mcp:latest"
Cursor
設定ファイルのパス:
- プロジェクト固有:プロジェクトディレクトリ内の
.cursor/mcp.json - グローバル:
~/.cursor/mcp.json
uvx を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
Docker を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
Windsurf
設定ファイルのパス:
~/.codeium/windsurf/mcp_config.json
アクセス方法:Windsurf Settings → Cascade タブ → Model Context Protocol (MCP) Servers →「View raw config」
uvx を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
Docker を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
Zed
設定ファイルのパス:
~/.config/zed/settings.json
アクセス方法:Cmd+,(macOS)または Ctrl+,(Linux/Windows)、またはコマンドパレットから「zed: open settings」
注: MCP をサポートするには、Zed Preview バージョンが必要です。
uvx を使用する場合:
{
"context_servers": {
"yandex-tracker": {
"source": "custom",
"command": {
"path": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
}
Docker を使用する場合:
{
"context_servers": {
"yandex-tracker": {
"source": "custom",
"command": {
"path": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
}
GitHub Copilot (VS Code)
設定ファイルのパス:
- ワークスペース:プロジェクトディレクトリ内の
.vscode/mcp.json - グローバル:VS Code の
settings.json
オプション1:ワークスペース設定(セキュリティ上の推奨事項)
.vscode/mcp.json を作成します:
uvx を使用する場合:
{
"inputs": [
{
"type": "promptString",
"id": "tracker-token",
"description": "Yandex Tracker Token",
"password": true
},
{
"type": "promptString",
"id": "cloud-org-id",
"description": "Yandex Cloud Organization ID"
}
],
"servers": {
"yandex-tracker": {
"type": "stdio",
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "${input:tracker-token}",
"TRACKER_CLOUD_ORG_ID": "${input:cloud-org-id}",
"TRANSPORT": "stdio"
}
}
}
}
Docker を使用する場合:
{
"inputs": [
{
"type": "promptString",
"id": "tracker-token",
"description": "Yandex Tracker Token",
"password": true
},
{
"type": "promptString",
"id": "cloud-org-id",
"description": "Yandex Cloud Organization ID"
}
],
"servers": {
"yandex-tracker": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "${input:tracker-token}",
"TRACKER_CLOUD_ORG_ID": "${input:cloud-org-id}",
"TRANSPORT": "stdio"
}
}
}
}
オプション2:グローバル設定
VS Code の settings.json に追加します:
uvx を使用する場合:
{
"github.copilot.chat.mcp.servers": {
"yandex-tracker": {
"type": "stdio",
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
Docker を使用する場合:
{
"github.copilot.chat.mcp.servers": {
"yandex-tracker": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
その他の MCP 対応クライアント
その他の MCP 対応クライアントでは、標準の MCP サーバー設定形式を使用してください:
uvx を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
Docker を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
重要な注意事項:
- プレースホルダーの値を実際の認証情報に置き換えてください
- 設定を変更した後は、AI クライアントを再起動してください
uvxがインストールされ、システムの PATH から利用できることを確認してください- 本番環境で使用する場合は、トークンをハードコードするのではなく、環境変数を使用することを検討してください
利用可能な MCP ツール
このサーバーは、MCP プロトコルを通じて次のツールを公開します:
キュー管理
| ツール | 機能 | 主な引数 | | --- | --- | --- | | `queues_get_all` | トークンから参照できるすべてのキューを返します。戻り値は `{values, hits, pages}` です | `fields`、`page`(省略するとすべてのページを取得)、`per_page` | | `queue_get_tags` | キューに定義されているタグ | `queue_id`(`"SOMEPROJECT"` のようなキー) | | `queue_get_versions` | 日付とステータスを含むキューのバージョン | `queue_id` | | `queue_get_components` | リード、割り当て自動化フラグ、`version` を含む完全なオブジェクトとしてのキューのコンポーネント。`expand: ["components"]` を指定した `queue_get_metadata` では ID と名前のみが返されます | `queue_id` | | `queue_create_version` | キューにバージョンを作成します | `queue_id`、`name`、`description`、`start_date`、`due_date`(`YYYY-MM-DD`) | | `queue_get_fields` | キューに設定されたフィールド。ローカルフィールドも含まれます。`schema.required` は必須フィールドを示します | `queue_id`、`include_local_fields` | | `queue_get_metadata` | 名前、説明、デフォルトの種別と優先度、および `expand` で指定した内容 | `queue_id`、`expand`(`all`、`projects`、`components`、`versions`、`types`、`team`、`workflows`、`fields`、`issueTypesConfig`) |issue_createの前にqueue_get_fieldsを読み込んでください。ただし、これだけですべてのフィールドがわかるわけではありません。parentやestimationなどのシステムフィールドは、ここに表示されなくても設定できます。また、get_global_fieldsには組織のすべてのフィールドが一覧表示されます。expand: ["issueTypesConfig"]を指定したqueue_get_metadataから、各課題タイプで有効な解決方法を確認できます。issue_closeでは、そのうちのひとつが必要です。- これらのツールはすべて
TRACKER_LIMIT_QUEUESの制限を受けます。queues_get_allのhits/pagesが報告されるのは、許可リストが設定されていないサーバーで、ページを明示的にひとつ指定した場合のみです。合計数には、許可リストによって後から除外されるキューも含まれるためです。
コンポーネント
コンポーネントは、キューの課題を製品、プロセス、担当者ごとにグループ化するラベルです。数値の ID を issue_create/issue_update の components に指定します。
| ツール | 機能 | 主な引数 |
|---|---|---|
component_get | queue、lead、assignAuto、version を含む単一のコンポーネント | component_id(queue_get_components または課題の components から取得) |
component_create | キューにコンポーネントを作成します | queue_id、name、description、lead(ログイン名または UID)、assign_auto |
component_update | 名前、説明、リード、自動割り当てフラグを変更します。省略したフィールドは現在の値を維持し、clear_lead を指定するとリードを削除します | component_id、name、description、lead、assign_auto、clear_lead、version |
component_delete | コンポーネントを削除します | component_id |
TRACKER_LIMIT_QUEUESとTRACKER_READ_ONLY_QUEUESは、コンポーネントが属するキューを通じて適用されます。component_updateとcomponent_deleteは、コンポーネントを特定するためにまず読み込みます。また、TRACKER_LIMIT_QUEUESの対象外のキューにあるコンポーネントは、見つからないものとして報告されます。
プロジェクト、ポートフォリオ、目標
プロジェクト、ポートフォリオ、目標は、それぞれ別個の Yandex Tracker エンティティ(キューとは異なります)であり、Tracker の「entities」API を通じて公開されています。カスタム(組織定義)属性はモデル化されておらず、返されません。
これらのツールはオプトイン方式です。 ツールのマニフェストが大きくなり、キューの制限も適用されないため、
TRACKER_ENTITIES_ENABLED=true(デフォルトはfalse)の場合にのみ登録されます。詳しくはキューのアクセス制御をご覧ください。
3 種類のエンティティは同じツールセットを共有するため、一覧は一度だけ掲載しています。各行にツールの機能を、各列に呼び出す名前を示します。
| 機能 | プロジェクト | ポートフォリオ | 目標 |
|---|---|---|---|
| ID または shortId でエンティティを 1 件取得 | project_get | portfolio_get | goal_get |
名前の部分一致やフィールドフィルターで検索し、{values, hits, pages} を返します | project_find | portfolio_find | goal_find |
コメントの 1 ページ分を取得し、{comments, next_cursor} を返します | project_get_comments | portfolio_get_comments | goal_get_comments |
| エンティティを作成して返します | project_create | portfolio_create | goal_create |
| 作成時に指定できる任意のフィールドを変更します | project_update | portfolio_update | goal_update |
エンティティを削除します。with_board を指定するとボードも削除します。目標にはボードがありません | project_delete | portfolio_delete | goal_delete |
| コメントを追加します | project_add_comment | portfolio_add_comment | goal_add_comment |
| コメントを編集します | project_update_comment | portfolio_update_comment | goal_update_comment |
| コメントを削除します | project_delete_comment | portfolio_delete_comment | goal_delete_comment |
| チェックリスト項目を 1 件追加します | project_add_checklist_item | portfolio_add_checklist_item | - |
| 指定を省略したフィールドはそのままにして、チェックリスト項目を 1 件編集します | project_update_checklist_item | portfolio_update_checklist_item | - |
| チェックリスト項目を別の項目の前に移動します | project_move_checklist_item | portfolio_move_checklist_item | - |
| チェックリスト項目を 1 件削除します | project_delete_checklist_item | portfolio_delete_checklist_item | - |
| ID で既存の項目を複数編集します | project_update_checklist | portfolio_update_checklist | - |
| チェックリスト全体を削除します | project_delete_checklist | portfolio_delete_checklist | - |
- 引数。 読み取りでは
entity_idとfieldsを指定します。*_findツールではinput、filter、order_by、order_asc、root_only、page、per_pageを指定します。作成と更新ではsummary(作成時は必須)、description、lead、team_users、clients、followers、start(目標にはありません)、end、tags、entity_status、parent_entity、team_access、linksを指定します。更新ではさらにcommentとversion(楽観的ロック)も指定できます。すべてのツールで同じfieldsセレクターを使用でき、エンティティが返されます。 linksは追加のみで、置き換えはできません。 API はリンクを返さないため、このサーバー経由では既存のリンクを読み戻したり削除したりできません。また、リンクのみの更新は、Tracker が黙って無視したものを成功として報告するのではなく、拒否されます。- デフォルトのフィールドセットに含まれない項目:
checklistItems(チェックリスト関連のツールはエンティティ全体を返すため、結果を確認するにはこれを指定してください)、metricItems、および目標のkeyResultItems。後者 2 つは読み取り専用です。目標には独自のentityStatus値(draft、according_to_plan、at_risk、blocked、achieved、partially_achieved、not_achieved、exceeded、cancelled)があります。一括変更はサポートされていません。
ユーザー管理
| ツール | 機能 | 主な引数 |
|---|---|---|
users_get_all | 組織のユーザーの 1 ページ分を取得し、{values, hits, pages} を返します | page、per_page、fields |
user_get | ログイン名または uid でユーザーを 1 人取得します | user_id("john.doe" または "12345") |
user_get_current | 現在のトークンに属するユーザーを取得します | - |
users_search | ログイン名、メールアドレス、または実名でユーザーを検索します | login_or_email_or_name |
users_searchは最初にログイン名とメールアドレスを完全一致で検索し、一致しない場合は名前をあいまい検索します(一致度 80%、上位 3 件まで)。users_get_allでは、pageがpagesと等しい場合、最後のページが返されます。
フィールド管理
| ツール | 機能 | 主な引数 |
|---|---|---|
get_global_fields | スキーマと型を含む、組織のすべてのグローバルフィールドを取得します | - |
キュー固有のフィールドはここには含まれません。queue_get_fields では、グローバルフィールドとともに取得できます。
ステータスとタイプの管理
| ツール | 機能 | 主な引数 | | --- | --- | --- | | `get_statuses` | 組織で定義されているすべての課題ステータス | - | | `get_issue_types` | すべての課題タイプ。`issue_create` / `issue_update` の `type` 引数に使用します | - | | `get_priorities` | すべての優先度と、`id`、`key`、`name`、`order` | - | | `get_resolutions` | すべての解決状況。`issue_close` の `resolution_id` に使用します | - |これら4つは組織全体で共通です。キューで受け付けられる値は一覧の一部に限られる場合があり、受け付けられない値を指定すると Tracker は 422 を返します。各課題タイプで使用できる解決状況は、expand: ["issueTypesConfig"] を指定した queue_get_metadata で確認できます。
テンプレート
| ツール | 機能 | 主な引数 |
|---|---|---|
issue_templates_get_all | 課題テンプレートと、事前入力される fieldTemplates の値を取得します。{values, hits, pages} を返します | queue、page(省略するとすべてのページを順に取得)、per_page |
issue_template_get | IDで課題テンプレートを1つ取得します | template_id |
comment_templates_get_all | コメントテンプレートと、template テキストおよび summonees / maillistSummonees を取得します | queue、page、per_page |
comment_template_get | IDでコメントテンプレートを1つ取得します | template_id |
- テンプレートは読み取り専用の補助機能です。 APIではテンプレートから課題やコメントを作成できないため、
issue_createとissue_add_commentはtemplate_idを受け取りません。テンプレートを読み取り、その値を書き込みツール自身の引数として渡してください。{{today}}などのマクロはそのまま返されます。 - テンプレートによって事前入力される課題本文は
fieldTemplates.descriptionにあります。テンプレート自体のdescriptionはテンプレートについて説明するものです。 queueを指定すると、そのキューのテンプレートに加えて、どのキューにも紐付いていないテンプレートも返されます。後者はどこでも使用できます。TRACKER_LIMIT_QUEUESが適用されます。制限されたキューのテンプレートは一覧から除外され、直接アクセスも拒否されます。一方、キューに紐付いていないテンプレートは引き続き表示されます。
ボードとスプリント
| ツール | 機能 | 主な引数 |
|---|---|---|
boards_get_all | 組織のアジャイルボードを取得します。{boards, next_cursor} を返します | queue、fields、cursor(前回の next_cursor)、per_page |
board_get | autoFilterSettings(収集対象)、estimateBy、useRanking、作業用の calendar を含むボードを1つ取得します | board_id、fields |
board_get_columns | 各列に振り分けられる課題ステータスとともに、ボードの列を取得します | board_id |
board_get_sprints | ステータス(draft、in_progress、released、archived)と予定日/実績日を含む、ボードのスプリントを取得します | board_id、fields |
- ボードには独自のキューがないため、
queueはボード自体のフィルターに照らして判定されます。そのため、別の条件でフィルターするボード(たとえば担当者で絞り込む個人用ボード)は見つかりません。そうしたボードを見つけるには、issues_findでそのキューの課題をいくつか取得し、boardsフィールドを確認してください。 - ボードはキューではなく組織に属するため、
TRACKER_LIMIT_QUEUESによる絞り込みは適用されません。確認されるのはboards_get_allのqueue引数のみで、これらのツールの返す情報に制限されたキューが含まれる場合があります。 - スクラム以外のボードにはスプリントがなく、
board_get_sprintsを実行すると拒否されます。返されるスプリントのidは、issue_create/issue_updateで指定する値です。
課題操作
| ツール | 機能 | 主な引数 | | --- | --- | --- | | `issue_get` | キーを指定して課題を1件取得します。現在の `version` を含む全レコードを返します | `issue_id`、`include_description` | | `issue_get_url` | 課題のウェブ URL を取得します | `issue_id` | | `issue_get_comments` | コメントを古い順に1ページ取得します。`{comments, next_cursor}` を返します | `issue_id`、`cursor`、`per_page`、`fields` | | `issue_add_comment` | コメントを追加します。ユーザーへの通知には `summonees` を使います。テキスト内の `@login` では誰にも通知されません | `issue_id`、`text`、`summonees`、`maillist_summonees`、`markup_type`、`is_add_to_followers` | | `issue_update_comment` | コメントを編集します | `issue_id`、`comment_id`、`text`、`summonees`、`maillist_summonees` | | `issue_delete_comment` | コメントを削除します | `issue_id`、`comment_id` | | `issue_get_links` | 関連課題、ブロックしている課題、重複する課題へのリンクを取得します | `issue_id` | | `issue_add_link` | 2つの課題をリンクします | `issue_id`、`relationship`、`issue` | | `issue_delete_link` | リンクを削除します | `issue_id`、`link_id`(`issue_get_links` から取得) | | `issue_get_worklogs` | 1件以上の課題に記録された作業時間を取得します | `issue_ids`、`fields` | | `issue_add_worklog` | 作業時間を記録します | `issue_id`、`duration`(ISO-8601、`PT1H30M`)、`comment`、`start` | | `issue_update_worklog` | 作業時間の記録を編集します | `issue_id`、`worklog_id`、`duration`、`comment`、`start` | | `issue_delete_worklog` | 作業時間の記録を削除します | `issue_id`、`worklog_id` | | `issue_get_attachments` | 添付ファイルのメタデータを取得します | `issue_id`、`fields` | | `issue_get_checklist` | チェックリストと、書き込みツールで必要な項目 ID を取得します | `issue_id` | | `issue_add_checklist_items` | 項目を順番に追加します。チェックリストがない場合は作成します | `issue_id`、`items`(`text`、`checked`、`assignee`、`deadline`) | | `issue_update_checklist_item` | 1つの項目を変更します。省略したフィールドの値は維持されます | `issue_id`、`checklist_item_id`、`text`、`checked`、`assignee`、`deadline`、`clear_assignee`、`clear_deadline` | | `issue_delete_checklist_item` | 1つの項目を削除します | `issue_id`、`checklist_item_id` | | `issue_get_transitions` | 現在利用可能なステータス遷移とその ID を取得します | `issue_id` | | `issue_execute_transition` | 遷移を実行し、その後に利用可能な遷移を返します | `issue_id`、`transition_id`、`comment`、`fields` | | `issue_close` | 完了ステータスへの遷移を見つけ、解決方法を指定して実行します | `issue_id`、`resolution_id`、`comment`、`fields` | | `issue_get_changelog` | フィールドの編集、ステータス遷移、コメントの変更、発火したトリガーを取得します。`{entries, next_cursor}` を返します | `issue_id`、`cursor`、`per_page`、`field`、`type` | | `issue_create` | 課題を作成して返します | `queue`、`summary`、`type`、`description`、`markup_type`、`assignee`、`priority`、`parent`、`sprint`、`followers`、`components`、`tags`、`project`、`fields` | | `issue_update` | これらのフィールドを変更します。省略したフィールドはそのまま維持されます | `issue_id`、`version`、および `issue_create` が受け取る引数 | | `issue_move` | 課題を別のキューに移動します。これによりキーが変わります(`TASKS-1` → `NEWQUEUE-42`) | `issue_id`、`queue`、`notify`、`notify_author`、`move_all_fields`、`initial_status` | - **`version` は自動的に古くなります。** キュートリガーと自動化は `issue_create` の直後に実行されて値を更新するため、返されるバージョンは通常すでに古くなっています。`issue_update` の直前に `issue_get` で再取得するか、常に最新バージョンを更新するために省略してください。古いバージョンを指定すると編集の競合が発生します。 - **参照フィールドは作成時も更新時も同じ値を受け取ります。** `id` および/または `key` を持つオブジェクト、または `type`、`priority`、`parent` の場合はキーか ID のみを指定します。`components` には `{"id": ...}` または `{"name": ...}` を指定します。`components`/`followers` は現在のリストに追加するのではなく、置き換えます。専用の引数がない値は `fields` マップに入れ、`queue_get_fields` で取得したフィールドの `id` をキーにします。そこにあるエントリーは専用の引数より優先され、明示的に `null` を指定するとフィールドがクリアされます。 - **トランジションは推測されません。** `issue_execute_transition` で受け取るのは `issue_get_transitions` の ID のみです。また、`issue_close` の前に、`issue_get` で課題の `type` を読み取り、`expand: ["issueTypesConfig"]` を指定した `queue_get_metadata` でそのタイプに有効な解決状況を確認してください。タイプごとに設定は異なります。クライアントがエリシテーションに対応している場合、`issue_move` はまずユーザーにフラグの確認を求め、拒否された場合は移動を中止します。ここにあるすべてのツールは TRACKER_LIMIT_QUEUES と TRACKER_READ_ONLY_QUEUES に従います。書き込みを行うツールは、TRACKER_READ_ONLY がオフの場合にのみ登録されます。
検索と探索
| ツール | 内容 | 主な引数 |
|---|---|---|
issues_find | Yandex Tracker Query Language で課題を検索し、{values, hits, pages} を返します | query、fields、include_description、page、per_page |
issues_count | クエリに一致する課題の件数を返します。戻り値は {"count": N} です | query |
fieldsでは Tracker 独自の表記(story_pointsではなくstoryPoints)を使用し、キュー固有のフィールドや組織のカスタムフィールドを含む、任意のフィールド名を指定できます。queue_get_fieldsで取得したフィールドのidを渡してください。Tracker が認識しない名前は警告なしで除外されます。fieldsにdescriptionを指定した場合、include_descriptionは無視されます。fieldsで名前を指定することが、明示的な要求となります。per_pageのデフォルトは 100 です。ページがコンテキストウィンドウに収まらない場合は、値を小さくできます。
HTTP トランスポート
MCP サーバーは、ウェブベースの統合や stdio トランスポートが適さない場合に、streamable-http モードで実行することもできます。
streamable-http モードの環境変数
# Required - Set transport to streamable-http mode
TRANSPORT=streamable-http
# Server Configuration
HOST=0.0.0.0 # Default: 0.0.0.0 (all interfaces)
PORT=8000 # Default: 8000
streamable-http サーバーの起動
# Basic streamable-http server startup
TRANSPORT=streamable-http uvx yandex-tracker-mcp@latest
# With custom host and port
TRANSPORT=streamable-http \
HOST=localhost \
PORT=9000 \
uvx yandex-tracker-mcp@latest
# With all environment variables
TRANSPORT=streamable-http \
HOST=0.0.0.0 \
PORT=8000 \
TRACKER_TOKEN=your_token \
TRACKER_CLOUD_ORG_ID=your_org_id \
uvx yandex-tracker-mcp@latest
MCP サーバーへの接続に以下の形式を使用する場合は、TRACKER_CLOUD_ORG_ID または TRACKER_ORG_ID の設定を省略できます(Claude Code の例)。
claude mcp add --transport http yandex-tracker "http://localhost:8000/mcp/?cloudOrgId=your_cloud_org_id&"
または
claude mcp add --transport http yandex-tracker "http://localhost:8000/mcp/?orgId=org_id&"
OAuth 2.0 認証を使用する場合は、グローバルな TRACKER_TOKEN 環境変数の設定も省略できます(下記を参照)。
OAuth 2.0 認証
Yandex Tracker MCP サーバーは、静的な API トークンに代わる安全な方法として、OAuth 2.0 認証に対応しています。設定すると、サーバーは OAuth プロバイダーとして動作し、MCP クライアントと Yandex OAuth サービス間の認証を仲介します。
OAuth の仕組み
MCP サーバーは、標準的な OAuth 2.0 認可コードフローを実装しています。
- クライアント登録: MCP クライアントがサーバーに登録し、クライアント認証情報を取得します
- 認可: ユーザーは認証のために Yandex OAuth にリダイレクトされます
- トークン交換: サーバーが認可コードをアクセストークンと交換します
- API アクセス: クライアントはすべての API リクエストでベアラートークンを使用します
- トークンの更新: 期限切れのトークンは、再認証せずに更新できます
MCP Client → MCP Server → Yandex OAuth → User Authentication
↑ ↓
└────────── Access Token ←─────────────────┘
OAuth の設定
OAuth 認証を有効にするには、以下の環境変数を設定します。
# Enable OAuth mode
OAUTH_ENABLED=true
# Yandex OAuth Application Credentials (required for OAuth)
OAUTH_CLIENT_ID=your_yandex_oauth_app_id
OAUTH_CLIENT_SECRET=your_yandex_oauth_app_secret
# Public URL of your MCP server (required for OAuth callbacks)
MCP_SERVER_PUBLIC_URL=https://your-mcp-server.example.com
# Optional OAuth settings
OAUTH_SERVER_URL=https://oauth.yandex.ru # Default Yandex OAuth server
# When OAuth is enabled, TRACKER_TOKEN becomes optional
OAuth スコープ
OAUTH_USE_SCOPES=true(デフォルト)の場合、サーバーは Yandex Tracker のスコープ tracker:read と tracker:write を要求、通知、必須指定します。ただし、TRACKER_READ_ONLY=true の場合は tracker:read のみを使用するため、読み取り専用インスタンスで書き込みアクセスをユーザーに求めることはありません。OAUTH_USE_SCOPES=false に設定すると、フローからスコープが完全に除外されます。これは Yandex Cloud フェデレーションで必要な設定です。
Yandex OAuth アプリケーションの設定
- Yandex OAuth にアクセスし、新しいアプリケーションを作成します
- コールバック URL を次のように設定します:
{MCP_SERVER_PUBLIC_URL}/oauth/yandex/callback - 次の権限を要求します:
tracker:read- Tracker の読み取り権限tracker:write- Tracker の書き込み権限
- クライアント ID とクライアントシークレットを保存します
OAuth 認証と静的トークン認証の比較
| 機能 | OAuth | 静的トークン |
|---|---|---|
| セキュリティ | 有効期限付きの動的トークン | 有効期間の長い静的トークン |
| ユーザーエクスペリエンス | 対話型のログインフロー | 1 回限りの設定 |
| トークン管理 | 自動更新 | 手動でのローテーション |
| アクセス制御 | ユーザーごとの認証 | 共有トークン |
| 設定の複雑さ | OAuth アプリの設定が必要 | 簡単なトークン設定 |
OAuth モードの制限事項
- 現在、OAuth モードでは、コールバック URL を利用するために MCP サーバーがパブリックにアクセス可能である必要があります
- OAuth モードは、ウェブベースの認証フローに対応した対話型クライアントに最適です
MCP クライアントで OAuth を使用する
OAuth が有効な場合、MCP クライアントには次の対応が必要です:
- OAuth 2.0 の認可コードフローに対応する
- アクセストークンの有効期限が切れた際にトークンを更新する
- 継続的な認証のためにリフレッシュトークンを安全に保管する
注:現在、OAuth 認証に対応していない MCP クライアントもあります。OAuth への対応状況については、クライアントのドキュメントを確認してください。
Claude Code の設定例:
claude mcp add --transport http yandex-tracker https://your-mcp-server.example.com/mcp/ -s user
OAuth データストレージ
MCP サーバーは、OAuth データ(クライアント登録、アクセストークン、リフレッシュトークン、認可状態)用に、2 種類のストレージバックエンドに対応しています:
InMemory ストア(デフォルト)
インメモリストアは、すべての OAuth データをサーバーのメモリに保持します。これがデフォルトのオプションで、追加の設定は不要です。
特性:
- 永続性:サーバーの再起動時にデータが失われます
- パフォーマンス:データがメモリに保存されるため、アクセスが非常に高速です
- スケーラビリティ:単一のサーバーインスタンスに限定されます
- セットアップ:追加の依存関係は不要です
- 最適な用途:再起動時に OAuth セッションが失われても問題のない、開発、テスト、または単一インスタンスのデプロイ
設定:
OAUTH_STORE=memory # Default value, can be omitted
Redis ストア
Redis ストアは、Redis データベースを使用して OAuth データを永続的に保存します。これにより、OAuth セッションがサーバーの再起動後も維持され、複数インスタンスのデプロイが可能になります。
特性:
- 永続性:サーバーの再起動後もデータが保持されます
- パフォーマンス:ネットワークのオーバーヘッドはありますが、高速にアクセスできます
- スケーラビリティ:同じ Redis データベースを共有する複数のサーバーインスタンスに対応します
- セットアップ:Redis サーバーのインストールと設定が必要です
- 最適な用途:本番環境へのデプロイ、高可用性構成、または OAuth セッションの維持が必要な場合
設定:
# Enable Redis store for OAuth data
OAUTH_STORE=redis
# Redis connection settings (same as used for tools caching)
REDIS_ENDPOINT=localhost # Default: localhost
REDIS_PORT=6379 # Default: 6379
REDIS_DB=0 # Default: 0
REDIS_PASSWORD=your_redis_password # Optional: Redis password
REDIS_POOL_MAX_SIZE=10 # Default: 10
ストレージの動作:
- クライアント情報:永続的に保存されます
- OAuth 状態:セキュリティのため、TTL(有効期間)付きで保存されます
- 認可コード:TTL 付きで保存され、使用後に自動的に削除されます
- アクセストークン:トークンの有効期間に基づく自動有効期限付きで保存されます
- リフレッシュトークン:失効するまで永続的に保存されます
- キーの名前空間:他の Redis データとの競合を避けるため、
oauth:*プレフィックスを使用します
トークンの暗号化(Redis ストアでは必須)
Redis ストアを使用する場合は、保存時の OAuth トークンを保護するために暗号化を設定する必要があります。トークンの値は Fernet(AES-128)を使って暗号化され、Redis のキーには生のトークンの代わりに SHA-256 ハッシュが使われます。これにより、Redis が侵害された場合でもトークンが漏えいするのを防げます。
暗号化キーを生成します:
python3 -c "import base64, os; print(base64.b64encode(os.urandom(32)).decode())"
設定:
# Single encryption key
OAUTH_ENCRYPTION_KEYS=<base64-encoded-32-byte-key>
# Multiple keys for rotation (first encrypts, all decrypt)
OAUTH_ENCRYPTION_KEYS=<new-key>,<old-key>
キーのローテーションを行うと、キーをシームレスに更新できます。まず新しいキーを追加し、古いトークンの有効期限が切れるのを待ってから、古いキーを削除します。
重要な注意事項:
- どちらのストアも、ツールのキャッシュシステムと同じ Redis 接続設定を使用します
- Redis ストアを使用する場合は、Redis インスタンスが適切に保護され、アクセス可能であることを確認してください
OAUTH_STORE設定が影響するのは OAuth データの保存のみです。ツールのキャッシュにはTOOLS_CACHE_ENABLEDが使用されます- Redis ストアは、言語間の互換性とデバッグ性を高めるために JSON シリアライゼーションを使用します
認証
Yandex Tracker MCP Server は、明確な優先順位に基づいた複数の認証方法をサポートしています。サーバーは、次の優先順位に従って、利用可能な最初の認証方法を使用します。
認証の優先順位
-
動的 OAuth トークン(優先度が最も高い)
- OAuth が有効で、ユーザーが OAuth フローで認証した場合
- トークンはユーザーセッションごとに動的に取得および更新されます
- 標準の Yandex OAuth と Yandex Cloud フェデレーション OAuth の両方をサポートします
- 必須の環境変数:
OAUTH_ENABLED=true、OAUTH_CLIENT_ID、OAUTH_CLIENT_SECRET、MCP_SERVER_PUBLIC_URL - フェデレーション OAuth 用の追加の環境変数:
OAUTH_SERVER_URL=https://auth.yandex.cloud/oauth、OAUTH_TOKEN_TYPE=Bearer、OAUTH_USE_SCOPES=false
-
パススルー Bearer OAuth トークン
- MCP OAuth ミドルウェアからトークンが提供されない場合、サーバーは受信した
Authorization: Bearer <token>ヘッダーから Yandex OAuth トークンを読み取ることができます - ユーザーを認証し、保存済みの Yandex OAuth トークンを特定して、リクエストごとに挿入する信頼できるリバースプロキシまたはゲートウェイの背後で役立ちます
- OAuth モードが有効でアクティブな場合は、MCP OAuth のトークンが引き続き優先されます
- MCP OAuth ミドルウェアからトークンが提供されない場合、サーバーは受信した
-
静的 OAuth トークン
- 環境変数で指定する従来の OAuth トークン
- すべてのリクエストで同じトークンを使用します
- 必須の環境変数:
TRACKER_TOKEN(OAuth トークン)
-
静的 IAM トークン
- サービス間認証用の IAM(Identity and Access Management)トークン
- 自動化システムや CI/CD パイプラインに適しています
- 必須の環境変数:
TRACKER_IAM_TOKEN(IAM トークン)
-
動的 IAM トークン(優先度が最も低い)
- サービスアカウントの認証情報を使って自動的に取得されます
- トークンは自動的に取得および更新されます
- 必須の環境変数:
TRACKER_SA_KEY_ID、TRACKER_SA_SERVICE_ACCOUNT_ID、TRACKER_SA_PRIVATE_KEY
認証シナリオ
シナリオ 1:動的トークンを使った OAuth(対話型の使用に推奨)
# Enable OAuth mode
OAUTH_ENABLED=true
OAUTH_CLIENT_ID=your_oauth_app_id
OAUTH_CLIENT_SECRET=your_oauth_app_secret
MCP_SERVER_PUBLIC_URL=https://your-server.com
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_ID
シナリオ 2:静的 OAuth トークン(簡単な設定)
# OAuth token
TRACKER_TOKEN=your_oauth_token
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_ID
シナリオ 3:リバースプロキシ背後でのパススルー Bearer トークン
信頼できるゲートウェイでユーザー認証とユーザーの Yandex OAuth トークンの検索を行い、そのトークンをリクエストヘッダーに含めて MCP サーバーへリクエストを転送する場合は、このモードを使用します。
Authorization: Bearer <user_yandex_oauth_token>
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_ID
このパススルートークンは、MCP OAuth ミドルウェアからリクエスト用のアクセストークンが提供されていない場合にのみ使用されます。OAuth が有効なデプロイで MCP OAuth セッションがアクティブな場合は、MCP OAuth トークンが優先されます。
シナリオ 4:静的 IAM トークン
# IAM token
TRACKER_IAM_TOKEN=your_iam_token
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_ID
シナリオ 5:サービスアカウントを使った動的 IAM トークン
# Service account credentials
TRACKER_SA_KEY_ID=your_key_id
TRACKER_SA_SERVICE_ACCOUNT_ID=your_service_account_id
TRACKER_SA_PRIVATE_KEY=your_private_key
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_ID
シナリオ 6:OIDC アプリケーション向けのフェデレーション OAuth(上級)
# Enable OAuth with Yandex Cloud federation
OAUTH_ENABLED=true
OAUTH_SERVER_URL=https://auth.yandex.cloud/oauth
OAUTH_TOKEN_TYPE=Bearer
OAUTH_USE_SCOPES=false
OAUTH_CLIENT_ID=your_oidc_client_id
OAUTH_CLIENT_SECRET=your_oidc_client_secret
MCP_SERVER_PUBLIC_URL=https://your-server.com
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_ID
この設定では、Yandex Cloud OIDC アプリケーションを通じた認証を有効にします。これは、Yandex Cloud のフェデレーションアカウントに必要です。フェデレーションユーザーは、所属組織の ID プロバイダー(IdP)を通じて認証し、この OAuth フローを使用して Yandex Tracker API にアクセスします。
重要な注意事項
- サーバーは、上記の順序で認証方法を確認します
- 一度に使用される認証方法は 1 つだけです
- 本番環境での使用には、セキュリティを高めるため、動的トークン(OAuth または IAM)を推奨します
- IAM トークンは OAuth トークンより有効期間が短いため、より頻繁な更新が必要になる場合があります
- サービスアカウントを使用する場合は、そのアカウントに Yandex Tracker の適切な権限があることを確認してください
設定
環境変数
# Authentication (use one of the following methods)
# Method 1: OAuth Token
TRACKER_TOKEN=your_yandex_tracker_oauth_token
# Method 2: IAM Token
TRACKER_IAM_TOKEN=your_iam_token
# Method 3: Service Account (for dynamic IAM token)
TRACKER_SA_KEY_ID=your_key_id # Service account key ID
TRACKER_SA_SERVICE_ACCOUNT_ID=your_sa_id # Service account ID
TRACKER_SA_PRIVATE_KEY=your_private_key # Service account private key
# Organization Configuration (set exactly one - setting both is an error)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # For Yandex Cloud organizations
TRACKER_ORG_ID=your_org_id # For Yandex 360 organizations
# API Configuration (optional)
TRACKER_API_BASE_URL=https://api.tracker.yandex.net # Default: https://api.tracker.yandex.net
TRACKER_API_TIMEOUT=10 # Default: 10 - Per-request timeout in seconds for Tracker API calls
# Security - Restrict access to specific queues (optional)
TRACKER_LIMIT_QUEUES=PROJ1,PROJ2,DEV # Comma-separated queue keys - allow-list of accessible queues
TRACKER_READ_ONLY_QUEUES=PROJ2 # Comma-separated queue keys - allowed for reads but reject writes (per-queue read-only)
TRACKER_ENTITIES_ENABLED=true # Default: false - Register project/portfolio/goal tools (NOT covered by the queue restrictions above)
# Server Configuration
HOST=0.0.0.0 # Default: 0.0.0.0
PORT=8000 # Default: 8000
TRANSPORT=stdio # Options: stdio, streamable-http, sse
# Redis connection settings (used for caching and OAuth store)
REDIS_ENDPOINT=localhost # Default: localhost
REDIS_PORT=6379 # Default: 6379
REDIS_DB=0 # Default: 0
REDIS_PASSWORD=your_redis_password # Optional: Redis password
REDIS_POOL_MAX_SIZE=10 # Default: 10
# Tools caching configuration (optional)
TOOLS_CACHE_ENABLED=true # Default: false
TOOLS_CACHE_REDIS_TTL=3600 # Default: 3600 seconds (1 hour)
# OAuth 2.0 Authentication (optional)
OAUTH_ENABLED=true # Default: false
OAUTH_STORE=redis # Options: memory, redis (default: memory)
OAUTH_SERVER_URL=https://oauth.yandex.ru # Default: https://oauth.yandex.ru (use https://auth.yandex.cloud/oauth for federation)
OAUTH_TOKEN_TYPE=<Bearer|OAuth|<empty>> # Default: <empty> (required to be Bearer for Yandex Cloud federation)
OAUTH_USE_SCOPES=true # Default: true (set to false for Yandex Cloud federation)
OAUTH_CLIENT_ID=your_oauth_client_id # Required when OAuth enabled
OAUTH_CLIENT_SECRET=your_oauth_secret # Required when OAuth enabled
MCP_SERVER_PUBLIC_URL=https://your.server.com # Required when OAuth enabled
TRACKER_READ_ONLY=true # Default: false - Disable all write tools for the whole instance
キューのアクセス制御
キューへのアクセスは、大まかな制御から細かな制御まで、次の 3 つのレベルで設定できます。
TRACKER_LIMIT_QUEUES— キューキーの許可リストです。リストに含まれないキューは、読み取りと書き込みの両方で 見つからない/許可されていない として扱われます。ここではTRACKER_READ_ONLY_QUEUESと同様に、大文字と小文字を区別せずにキーを照合するため、devとDEVは同じキューを指します。唯一の例外はボードツールです。ボードはキューではなく組織に属するため、フィルタリングされず、ボードの設定で制限対象のキューを指定できます。TRACKER_READ_ONLY—trueの場合、すべての書き込みツールが登録解除され、インスタンス全体が読み取り専用になります。TRACKER_READ_ONLY_QUEUES— キューごとの読み取り専用許可リストです。書き込みツールは登録されたままですが、リストに含まれるキューを対象とする変更操作(作成/更新/移動/コメント/作業ログ/リンク、キューバージョンの作成)は拒否されます。読み取りは引き続き可能です。リストに含まれないキューは読み書き可能なままです。
プロジェクト/ポートフォリオ/目標のツールは、このモデルの対象外です。 プロジェクト、ポートフォリオ、目標は単一のキューに確実に対応付けられないため、上記の 3 つの設定はいずれも適用されません。読み取りツール(
project_get、project_find、*_get_comments、…)にも、書き込みツール(コメントやチェックリストのツールを含む)にも適用されません。これらを有効にすると、サーバーにアクセスできるユーザーに、それらのエンティティへの組織全体のアクセス権が付与されます。このため、これらはオプトイン方式です。TRACKER_ENTITIES_ENABLED=true(デフォルトはfalse)の場合にのみ登録されます。これにより、不要なデプロイ環境ではツールマニフェストを小さく保てます。TRACKER_READ_ONLYは引き続き適用され、ほかのすべての書き込みツールとともに、エンティティの書き込みツールも登録解除されます。
これにより、1 つのインスタンスで一部のキューは読み書き可能、ほかのキューは読み取り専用にできます。たとえば、TRACKER_LIMIT_QUEUES=DEV,MGMT と TRACKER_READ_ONLY_QUEUES=MGMT を組み合わせると、DEV には完全にアクセスでき、MGMT は読み取り専用で参照できます。これは、エンドユーザーがサーバー経由でのみ Tracker にアクセスし、生のトークンを直接保持しない共有 MCP ゲートウェイで特に便利です。
これらのチェックはプロセス内のガードレールです。生の Tracker トークンを保持するクライアントについては、実際の制限をトークン自体にも設定する必要があります。
Docker のデプロイ
ビルド済みイメージを使用する(推奨)
イメージのデフォルトは TRANSPORT=stdio です。この場合、コンテナの標準入力/標準出力を介して通信し、ポートは開きません。以下の例のように、HTTP 経由でサーバーにアクセスする場合は TRANSPORT=streamable-http を設定してください。stdio クライアントでは、代わりに -i を指定し、-p を指定せずにコンテナを実行します(MCP クライアントの設定の例を参照してください)。
# Using environment file (it must set TRANSPORT=streamable-http)
docker run --env-file .env -p 8000:8000 ghcr.io/aikts/yandex-tracker-mcp:latest
# With inline environment variables
docker run -e TRACKER_TOKEN=your_token \
-e TRACKER_CLOUD_ORG_ID=your_org_id \
-e TRANSPORT=streamable-http \
-p 8000:8000 \
ghcr.io/aikts/yandex-tracker-mcp:latest
イメージをローカルでビルドする
docker build -t yandex-tracker-mcp .
Docker Compose
ビルド済みイメージを使用する:
services:
mcp-tracker:
image: ghcr.io/aikts/yandex-tracker-mcp:latest
ports:
- "8000:8000"
environment:
- TRACKER_TOKEN=${TRACKER_TOKEN}
- TRACKER_CLOUD_ORG_ID=${TRACKER_CLOUD_ORG_ID}
- TRANSPORT=streamable-http
ローカルでビルドする:
services:
mcp-tracker:
build: .
ports:
- "8000:8000"
environment:
- TRACKER_TOKEN=${TRACKER_TOKEN}
- TRACKER_CLOUD_ORG_ID=${TRACKER_CLOUD_ORG_ID}
- TRANSPORT=streamable-http
開発環境のセットアップ
# Clone and setup
git clone https://github.com/aikts/yandex-tracker-mcp
cd yandex-tracker-mcp
# Install development dependencies
uv sync --dev
# Formatting and static checking
task
ライセンス
このプロジェクトは、LICENSE ファイルに記載された条件に基づいてライセンスされています。
サポート
問題やご質問については、以下をご確認ください。
- Yandex Tracker API のドキュメントを確認してください
- https://github.com/aikts/yandex-tracker-mcp/issues から問題を報告してください
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。