mcpField
L
linear

linear

github.com/vercel-labsテスト・品質2.0k98 回インストール3 日前に更新
リポジトリ

linear について

linearは、開発・テスト向けのステートフルなLinear GraphQL APIエミュレーターです。組織やイシューのシード、OAuth、Webhookに対応し、ローカルのインスペクターも備えますが、本番APIの全機能は実装していません。

主な機能

  1. 01Linear GraphQLのクエリと更新をエミュレート
  2. 02組織、チーム、イシューなどをシード
  3. 03OAuth認可とトークンフローに対応
  4. 04Linear形式のWebhookを送信
  5. 05ローカルUIでエミュレーターのデータを確認

活用シーン

  1. 01Linear APIに依存するアプリのテスト
  2. 02OAuthフローのローカル検証
  3. 03イシュー更新で発生するWebhookのテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/vercel-labs/emulate --skill linear

インストール後、Claude Code で/linearを入力して読み込まれたか確認します。

詳細

Linear API エミュレーター

組織、ユーザー、チーム、ワークフローの状態、課題、コメント、ラベル、プロジェクト、サイクル、OAuth アプリ、トークン、Webhook、および基本的なエージェントセッションを備えた、ステートフルな Linear GraphQL API のエミュレーションです。

開始方法

ローカルリスナーは、デフォルトで 127.0.0.1 にバインドされます。コンテナーやほかのマシンからアクセスするには、CLI に --host 0.0.0.0 を渡すか、createEmulator に hostname: '0.0.0.0' を渡してください。クライアントからアクセス可能な URL を公開するには、--base-url または baseUrl を設定してください。

# Linear only
npx emulate --service linear

デフォルト URL:すべてのサービスを起動した場合は http://localhost:4012、Linear のみを起動した場合は http://localhost:4000 です。

URL マッピング

実際の Linear URLエミュレーター URL
https://api.linear.app/graphql$LINEAR_EMULATOR_URL/graphql
https://linear.app/oauth/authorize$LINEAR_EMULATOR_URL/oauth/authorize
https://api.linear.app/oauth/token$LINEAR_EMULATOR_URL/oauth/token
https://api.linear.app/oauth/revoke$LINEAR_EMULATOR_URL/oauth/revoke

認証

GraphQL は、ベアラートークンまたは個人用 API キーをそのまま受け付けます。

curl "$LINEAR_EMULATOR_URL/graphql" \
  -H "Authorization: Bearer lin_test_admin" \
  -H "Content-Type: application/json" \
  -d '{"query":"{ viewer { id email } }"}'

デフォルトでは、スコープチェックは緩和されています。サポートされている操作スコープ(read、write、issues:create、comments:create、admin など)を必須にするには、シード設定で linear.strict_scopes: true を設定してください。

シード設定

linear:
  organization:
    name: Acme
    url_key: acme
  users:
    - email: [email protected]
      name: Admin User
      admin: true
    - email: [email protected]
      name: Developer
  teams:
    - key: ENG
      name: Engineering
  issues:
    - team: ENG
      title: Fix local checkout test
      state: Todo
      assignee: [email protected]
  oauth_apps:
    - client_id: lin_example_client_id
      client_secret: example_client_secret
      name: My Linear App
      redirect_uris:
        - http://localhost:3000/api/auth/callback/linear
      scopes: [read, write, issues:create, comments:create]
  tokens:
    - token: lin_test_admin
      user: [email protected]
      scopes: [read, write, issues:create, comments:create, admin]
  strict_scopes: false

GraphQL の対応範囲

対応しているクエリ:

  • viewer
  • organization
  • users、user
  • teams、team
  • workflowStates、workflowState
  • issues、issue
  • comments、comment
  • issueLabels、issueLabel
  • projects、project
  • cycles、cycle
  • webhooks、webhook
  • agentSessions、agentSession

対応しているミューテーション:

  • issueCreate、issueUpdate、issueDelete、issueArchive、issueUnarchive
  • commentCreate、commentUpdate、commentDelete
  • issueLabelCreate、issueLabelUpdate、issueLabelDelete
  • issueAddLabel、issueRemoveLabel
  • webhookCreate、webhookDelete
  • agentSessionCreateOnIssue、agentSessionCreateOnComment、agentSessionUpdate
  • agentActivityCreate

コネクションでは、nodes、edges、pageInfo を含む Relay 形式のカーソルを使用します。

課題の選択項目では、数値の priority と、Linear が導出する priorityLabel の値(No priority、Urgent、High、Medium、Low)の両方が公開されます。

OAuth

  • GET /oauth/authorize — ローカルユーザー選択画面を備えた認可エンドポイント
  • POST /oauth/authorize/callback — ローカルユーザー選択画面のコールバック
  • POST /oauth/token — 認可コード、リフレッシュトークン、クライアントクレデンシャルの各グラント
  • POST /oauth/revoke — アクセストークンまたはリフレッシュトークンを失効

OAuth アプリでは、actor: user または actor: app を使用できます。設定されたアクターが常に優先されます。ユーザーアクターのアプリでは、認可コードフローを使用します。アプリアクターのアプリでは、アプリのインストールフローを使用し、クライアントクレデンシャルトークンを要求できます。アプリアクターのサポートは、ローカルのエージェントやサービスアカウントのテストには十分ですが、本番環境における Linear のエージェント動作を完全に再現するものではありません。

Webhook

webhookCreate またはシード設定を通じて、ローカルの Webhook サブスクリプションを作成できます。書き込みが行われると、シークレットが設定されている場合、Linear-Delivery、Linear-Event、Linear-Signature ヘッダーを含む Linear 形式のペイロードがディスパッチされます。

インスペクター

Linear エミュレーターで GET / を開くと、課題、チーム、ユーザー、プロジェクト、エージェントセッション、OAuth アプリ、トークン、Webhook サブスクリプション、Webhook 配信を確認できます。

現在の制限事項

Linear スキーマ全体の対応、本番環境と同等の厳密なレート制限、通知受信トレイの動作、リッチドキュメント API、顧客 API、イニシアチブ API、厳密な検索関連度、本番環境と同等の完全なエージェント動作は実装されていません。

組み込みエミュレーターと併用するカスタムエミュレーター

npx emulate init --custom inventory を実行して、サードパーティ API エミュレーターとテストのひな形を作成します。emulate の defineConfig を使って emulate.config.ts に登録します。{ emulator: "linear" } などの組み込みエントリーと併記できます。npx emulate start --watch を実行すると、インポートが再読み込みされ、表示された /_emulate URL でカスタム状態を確認できます。再読み込みが成功すると、実行状態はシードにリセットされます。既存のフラットなシード設定も引き続き使用できます。--config で明示的なファイルを指定します。サードパーティ API エミュレーターの作成とテストについては、https://emulate.dev/docs/custom-emulators をご覧ください。

コメント