Yandex跟踪器MCP服务器
mcp名称:io.github.aikts/yandex-tracker-mcp
一个全面的模型上下文协议(MCP)服务器,使AI助手能够与Yandex Tracker API进行交互。此服务器通过可选的Redis缓存提供对Yandex Tracker问题、队列、评论、工作日志和搜索功能的安全、经过身份验证的访问,以提高性能。
特性
- 完成队列管理:列出并访问所有可用的Yandex Tracker队列,支持分页、标签检索和详细的元数据
- 用户管理:检索用户帐户信息,包括登录详细信息、电子邮件地址、许可证状态和组织数据
- 完整问题生命周期:创建、读取、更新和管理问题,支持自定义字段、附件和工作流转换
- 状态工作流管理:执行状态转换,解决问题,并导航复杂的工作流程
- 田间管理:访问全局字段、队列特定的本地字段、状态、问题类型、优先级和解决方案
- 高级查询语言:完全支持Yandex Tracker查询语言,具有复杂的过滤、排序和日期功能
- 性能缓存:可选的Redis缓存层,可缩短响应时间
- 安全控制:可配置的队列访问限制和安全令牌处理
- 多种运输方式:支持stdio、SSE(已弃用)和HTTP传输,以实现灵活集成
- OAuth 2.0身份验证:动态基于令牌的身份验证,支持自动刷新,可替代静态API令牌
- 组织支持:兼容标准和云组织ID
组织ID配置
根据您的Yandex组织类型选择以下选项之一:
- Yandex云组织:使用
TRACKER_CLOUD_ORG_IDenv-var稍后适用于Yandex Cloud管理的组织 - Yandex 360组织:使用
TRACKER_ORG_ID稍后为Yandex 360组织提供env var
您可以在Yandex Tracker URL或组织设置中找到您的组织ID。
MCP客户端配置
在Claude Desktop中安装扩展
Yandex Tracker MCP服务器可以一键安装在Claude Desktop中 扩展.
安装
- 下载
*.mcpb文件来自 . - 双击下载的文件将其安装在Claude Desktop中。 img.png
- 在提示时提供您的Yandex Tracker OAuth令牌。 img.png
- 确保已启用扩展-现在您可以使用此MCP服务器。
手动安装
先决条件
- 紫外线 全球安装
- 具有适当权限的有效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 - 窗户:
%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设置→ 级联选项卡→ 模型上下文协议(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"
}
}
}
}Zed
配置文件路径:
~/.config/zed/settings.json
访问方式: Cmd+, (macOS)或 Ctrl+, (Linux/Windows)或命令面板:“zed:open settings”
注: 需要Zed Preview版本以支持MCP。
使用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代码
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代码 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"
}
}
}
}Other MCP-Compatible Clients
对于其他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协议公开以下工具:
Queue Management
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_get_fields:获取特定队列的字段
- 参数: - queue_id (字符串,必填):队列键,如“SOMEPROJECT” - include_local_fields (boolean,可选,默认值:true):是否包含特定于队列的本地字段 - 返回全局字段和可选的本地(特定于队列)字段的列表 - 在以下情况下并行请求获取两种字段类型 include_local_fields 是真的 - 这 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 限制
User Management
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% - 优先考虑登录和电子邮件的精确匹配,而不是模糊的名称匹配
Field Management
get_global_fields:获取Yandex Tracker中所有可用的全局字段
- 返回可用于问题的全局字段的完整列表 - 包括字段架构、类型信息和配置
Status and Type Management
get_statuses:获取所有可用的问题状态
- 返回可分配的问题状态的完整列表 - 包括状态ID、名称和类型信息
get_issue_types:获取所有可用的问题类型
- 返回用于创建/更新问题的完整问题类型列表 - 包括类型ID、名称和配置详细信息
get_priorities:获取所有可用的问题优先级
- 返回可分配给问题的完整优先级列表 - 包括优先级键、名称和订单信息
get_resolutions:获取所有可用的问题解决方案
- 返回关闭问题时可以使用的完整解决方案列表 - 包括分辨率键、名称、描述和订单信息
Issue Operations
issue_get:按ID检索详细的问题信息
- 参数: - issue_id (字符串,格式:“QUEUE-123”) - include_description (布尔值,可选,默认值:true):是否在结果中包含问题描述。可以很大,所以只在需要时使用。 - 返回完整的问题数据,包括状态、受让人、描述等。
issue_get_url:为问题生成web 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 (字符串,可选):使用 md YFM(降价) - is_add_to_followers (布尔值,可选,默认值:true):将评论作者添加到关注者中 - 返回已创建的注释对象
issue_update_comment:更新问题中的现有评论
- 参数: - issue_id (字符串,必填,格式:“QUEUE-123”) - comment_id (int,必填):评论ID - text (字符串,必填):新评论文本(Tracker支持markdown) - summonees (字符串数组,可选):要召唤的用户(登录名或ID) - maillist_summonees (字符串数组,可选):要传唤的邮件列表(电子邮件) - markup_type (字符串,可选):使用 md YFM(降价) - 返回更新的注释对象
issue_delete_comment:从问题中删除评论
- 参数: - issue_id (字符串,必填,格式:“QUEUE-123”) - comment_id (int,必填):评论ID - 退货: null (成功)
issue_get_links:获取相关问题链接
- 参数: issue_id (字符串) - 返回相关、阻止或重复问题的链接
issue_get_worklogs:检索工作日志条目
- 参数: issue_ids (字符串数组) - 返回指定问题的时间跟踪数据
issue_add_worklog:在问题中添加工作日志条目(记录花费的时间)
- 参数: - issue_id (字符串,必填,格式:“QUEUE-123”) - duration (字符串,必填):ISO-8601持续时间(例如。 PT1H30M) - comment (字符串,可选):工作日志注释 - start (日期时间,可选):工作开始日期时间(如果未提供时区,则假定为UTC) - 返回创建的工作日志条目
issue_update_worklog:更新问题中的工作日志条目(花费时间记录)
- 参数: - issue_id (字符串,必填,格式:“QUEUE-123”) - worklog_id (int,必填):工作日志条目ID - duration (字符串,可选):ISO-8601持续时间(例如。 PT1H30M) - comment (字符串,可选):工作日志注释 - start (日期时间,可选):工作开始日期时间(如果未提供时区,则假定为UTC) - 返回更新的工作日志条目
issue_delete_worklog:从问题中删除工作日志条目(花费时间记录)
- 参数: - issue_id (字符串,必填,格式:“QUEUE-123”) - worklog_id (int,必填):工作日志条目ID - 退货: null (成功)
issue_get_attachments:获取问题的附件
- 参数: issue_id (字符串,格式:“QUEUE-123”) - 返回包含指定问题元数据的附件列表
issue_get_checklist:获取问题的清单项目
- 参数: issue_id (字符串,格式:“QUEUE-123”) - 返回清单项目列表,包括文本、状态、受让人和截止日期信息
issue_get_transitions:获取问题的可能状态转换
- 参数: issue_id (字符串,格式:“QUEUE-123”) - 返回可对问题执行的可用转换列表 - 每个转换都包括一个ID、显示名称和目标状态信息
issue_execute_transition:对问题执行状态转换
- 参数: - issue_id (字符串,必填,格式:“QUEUE-123”):问题密钥 - transition_id (string,必填):要执行的转换ID。 重要:必须是返回的ID之一 issue_get_transitions 工具 - comment (string,可选):执行转换时添加的可选注释 - fields (object,可选):转换期间要设置的其他字段的字典。常见字段包括 resolution (例如,“固定”、“wontFix”)用于结算问题, assignee 用于重新分配等。 - 执行转换后,返回新状态的可用转换列表 - 使用说明:你必须先打电话 issue_get_transitions 以检索可用的转换,然后传递返回的转换ID之一。不要使用任意的转换ID。
issue_close:用解决方案(便利工具)解决问题
- 参数: - issue_id (字符串,必填,格式:“QUEUE-123”):问题密钥 - resolution_id (字符串,必填):关闭时要设置的分辨率ID(例如,“fixed”、“wontFix”、“duplicate”) - comment (string,可选):关闭问题时添加的可选注释 - 自动查找到“完成”状态的转换,并以指定的分辨率执行 - 返回新(关闭)状态的可用转换列表 - 使用说明:在结束之前,您必须: 1. 呼叫 issue_get 检索问题的 type 领域 1. 呼叫 get_queue_metadata 和 expand: ["issueTypesConfig"] 获取可用的分辨率 1. 从以下选项中选择一个分辨率 issueTypesConfig 与问题类型匹配的条目-每种问题类型都有自己的一组有效解决方案
issue_create:在队列中创建新问题
- 参数: - queue (字符串,必填):创建问题的队列键(例如,“MYQUEUE”) - summary (字符串,必填):问题标题/摘要 - type (int,可选):问题类型ID(来自 get_issue_types 工具) - description (字符串,可选):问题描述 - assignee (string或int,可选):受让人登录名或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 (int)字段 - type (IssueUpdateType,可选):问题类型为 id (字符串)和/或 key (字符串,例如“bug”、“任务”) - priority (IssueUpdatePriority,可选):优先级为 id (字符串)和/或 key (字符串,例如“严重”、“正常”) - followers (IssueUpdateFollower数组,可选):追随者-对象数组 id (字符串、用户ID或登录名) - project (IssueUpdateProject,可选):项目 primary (int,主项目shortId)和可选 secondary (整数数组) - attachment_ids (字符串数组,可选):要附加的临时文件的ID - description_attachment_ids (字符串数组,可选):要嵌入描述中的临时文件的ID - tags (字符串数组,可选):问题标签 - version (int,可选):发布乐观锁定版本-仅对当前版本进行更改 - fields (对象,可选):要更新的其他字段。使用 queue_get_fields 以发现可用字段。 - 返回包含所有标准问题字段的更新问题对象 - 仅更新提供的字段;省略的字段保持不变 - 尊重 TRACKER_LIMIT_QUEUES 限制
Search and Discovery
issues_find:使用搜索问题 Yandex跟踪器查询语言
- 参数: - query (必填):使用Yandex Tracker查询语言语法查询字符串 - include_description (布尔值,可选,默认值:false):是否在问题结果中包含问题描述。可以很大,所以只在需要时使用。 - fields (字符串列表,可选):要包含在响应中的字段。通过仅选择所需字段来帮助优化上下文窗口的使用。如果未指定,则返回所有可用字段。 - page (可选):分页页码(默认值:1) - per_page (可选):每页项目数(默认值:100)。如果结果超出上下文窗口,则可能会减少。 - 每页最多返回指定数量的问题
issues_count:使用以下方式统计与查询匹配的问题 Yandex跟踪器查询语言
- 参数: - query (必填):使用Yandex Tracker查询语言语法查询字符串 - 返回符合指定条件的问题总数 - 支持所有查询语言功能:字段过滤、日期函数、逻辑运算符和复杂表达式 - 可用于分析、报告和理解问题分布,而无需检索完整的问题数据
http传输
MCP服务器也可以在可流式http模式下运行,用于基于web的集成,或者在stdio传输不合适时运行。
可流式传输的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启动可流式传输的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您可以跳过配置 TRACKER_CLOUD_ORG_ID 或 TRACKER_ORG_ID 如果您在连接到MCP服务器时使用以下格式(例如克劳德代码):
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&"您也可以跳过配置全局 TRACKER_TOKEN 如果您选择使用OAuth 2.0身份验证,则使用环境变量(见下文)。
OAuth 2.0身份验证
Yandex Tracker MCP服务器支持OAuth 2.0身份验证,作为静态API令牌的安全替代方案。配置后,服务器充当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模式要求MCP服务器可公开访问回调URL
- OAuth模式最适合支持基于web的身份验证流的交互式客户端
在MCP客户端中使用OAuth
启用OAuth后,MCP客户端将需要:
- 支持OAuth 2.0授权码流
- 访问令牌过期时处理令牌刷新
- 安全地存储刷新令牌以进行持久身份验证
备注:并非所有MCP客户端当前都支持OAuth身份验证。检查客户的文档以了解OAuth兼容性。
Claude代码的示例配置:
claude mcp add --transport http yandex-tracker https://your-mcp-server.example.com/mcp/ -s userOAuth数据存储
MCP服务器支持OAuth数据的两种不同存储后端(客户端注册、访问令牌、刷新令牌和授权状态):
InMemory存储(默认)
内存存储将所有OAuth数据保存在服务器内存中。这是默认选项,不需要额外配置。
特点:
- 坚持:服务器重新启动时数据丢失
- 演出:由于数据存储在内存中,因此访问速度非常快
- 可扩展性:仅限于单个服务器实例
- 设置:不需要额外的依赖关系
- 最佳:开发、测试或单实例部署,重启时丢失OAuth会话是可以接受的
配置:
OAUTH_STORE=memory # Default value, can be omittedRedis商店
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=
# Multiple keys for rotation (first encrypts, all decrypt)
OAUTH_ENCRYPTION_KEYS=,
密钥轮换允许无缝密钥更新:首先添加新密钥,等待旧令牌过期,然后删除旧密钥。
重要提示:
- 这两家商店都使用与工具缓存系统相同的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
- 直通承载OAuth令牌
- 当MCP OAuth中间件不提供令牌时,服务器可以从传入的令牌中读取Yandex OAuth令牌 Authorization: Bearer 头球 - 在可信任的反向代理或网关后面很有用,可以对用户进行身份验证,解析其存储的Yandex OAuth令牌,并根据请求注入它 - 启用并激活OAuth模式时,MCP OAuth的令牌仍具有优先级
- 静态OAuth令牌
- 通过环境变量提供的传统OAuth令牌 - 用于所有请求的单个令牌 - 必需的环境变量: TRACKER_TOKEN (您的OAuth令牌)
- 静态IAM令牌
- IAM(身份和访问管理)令牌,用于服务间身份验证 - 适用于自动化系统和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 # 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。
重要说明
- 服务器按照上面列出的顺序检查身份验证方法
- 一次只能使用一种身份验证方法
- 对于生产使用,建议使用动态令牌(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
# 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=> # Default: (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 permissionsDocker部署
使用预构建图像(推荐)
# 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许可证
本项目根据 许可证 文件。
支持
对于问题和疑问:
- 查看Yandex Tracker API文档
- 提交问题至https://github.com/aikts/yandex-tracker-mcp/issues
