yandex-tracker-mcp について
yandex-tracker-mcpは、AIアシスタントからYandex Trackerを操作するMCPサーバーです。課題やキュー、エンティティの管理、クエリ検索に対応し、アクセス制限と任意のRedisキャッシュを備えています。
主な機能
- 01課題の作成・更新・ステータス遷移
- 02キュー、フィールド、バージョンの管理
- 03Yandex Tracker Query Languageによる検索
- 04プロジェクト、ポートフォリオ、目標の管理
- 05OAuth 2.0とトークン認証
- 06任意のRedisキャッシュとキュー制限
活用シーン
- 01AIアシスタント経由でTrackerの課題を作成・更新
- 02複雑な条件や並べ替えで課題を検索
- 03プロジェクトのエンティティを確認・管理
- 04アシスタントのアクセス対象を指定キューに制限
MCP 対応
課題、キュー、エンティティ、検索などのYandex Tracker操作をツールとしてMCPクライアントに公開します。stdio、HTTP、非推奨のSSEトランスポートに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/aponkratov/yandex-tracker-mcp:0.8.2ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/aponkratov/yandex-tracker-mcp:0.8.2stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Yandex Tracker MCP サーバー
mcp-name: io.github.aikts/yandex-tracker-mcp
AI アシスタントが Yandex Tracker API を利用できるようにする、包括的な Model Context Protocol(MCP)サーバーです。このサーバーは、パフォーマンス向上のためのオプションの Redis キャッシュを備え、Yandex Tracker の課題、キュー、コメント、作業ログ、検索機能への安全で認証済みのアクセスを提供します。
ロシア語のドキュメントはこちらでご覧いただけます / Документация на русском языке доступна здесь.
機能
- キュー管理のすべて:ページネーション、タグの取得、詳細なメタデータに対応し、利用可能なすべての Yandex Tracker キューを一覧表示してアクセスできます
- ユーザー管理:ログイン情報、メールアドレス、ライセンス状態、組織データなど、ユーザーアカウント情報を取得できます
- 課題ライフサイクル全体への対応:カスタムフィールド、添付ファイル、ワークフローの遷移に対応し、課題の作成、読み取り、更新、管理ができます
- ステータスワークフロー管理:ステータス遷移の実行、解決方法を指定した課題のクローズ、複雑なワークフローの操作ができます
- フィールド管理:グローバルフィールド、キュー固有のローカルフィールド、ステータス、課題タイプ、優先度、解決方法にアクセスできます
- 高度なクエリ言語:複雑なフィルタリング、並べ替え、日付関数を含む、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- サービスアカウントの認証情報
TRACKER_CLOUD_ORG_IDまたはTRACKER_ORG_ID- Yandex Cloud(または Yandex 360)の組織 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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}
Docker を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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 TRACKER_ORG_ID=your_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 TRACKER_ORG_ID=your_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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}
Docker を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}
Windsurf
設定ファイルのパス:
~/.codeium/windsurf/mcp_config.json
アクセス方法:Windsurf Settings → Cascade tab → 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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}
Docker を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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",
"TRACKER_ORG_ID": "your_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",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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"
},
{
"type": "promptString",
"id": "org-id",
"description": "Yandex Tracker Organization ID (optional)"
}
],
"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}",
"TRACKER_ORG_ID": "${input: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"
},
{
"type": "promptString",
"id": "org-id",
"description": "Yandex Tracker Organization ID (optional)"
}
],
"servers": {
"yandex-tracker": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "${input:tracker-token}",
"TRACKER_CLOUD_ORG_ID": "${input:cloud-org-id}",
"TRACKER_ORG_ID": "${input: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",
"TRACKER_ORG_ID": "your_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",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}
Docker を使用する場合:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}
重要な注意事項:
- プレースホルダーの値を実際の認証情報に置き換えてください
- 設定を変更した後は、AI クライアントを再起動してください
uvxがインストールされ、システムの PATH から利用できることを確認してください- 本番環境で使用する場合は、トークンをハードコードするのではなく、環境変数を使用することを検討してください
利用可能な MCP ツール
このサーバーは、MCP プロトコルを通じて次のツールを公開します:
キュー管理
-
queues_get_all:利用可能な Yandex Tracker のキューをすべて一覧表示します- パラメーター:
fields(省略可能):レスポンスに含めるフィールド(例:["key", "name"])。必要なフィールドのみを選択して、コンテキストウィンドウの使用量を最適化できます。指定しない場合は、利用可能なすべてのフィールドを返します。page(省略可能):返すページ番号。指定しない場合は、すべてのページを自動的に取得します。per_page(省略可能):1 ページあたりの項目数(デフォルト:100)
- フィールドを選択して含めた、ページ分割されたキュー情報を返します
TRACKER_LIMIT_QUEUESの制限を適用します
- パラメーター:
-
queue_get_tags:指定したキューのタグをすべて取得します- パラメーター:
queue_id(文字列。例:"SOMEPROJECT" のようなキューキー) - 指定したキューで利用可能なタグの一覧を返します
TRACKER_LIMIT_QUEUESの制限を適用します
- パラメーター:
-
queue_get_versions:特定のキューのすべてのバージョンを取得します- パラメーター:
queue_id(文字列、"SOMEPROJECT" のようなキューキー) - 指定したキューで利用可能なバージョンのリストを、名前、説明、日付、ステータスなどの詳細とともに返します
TRACKER_LIMIT_QUEUESの制限を適用します
- パラメーター:
-
queue_create_version:特定のキューに新しいバージョンを作成します- パラメーター:
queue_id(文字列、必須):"SOMEPROJECT" のようなキューキーname(文字列、必須):バージョン名description(文字列、任意):バージョンの説明start_date(日付、任意):YYYY-MM-DD形式のバージョン開始日due_date(日付、任意):YYYY-MM-DD形式のバージョン期日
- 作成したバージョンを、名前、説明、日付、ステータスなどの詳細とともに返します
TRACKER_LIMIT_QUEUESの制限を適用します
- パラメーター:
-
queue_get_fields:特定のキューのフィールドを取得します- パラメーター:
queue_id(文字列、必須):"SOMEPROJECT" のようなキューキーinclude_local_fields(ブール値、任意、デフォルト:true):キュー固有のローカルフィールドを含めるかどうか
- グローバルフィールドのリストと、任意でローカル(キュー固有)フィールドを返します
include_local_fieldsが true の場合、両方の種類のフィールドを取得するために並列リクエストを実行しますschema.requiredプロパティは、フィールドが必須かどうかを示しますissue_createツールで課題を作成する前に、利用可能なフィールドと必須フィールドを確認するために使用しますTRACKER_LIMIT_QUEUESの制限を適用します
- パラメーター:
-
queue_get_metadata:特定のキューに関する詳細なメタデータを取得します- パラメーター:
queue_id(文字列、必須):"SOMEPROJECT" のようなキューキーexpand(文字列の配列、任意):レスポンス内で展開するフィールド。利用可能なオプション:all、projects、components、versions、types、team、workflows、fields、issueTypesConfig
- 名前、説明、デフォルトのタイプ/優先度、および任意で展開されたデータを含むキュー情報を返します
issue_closeツールに必要な、各課題タイプで利用可能な解決状況を取得するには、expand: ["issueTypesConfig"]を使用しますTRACKER_LIMIT_QUEUESの制限を適用します
- パラメーター:
プロジェクト、ポートフォリオ、目標
これらのツールは統合された Yandex Tracker Entities API を使用します。entity_type パラメーターには project、portfolio、または goal を指定します。
entity_get:idまたは数値のshortIdでエンティティを取得します。追加のfieldsをリクエストしたり、attachmentsを展開したりすることもできますentities_search:名前の部分文字列または任意のフィールドフィルターでエンティティを検索します。フィールド選択、並べ替え、ルートのみのフィルタリング、ページベースのページネーションにも対応しますentity_get_events:相対カーソルナビゲーション(from_idまたはselected)を使用して、エンティティのイベント履歴を取得しますentity_create:エンティティを作成します。fields.summaryは必須で、同じリクエストでリンクを作成することもできますentity_update:エンティティのフィールドとリンクを更新し、説明コメントを追加します。コレクションフィールドはset、add、removeなどの Tracker 演算子に対応していますentity_delete:エンティティと、任意で関連するボードを削除しますentities_bulk_update:同じタイプの複数のエンティティを一括更新する処理を開始します
共通のフィールドキーには、summary、description、lead、teamUsers、clients、followers、start、end、tags、parentEntity、entityStatus、teamAccess があります。日付は Tracker API が想定する形式を使用する必要があります。
TRACKER_READ_ONLY=true の場合、書き込みツールは利用できません。
ボードとスプリント
boards_list:現在のユーザーが利用できるすべてのボードを一覧表示しますboard_get:ボード ID を指定して、ボードの列と自動フィルター設定を取得しますboard_get_sprints:ボードに関連付けられたすべてのスプリントを一覧表示しますsprint_get:ステータス、アーカイブフラグ、予定日/実績日を含む 1 つのスプリントを取得します
保存済みフィルター
filter_get:数値 ID を指定して保存済みの課題フィルターを取得しますfilter_find_issues:ページ/ページあたりの件数とレスポンスフィールドを指定して、保存済みフィルターを実行しますfilter_create:Tracker クエリまたはフィールド値の条件から保存済みフィルターを作成しますfilter_update:保存済みフィルターの名前、条件、表示フィールド、並べ替え、グループ化、またはフォルダーを更新します
TRACKER_READ_ONLY=true の場合、filter_create と filter_update は使用できません。issues_find と issues_count では、query の代わりに filter_id も指定できます。
ユーザー管理
-
users_get_all:組織に登録されているユーザーアカウントの情報を取得します- パラメーター:
per_page(任意):1 ページあたりのユーザー数(デフォルト:50)page(任意):取得するページ番号(デフォルト:1)
- ログイン名、メールアドレス、ライセンス状態、組織の詳細を含む、ページ分けされたユーザー一覧を返します
- 外部ユーザーかどうか、退職状態、通知設定などのユーザーメタデータも含まれます
- パラメーター:
-
user_get:ログイン名または UID を指定して、特定のユーザーの情報を取得します- パラメーター:
user_id(文字列。ユーザーログイン名「john.doe」や UID「12345」など) - ログイン名、メールアドレス、ライセンス状態、組織の詳細など、ユーザーの詳細情報を返します
- ユーザーのログイン名と数値のユーザー ID の両方に対応しており、柔軟に識別できます
- パラメーター:
-
user_get_current:現在認証されているユーザーの情報を取得します- パラメーターは不要です
- 現在の認証トークンに紐づくユーザーの詳細情報を返します
- 認証済みユーザーのログイン名、メールアドレス、表示名、組織の詳細が含まれます
-
users_search:ログイン名、メールアドレス、または本名(名、姓、またはその両方)でユーザーを検索します- パラメーター:
login_or_email_or_name(文字列。検索するユーザーのログイン名、メールアドレス、または本名) - クエリに複数のユーザーが一致した場合は複数のユーザーを、一致するユーザーがいない場合は空のリストを返します。一致が 1 人の場合はそのユーザーを返します
- 本名の検索には、類似度しきい値 80% のあいまい検索を使用します
- ログイン名とメールアドレスの完全一致は、あいまいな名前の一致より優先されます
- パラメーター:
フィールド管理
get_global_fields:Yandex Tracker で利用可能なすべてのグローバルフィールドを取得します- 課題で使用できるグローバルフィールドの完全な一覧を返します
- フィールドのスキーマ、型情報、設定が含まれます
ステータスとタイプの管理
-
get_statuses:利用可能なすべての課題ステータスを取得します- 割り当て可能な課題ステータスの完全な一覧を返します
- ステータス ID、名前、タイプ情報が含まれます
-
get_issue_types:利用可能なすべての課題タイプを取得します- 課題の作成や更新に使用できる課題タイプの完全な一覧を返します
- タイプ ID、名前、設定の詳細が含まれます
-
get_priorities:利用可能なすべての課題優先度を取得します- 課題に割り当て可能な優先度の完全な一覧を返します
- 優先度キー、名前、順序情報が含まれます
-
get_resolutions:利用可能なすべての課題解決方法を取得します- 課題を終了するときに使用できる解決方法の完全な一覧を返します
- 解決方法のキー、名前、説明、順序情報が含まれます
課題操作
issue_get:ID を指定して課題の詳細情報を取得します- パラメーター:
issue_id(文字列、形式:「QUEUE-123」)include_description(ブール値、任意、デフォルト:true):結果に課題の説明を含めるかどうか。説明は大きくなる場合があるため、必要な場合のみ使用してください。
- ステータス、担当者、説明などを含む課題データ全体を返します
- パラメーター:
-
issue_get_comments:Issue のすべてのコメントを取得します- パラメーター:
issue_id(string) - 戻り値:メタデータ付きのコメントの時系列リスト
- パラメーター:
-
issue_add_comment:Issue にコメントを追加します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123")text(string、必須):コメント本文(Tracker がサポートする Markdown 形式)summonees(string の配列、任意):呼び出すユーザー(ログイン名または ID)。ユーザーへのメンション/呼び出しには API でこの方法を使用します(通知は本文中の@loginではなく、このフィールドによって送信されます)。maillist_summonees(string の配列、任意):呼び出すメーリングリスト(メールアドレス)markup_type(string、任意):YFM(Markdown)にはmdを使用しますis_add_to_followers(boolean、任意、デフォルト:true):コメントの作成者をフォロワーに追加します
- 戻り値:作成されたコメントオブジェクト
- パラメーター:
-
issue_update_comment:Issue の既存のコメントを更新します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123")comment_id(int、必須):コメント IDtext(string、必須):新しいコメント本文(Tracker がサポートする Markdown 形式)summonees(string の配列、任意):呼び出すユーザー(ログイン名または ID)maillist_summonees(string の配列、任意):呼び出すメーリングリスト(メールアドレス)markup_type(string、任意):YFM(Markdown)にはmdを使用します
- 戻り値:更新されたコメントオブジェクト
- パラメーター:
-
issue_delete_comment:Issue からコメントを削除します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123")comment_id(int、必須):コメント ID
- 戻り値:
null(成功)
- パラメーター:
-
issue_add_link:Issue と別の Issue の間にリンクを作成します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123"):現在の Issuerelationship(string、必須):issue_idとリンク先の Issue の関係を表すリンクの種類。次のいずれか:relates、is dependent by、depends on、is subtask for、is parent task for、duplicates、is duplicated by、is epic of、has epicissue(string、必須):リンク先の Issue の ID またはキー(例:"TEST-123")
- 戻り値:作成されたリンクオブジェクト
- パラメーター:
-
issue_delete_link:Issue と別の Issue の間のリンクを削除します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123")link_id(int、必須):リンク ID(issue_get_linksによって返されます)
- 戻り値:
null(成功)
- パラメーター:
-
issue_get_links:関連する Issue のリンクを取得します- パラメーター:
issue_id(string) - 戻り値:関連、ブロック、または重複する Issue へのリンク
- パラメーター:
-
issue_get_worklogs:作業ログのエントリーを取得します- パラメーター:
issue_ids(string の配列、必須)start_date_from(date、任意):作業開始日の下限(この日付を含む)(YYYY-MM-DD)start_date_to(date、任意):作業開始日の上限(この日付を含む)(YYYY-MM-DD)timezone(string、任意、デフォルトUTC):startの日付を比較する際に使用する IANA タイムゾーン(例:Europe/Moscow)
- Issue ごとに相対ページネーションの全ページを取得し、
createdAtではなく作業ログのstartフィールドでフィルタリングします - 戻り値:Tracker が返す ISO 8601 形式の期間をそのまま返します。週単位の値は Tracker の仕様を維持する必要があります。
P6Wは42暦日ではなく30稼働日です
- パラメーター:
-
issue_add_worklog:Issue に作業ログのエントリーを追加します(費やした時間を記録します)- パラメーター:
issue_id(string、必須、形式:"QUEUE-123")duration(string、必須):ISO-8601 形式の期間(例:PT1H30M)comment(string、任意):作業ログのコメントstart(datetime、任意):作業開始日時(タイムゾーンが指定されていない場合は UTC とみなされます)
- 戻り値:作成された作業ログのエントリー
- パラメーター:
-
issue_update_worklog:課題の作業ログエントリー(作業時間の記録)を更新します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123")worklog_id(int、必須):作業ログエントリー IDduration(string、任意):ISO-8601 形式の期間(例:PT1H30M)comment(string、任意):作業ログのコメントstart(datetime、任意):作業開始日時(タイムゾーンが指定されていない場合は UTC として扱われます)
- 更新された作業ログエントリーを返します
- パラメーター:
-
issue_delete_worklog:課題の作業ログエントリー(作業時間の記録)を削除します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123")worklog_id(int、必須):作業ログエントリー ID
- 戻り値:
null(成功)
- パラメーター:
-
issue_get_attachments:課題の添付ファイルを取得します- パラメーター:
issue_id(string、形式:"QUEUE-123") - 指定した課題の添付ファイルのメタデータを含むリストを返します
- パラメーター:
-
issue_download_attachment:添付ファイルを MCP の埋め込みバイナリーリソースとしてダウンロードします- パラメーター:
issue_get_attachmentsが返すissue_id、attachment_id、file_name TRACKER_MAX_ATTACHMENT_BYTESの転送上限を適用します
- パラメーター:
-
issue_upload_attachment:Base64 エンコードされたコンテンツを課題の添付ファイルとしてアップロードします- パラメーター:
issue_id、file_name、content_base64、および任意のmime_type TRACKER_READ_ONLY=trueの場合は利用できません
- パラメーター:
-
issue_delete_attachment:ID を指定して課題の添付ファイルを削除しますTRACKER_READ_ONLY=trueの場合は利用できません
-
issue_get_checklist:課題のチェックリスト項目を取得します- パラメーター:
issue_id(string、形式:"QUEUE-123") - テキスト、ステータス、担当者、期限の情報を含むチェックリスト項目のリストを返します
- パラメーター:
-
issue_get_transitions:課題で可能なステータス遷移を取得します- パラメーター:
issue_id(string、形式:"QUEUE-123") - 課題に対して実行可能な遷移のリストを返します
- 各遷移には、ID、表示名、遷移先のステータス情報が含まれます
- パラメーター:
-
issue_get_changelog:課題の変更履歴(変更ログ)を取得します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123"):課題キーper_page(integer、任意、デフォルト:50):1 ページあたりのエントリー数cursor(string、任意):前回の呼び出しで返されたnext_cursorの値です。次のページを取得するには、この値を渡します(カーソルページネーション)field(string、任意):フィールドキー(例:status)で変更ログを絞り込みますtype(string、任意):変更タイプ(ステータス遷移の場合はIssueWorkflowなど)で絞り込みます
entries(ステータス遷移とフィールド編集。誰が何をfrom→toに変更したか、いつ変更したかの情報、コメントの変更、実行されたトリガーを含む)とnext_cursor(次のページを取得するためcursorとして渡します。これ以上ページがない場合はnull)を含むオブジェクトを返します
- パラメーター:
-
issue_execute_transition:課題のステータス遷移を実行します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123"):課題キーtransition_id(string、必須):実行する遷移の ID。重要:issue_get_transitionsツールが返す ID のいずれかである必要がありますcomment(string、任意):遷移の実行時に追加する任意のコメントfields(object、任意):遷移中に設定する追加フィールドの辞書です。一般的なフィールドには、課題を終了する際のresolution(例:'fixed'、'wontFix')、再割り当てのためのassigneeなどがあります
- 遷移の実行後、新しいステータスで可能な遷移のリストを返します
- 使用上の注意:まず
issue_get_transitionsを呼び出して利用可能な遷移を取得し、返された遷移 ID のいずれかを渡す必要があります。任意の遷移 ID は使用しないでください。
- パラメーター:
-
issue_close:解決内容を指定して課題をクローズします(便利なツール)- パラメーター:
issue_id(string、必須、形式:"QUEUE-123"):課題キーresolution_id(string、必須):クローズ時に設定する解決 ID(例:'fixed'、'wontFix'、'duplicate')comment(string、任意):課題のクローズ時に追加するコメント(任意)
- 'done' ステータスへのトランジションを自動的に検索し、指定した解決内容で実行します
- 新しい(クローズ済み)ステータスで利用可能なトランジションの一覧を返します
- 使用上の注意:クローズする前に、必ず次の操作を行ってください。
issue_getを呼び出して課題のtypeフィールドを取得しますexpand: ["issueTypesConfig"]を指定してget_queue_metadataを呼び出し、利用可能な解決内容を取得します- 課題のタイプに一致する
issueTypesConfigエントリーから解決内容を選択します。課題のタイプごとに有効な解決内容が異なります
- パラメーター:
-
issue_create:キューに新しい課題を作成します- パラメーター:
queue(string、必須):課題を作成するキューのキー(例:'MYQUEUE')summary(string、必須):課題のタイトル/概要type(int、任意):課題タイプ ID(get_issue_typesツールから取得)description(string、任意):課題の説明assignee(string または int、任意):担当者のログイン名または UIDpriority(string、任意):優先度キー(get_prioritiesツールから取得)fields(object、任意):課題の作成時に設定する追加フィールド。重要:課題を作成する前に、必ずqueue_get_fieldsを呼び出して利用可能なフィールドを取得してください(デフォルトではグローバルフィールドとローカルフィールドの両方が返されます)。schema.required=trueのフィールドは必須です。このマップのキーにはフィールドのidプロパティを使用してください(例:{"fieldId": "value"})
- 標準の課題フィールドをすべて含む、新しく作成された課題オブジェクトを返します
TRACKER_LIMIT_QUEUESの制限に従います
- パラメーター:
-
issue_update:既存の課題を更新します- パラメーター:
issue_id(string、必須、形式:"QUEUE-123"):更新する課題キーsummary(string、任意):新しい課題のタイトル/概要description(string、任意):新しい課題の説明markup_type(string、任意):説明文のマークアップタイプ(YFM マークアップには 'md' を使用)parent(IssueUpdateParent、任意):id(string)および/またはkey(string、例:'QUEUE-123')を含む親課題参照sprint(IssueUpdateSprint の配列、任意):スプリントの割り当て。id(int)フィールドを含むオブジェクトの配列type(IssueUpdateType、任意):id(string)および/またはkey(string、例:'bug'、'task')を含む課題タイプpriority(IssueUpdatePriority、任意):id(string)および/またはkey(string、例:'critical'、'normal')を含む優先度followers(IssueUpdateFollower の配列、任意):フォロワー。id(string、ユーザー ID またはログイン名)を含むオブジェクトの配列project(IssueUpdateProject、任意):primary(int、メインプロジェクトの shortId)と、任意のsecondary(int の配列)を含むプロジェクトtags(string の配列、任意):課題タグversion(int、任意):楽観的ロックに使用する課題バージョン。変更は現在のバージョンに対してのみ行われますfields(object、任意):更新する追加フィールド。利用可能なフィールドを確認するにはqueue_get_fieldsを使用してください
- 標準の課題フィールドをすべて含む、更新後の課題オブジェクトを返します
- 指定されたフィールドのみが更新され、省略されたフィールドは変更されません
TRACKER_LIMIT_QUEUESの制限に従います
- パラメーター:
-
issue_move:課題を別のキューに移動します- パラメーター:
issue_id(string、必須、形式:「QUEUE-123」):移動する課題キーqueue(string、必須):移動先のキューキー(例:'MYQUEUE')notify(boolean、任意、デフォルトtrue):課題のフィールドで参照されているユーザーに通知しますnotify_author(boolean、任意、デフォルトfalse):課題の作成者に通知しますmove_all_fields(boolean、任意、デフォルトfalse):移動先のキューに一致するバージョン、コンポーネント、プロジェクトがある場合は引き継ぎます。一致するものがない場合はクリアされますinitial_status(boolean、任意、デフォルトfalse):課題のステータスを初期値にリセットします(移動先のキューで異なるワークフローが使用されている場合に使用します)
- 移動先のキューで新しいキーが付与された、更新後の課題オブジェクトを返します(例:
TASKS-1→NEWQUEUE-42) - MCP クライアントがエリシテーションに対応している場合、移動の実行前にユーザーにブール値フラグの確認を求めます。拒否またはキャンセルすると移動は中止されます。エリシテーションに対応していないクライアントでは、渡された値を使用して処理を続行します
TRACKER_LIMIT_QUEUESの制限を適用します
- パラメーター:
検索と検出
-
issues_find:Yandex Tracker Query Languageを使用して課題を検索します- パラメーター:
query(任意):Yandex Tracker Query Language の構文を使用したクエリ文字列filter_id(任意):保存済みフィルター ID。queryとは同時に指定できませんinclude_description(boolean、任意、デフォルト:false):課題の結果に課題の説明を含めるかどうかを指定します。サイズが大きくなることがあるため、必要な場合にのみ使用してくださいfields(文字列のリスト、任意):応答に含めるフィールド。必要なフィールドのみを選択することで、コンテキストウィンドウの使用量を最適化できます。指定しない場合、利用可能なすべてのフィールドを返しますpage(任意):ページネーションに使用するページ番号(デフォルト:1)per_page(任意):1ページあたりの項目数(デフォルト:100)。結果がコンテキストウィンドウを超える場合、減らされることがあります
- 1ページあたり、指定された数までの課題を返します
- パラメーター:
-
issues_count:Yandex Tracker Query Languageを使用して、クエリに一致する課題の数をカウントします- パラメーター:
query(任意):Yandex Tracker Query Language の構文を使用したクエリ文字列filter_id(任意):保存済みフィルター ID。queryとは同時に指定できません
- 指定された条件に一致する課題の合計数を返します
- フィールドフィルタリング、日付関数、論理演算子、複雑な式など、クエリ言語のすべての機能に対応しています
- 課題データ全体を取得せずに、分析やレポート作成、課題の分布の把握を行うのに便利です
- パラメーター:
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 Server は、静的な 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
Yandex OAuth アプリケーションの設定
- Yandex OAuth にアクセスし、新しいアプリケーションを作成します
- コールバック URL を
{MCP_SERVER_PUBLIC_URL}/oauth/yandex/callbackに設定します - 次の権限をリクエストします。
tracker:read- Tracker の読み取り権限tracker:write- Tracker の書き込み権限
- クライアント ID とクライアントシークレットを保存します
OAuth 認証と静的トークン認証の比較
| 機能 | OAuth | 静的トークン |
|---|---|---|
| セキュリティ | 有効期限付きの動的トークン | 有効期間の長い静的トークン |
| ユーザー体験 | 対話型のログインフロー | 一度限りの設定 |
| トークン管理 | 自動更新 | 手動でのローテーション |
| アクセス制御 | ユーザーごとの認証 | 共有トークン |
| 設定の複雑さ | 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 Store(デフォルト)
インメモリストアは、すべての 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:リバースプロキシの背後でのベアラートークンのパススルー
信頼できるゲートウェイがユーザー認証を処理し、ユーザーの 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 ミドルウェアがリクエストにアクセストークンを提供していない場合にのみ使用されます。MCP OAuth セッションが有効な 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 のフェデレーションアカウントに必要です。フェデレーションユーザーは、所属する組織のアイデンティティプロバイダー(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 (choose one)
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_MAX_ATTACHMENT_BYTES=10485760 # Default: 10 MiB MCP transfer limit
# Security - Restrict access to specific queues (optional)
TRACKER_LIMIT_QUEUES=PROJ1,PROJ2,DEV # Comma-separated queue keys
# 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 - Limit OAuth to read-only permissions
Docker でのデプロイ
ビルド済みイメージを使用する(推奨)
# Using environment file
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 \
-p 8000:8000 \
ghcr.io/aikts/yandex-tracker-mcp:latest
イメージをローカルでビルドする
docker build -t yandex-tracker-mcp .
Docker Compose
ビルド済みイメージを使用する場合:
version: '3.8'
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}
ローカルでビルドする場合:
version: '3.8'
services:
mcp-tracker:
build: .
ports:
- "8000:8000"
environment:
- TRACKER_TOKEN=${TRACKER_TOKEN}
- TRACKER_CLOUD_ORG_ID=${TRACKER_CLOUD_ORG_ID}
開発環境のセットアップ
# 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 つのサーバーを複数のクライアントで再利用できます。