Linear MCP Server について
Linear MCP Serverは、課題追跡やプロジェクト管理のためにMCPクライアントをLinearへ接続するサーバーです。課題、コメント、サイクル、ワークフロー状態を扱い、条件付きの複数ステップ処理も実行できます。
主な機能
- 01課題の作成・一覧・更新
- 02プロジェクト、チーム、ユーザーの管理
- 03サイクルとワークフロー状態の操作
- 04課題の関連付けとコメント管理
- 05条件付き複数ステップ処理
- 06Zodによるスキーマ検証とメトリクス収集
活用シーン
- 01クライアントからLinearの課題を追跡・更新
- 02プロジェクトのサイクルと状態を整理
- 03条件付きでLinear操作を連続実行
- 04課題へのコメントや関連付けの追加
MCP 対応
MCPサーバーはツールを通じてLinear APIの操作をクライアントに提供し、課題、プロジェクト、チーム、サイクル、コメントの管理とパイプライン実行に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Linear MCP サーバー
Linear の課題追跡とプロジェクト管理のための Model Context Protocol サーバー実装です。このサーバーは、課題、サイクル、プロジェクト、その他の Linear リソースの作成、更新、管理に使用されます。
機能
- 公式 SDK を使用した MCP 準拠のサーバー
- Linear API とのシームレスな統合
- TypeScript と Zod スキーマによる型安全な実装
- 包括的な課題管理と追跡
- ユーザー、チーム、プロジェクトの管理
- サイクルとワークフローの状態の処理
- 課題の関連付けと依存関係
- コメントとコラボレーションツール
- パイプラインの実行と複数ステップのワークフロー
- 高度なエラー処理とメトリクスの収集
- 拡張可能なツールとパイプラインのアーキテクチャ
ツール
課題管理
-
list_issues
- Linear の課題を一覧表示します
- 入力:
teamId(string, optional):課題を一覧表示するチームの IDfirst(number, optional):取得する課題の数(デフォルト:50)projectId(string, optional):プロジェクト ID で課題を絞り込みますlabelId(string, optional):ラベル ID で課題を絞り込みますstateId(string, optional):状態 ID で課題を絞り込みますpriority(number, optional):優先度で課題を絞り込みます(0~4)assigneeId(string, optional):担当者 ID で課題を絞り込みます
- 戻り値:詳細情報を含む Linear の課題の配列
-
create_issue
- Linear に新しい課題を作成します
- 入力:
title(string):課題のタイトルteamId(string):チームの IDdescription(string, optional):課題の説明priority(number, optional):課題の優先度assigneeId(string, optional):担当者の ID
- 戻り値:作成した課題の詳細
-
get_issue
- 特定の課題の詳細情報を取得します
- 入力:
id(string):課題の ID
- 戻り値:課題の詳細
-
update_issue
- 既存の課題を更新します
- 入力:
issueId(string):更新する課題の IDtitle(string, optional):新しいタイトルdescription(string, optional):新しい説明projectId(string, optional):新しいプロジェクト ID(削除する場合は null)stateId(string, optional):新しい状態 IDpriority(number, optional):新しい優先度assigneeId(string, optional):新しい担当者 ID(担当を解除する場合は null)parentId(string, optional):新しい親課題 ID(削除する場合は null)addLabelIds(string[], optional):課題に追加するラベル IDremoveLabelIds(string[], optional):課題から削除するラベル ID
- 戻り値:更新した課題の詳細
課題の関連付け
-
add_issue_relation
- 2 つの課題間に関連付けを作成します
- 入力:
issueId(string):元の課題の IDrelatedIssueId(string):対象の課題の IDtype(string):関連付けの種類('related'、'blocks'、または 'duplicate')
- 戻り値:作成した関連付けの詳細
-
remove_issue_relation
- 課題間の関連付けを削除します
- 入力:
relationId(string):削除する関連付けの ID
- 戻り値:操作結果
-
list_issue_relations
- 特定の課題の関連付けを一覧表示します
- 入力:
issueId(string):課題の IDfirst(number, optional):取得する関連付けの数
- 戻り値:課題の関連付けの配列
コメント
-
list_issue_comments
- 特定の課題のコメントを一覧表示します
- 入力:
issueId(string):課題の IDfirst(number, optional):取得するコメントの数
- 戻り値:コメントの配列
-
create_comment
- 課題にコメントを追加します
- 入力:
issueId(string):課題の IDbody(string):コメントの本文
- 戻り値:作成したコメントの詳細
ユーザーとチームの管理
-
list_users
- Linear のユーザー一覧を取得します
- 入力:
first(数値、任意):取得するユーザー数(デフォルト:50)includeArchived(ブール値、任意):アーカイブ済みのユーザーを含めるかどうか(デフォルト:false)
- 戻り値:詳細情報を含むユーザーの配列
-
get_user
- 特定のユーザーの詳細を取得します
- 入力:
id(文字列):取得するユーザーの ID
- 戻り値:名前、表示名、メールアドレス、ステータスを含むユーザーの詳細
-
list_teams
- Linear のチーム一覧を取得します
- 入力:
first(数値、任意):取得するチーム数(デフォルト:50)includeArchived(ブール値、任意):アーカイブ済みのチームを含めるかどうか(デフォルト:false)
- 戻り値:詳細情報を含むチームの配列
-
get_team
- 特定のチームの詳細を取得します
- 入力:
id(文字列):取得するチームの ID
- 戻り値:名前、説明、キーを含むチームの詳細
サイクル
-
list_cycles
- Linear のサイクル一覧を取得します
- 入力:
first(数値、任意):取得するサイクル数
- 戻り値:詳細情報を含むサイクルの配列
-
get_cycle
- 特定のサイクルの詳細を取得します
- 入力:
id(文字列):取得するサイクルの ID
- 戻り値:サイクルの詳細
-
get_cycle_issues
- 特定のサイクルの課題を取得します
- 入力:
cycleId(文字列):サイクルの IDfirst(数値、任意):取得する課題数
- 戻り値:サイクル内の課題の配列
-
explore_cycle_issue
- サイクル内の課題に関する詳細情報を取得します
- 入力:
id(文字列):詳細を確認する課題の ID
- 戻り値:課題の詳細情報
プロジェクト
-
list_projects
- Linear のプロジェクト一覧を取得します
- 入力:
first(数値、任意):取得するプロジェクト数
- 戻り値:詳細情報を含むプロジェクトの配列
-
get_project
- 特定のプロジェクトの詳細を取得します
- 入力:
id(文字列):取得するプロジェクトの ID
- 戻り値:プロジェクトの詳細
ラベル
-
list_labels
- Linear の課題ラベル一覧を取得します
- 入力:
first(数値、任意):取得するラベル数
- 戻り値:詳細情報を含むラベルの配列
-
get_label
- 特定のラベルの詳細を取得します
- 入力:
id(文字列):取得するラベルの ID
- 戻り値:ラベルの詳細
ワークフローの状態
-
list_workflow_states
- Linear のワークフローの状態一覧を取得します
- 入力:
first(数値、任意):取得する状態の数teamId(文字列、任意):チーム ID で状態を絞り込みます
- 戻り値:詳細情報を含むワークフローの状態の配列
-
get_workflow_state
- 特定のワークフローの状態の詳細を取得します
- 入力:
id(文字列):取得するワークフローの状態の ID
- 戻り値:ワークフローの状態の詳細
パイプラインの実行
- execute_pipeline
- 一連のツールのステップを、条件に応じてデータ変換しながら実行します。
- 入力:
steps(配列):各ステップにtoolName、params、任意のcondition、任意のtransform関数を含むステップの一覧です。context(オブジェクト、任意):実行コンテキスト(requestId、timestamp、timeout、retryCount など)。
- 戻り値:各パイプラインステップの結果の配列。
パイプライン定義の例
{
"steps": [
{ "toolName": "list_issues", "params": { "first": 1 } },
{ "toolName": "create_issue", "params": {}, "condition": "results => results && results.length > 0", "transform": "results => ({ title: 'Follow-up', teamId: results[0].teamId })" }
],
"context": { "requestId": "abc123" }
}
エラー処理
すべてのツールは、標準形式でエラーを返します。
code(文字列):エラーコードmessage(文字列):エラーメッセージretryable(ブール値):エラーを再試行できるかどうかdetails(オブジェクト、任意):追加の詳細suggestions(配列、任意):解決方法の候補
メトリクスとモニタリング
- ツールごとのエラー率と平均リクエスト所要時間を追跡します
- stderr に定期的にレポートします
- メトリクスはプログラムからリセットおよび確認できます
型安全性と拡張性
- すべてのツールスキーマは、実行時の検証に Zod を使用して定義されています
- スキーマとハンドラーを拡張することで、新しいツールを簡単に追加できます
conditionおよびtransform関数を使って、独自のロジックでパイプラインを構成できます
使用例:課題の一覧表示
curl -X POST http://localhost:3000/tool/list_issues \
-H 'Content-Type: application/json' \
-d '{ "teamId": "your-team-id", "first": 10 }'
使用例:パイプラインの実行
{
"steps": [
{ "toolName": "list_issues", "params": { "first": 2 } },
{ "toolName": "create_issue", "params": { "title": "Automated follow-up", "teamId": "team123" } }
]
}
詳細については、Model Context Protocol Introductionを参照してください。
-
入力:
id(string):取得する課題の ID
-
戻り値:タイトル、説明、ステータス、担当者情報を含む課題の詳細
-
list_issue_comments
- 特定の課題のコメントを一覧表示します
- 入力:
issueId(string):コメントを取得する課題の IDfirst(number、任意):取得するコメント数(デフォルト:20)
- 戻り値:コメント内容と作成者情報を含むコメントの配列
-
create_comment
- 課題に新しいコメントを作成します
- 入力:
issueId(string):コメントを追加する課題の IDbody(string):コメントの内容
- 戻り値:作成したコメントの詳細
-
execute_pipeline
- Linear 操作のパイプラインを実行します
- 入力:
steps(array):各パイプラインステップを含む配列。各ステップは次の内容を含みます:toolName(string):実行するツールの名前params(object):ツールのパラメーター
- 戻り値:パイプラインの実行結果
セットアップ
-
Linear API キーを取得します:
- https://linear.app で Linear にログインします
- Settings > API > Personal API keys に移動します
- 「Create Key」をクリックします
- キーに名前を付けます(例:「MCP Server」)
- 生成された API キーをコピーします(表示されるのは一度だけです)
- 環境変数で使用するため、安全に保管します
-
依存関係をインストールします:
npm install
- プロジェクトをビルドします:
npm run build
Claude Desktop での使用方法
Node バージョン
{
"mcpServers": {
"linear": {
"command": "node",
"args": [
"path/to/linear-mcp-server/build/index.js"
],
"env": {
"LINEAR_API_KEY": "<YOUR_LINEAR_API_KEY>"
}
}
}
}
Docker バージョン
{
"mcpServers": {
"linear": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"LINEAR_API_KEY",
"mcp/linear"
],
"env": {
"LINEAR_API_KEY": "<YOUR_LINEAR_API_KEY>"
}
}
}
}
Docker ビルド
Docker イメージをビルドするには:
docker build -t mcp/linear -f src/linear/Dockerfile .
注:
<YOUR_LINEAR_API_KEY>を Linear API キーに置き換えます- ローカル開発では、Node バージョンを使用できます
- 本番環境へのデプロイでは、Docker バージョンを使用します
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。