使用方法
- 复制安装命令,在自己的智能体环境安装前先检查源码包。
- 从原始文档核对所需工具、凭据和支持的宿主。
- 说明输入材料与期望交付物,并对照来源检查输出。
npx skills add https://github.com/alexai-mcp/hermes-ccc --skill linear开始前需了解
- 安装不包含模型订阅、API 额度或访问文件的权限。
- 仓库星数和安装量反映活跃情况,不等于独立质量或安全测试。
按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。
Linear Project Management
Manage Linear issues, cycles, projects, and team workflows via the Linear API (GraphQL) or MCP.
Setup
# Get API key from Linear: Settings → API → Personal API Keys
export LINEAR_API_KEY="lin_api_..."import requests
LINEAR_API = "https://api.linear.app/graphql"
HEADERS = {
"Authorization": f"Bearer {LINEAR_API_KEY}",
"Content-Type": "application/json"
}
def linear_query(query, variables=None):
resp = requests.post(LINEAR_API, json={"query": query, "variables": variables or {}}, headers=HEADERS)
return resp.json()["data"]List Issues
query = """
query {
issues(filter: {assignee: {isMe: {eq: true}}, state: {type: {nin: ["completed", "cancelled"]}}}) {
nodes {
id title priority state { name } team { name }
}
}
}
"""
data = linear_query(query)
for issue in data["issues"]["nodes"]:
print(f"[{issue['state']['name']}] {issue['title']}")Create Issue
mutation = """
mutation CreateIssue($title: String!, $teamId: String!, $description: String, $priority: Int) {
issueCreate(input: {
title: $title
teamId: $teamId
description: $description
priority: $priority
}) {
success
issue { id title url }
}
}
"""
data = linear_query(mutation, {
"title": "Fix auth bug in production",
"teamId": "TEAM_ID",
"description": "Users getting 401 on refresh token",
"priority": 1 # 0=no priority, 1=urgent, 2=high, 3=medium, 4=low
})
print(data["issueCreate"]["issue"]["url"])Get Teams
teams_query = """
query { teams { nodes { id name key } } }
"""
data = linear_query(teams_query)
for team in data["teams"]["nodes"]:
print(f"{team['key']}: {team['name']} ({team['id']})")Update Issue
update_mutation = """
mutation UpdateIssue($id: String!, $stateId: String) {
issueUpdate(id: $id, input: { stateId: $stateId }) {
success
}
}
"""
linear_query(update_mutation, {"id": "ISSUE_ID", "stateId": "STATE_ID"})Search Issues
search_query = """
query SearchIssues($query: String!) {
issueSearch(query: $query) {
nodes { id title state { name } url }
}
}
"""
data = linear_query(search_query, {"query": "auth bug"})Cycles (Sprints)
cycles_query = """
query {
cycles(filter: {isActive: {eq: true}}) {
nodes {
id name number startsAt endsAt
issues { nodes { id title state { name } } }
}
}
}
"""
data = linear_query(cycles_query)MCP Integration
If Linear MCP is installed in .mcp.json:
{
"mcpServers": {
"linear": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-linear"],
"env": {"LINEAR_API_KEY": "lin_api_..."}
}
}
}Then Claude can use Linear tools directly without GraphQL code.
Webhooks (receive events)
# Linear sends POST to your endpoint on issue create/update
# Payload includes: type, action, data.issue
# Verify with: X-Linear-Signature header
import hmac, hashlib
def verify_signature(payload, signature, secret):
expected = hmac.new(secret.encode(), payload, hashlib.sha256).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature)

