ソース情報
- リポジトリ
- oyi77/1ai-skills
- ソースの最終更新活動
- 2026年7月31日 15:22
- 検出された SKILL.md の言語
- 英語
- スター
- 8
- フォーク
- 0
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/oyi77/1ai-skills --skill linear-mcpコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
Android and mobile application security testing — emulators, rooting, traffic interception, dynamic instrumentation. Use when testing mobile apps for vulnerabilities, reversing APKs, or bypassing security controls on Android.
Self-reflection + Self-criticism + Auto-learning from corrections + Self-organizing memory. Agent evaluates its own work, catches mistakes, and improves permanently. Use when working with self improving.
Plan and execute a comprehensive red team engagement covering reconnaissance through post-exploitation using MITRE ATT&CK-aligned TTPs to evaluate an organization's detection and response capabilities. Use when working with conducting full scope red team engagement.
SOC 職業分類に基づく
SKILL.md を表示中
| name | linear-mcp |
| description | Linear Mcp. Use when working with linear mcp in mcp domain. |
| domain | mcp |
| author | oyi77 |
| license | Apache-2.0 |
| subdomain | mcp |
| tags | ["linear","mcp","mcp-server","model-context-protocol","tool-integration","issue-tracking","project-management","graphql"] |
| version | 1.0.0 |
Trigger phrases:
Use cases:
When NOT to use:
linear-api skill (integrations/linear-api) for direct API callsThe Linear MCP server provides a standardized Model Context Protocol interface to Linear's project management platform. It is hosted by Linear as a remote MCP endpoint at https://mcp.linear.app/mcp, using OAuth 2.1 for authentication and Streamable HTTP as the primary transport.
This server acts as a bridge between any MCP-compatible AI client (Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Zed, Codex, v0) and Linear's GraphQL API. Through MCP tools, the AI can find, create, update issues, manage projects, track cycles, post comments, and query team data — all without leaving the terminal or switching to the browser.
Linear's MCP server follows the authenticated remote MCP spec, meaning the server is centrally hosted and managed by Linear. No local server process is required — just a network connection and OAuth authentication.
Key capabilities:
https://mcp.linear.app/mcp/readonly for queries only┌─────────────────────┐ Streamable HTTP ┌─────────────────────┐
│ AI Client │ ◄──────────────────────► │ Linear MCP Server │
│ (Claude, Cursor, │ OAuth 2.1 │ mcp.linear.app │
│ VS Code, etc.) │ │ │
└─────────────────────┘ └──────┬──────────────┘
│
GraphQL API
│
┌───────────▼──────────┐
│ Linear Platform │
│ (Issues, Projects, │
│ Cycles, Teams) │
└──────────────────────┘
/sse for legacy clients./mcp/readonly endpoint or read OAuth scope.MCP_REMOTE_CONFIG_DIR.mcp-remote bridge if needed)claude mcp add --transport http linear-server https://mcp.linear.app/mcp
Then start a Claude Code session and run /mcp to authenticate via OAuth.
Team/Enterprise (Claude.ai): Navigate to Settings → Connectors and connect Linear.
Free/Pro (Claude Desktop): Open Settings → Connectors → Add Linear connector.
{
"mcpServers": {
"linear": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.linear.app/mcp"]
}
}
}
Install via command palette: CMD+P → "MCP: Add Server" → Command (stdio) → paste npx -y mcp-remote https://mcp.linear.app/mcp.
Install via the MCP Directory — search for "Linear" and connect.
{
"mcpServers": {
"linear": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.linear.app/mcp"]
}
}
}
Settings → Cascade → MCP Servers → Add Server.
{
"context_servers": {
"linear": {
"source": "custom",
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.linear.app/mcp"],
"env": {}
}
}
}
codex mcp add linear --url https://mcp.linear.app/mcp
{
"mcpServers": {
"linear-readonly": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.linear.app/mcp/readonly"]
}
}
}
curl -X POST https://mcp.linear.app/mcp \
-H "Authorization: Bearer lin_api_xxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# Workspace A
MCP_REMOTE_CONFIG_DIR=~/.mcp-auth/workspace-a npx mcp-remote https://mcp.linear.app/mcp
# Workspace B
MCP_REMOTE_CONFIG_DIR=~/.mcp-auth/workspace-b npx mcp-remote https://mcp.linear.app/mcp
If using Okta, configure SAML for Linear first, then set the Okta Issuer URI:
https://your-org.okta.com/oauth2/default
Enable "MCP enterprise managed authentication" on your Okta identity provider in Linear.
| Client | Connection Method | Auth Flow | Notes |
|---|---|---|---|
| Claude Code | claude mcp add | OAuth | Run /mcp in session |
| Claude Desktop | Settings → Connectors | OAuth | Built-in UI |
| Claude.ai | Settings → Connectors | OAuth | Team/Enterprise |
| VS Code | mcp-remote via stdio | OAuth | npx wrapper |
| Cursor | MCP Directory | OAuth | Built-in |
| Windsurf | MCP Server Settings | OAuth | npx wrapper |
| Zed | context_servers JSON | OAuth | npx wrapper |
| Codex | codex mcp add CLI | OAuth | |
| v0 | Connections Settings | OAuth | Built-in |
| Custom | Direct HTTP to /mcp | OAuth or Bearer Token | Any MCP client |
For stdio-based setups (VS Code, Windsurf, Zed), no environment variables are needed — authentication is handled via the interactive OAuth flow triggered on first connection.
For direct HTTP access, pass the bearer token:
Authorization: Bearer lin_api_xxxxxxxxxxxxxxxxxxxxx
The MCP server exposes tools for:
issues_list, issues_search, issue_create, issue_update, issue_deleteprojects_list, project_create, project_updatecycles_list, cycles_activecomments_list, comment_createteams_list, team_getusers_list, users_search, user_getRun tools/list via MCP to get the exact current tool list with schemas.
The MCP server wraps Linear's GraphQL API. These examples show how to interact directly with the API that powers the MCP tools.
"""Linear GraphQL API client — the underlying API the MCP server wraps."""
import os
import requests
LINEAR_API_KEY = os.environ.get("LINEAR_API_KEY", "lin_api_xxx")
API_URL = "https://api.linear.app/graphql"
HEADERS = {
"Authorization": LINEAR_API_KEY,
"Content-Type": "application/json",
}
def graphql(query: str, variables: dict = None) -> dict:
"""Execute a GraphQL query against Linear API."""
payload = {"query": query}
if variables:
payload["variables"] = variables
resp = requests.post(API_URL, json=payload, headers=HEADERS)
resp.raise_for_status()
data = resp.json()
if "errors" in data:
raise RuntimeError(f"GraphQL error: {data['errors']}")
return data["data"]
# ── List issues for a team ─────────────────────────────────────────
ISSUES_QUERY = """
query ListIssues($teamKey: String!, $first: Int) {
team(key: $teamKey) {
issues(first: $first) {
nodes {
id
identifier
title
priority
state { name }
assignee { name }
updatedAt
}
}
}
}
"""
data = graphql(ISSUES_QUERY, {"teamKey": "BACK", "first": 25})
for issue in data["team"]["issues"]["nodes"]:
assignee = issue["assignee"][] issue[]
()
CREATE_ISSUE =
new_issue = graphql(CREATE_ISSUE, {
: {
: ,
: ,
: ,
: ,
: [],
}
})
()
UPDATE_STATE =
graphql(UPDATE_STATE, {
: ,
: {: },
})
ADD_COMMENT =
graphql(ADD_COMMENT, {
: {
: ,
: ,
}
})
SEARCH_QUERY =
results = graphql(SEARCH_QUERY, {: })
issue results[][]:
()
ACTIVE_CYCLE =
cycle_data = graphql(ACTIVE_CYCLE, {: })
cycle = cycle_data[][]
cycle:
()
()
/**
* Linear GraphQL API client — the underlying API the MCP server wraps.
*/
const LINEAR_API_KEY = process.env.LINEAR_API_KEY || "lin_api_xxx";
const API_URL = "https://api.linear.app/graphql";
async function graphql(query, variables = {}) {
const resp = await fetch(API_URL, {
method: "POST",
headers: {
Authorization: LINEAR_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ query, variables }),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}: ${resp.statusText}`);
const { data, errors } = await resp.json();
if (errors) throw new Error(`GraphQL: ${JSON.stringify(errors)}`);
return data;
}
// ── List unassigned issues ─────────────────────────────────────────
async function () {
data = (, { teamKey });
data...;
}
() {
results = [];
( task tasks) {
data = (, {
: {
: task.,
: task. || ,
teamId,
projectId,
: task. || ,
: task. || ,
},
});
results.(data..);
}
results;
}
() {
( id issueIds) {
(, { id, : { : targetStateId } });
}
}
( () => {
unassigned = ();
.(unassigned.( ({
: i., : i., : i., : i..,
})));
})();
/**
* Example: Using the MCP client SDK to call Linear MCP server tools.
* This demonstrates how an AI agent programmatically invokes the server.
*/
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
const transport = new StdioClientTransport({
command: "npx",
args: ["-y", "mcp-remote", "https://mcp.linear.app/mcp"],
});
const client = new Client({ name: "linear-agent", version: "1.0.0" });
await client.connect(transport);
// List available tools
const { tools } = await client.listTools();
console.log(tools.map(t => t.name));
// Search issues
const searchResult = await client.callTool({
name: "issues_search",
arguments: { query: "bug priority:urgent" },
});
console.log(searchResult.[].);
createResult = client.({
: ,
: {
: ,
: ,
: ,
: ,
: [],
},
});
.(createResult.[].);
client.();
# List MCP tools
curl -s -X POST "https://mcp.linear.app/mcp" \
-H "Authorization: Bearer $LINEAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# Call a tool (example: search issues)
curl -s -X POST "https://mcp.linear.app/mcp" \
-H "Authorization: Bearer $LINEAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"issues_search","arguments":{"query":"auth bug"}}
}'
Symptom: "Connection refused" or "Tool call failed — server not responding"
Fix: The remote MCP server can occasionally drop idle connections. Disconnect and reconnect the server from your MCP client settings. This is a routine client-side reset and does not affect your Linear data or authentication.
Symptom: "Unauthorized" or "Invalid token" when calling tools
Fix:
/mcp in Claude Code, or reconnect in client settings)rm -rf ~/.mcp-auth then re-authenticateSymptom: "Internal Server Error" when first connecting
Fix: Clear saved auth info and re-authenticate:
rm -rf ~/.mcp-auth
Also ensure Node.js 18+ is installed (required for mcp-remote).
Symptom: Tools return errors about non-existent teams or projects
Fix:
teams_list tool to get the exact team IDs and keysSymptom: Connection fails when using WSL on Windows
Fix: Use the SSE fallback transport:
{
"mcpServers": {
"linear": {
"command": "wsl",
"args": ["npx", "-y", "mcp-remote", "https://mcp.linear.app/sse", "--transport", "sse-only"]
}
}
}
Symptom: "Rate limit exceeded" on batch operations
Fix:
Symptom: Tools operate on the wrong workspace after switching
Fix: Each workspace needs its own auth context:
export MCP_REMOTE_CONFIG_DIR=~/.mcp-auth/workspace-b
npx mcp-remote https://mcp.linear.app/mcp
Authenticate each workspace separately.
The Linear MCP server is free to use, but the value it unlocks can be monetized through the following strategies:
Offer a service that connects client teams' Linear workspaces to AI agents (Claude Code, Cursor). The deliverable:
Pitch: "Reduce sprint admin by 2 hours/developer/week — issues auto-transition, standup notes become comments, PRs link to tickets automatically."
Build and deploy custom MCP-driven automation for Linear:
Build custom MCP servers that extend Linear's MCP with additional capabilities:
Within your own team or company, MCP-connecting Linear saves significant time:
Create and sell:
# Example: New issue with "bug" label gets auto-assigned to on-call
# Triggered via webhook or scheduled MCP tool call
def auto_triage(issue_id: str):
# 1. Fetch issue details via MCP
issue = mcp_call("issues_get", {"id": issue_id})
# 2. Detect labels and determine action
if "bug" in [l["name"] for l in issue["labels"]]:
oncall = find_oncall_engineer()
mcp_call("issue_update", {
"id": issue_id,
"assigneeId": oncall["id"],
"priority": 1,
})
Agent: Summarize the completed cycle for the Backend team
→ MCP calls: cycles_list, issues_list per cycle
→ Output: markdown summary with completion stats, top contributors, blocker analysis
Agent: Break this spec into Linear issues with milestones
→ MCP calls: project_create, issue_create (bulk), issue_update (dependencies)
→ Output: structured project with milestones and task dependencies
/mcp to authenticate, then test with a simple query: "List my assigned issues"/mcp/readonly)| Rationalization | Reality |
|---|---|
| "I'll just open Linear in the browser" | You lose AI context. MCP keeps the agent aware of your issues, enabling automated triage, PR linking, and status updates without leaving the terminal. |
| "Our CI already handles issue transitions" | CI only catches commits. MCP enables before/after automation: planning, estimation, assignment, review progression, and sprint reporting. |
| "OAuth setup is a hassle" | Linear's MCP uses OAuth 2.1 with dynamic client registration — one-time setup, zero config maintenance. For CI, use a bearer API key. |
| "I only need read access" | Use /mcp/readonly or restrict the OAuth scope to read. Full separation without a separate server config. |
| "MCP is Claude-only" | Linear's MCP server works with Cursor, VS Code, Windsurf, Zed, Codex, v0, and any MCP-compatible client. It's an open protocol. |
| "The SSE endpoint is enough" | SSE is deprecated. Use the Streamable HTTP endpoint at /mcp — it's faster, handles auth better, and is the recommended path. |