返回市场
线性-MCP-Go

线性-MCP-Go

作者:geropl10 星标更新:2025-10-09

项目介绍

Linear MCP Server

这是一个用Go编写的Linear模型上下文协议(MCP)服务器。该服务器提供了通过MCP协议与Linear API交互的工具。

功能

  • 创建、更新和搜索Linear问题
  • 获取分配给用户的任务
  • 向问题添加评论并回复现有评论
  • 支持URL的评论操作 - 直接粘贴Linear评论URL,无需手动提取ID
  • 获取团队信息
  • 对API请求进行速率限制以遵守Linear的API限制

预备条件

  • Go 1.23或更高版本
  • Linear API密钥

安装

从发布版安装

预构建的二进制文件可以在GitHub Releases页面上找到,适用于Linux、macOS和Windows。

  1. 下载适合您平台的二进制文件
  2. 将其设置为可执行(Linux/macOS):
chmod +x linear-mcp-go-*
  1. 按照使用部分所述运行二进制文件

自动化安装

# 下载最新发布的Linux二进制文件
RELEASE=$(curl -s https://api.github.com/repos/geropl/linear-mcp-go/releases/latest)
DOWNLOAD_URL=$(echo $RELEASE | jq -r '.assets[] | select(.name | contains("linux")) | .browser_download_url')
curl -L -o ./linear-mcp-go $DOWNLOAD_URL
chmod +x ./linear-mcp-go

# 设置MCP服务器(如.gitpod.yml,dotfiles仓库等)
./linear-mcp-go setup --tool=cline

使用方法

查看版本

要检查Linear MCP服务器的版本:

./linear-mcp-go version

这将显示版本、git提交和构建日期信息。

运行服务器

  1. 将您的Linear API密钥设置为环境变量:
export LINEAR_API_KEY=your_linear_api_key
  1. 运行服务器:
# 在只读模式下运行(默认)
./linear-mcp-go serve

# 启用写入访问权限运行
./linear-mcp-go serve --write-access

服务器将启动并监听标准输入/输出上的MCP请求。

为AI助手设置

setup命令自动化了各种AI助手的安装和配置过程:

# 将您的Linear API密钥设置为环境变量
# 唯一例外:Ona在设置时不需要此步骤!
export LINEAR_API_KEY=your_linear_api_key

# 为Cline设置(默认)
./linear-mcp-go setup

# 启用写入访问权限设置
./linear-mcp-go setup --write-access

# 为只读工具启用自动批准
./linear-mcp-go setup --auto-approve=allow-read-only

# 为特定工具启用自动批准
./linear-mcp-go setup --auto-approve=linear_get_issue,linear_search_issues

# 启用写入访问权限和只读工具的自动批准
./linear-mcp-go setup --write-access --auto-approve=allow-read-only

# 为不同的工具设置(目前仅支持“cline”)
./linear-mcp-go setup --tool=cline

此命令:

  1. 检查是否已安装Linear MCP二进制文件
  2. 如果需要,将当前二进制文件复制到安装目录
  3. 配置AI助手以使用Linear MCP服务器
  4. 根据请求设置指定工具的自动批准

--auto-approve标志可用于指定哪些工具应在Cline配置中自动批准:

  • --auto-approve=allow-read-only:自动批准所有只读工具(linear_search_issueslinear_get_user_issueslinear_get_issuelinear_get_teams
  • --auto-approve=tool1,tool2,...:自动批准指定逗号分隔的工具列表

目前支持的AI助手:

  • Cline(VSCode扩展)

默认情况下,服务器以只读模式运行,这意味着以下工具被禁用:

  • linear_create_issue
  • linear_update_issue
  • linear_add_comment
  • linear_reply_to_comment
  • linear_update_issue_comment

要启用这些工具,请使用--write-access=true标志。

可用工具

linear_create_issue

创建具有指定详细信息的新Linear问题。支持创建父子关系(子问题)并分配标签。

参数:

  • title(必需):问题标题
  • team(必需):团队标识符(键、UUID或名称)
  • description:问题描述
  • priority:优先级。接受值:0/'无优先级',1/'紧急',2/'高',3/'中',4/'低'
  • status:问题状态
  • makeSubissueOf通过指定父问题ID或标识符(例如,'TEAM-123')创建子问题。这在Linear中建立了父子关系。
  • labels:可选的逗号分隔的标签ID或名称列表
  • project:可选的项目标识符(ID、名称或slug)以分配问题

示例:创建子问题

{
  "title": "实现登录表单验证",
  "team": "ENG",
  "makeSubissueOf": "ENG-42",
  "description": "为登录表单添加客户端验证"
}

linear_update_issue

更新现有Linear问题的属性。

参数:

  • id(必需):问题ID
  • title:新标题
  • description:新描述
  • priority:优先级。接受值:0/'无优先级',1/'紧急',2/'高',3/'中',4/'低'
  • status:新状态

linear_search_issues

使用灵活的标准搜索Linear问题。

参数:

  • query:在标题和描述中搜索的可选文本
  • teamId:按团队ID过滤
  • status:按状态名称过滤(例如,'正在进行中','已完成')
  • assigneeId:按分配人的用户ID过滤
  • labels:按标签名称过滤(逗号分隔)
  • priority:优先级。接受值:0/'无优先级',1/'紧急',2/'高',3/'中',4/'低'
  • estimate:按估计点数过滤
  • includeArchived:是否包括存档的问题(默认:false)
  • limit:返回的最大结果数(默认:1-10)

linear_get_user_issues

检索分配给特定用户或经过身份验证的用户的问题。

参数:

  • userId:可选的用户ID。如果没有提供,则返回经过身份验证的用户的问题
  • includeArchived:是否包括存档的问题
  • limit:要返回的最大问题数(默认:50)

linear_get_issue

通过ID检索单个Linear问题。

参数:

  • issueId(必需):要检索的问题ID

linear_add_comment

向现有Linear问题添加评论。支持通过传递thread参数中的评论标识符来回复现有评论。

参数:

  • issue(必需):要评论的问题ID或标识符(例如,'TEAM-123')
  • body(必需):以markdown格式的评论文本
  • thread:可选的评论标识符以回复。接受值:完整的Linear评论URL、UUID、简写(comment-abc123)或哈希(abc123)。创建一个线程回复而不是顶级评论。
  • createAsUser:可选的自定义用户名以显示评论

URL支持:您可以直接将完整的Linear评论URL(例如,https://linear.app/.../issue/TEST-10/...#comment-abc123)传递给thread参数。工具会自动解析URL为UUID,然后再调用API。

linear_reply_to_comment

用于回复现有评论的便捷工具。自动解析评论中的问题,因此您只需提供评论标识符和回复文本。

参数:

  • thread(必需):要回复的评论。接受值:完整的Linear评论URL、UUID、简写(comment-abc123)或哈希(abc123)
  • body(必需):以markdown格式的回复文本
  • createAsUser:可选的自定义用户名以显示回复

为什么使用这个工具? 当您有评论URL或ID并且想要回复时,这个工具比linear_add_comment更简单,因为您不需要单独指定问题。工具会自动从评论中查找问题。

linear_get_issue_comments

支持分页和线程导航的Linear问题评论检索。

参数:

  • issue(必需):要检索评论的问题ID或标识符(例如,'TEAM-123')
  • thread:可选的父评论UUID以检索其回复。如果没有提供,则返回顶级评论
  • limit:要返回的最大评论数(默认:10)
  • after:分页的游标,获取此点之后的评论

使用场景:

  • 查看问题的所有评论
  • 通过在thread参数中传递评论UUID来导航评论线程
  • 获取评论UUID以回复(尽管在linear_add_comment中支持URL,这变得不那么必要)

linear_update_issue_comment

更新Linear问题上的现有评论。

参数:

  • comment(必需):要更新的评论标识符。接受值:完整的Linear评论URL、UUID、简写(comment-abc123)或哈希(abc123)
  • body(必需):新的评论文本,以markdown格式

URL支持:与其他评论工具一样,它接受完整的Linear评论URL,并自动解析为UUID。

linear_get_teams

带有可选名称过滤器的Linear团队检索。

参数:

  • name:可选的团队名称过滤器。返回名称包含此字符串的团队。

测试

测试使用go-vcr实现,并针对https://linear.app/linear-mcp-go-test执行。

执行测试

使用现有的录音(磁带):

go test -v ./...

重新录制测试:

需要设置TEST_LINEAR_API_KEY以供测试工作区使用。

go test -v -record=true ./...

这将更新所有不会改变远程状态的测试。

go test -v -recordWrites=true ./...

这将重新运行所有测试,包括一些可能会改变其他测试结果的测试,可能需要进一步的手动调整。

go test -v -golden=true ./...

更新所有.ground字段。

发布流程

该项目使用GitHub Actions进行自动化测试和发布。版本通过pkg/server/server.go中的ServerVersion常量管理。

自动化测试和构建

  1. 所有推送到主分支和拉取请求都会自动测试
  2. 当推送匹配模式v*(例如,v1.0.0)的标签时,会自动创建一个新的发布
  3. 构建Linux、macOS和Windows的二进制文件,并附带构建时间信息(git提交和构建日期)附加到发布中

创建新发布

重要:版本标签应仅在所有更改合并到main分支后创建。

  1. 更新版本:修改pkg/server/server.go中的ServerVersion常量

    // ServerVersion 是MCP服务器的版本
    ServerVersion = "1.13.0"
    
  2. 创建PR:将版本更新作为拉取请求提交,确保经过审查和测试

  3. 合并到主分支:一旦PR获得批准并合并到主分支

  4. 创建并推送发布标签

    # 确保您处于最新的主分支
    git checkout main
    git pull origin main
    
    # 创建并推送标签(必须与server.go中的版本匹配)
    git tag v1.13.0
    git push origin v1.13.0
    
  5. 自动发布:GitHub Actions工作流将自动:

    • 为所有平台构建带有正确版本信息的二进制文件
    • 使用标签创建GitHub发布
    • 将编译的二进制文件附加到发布中

版本信息

version命令显示:

  • 版本:从pkg/server/server.go中的ServerVersion常量读取
  • Git提交:在构建时从当前提交哈希注入
  • 构建日期:在构建时注入当前时间戳

对于开发构建,git提交和构建日期将显示为"未知"。

许可证

MIT