这是一个基于TypeScript和Model Context Protocol(MCP)协议实现的自定义线性 (Linear) 问题跟踪系统适配器。该服务器允许AI代理通过标准输入输出与Linear平台交互,支持创建、查询和更新问题、团队及项目等操作。
npm install @linear/sdk@37.0.0 @modelcontextprotocol/sdk@0.6.0
index.ts 文件,添加以下代码并执行:import { LinearMCPAdapter } from './src/adapter';
const adapter = new LinearMCPAdapter({
token: 'your-linear-token',
projectId: 'your-project-id'
});
adapter.start();
然后运行:
npm run dev
/create-issue 接口,支持自定义标题、描述、优先级和指派人。/list-teams 接口,返回当前工作区下的所有团队信息。在项目根目录执行以下命令启动开发服务器,并开启自动构建功能:
npm run dev
使用以下命令保持开发环境的热重载:
npm run watch
运行以下命令安装调试工具并启动调试服务器:
npm install -g supergiant
supergiant start
在 index.ts 文件中初始化适配器时,可传递如下参数:
const adapter = new LinearMCPAdapter({
token: 'your-linear-token',
projectId: 'your-project-id'
});
在项目根目录创建 .env 文件,添加以下内容:
LINEAR_TOKEN=your-linear-token
LINEAR_PROJECT_ID=your-project-id
请求参数格式如下:
{
title: string; // 必填:问题标题
description?: string; // 可选:问题描述
priority?: number; // 可选:优先级,取值范围0 - 4
assignee?: string; // 可选:指派人ID
labels?: string[]; // 可选:标签列表
}
请求参数格式如下:
{
assignee?: string; // 可选:查询指定人的所有问题
status?: string; // 可选:按状态过滤(如:"open"、"in-progress"等)
first?: number; // 可选:限制返回的问题数量,默认为50
}
请求参数格式如下:
{
issueId: string; // 必填:问题ID
title?: string; // 可选:新标题
description?: string; // 可选:新描述
status?: string; // 可选:新状态
assignee?: string; // 可选:新指派人
priority?: number; // 可选:新优先级
labels?: string[]; // 可选:更新标签列表
}
请求参数格式如下:
{
issueId: string; // 必填:问题ID
}
在终端中执行以下命令创建新问题:
echo '{
"title": "测试问题标题",
"description": "这是一个测试问题,用于验证API功能。",
"priority": 2,
"labels": ["bug", "high"]
}' | ./dist/index.js
查询指定团队的问题列表:
echo '{
"assignee": "user123",
"status": "open"
}' | ./dist/index.js
// src/adapter.ts
export class LinearMCPAdapter {
private token: string;
private projectId: string;
constructor(options: {
token: string;
projectId: string;
}) {
this.token = options.token;
this.projectId = options.projectId;
}
public async createIssue(issue: CreateIssueParams): Promise<void> {
// 实现创建问题的具体逻辑
}
public async getIssues(filter?: GetIssuesFilter): Promise<Issue[]> {
// 实现获取问题列表的逻辑
}
public async updateIssue(id: string, updates: UpdateIssueParams): Promise<void> {
// 实现更新问题的逻辑
}
public async getIssue(id: string): Promise<Issue | null> {
// 实现获取单个问题详情的逻辑
}
}
文档中未提及许可证相关信息。
欢迎fork和提交Pull Request,共同完善此适配器的功能。