mcpField
Y
yandex-tracker-mcp

yandex-tracker-mcp

本地服务
github.com/APonkratov生产力114 周前更新

关于 yandex-tracker-mcp

yandex-tracker-mcp 是供 AI 助手操作 Yandex Tracker 的 MCP 服务,涵盖问题、队列、实体管理和查询搜索,并提供访问限制及可选 Redis 缓存。

主要功能

  1. 01创建、更新和流转问题
  2. 02管理队列、字段和版本
  3. 03使用 Yandex Tracker Query Language 搜索
  4. 04管理项目、组合和目标
  5. 05OAuth 2.0 与令牌认证
  6. 06可选 Redis 缓存和队列限制

适用场景

  1. 01通过 AI 助手创建或更新 Tracker 问题
  2. 02使用复杂筛选和排序查找问题
  3. 03查看和管理项目实体
  4. 04将助手访问范围限制在指定队列

MCP 相关

通过 MCP 工具向客户端提供 Yandex Tracker 操作,包括问题、队列、实体和搜索功能。支持 stdio、HTTP 和已弃用的 SSE 传输方式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"aponkratov-yandex-tracker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/aponkratov/yandex-tracker-mcp:0.8.2"
]
}
}
}
启动命令docker run -i --rm ghcr.io/aponkratov/yandex-tracker-mcp:0.8.2

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/aponkratov/yandex-tracker-mcp:0.8.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Yandex Tracker MCP 服务

PyPI - Version Test Workflow Release Workflow

mcp-name: io.github.aikts/yandex-tracker-mcp

一款功能全面的模型上下文协议(MCP)服务,可让 AI 助手与 Yandex Tracker API 交互。该服务提供安全且经过身份验证的访问,可处理 Yandex Tracker 任务、队列、评论、工时记录和搜索功能,并可选用 Redis 缓存以提升性能。

README 配图

俄语文档请见此处 / Документация на русском языке доступна здесь。

功能

  • 完整的队列管理:列出并访问所有可用的 Yandex Tracker 队列,支持分页、标签检索和详细元数据
  • 用户管理:获取用户账户信息,包括登录详情、电子邮件地址、许可证状态和组织数据
  • 完整的任务生命周期:创建、读取、更新和管理任务,支持自定义字段、附件和工作流转换
  • 状态工作流管理:执行状态转换、设置解决方案以关闭任务,并处理复杂工作流
  • 字段管理:访问全局字段、队列专属本地字段、状态、任务类型、优先级和解决方案
  • 高级查询语言:全面支持 Yandex Tracker 查询语言,可进行复杂筛选、排序和日期函数操作
  • 性能缓存:可选的 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 环境变量

你可以在 Yandex Tracker URL 或组织设置中找到组织 ID。

MCP 客户端配置

在 Claude Desktop 中安装扩展

Yandex Tracker MCP Server 可在 Claude Desktop 中一键安装为扩展。

安装
  1. 从 GitHub Releases 下载 *.mcpb 文件。
  2. 双击下载的文件,在 Claude Desktop 中安装。img.png
  3. 根据提示提供你的 Yandex Tracker OAuth 令牌。img.png
  4. 确保已启用扩展,即可使用此 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 设置 → 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",
        "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(可选):每页的项目数(默认值: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
    • 返回队列信息,包括名称、描述、默认类型/优先级,以及可选的展开数据
    • 使用 expand: ["issueTypesConfig"] 获取每种议题类型可用的解决方案(issue_close 工具所需)
    • 遵循 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:更新实体字段、关联,并添加说明性评论;集合字段支持 Tracker 操作符,例如 set、add 和 remove
  • 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:获取单个冲刺,包括状态、归档标记以及计划/实际日期 这些工具为只读工具。使用返回的迭代 ID,在 issues_find 中检索该迭代的问题。
已保存的筛选器
  • filter_get:按数字 ID 获取已保存的问题筛选器
  • filter_find_issues:执行已保存的筛选器,并可控制分页参数和响应字段
  • filter_create:通过 Tracker 查询或字段值条件创建已保存的筛选器
  • filter_update:更新已保存筛选器的名称、条件、显示字段、排序、分组或文件夹

当 TRACKER_READ_ONLY=true 时,filter_create 和 filter_update 不可用。issues_find 和 issues_count 也接受 filter_id 作为 query 的替代项。

用户管理
  • users_get_all:获取组织中注册的用户账户信息

    • 参数:
      • per_page(可选):每页的用户数(默认值:50)
      • page(可选):要返回的页码(默认值:1)
    • 返回包含登录名、电子邮箱、许可证状态和组织详细信息的分页用户列表
    • 包含用户元数据,例如外部状态、停用状态和通知偏好设置
  • user_get:按登录名或 UID 获取特定用户的信息

    • 参数:user_id(字符串,用户登录名,如 "john.doe",或 UID,如 "12345")
    • 返回详细的用户信息,包括登录名、电子邮箱、许可证状态和组织详细信息
    • 同时支持用户登录名和数字用户 ID,便于灵活识别用户
  • user_get_current:获取当前已认证用户的信息

    • 无需参数
    • 返回与当前身份验证令牌关联的用户的详细信息
    • 包含已认证用户的登录名、电子邮箱、显示名称和组织详细信息
  • users_search:根据登录名、电子邮箱或真实姓名(名、姓或两者)搜索用户

    • 参数:login_or_email_or_name(字符串,要搜索的用户登录名、电子邮箱或真实姓名)
    • 如果有多个用户符合查询条件,则返回多个用户;如果只有一个用户符合条件,则返回该用户;如果没有匹配项,则返回空列表
    • 对真实姓名使用模糊匹配,相似度阈值为 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_url:生成问题的网页 URL

    • 参数:issue_id(字符串)
    • 返回:https://tracker.yandex.ru/{issue_id}
  • issue_get_comments:获取问题的所有评论

    • 参数:issue_id(字符串)
    • 返回:按时间顺序排列的评论列表及其元数据
  • issue_add_comment:为问题添加评论

    • 参数:
      • issue_id(字符串,必填,格式:"QUEUE-123")
      • text(字符串,必填):评论文本(Tracker 支持 Markdown)
      • summonees(字符串数组,可选):要召集的用户(登录名或 ID)。这是通过 API 提及/召集用户的方式(通知由此字段触发,而不是由文本中的 @login 触发)。
      • maillist_summonees(字符串数组,可选):要召集的邮件列表(电子邮件地址)
      • markup_type(字符串,可选):YFM(Markdown)使用 md
      • is_add_to_followers(布尔值,可选,默认值:true):将评论作者添加到关注者
    • 返回创建的评论对象
  • issue_update_comment:更新问题中的现有评论

    • 参数:
      • issue_id(字符串,必填,格式:"QUEUE-123")
      • comment_id(整数,必填):评论 ID
      • text(字符串,必填):新评论文本(Tracker 支持 Markdown)
      • summonees(字符串数组,可选):要召集的用户(登录名或 ID)
      • maillist_summonees(字符串数组,可选):要召集的邮件列表(电子邮件地址)
      • markup_type(字符串,可选):YFM(Markdown)使用 md
    • 返回更新后的评论对象
  • issue_delete_comment:删除问题中的评论

    • 参数:
      • issue_id(字符串,必填,格式:"QUEUE-123")
      • comment_id(整数,必填):评论 ID
    • 返回:null(成功)
  • issue_add_link:在一个问题与另一个问题之间创建关联

    • 参数:
      • issue_id(字符串,必填,格式:"QUEUE-123"):当前问题
      • relationship(字符串,必填):描述 issue_id 与关联问题之间关系的链接类型。可选值:relates、is dependent by、depends on、is subtask for、is parent task for、duplicates、is duplicated by、is epic of、has epic
      • issue(字符串,必填):要关联的问题的 ID 或键(例如:"TEST-123")
    • 返回创建的链接对象
  • issue_delete_link:删除一个问题与另一个问题之间的关联

    • 参数:
      • issue_id(字符串,必填,格式:"QUEUE-123")
      • link_id(整数,必填):链接 ID(由 issue_get_links 返回)
    • 返回:null(成功)
  • issue_get_links:获取相关问题的链接

    • 参数:issue_id(字符串)
    • 返回:指向相关、受阻或重复问题的链接
  • issue_get_worklogs:检索工时记录

    • 参数:
      • issue_ids(字符串数组,必填)
      • start_date_from(日期,可选):工时开始日期的包含式下限(YYYY-MM-DD)
      • start_date_to(日期,可选):工时开始日期的包含式上限(YYYY-MM-DD)
      • timezone(字符串,可选,默认值 UTC):比较 start 日期时使用的 IANA 时区(例如,Europe/Moscow)
    • 获取每个问题的所有相对分页页面,并根据工时记录的 start 字段(而非 createdAt)进行筛选
    • 返回 Tracker 提供的原样 ISO 8601 时长。按周计的值必须遵循 Tracker 的语义:P6W 表示 30 个工作日,而非 42 个日历日
  • issue_add_worklog:为问题添加工时记录(记录已投入的时间)

    • 参数:
      • issue_id(字符串,必填,格式:"QUEUE-123")
      • duration(字符串,必填):ISO-8601 时长(例如,PT1H30M)
      • comment(字符串,可选):工时记录评论
      • start(日期时间,可选):工时开始日期时间(未提供时区时假定为 UTC)
    • 返回创建的工时记录
  • issue_update_worklog:更新问题中的工作日志条目(耗时记录)

    • 参数:
      • issue_id(字符串,必填,格式:“QUEUE-123”)
      • worklog_id(整数,必填):工作日志条目 ID
      • duration(字符串,可选):ISO-8601 时长(例如 PT1H30M)
      • comment(字符串,可选):工作日志备注
      • start(日期时间,可选):工作开始日期时间(未提供时区时默认使用 UTC)
    • 返回更新后的工作日志条目
  • issue_delete_worklog:删除问题中的工作日志条目(耗时记录)

    • 参数:
      • issue_id(字符串,必填,格式:“QUEUE-123”)
      • worklog_id(整数,必填):工作日志条目 ID
    • 返回:null(成功)
  • issue_get_attachments:获取问题的附件

    • 参数:issue_id(字符串,格式:“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(字符串,格式:“QUEUE-123”)
    • 返回检查清单项列表,包括文本、状态、经办人和截止日期信息
  • issue_get_transitions:获取问题可能的状态转换

    • 参数:issue_id(字符串,格式:“QUEUE-123”)
    • 返回可对该问题执行的转换列表
    • 每个转换都包含 ID、显示名称和目标状态信息
  • issue_get_changelog:获取问题的变更历史记录(变更日志)

    • 参数:
      • issue_id(字符串,必填,格式:“QUEUE-123”):问题键
      • per_page(整数,可选,默认值:50):每页的条目数
      • cursor(字符串,可选):上一次调用返回的 next_cursor 值;传入该值以获取下一页(游标分页)
      • field(字符串,可选):按字段键筛选变更日志(例如 status)
      • type(字符串,可选):按变更类型筛选(例如,表示状态转换的 IssueWorkflow)
    • 返回一个对象,其中包含 entries(状态转换和字段编辑——包括谁在何时将哪些内容从 from 更改为 to——以及备注变更和已执行的触发器)和 next_cursor(将其作为 cursor 传回以获取下一页;没有更多页面时为 null)
  • issue_execute_transition:执行问题的状态转换

    • 参数:
      • issue_id(字符串,必填,格式:“QUEUE-123”):问题键
      • transition_id(字符串,必填):要执行的转换 ID。重要:必须是 issue_get_transitions 工具返回的 ID 之一
      • comment(字符串,可选):执行转换时添加的备注
      • fields(对象,可选):转换期间要设置的其他字段字典。常见字段包括用于关闭问题的 resolution(例如,'fixed'、'wontFix')、用于重新分配问题的 assignee 等。
    • 转换执行后,返回新状态下可用的转换列表
    • 使用说明:必须先调用 issue_get_transitions 获取可用转换,然后传入其中一个返回的转换 ID。不要使用任意转换 ID。
  • issue_close:使用解决方案关闭问题(便捷工具)

    • 参数:
      • issue_id(字符串,必填,格式:"QUEUE-123"):问题键
      • resolution_id(字符串,必填):关闭问题时设置的解决方案 ID(例如:'fixed'、'wontFix'、'duplicate')
      • comment(字符串,可选):关闭问题时添加的评论
    • 自动查找一个流转到“已完成”状态的转换,并使用指定的解决方案执行该转换
    • 返回新(已关闭)状态下可用的转换列表
    • 使用说明:关闭前,必须:
      1. 调用 issue_get 获取问题的 type 字段
      2. 使用 expand: ["issueTypesConfig"] 调用 get_queue_metadata,获取可用的解决方案
      3. 从与问题类型相匹配的 issueTypesConfig 条目中选择解决方案——每种问题类型都有各自有效的解决方案集合
  • issue_create:在队列中创建新问题

    • 参数:
      • queue(字符串,必填):创建问题的队列键(例如:'MYQUEUE')
      • summary(字符串,必填):问题标题/摘要
      • type(整数,可选):问题类型 ID(来自 get_issue_types 工具)
      • description(字符串,可选):问题描述
      • assignee(字符串或整数,可选):受指派人的登录名或 UID
      • priority(字符串,可选):优先级键(来自 get_priorities 工具)
      • fields(对象,可选):创建问题时设置的其他字段。重要:创建问题前,必须调用 queue_get_fields 获取可用字段(默认同时返回全局字段和本地字段)。schema.required=true 的字段为必填项。使用字段的 id 属性作为此映射中的键(例如:{"fieldId": "value"})
    • 返回新创建的问题对象,其中包含所有标准问题字段
    • 遵循 TRACKER_LIMIT_QUEUES 限制
  • issue_update:更新现有问题

    • 参数:
      • issue_id(字符串,必填,格式:"QUEUE-123"):要更新的问题键
      • summary(字符串,可选):新的问题标题/摘要
      • description(字符串,可选):新的问题描述
      • markup_type(字符串,可选):描述文本的标记类型(YFM 标记请使用 'md')
      • parent(IssueUpdateParent,可选):父问题引用,包含 id(字符串)和/或 key(字符串,例如:'QUEUE-123')
      • sprint(IssueUpdateSprint 数组,可选):Sprint 分配项——对象数组,每个对象包含 id(整数)字段
      • type(IssueUpdateType,可选):问题类型,包含 id(字符串)和/或 key(字符串,例如:'bug'、'task')
      • priority(IssueUpdatePriority,可选):优先级,包含 id(字符串)和/或 key(字符串,例如:'critical'、'normal')
      • followers(IssueUpdateFollower 数组,可选):关注者——对象数组,每个对象包含 id(字符串,用户 ID 或登录名)
      • project(IssueUpdateProject,可选):项目,包含 primary(整数,主项目短 ID)以及可选的 secondary(整数数组)
      • tags(字符串数组,可选):问题标签
      • version(整数,可选):用于乐观锁定的问题版本——只会修改当前版本
      • fields(对象,可选):要更新的其他字段。使用 queue_get_fields 查找可用字段。
    • 返回更新后的问题对象,其中包含所有标准问题字段
    • 只更新已提供的字段;未提供的字段保持不变
    • 遵循 TRACKER_LIMIT_QUEUES 限制
  • issue_move:将问题移动到其他队列

    • 参数:
      • issue_id(字符串,必填,格式:"QUEUE-123"):要移动的问题键
      • queue(字符串,必填):目标队列键(例如,'MYQUEUE')
      • notify(布尔值,可选,默认值为 true):通知问题字段中提及的用户
      • notify_author(布尔值,可选,默认值为 false):通知问题作者
      • move_all_fields(布尔值,可选,默认值为 false):如果目标队列中存在匹配项,则保留版本、组件和项目;否则将其清除
      • initial_status(布尔值,可选,默认值为 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(布尔值,可选,默认值:false):是否在问题结果中包含问题描述。描述可能很长,因此仅在需要时使用。
      • fields(字符串列表,可选):要包含在响应中的字段。只选择所需字段有助于优化上下文窗口用量。如果未指定,则返回所有可用字段。
      • page(可选):分页页码(默认值:1)
      • per_page(可选):每页项目数(默认值:100)。如果结果超出上下文窗口,可能会减少。
    • 返回每页指定数量的问题,最多不超过该数量
  • issues_count:使用 Yandex Tracker Query Language 统计符合查询条件的问题数量

    • 参数:
      • query(可选):使用 Yandex Tracker Query Language 语法的查询字符串
      • filter_id(可选):已保存的筛选器 ID;不能与 query 同时使用
    • 返回符合指定条件的问题总数
    • 支持查询语言的所有功能:字段筛选、日期函数、逻辑运算符和复杂表达式
    • 适用于分析、报告,以及在不检索完整问题数据的情况下了解问题分布

http 传输

MCP 服务还可以以 streamable-http 模式运行,用于基于 Web 的集成,或在 stdio 传输不适用时使用。

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 Server 时使用以下格式,则可以跳过 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 支持 OAuth 2.0 身份验证,可作为静态 API 令牌的安全替代方案。配置后,服务将充当 OAuth 提供方,为 MCP 客户端与 Yandex OAuth 服务之间的身份验证提供支持。

OAuth 的工作原理

MCP 服务实现了标准的 OAuth 2.0 授权码流程:

  1. 客户端注册:你的 MCP 客户端向服务注册以获取客户端凭据
  2. 授权:用户会被重定向到 Yandex OAuth 进行身份验证
  3. 令牌交换:服务将授权码交换为访问令牌
  4. API 访问:客户端使用持有者令牌发送所有 API 请求
  5. 令牌刷新:令牌过期后,无需重新进行身份验证即可刷新
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 应用
  1. 前往 Yandex OAuth 并创建一个新应用
  2. 将回调 URL 设置为:{MCP_SERVER_PUBLIC_URL}/oauth/yandex/callback
  3. 请求以下权限:
    • tracker:read - Tracker 的读取权限
    • tracker:write - Tracker 的写入权限
  4. 保存你的 Client ID 和 Client Secret
OAuth 与静态令牌身份验证
特性OAuth静态令牌
安全性会过期的动态令牌长期有效的静态令牌
用户体验交互式登录流程一次性配置
令牌管理自动刷新手动轮换
访问控制按用户进行身份验证共享令牌
设置复杂度需要设置 OAuth 应用简单的令牌配置
OAuth 模式的限制
  • 目前,OAuth 模式要求 MCP 服务可通过公网访问,以接收回调 URL 请求
  • OAuth 模式最适合支持基于 Web 的身份验证流程的交互式客户端
在 MCP 客户端中使用 OAuth

启用 OAuth 后,MCP 客户端需要:

  1. 支持 OAuth 2.0 授权码流程
  2. 在访问令牌过期时处理令牌刷新
  3. 安全存储刷新令牌,以便持续进行身份验证

注意:目前并非所有 MCP 客户端都支持 OAuth 身份验证。请查看客户端文档,确认其是否兼容 OAuth。

Claude Code 的配置示例:

claude mcp add --transport http yandex-tracker https://your-mcp-server.example.com/mcp/ -s user
OAuth 数据存储

MCP 服务支持两种不同的 OAuth 数据存储后端(客户端注册信息、访问令牌、刷新令牌和授权状态):

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 存储,并在使用后自动清理
  • 访问令牌:根据令牌有效期自动过期
  • 刷新令牌:持久化存储,直到被撤销
  • 键命名空间:使用 oauth:* 前缀,避免与 Redis 中的其他数据冲突
令牌加密(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 支持多种身份验证方式,并设有明确的优先级顺序。服务器会按照以下层级使用第一个可用的身份验证方式:

身份验证优先级顺序
  1. 动态 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
  2. 透传 Bearer OAuth 令牌

    • 当 MCP OAuth 中间件未提供令牌时,服务器可以从传入的 Authorization: Bearer <token> 标头中读取 Yandex OAuth 令牌
    • 适用于受信任的反向代理或网关之后:代理或网关负责验证用户身份、解析其已存储的 Yandex OAuth 令牌,并在每个请求中注入该令牌
    • OAuth 模式已启用且处于活动状态时,MCP OAuth 令牌仍具有优先权
  3. 静态 OAuth 令牌

    • 通过环境变量提供的传统 OAuth 令牌
    • 所有请求共用同一个令牌
    • 必需的环境变量:TRACKER_TOKEN(你的 OAuth 令牌)
  4. 静态 IAM 令牌

    • 用于服务间身份验证的 IAM(身份与访问管理)令牌
    • 适用于自动化系统和 CI/CD 流水线
    • 必需的环境变量:TRACKER_IAM_TOKEN(你的 IAM 令牌)
  5. 动态 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 中联合账号所必需的。联合用户通过所属组织的身份提供方(IdP)进行身份验证,并使用此 OAuth 流程访问 Yandex Tracker API。

重要说明
  • 服务会按照上述顺序检查身份验证方法
  • 同一时间只会使用一种身份验证方法
  • 在生产环境中,建议使用动态令牌(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 文件中指定的条款进行许可。

支持

如有问题或疑问:

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。