linear

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

linear

Linear

MCP skill for linear. Provides 31 tools: get_attachment, create_attachment, delete_attachment, list_comments, save_comment, delete_comment, list_cycles, get_document, list_documents, create_document, update_document, extract_images, get_issue, list_issues, save_issue, list_issue_statuses, get_issue_status, list_issue_labels, create_issue_label, list_projects, get_project, save_project, list_project_labels, list_milestones, get_milestone, save_milestone, list_teams, get_team, list_users, get_user, search_documentation
面向Linear的MCP Skill。提供31种工具:get_attachment、create_attachment、delete_attachment、list_comments、save_comment、delete_comment、list_cycles、get_document、list_documents、create_document、update_document、extract_images、get_issue、list_issues、save_issue、list_issue_statuses、get_issue_status、list_issue_labels、create_issue_label、list_projects、get_project、save_project、list_project_labels、list_milestones、get_milestone、save_milestone、list_teams、get_team、list_users、get_user、search_documentation

Authentication

认证方式

This MCP server uses OAuth authentication. The OAuth flow is handled automatically by the MCP client. Tokens are persisted to
~/.mcp-skill/auth/
so subsequent runs reuse the same credentials without re-authenticating.
python
app = LinearApp()  # uses default OAuth flow
To bring your own OAuth provider, pass it via the
auth
argument:
python
app = LinearApp(auth=my_oauth_provider)
本MCP服务器采用OAuth认证方式。 OAuth流程由MCP客户端自动处理。令牌会持久化存储到
~/.mcp-skill/auth/
目录,因此后续运行时可复用相同凭证,无需重新认证。
python
app = LinearApp()  # uses default OAuth flow
若要使用自定义OAuth服务提供商,可通过
auth
参数传入:
python
app = LinearApp(auth=my_oauth_provider)

Dependencies

依赖项

This skill requires the following Python packages:
  • mcp-skill
Install with uv:
bash
uv pip install mcp-skill
Or with pip:
bash
pip install mcp-skill
本Skill需要以下Python包:
  • mcp-skill
使用uv安装:
bash
uv pip install mcp-skill
或使用pip安装:
bash
pip install mcp-skill

How to Run

运行方法

Important: Add
.agents/skills
to your Python path so imports resolve correctly:
python
import sys
sys.path.insert(0, ".agents/skills")
from linear.app import LinearApp
Or set the
PYTHONPATH
environment variable:
bash
export PYTHONPATH=".agents/skills:$PYTHONPATH"
Preferred: use
uv run
(handles dependencies automatically):
bash
PYTHONPATH=.agents/skills uv run --with mcp-skill python -c "
import asyncio
from linear.app import LinearApp

async def main():
    app = LinearApp()
    result = await app.get_attachment(id="example")
    print(result)

asyncio.run(main())
"
Alternative: use
python
directly
(install dependencies first):
bash
pip install mcp-skill
PYTHONPATH=.agents/skills python -c "
import asyncio
from linear.app import LinearApp

async def main():
    app = LinearApp()
    result = await app.get_attachment(id="example")
    print(result)

asyncio.run(main())
"
重要提示:
.agents/skills
添加到Python路径,确保导入能正确解析:
python
import sys
sys.path.insert(0, ".agents/skills")
from linear.app import LinearApp
或设置
PYTHONPATH
环境变量:
bash
export PYTHONPATH=".agents/skills:$PYTHONPATH"
推荐方式:使用
uv run
(自动处理依赖):
bash
PYTHONPATH=.agents/skills uv run --with mcp-skill python -c "
import asyncio
from linear.app import LinearApp

async def main():
    app = LinearApp()
    result = await app.get_attachment(id='example')
    print(result)

asyncio.run(main())
"
替代方式:直接使用
python
(需先安装依赖):
bash
pip install mcp-skill
PYTHONPATH=.agents/skills python -c "
import asyncio
from linear.app import LinearApp

async def main():
    app = LinearApp()
    result = await app.get_attachment(id='example')
    print(result)

asyncio.run(main())
"

Available Tools

可用工具

get_attachment

get_attachment

Retrieve an attachment's content by ID.
ParameterTypeRequiredDescription
id
str
YesAttachment ID
Example:
python
result = await app.get_attachment(id="example")
通过ID获取附件内容。
参数类型必填描述
id
str
附件ID
示例:
python
result = await app.get_attachment(id='example')

create_attachment

create_attachment

Create a new attachment on a specific Linear issue by uploading base64-encoded content.
ParameterTypeRequiredDescription
issue
str
YesIssue ID or identifier (e.g., LIN-123)
base64Content
str
YesBase64-encoded file content to upload
filename
str
YesFilename for the upload (e.g., 'screenshot.png')
contentType
str
YesMIME type for the upload (e.g., 'image/png', 'application/pdf')
title
str
NoOptional title for the attachment
subtitle
str
NoOptional subtitle for the attachment
Example:
python
result = await app.create_attachment(issue="example", base64Content="example", filename="example")
通过上传Base64编码内容,在指定Linear问题中创建新附件。
参数类型必填描述
issue
str
问题ID或标识符(例如:LIN-123)
base64Content
str
待上传文件的Base64编码内容
filename
str
上传文件的文件名(例如:'screenshot.png')
contentType
str
上传文件的MIME类型(例如:'image/png'、'application/pdf')
title
str
附件的可选标题
subtitle
str
附件的可选副标题
示例:
python
result = await app.create_attachment(issue='example', base64Content='example', filename='example')

delete_attachment

delete_attachment

Delete an attachment by ID
ParameterTypeRequiredDescription
id
str
YesAttachment ID
Example:
python
result = await app.delete_attachment(id="example")
通过ID删除附件
参数类型必填描述
id
str
附件ID
示例:
python
result = await app.delete_attachment(id='example')

list_comments

list_comments

List comments for a specific Linear issue
ParameterTypeRequiredDescription
issueId
str
YesIssue ID
Example:
python
result = await app.list_comments(issueId="example")
列出指定Linear问题的所有评论
参数类型必填描述
issueId
str
问题ID
示例:
python
result = await app.list_comments(issueId='example')

save_comment

save_comment

Create or update a comment on a Linear issue. If
id
is provided, updates the existing comment; otherwise creates a new one. When creating,
issueId
and
body
are required.
ParameterTypeRequiredDescription
id
str
NoComment ID. If provided, updates the existing comment
issueId
str
NoIssue ID (required when creating)
parentId
str
NoParent comment ID (for replies, only when creating)
body
str
YesContent as Markdown
Example:
python
result = await app.save_comment(id="example", issueId="example", parentId="example")
在Linear问题中创建或更新评论。若提供
id
则更新现有评论,否则创建新评论。创建时需提供
issueId
body
参数类型必填描述
id
str
评论ID。若提供则更新现有评论
issueId
str
问题ID(创建时必填)
parentId
str
父评论ID(仅创建回复时需提供)
body
str
Markdown格式的评论内容
示例:
python
result = await app.save_comment(id='example', issueId='example', parentId='example')

delete_comment

delete_comment

Delete a comment from a Linear issue
ParameterTypeRequiredDescription
id
str
YesComment ID
Example:
python
result = await app.delete_comment(id="example")
从Linear问题中删除评论
参数类型必填描述
id
str
评论ID
示例:
python
result = await app.delete_comment(id='example')

list_cycles

list_cycles

Retrieve cycles for a specific Linear team
ParameterTypeRequiredDescription
teamId
str
YesTeam ID
type
str
NoFilter: current, previous, next, or all
Example:
python
result = await app.list_cycles(teamId="example", type="example")
获取指定Linear团队的迭代周期
参数类型必填描述
teamId
str
团队ID
type
str
筛选条件:current(当前)、previous(上一个)、next(下一个)或all(全部)
示例:
python
result = await app.list_cycles(teamId='example', type='example')

get_document

get_document

Retrieve a Linear document by ID or slug
ParameterTypeRequiredDescription
id
str
YesDocument ID or slug
Example:
python
result = await app.get_document(id="example")
通过ID或别名获取Linear文档
参数类型必填描述
id
str
文档ID或别名
示例:
python
result = await app.get_document(id='example')

list_documents

list_documents

List documents in the user's Linear workspace
ParameterTypeRequiredDescription
limit
float
NoMax results (default 50, max 250)
cursor
str
NoNext page cursor
orderBy
str
NoSort: createdAt
query
str
NoSearch query
projectId
str
NoFilter by project ID
initiativeId
str
NoFilter by initiative ID
creatorId
str
NoFilter by creator ID
createdAt
str
NoCreated after: ISO-8601 date/duration (e.g., -P1D)
updatedAt
str
NoUpdated after: ISO-8601 date/duration (e.g., -P1D)
includeArchived
bool
NoInclude archived items
Example:
python
result = await app.list_documents(limit=1.0, cursor="example", orderBy="example")
列出用户Linear工作区中的所有文档
参数类型必填描述
limit
float
最大结果数(默认50,上限250)
cursor
str
下一页游标
orderBy
str
排序方式:createdAt(创建时间)
query
str
搜索关键词
projectId
str
按项目ID筛选
initiativeId
str
按倡议ID筛选
creatorId
str
按创建者ID筛选
createdAt
str
筛选创建时间晚于指定值:ISO-8601格式日期/时长(例如:-P1D)
updatedAt
str
筛选更新时间晚于指定值:ISO-8601格式日期/时长(例如:-P1D)
includeArchived
bool
是否包含已归档项
示例:
python
result = await app.list_documents(limit=1.0, cursor='example', orderBy='example')

create_document

create_document

Create a new document in Linear
ParameterTypeRequiredDescription
title
str
YesDocument title
content
str
NoContent as Markdown
project
str
NoProject name, ID, or slug
issue
str
NoIssue ID or identifier (e.g., LIN-123)
icon
str
NoIcon emoji
color
str
NoHex color
Example:
python
result = await app.create_document(title="example", content="example", project="example")
在Linear中创建新文档
参数类型必填描述
title
str
文档标题
content
str
Markdown格式的文档内容
project
str
项目名称、ID或别名
issue
str
问题ID或标识符(例如:LIN-123)
icon
str
图标emoji
color
str
十六进制颜色码
示例:
python
result = await app.create_document(title='example', content='example', project='example')

update_document

update_document

Update an existing Linear document
ParameterTypeRequiredDescription
id
str
YesDocument ID or slug
title
str
NoDocument title
content
str
NoContent as Markdown
project
str
NoProject name, ID, or slug
icon
str
NoIcon emoji
color
str
NoHex color
Example:
python
result = await app.update_document(id="example", title="example", content="example")
更新Linear中的现有文档
参数类型必填描述
id
str
文档ID或别名
title
str
文档标题
content
str
Markdown格式的文档内容
project
str
项目名称、ID或别名
icon
str
图标emoji
color
str
十六进制颜色码
示例:
python
result = await app.update_document(id='example', title='example', content='example')

extract_images

extract_images

Extract and fetch images from markdown content. Use this to view screenshots, diagrams, or other images embedded in Linear issues, comments, or documents. Pass the markdown content (e.g., issue description) and receive the images as viewable data.
ParameterTypeRequiredDescription
markdown
str
YesMarkdown content containing image references (e.g., issue description, comment body)
Example:
python
result = await app.extract_images(markdown="example")
从Markdown内容中提取并获取图片。可用于查看Linear问题、评论或文档中嵌入的截图、图表等图片。传入Markdown内容(例如问题描述),即可获取可查看的图片数据。
参数类型必填描述
markdown
str
包含图片引用的Markdown内容(例如:问题描述、评论内容)
示例:
python
result = await app.extract_images(markdown='example')

get_issue

get_issue

Retrieve detailed information about an issue by ID, including attachments and git branch name
ParameterTypeRequiredDescription
id
str
YesIssue ID
includeRelations
bool
NoInclude blocking/related/duplicate relations
includeCustomerNeeds
bool
NoInclude associated customer needs
Example:
python
result = await app.get_issue(id="example", includeRelations=True, includeCustomerNeeds=True)
通过ID获取问题的详细信息,包括附件和Git分支名称
参数类型必填描述
id
str
问题ID
includeRelations
bool
是否包含阻塞/关联/重复的关联关系
includeCustomerNeeds
bool
是否包含关联的客户需求
示例:
python
result = await app.get_issue(id='example', includeRelations=True, includeCustomerNeeds=True)

list_issues

list_issues

List issues in the user's Linear workspace. For my issues, use "me" as the assignee. Use "null" for no assignee.
ParameterTypeRequiredDescription
limit
float
NoMax results (default 50, max 250)
cursor
str
NoNext page cursor
orderBy
str
NoSort: createdAt
query
str
NoSearch issue title or description
team
str
NoTeam name or ID
state
str
NoState type, name, or ID
cycle
str
NoCycle name, number, or ID
label
str
NoLabel name or ID
assignee`strNone`No
delegate
str
NoAgent name or ID
project
str
NoProject name, ID, or slug
priority
float
No0=None, 1=Urgent, 2=High, 3=Normal, 4=Low
parentId
str
NoParent issue ID
createdAt
str
NoCreated after: ISO-8601 date/duration (e.g., -P1D)
updatedAt
str
NoUpdated after: ISO-8601 date/duration (e.g., -P1D)
includeArchived
bool
NoInclude archived items
Example:
python
result = await app.list_issues(limit=1.0, cursor="example", orderBy="example")
列出用户Linear工作区中的所有问题。若要查看自己的问题,将assignee设为"me";若要查看未分配的问题,设为"null"。
参数类型必填描述
limit
float
最大结果数(默认50,上限250)
cursor
str
下一页游标
orderBy
str
排序方式:createdAt(创建时间)
query
str
搜索问题标题或描述
team
str
团队名称或ID
state
str
状态类型、名称或ID
cycle
str
迭代周期名称、编号或ID
label
str
标签名称或ID
assignee`strNone`
delegate
str
代理名称或ID
project
str
项目名称、ID或别名
priority
float
优先级:0=None(无)、1=Urgent(紧急)、2=High(高)、3=Normal(普通)、4=Low(低)
parentId
str
父问题ID
createdAt
str
筛选创建时间晚于指定值:ISO-8601格式日期/时长(例如:-P1D)
updatedAt
str
筛选更新时间晚于指定值:ISO-8601格式日期/时长(例如:-P1D)
includeArchived
bool
是否包含已归档项
示例:
python
result = await app.list_issues(limit=1.0, cursor='example', orderBy='example')

save_issue

save_issue

Create or update a Linear issue. If
id
is provided, updates the existing issue; otherwise creates a new one. When creating,
title
and
team
are required.
ParameterTypeRequiredDescription
id
str
NoIssue ID. If provided, updates the existing issue
title
str
NoIssue title (required when creating)
description
str
NoContent as Markdown
team
str
NoTeam name or ID (required when creating)
cycle
str
NoCycle name, number, or ID
milestone
str
NoMilestone name or ID
priority
float
No0=None, 1=Urgent, 2=High, 3=Normal, 4=Low
project
str
NoProject name, ID, or slug
state
str
NoState type, name, or ID
assignee`strNone`No
delegate`strNone`No
labels
list[str]
NoLabel names or IDs
dueDate
str
NoDue date (ISO format)
parentId`strNone`No
estimate
float
NoIssue estimate value
links
list[Any]
NoLink attachments to add [{url, title}]. Append-only; existing links are never removed
blocks
list[str]
NoIssue IDs/identifiers this blocks. Append-only; existing relations are never removed
blockedBy
list[str]
NoIssue IDs/identifiers blocking this. Append-only; existing relations are never removed
relatedTo
list[str]
NoRelated issue IDs/identifiers. Append-only; existing relations are never removed
duplicateOf`strNone`No
Example:
python
result = await app.save_issue(id="example", title="example", description="example")
创建或更新Linear问题。若提供
id
则更新现有问题,否则创建新问题。创建时需提供
title
team
参数类型必填描述
id
str
问题ID。若提供则更新现有问题
title
str
问题标题(创建时必填)
description
str
Markdown格式的描述内容
team
str
团队名称或ID(创建时必填)
cycle
str
迭代周期名称、编号或ID
milestone
str
里程碑名称或ID
priority
float
优先级:0=None(无)、1=Urgent(紧急)、2=High(高)、3=Normal(普通)、4=Low(低)
project
str
项目名称、ID或别名
state
str
状态类型、名称或ID
assignee`strNone`
delegate`strNone`
labels
list[str]
标签名称或ID列表
dueDate
str
截止日期(ISO格式)
parentId`strNone`
estimate
float
问题预估工作量
links
list[Any]
待添加的链接附件列表 [{url, title}]。仅追加,不会移除现有链接
blocks
list[str]
被此问题阻塞的问题ID/标识符列表。仅追加,不会移除现有关联
blockedBy
list[str]
阻塞此问题的问题ID/标识符列表。仅追加,不会移除现有关联
relatedTo
list[str]
关联问题ID/标识符列表。仅追加,不会移除现有关联
duplicateOf`strNone`
示例:
python
result = await app.save_issue(id='example', title='example', description='example')

list_issue_statuses

list_issue_statuses

List available issue statuses in a Linear team
ParameterTypeRequiredDescription
team
str
YesTeam name or ID
Example:
python
result = await app.list_issue_statuses(team="example")
列出Linear团队中可用的问题状态
参数类型必填描述
team
str
团队名称或ID
示例:
python
result = await app.list_issue_statuses(team='example')

get_issue_status

get_issue_status

Retrieve detailed information about an issue status in Linear by name or ID
ParameterTypeRequiredDescription
id
str
YesStatus ID
name
str
YesStatus name
team
str
YesTeam name or ID
Example:
python
result = await app.get_issue_status(id="example", name="example", team="example")
通过名称或ID获取Linear中问题状态的详细信息
参数类型必填描述
id
str
状态ID
name
str
状态名称
team
str
团队名称或ID
示例:
python
result = await app.get_issue_status(id='example', name='example', team='example')

list_issue_labels

list_issue_labels

List available issue labels in a Linear workspace or team
ParameterTypeRequiredDescription
limit
float
NoMax results (default 50, max 250)
cursor
str
NoNext page cursor
orderBy
str
NoSort: createdAt
name
str
NoFilter by name
team
str
NoTeam name or ID
Example:
python
result = await app.list_issue_labels(limit=1.0, cursor="example", orderBy="example")
列出Linear工作区或团队中可用的问题标签
参数类型必填描述
limit
float
最大结果数(默认50,上限250)
cursor
str
下一页游标
orderBy
str
排序方式:createdAt(创建时间)
name
str
按名称筛选
team
str
团队名称或ID
示例:
python
result = await app.list_issue_labels(limit=1.0, cursor='example', orderBy='example')

create_issue_label

create_issue_label

Create a new Linear issue label
ParameterTypeRequiredDescription
name
str
YesLabel name
description
str
NoLabel description
color
str
NoHex color code
teamId
str
NoTeam UUID (omit for workspace label)
parent
str
NoParent label group name
isGroup
bool
NoIs label group (not directly applicable)
Example:
python
result = await app.create_issue_label(name="example", description="example", color="example")
创建Linear问题标签
参数类型必填描述
name
str
标签名称
description
str
标签描述
color
str
十六进制颜色码
teamId
str
团队UUID(留空则为工作区标签)
parent
str
父标签组名称
isGroup
bool
是否为标签组(暂不直接支持)
示例:
python
result = await app.create_issue_label(name='example', description='example', color='example')

list_projects

list_projects

List projects in the user's Linear workspace
ParameterTypeRequiredDescription
limit
float
NoMax results (default 50, max 250)
cursor
str
NoNext page cursor
orderBy
str
NoSort: createdAt
query
str
NoSearch project name
state
str
NoState type, name, or ID
initiative
str
NoInitiative name or ID
team
str
NoTeam name or ID
member
str
NoUser ID, name, email, or "me"
label
str
NoLabel name or ID
createdAt
str
NoCreated after: ISO-8601 date/duration (e.g., -P1D)
updatedAt
str
NoUpdated after: ISO-8601 date/duration (e.g., -P1D)
includeMilestones
bool
NoInclude milestones
includeMembers
bool
NoInclude project members
includeArchived
bool
NoInclude archived items
Example:
python
result = await app.list_projects(limit=1.0, cursor="example", orderBy="example")
列出用户Linear工作区中的所有项目
参数类型必填描述
limit
float
最大结果数(默认50,上限250)
cursor
str
下一页游标
orderBy
str
排序方式:createdAt(创建时间)
query
str
搜索项目名称
state
str
状态类型、名称或ID
initiative
str
倡议名称或ID
team
str
团队名称或ID
member
str
用户ID、名称、邮箱或"me"
label
str
标签名称或ID
createdAt
str
筛选创建时间晚于指定值:ISO-8601格式日期/时长(例如:-P1D)
updatedAt
str
筛选更新时间晚于指定值:ISO-8601格式日期/时长(例如:-P1D)
includeMilestones
bool
是否包含里程碑
includeMembers
bool
是否包含项目成员
includeArchived
bool
是否包含已归档项
示例:
python
result = await app.list_projects(limit=1.0, cursor='example', orderBy='example')

get_project

get_project

Retrieve details of a specific project in Linear
ParameterTypeRequiredDescription
query
str
YesProject name, ID, or slug
includeMilestones
bool
NoInclude milestones
includeMembers
bool
NoInclude project members
includeResources
bool
NoInclude resources (documents, links, attachments)
Example:
python
result = await app.get_project(query="example", includeMilestones=True, includeMembers=True)
获取Linear中指定项目的详细信息
参数类型必填描述
query
str
项目名称、ID或别名
includeMilestones
bool
是否包含里程碑
includeMembers
bool
是否包含项目成员
includeResources
bool
是否包含资源(文档、链接、附件)
示例:
python
result = await app.get_project(query='example', includeMilestones=True, includeMembers=True)

save_project

save_project

Create or update a Linear project. If
id
is provided, updates the existing project; otherwise creates a new one. When creating,
name
and at least one team (via
addTeams
or
setTeams
) are required.
ParameterTypeRequiredDescription
id
str
NoProject ID. If provided, updates the existing project
name
str
NoProject name (required when creating)
icon
str
NoIcon emoji (e.g., :eagle:)
color
str
NoHex color
summary
str
NoShort summary (max 255 chars)
description
str
NoContent as Markdown
state
str
NoProject state
startDate
str
NoStart date (ISO format)
targetDate
str
NoTarget date (ISO format)
priority
int
No0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
addTeams
list[str]
NoTeam name or ID to add
removeTeams
list[str]
NoTeam name or ID to remove
setTeams
list[str]
NoReplace all teams with these. Cannot combine with addTeams/removeTeams
labels
list[str]
NoLabel names or IDs
lead`strNone`No
addInitiatives
list[str]
NoInitiative names/IDs to add
removeInitiatives
list[str]
NoInitiative names/IDs to remove
setInitiatives
list[str]
NoReplace all initiatives with these. Cannot combine with addInitiatives/removeInitiatives
Example:
python
result = await app.save_project(id="example", name="example", icon="example")
创建或更新Linear项目。若提供
id
则更新现有项目,否则创建新项目。创建时需提供
name
,并至少指定一个团队(通过
addTeams
setTeams
)。
参数类型必填描述
id
str
项目ID。若提供则更新现有项目
name
str
项目名称(创建时必填)
icon
str
图标emoji(例如::eagle:)
color
str
十六进制颜色码
summary
str
简短概述(最多255字符)
description
str
Markdown格式的描述内容
state
str
项目状态
startDate
str
开始日期(ISO格式)
targetDate
str
目标日期(ISO格式)
priority
int
优先级:0=None(无)、1=Urgent(紧急)、2=High(高)、3=Medium(中)、4=Low(低)
addTeams
list[str]
待添加的团队名称或ID列表
removeTeams
list[str]
待移除的团队名称或ID列表
setTeams
list[str]
替换为指定团队列表。不可与addTeams/removeTeams同时使用
labels
list[str]
标签名称或ID列表
lead`strNone`
addInitiatives
list[str]
待添加的倡议名称/ID列表
removeInitiatives
list[str]
待移除的倡议名称/ID列表
setInitiatives
list[str]
替换为指定倡议列表。不可与addInitiatives/removeInitiatives同时使用
示例:
python
result = await app.save_project(id='example', name='example', icon='example')

list_project_labels

list_project_labels

List available project labels in the Linear workspace
ParameterTypeRequiredDescription
limit
float
NoMax results (default 50, max 250)
cursor
str
NoNext page cursor
orderBy
str
NoSort: createdAt
...additional tools omitted for brevity
列出Linear工作区中可用的项目标签
参数类型必填描述
limit
float
最大结果数(默认50,上限250)
cursor
str
下一页游标
orderBy
str
排序方式:createdAt(创建时间)
...为简洁起见,省略其余工具