问题跟踪协议服务器

Linear MCP Server是一个模型上下文协议(MCP)服务器实现,通过标准化接口提供对Linear问题跟踪系统的访问,支持创建、检索、更新和删除问题,以及高级搜索和项目更新管理。

  • by cosmix
  • TypeScript
  • 本地部署
  • 30 星标
  • 更新于
在 GitHub 查看 cosmix/linear-mcp

使用说明

线性MCP服务器

一种模型上下文协议(MCP)服务器实现,通过标准化接口提供对Linear问题跟踪系统的访问。

特性

  • 使用标签支持创建新问题和子问题
  • 检索线性项目列表
  • 检索项目更新
  • 创建具有运行状况的新项目更新
  • 通过全字段修改更新现有问题
  • 删除验证问题
  • 使用“me”关键字自行分配问题
  • 使用Linear强大的过滤功能进行高级搜索
  • 按周期筛选问题(按UUID或编号筛选当前、下一个、上一个或特定周期)
  • 使用markdown支持向问题添加评论
  • 按ID或具有可选关系的键查询线性问题
  • 使用具有增强元数据的自定义查询搜索问题
  • 使用Linear官方SDK进行类型安全操作
  • 全面的错误处理
  • 费率限制处理
  • 干净的数据转换
  • 通过团队继承进行亲子关系跟踪
  • 标签管理和同步

先决条件

  • 包子 运行时(v1.0.0或更高版本)
  • 具有API访问权限的线性帐户

环境变量

LINEAR_API_KEY=your_api_key  # Your Linear API token

安装和设置

1.克隆存储库:

git clone [repository-url]
cd linear-mcp

2.安装依赖项并构建:

bun install
bun run build

3.配置MCP服务器:

编辑相应的配置文件:

macOS:

  • 克莱恩: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
  • 克劳德桌面: ~/Library/Application Support/Claude/claude_desktop_config.json

窗户:

  • 克莱恩: %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json
  • 克劳德桌面: %APPDATA%\Claude Desktop\claude_desktop_config.json

Linux:

  • 克莱恩: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
  • 克劳德桌面: 遗憾的是,它还不存在

在下面添加以下配置 mcpServers 对象:

{
  "mcpServers": {
    "linear": {
      "command": "node",
      "args": ["/absolute/path/to/linear-mcp/build/index.js"],
      "env": {
        "LINEAR_API_KEY": "your_api_key"
      }
    }
  }
}

4.重新启动MCP服务器。

在Cline的MCP设置中,重新启动MCP服务器。重新启动Claude Desktop以加载新的MCP服务器。

发展

运行开发服务器:

bun run dev

构建项目:

bun run build

可用的MCP工具

有关所有工具的详细使用示例,请参阅 用法.md.

创建_发行

创建新的线性问题或子问题。

输入架构:

{
  "teamId": "string",     
  "title": "string",      
  "description": "string",
  "parentId": "string",   
  "status": "string",
  "priority": "number",   
  "assigneeId": "string | 'me'",
  "labelIds": ["string"]  
}

update_issue

更新现有的线性问题。

输入架构:

{
  "issueId": "string",    
  "title": "string",
  "description": "string",
  "status": "string",     // Expects status NAME (e.g., "In Progress"). Must be valid for the issue's team.
  "priority": "number",   // Expects 0 (None) to 4 (Low).
  "assigneeId": "string | 'me'",
  "labelIds": ["string"],
  "cycleId": "string"
}

获取问题

通过可选关系获取有关特定线性问题的详细信息。

输入架构:

{
  "issueId": "string",
  "includeRelationships": "boolean"  
}

搜索问题

使用查询字符串和高级过滤器搜索线性问题。支持Linear强大的过滤功能。

输入架构:

{
  "query": "string",
  "includeRelationships": "boolean",
  "filter": {
    "title": { "contains": "string", "eq": "string", ... },
    "description": { "contains": "string", "eq": "string", ... },
    "priority": { "gte": "number", "lt": "number", ... },
    "estimate": { "eq": "number", "in": ["number"], ... },
    "dueDate": { "lt": "string", "gt": "string", ... },
    "createdAt": { "gt": "P2W", "lt": "2024-01-01", ... },
    "updatedAt": { "gt": "P1M", ... },
    "completedAt": { "null": true, ... },
    "assignee": { "id": { "eq": "string" }, "name": { "contains": "string" } },
    "creator": { "id": { "eq": "string" }, "name": { "contains": "string" } },
    "team": { "id": { "eq": "string" }, "key": { "eq": "string" } },
    "state": { "type": { "eq": "started" }, "name": { "eq": "string" } },
    "labels": { "name": { "in": ["string"] }, "every": { "name": { "eq": "string" } } },
    "project": { "id": { "eq": "string" }, "name": { "contains": "string" } },
    "and": [{ /* filters */ }],
    "or": [{ /* filters */ }],
    "assignedTo": "string | 'me'",
    "createdBy": "string | 'me'"
  },
  "projectId": "string",
  "projectName": "string"
}

支持的比较器:

  • 字符串字段: eq, neq, in, nin, contains, startsWith, endsWith (加上不区分大小写的变体)
  • 数字字段: eq, neq, lt, lte, gt, gte, in, nin
  • 日期字段: eq, neq, lt, lte, gt, gte (支持ISO 8601持续时间)

get_teams

获取具有可选名称/密钥过滤的线性团队列表。

输入架构:

{
  "nameFilter": "string"  
}

删除_问题

删除现有的线性问题。

输入架构:

{
  "issueId": "string"
}

创建注释

对线性问题创建新评论。

输入架构:

{
  "issueId": "string",
  "body": "string"
}

get_项目

获取具有可选名称过滤和分页的线性项目列表。

输入架构:

{
  "nameFilter": "string",
  "includeArchived": "boolean",
  "first": "number",
  "after": "string"
}

获取项目更新

使用可选的筛选参数获取给定项目ID的项目更新。

输入架构:

{
  "projectId": "string",
  "includeArchived": "boolean",
  "first": "number",
  "after": "string",
  "createdAfter": "string",
  "createdBefore": "string",
  "userId": "string | 'me'",
  "health": "string"
}

创建项目更新

为线性项目创建新的更新。

输入架构:

{
  "projectId": "string",
  "body": "string",
  "health": "onTrack | atRisk | offTrack",
  "isDiffHidden": "boolean"
}

技术细节

  • 在严格模式下使用TypeScript构建
  • 使用Linear的官方SDK(@Linear/SDK)
  • 使用MCP SDK(@modelcontextprotocol/SDK 1.4.0)
  • 通过API令牌进行身份验证
  • 全面的错误处理
  • 利率限制考虑因素
  • Bun运行时可提高性能
  • ESM模块贯穿始终
  • Vite构建系统
  • 类型安全操作
  • 数据清理功能:
    • 问题提及提取(ABC-123格式)
    • 用户提及提取(@username格式)
    • Markdown内容清理
    • AI上下文的内容优化
  • 自我分配支持:
    • 自动当前用户分辨率
    • 创建/更新操作中的“me”关键字支持
    • 高效的用户ID缓存
  • 高级搜索功能:
    • 使用Linear的API进行全面过滤
    • 支持所有现场比较器
    • 关系过滤
    • 逻辑运算符(and,or)
    • 相对日期过滤
    • 按受让人/创建者(包括本人)筛选
    • 支持特定用户ID
    • 按ID或名称筛选项目
    • 高效的查询优化
  • 项目管理特点:
    • 带有过滤和分页功能的项目列表
    • 创建项目更新并跟踪运行状况
    • 使用筛选选项进行项目更新检索

错误处理

服务器实施了全面的错误处理策略:

  • 网络错误检测和适当的消息传递
  • HTTP状态码处理
  • 带有状态代码的详细错误消息
  • 将错误详细信息记录到控制台
  • 所有参数的输入验证
  • 标签验证和同步
  • 通过MCP协议进行安全错误传播
  • 速率限制检测和处理
  • 身份验证错误处理
  • 查询处理无效
  • 子问题的团队继承验证
  • 用户分辨率验证
  • 搜索筛选器验证

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。