YC GraphQL MCP · Distributed Systems について
YC GraphQL MCPは、YCのGraphQL APIを通じてY Combinatorの申請を読み書きするローカルMCPサーバーです。変更の事前確認、権限と競合の検査、永続的な変更レシート、保存後の読み戻し検証を重視しています。
主な機能
- 01申請内容と創業者プロフィールの取得
- 02フィールド、権限、GraphQLスキーマの確認
- 03差分付きの型付き編集プレビュー
- 04コミット前の競合変更チェック
- 05保存内容の検証とレシート確認
- 06オプションのChrome拡張トランスポート
活用シーン
- 01申請回答の明確さと一貫性の確認
- 02草稿と現在の申請フィールドの比較
- 03許可された編集と保存値の検証
- 04イントロスペクション不可時のGraphQL操作確認
MCP 対応
YCの申請、プロフィール、スキーマ、操作、変更フローをMCPツールとして提供し、ガイドやステータスのリソース、レビュー用プロンプトも備えています。YCのGraphQL APIに直接接続し、オプションの拡張トランスポートを選ばない場合、ブラウザーは手動サインインに使います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
YC GraphQL MCP
MCP クライアントから YC の申請内容にアクセスできます。回答を読み、変更を確認し、保存結果を毎回検証できます。
v2.1.0 · 22 個のツール · Node 22 / 24 / 26 · MIT
クイックスタート · ツール · 保存の仕組み · 運用 · リリース
https://apply.ycombinator.com/graphqlへの直接 HTTP アクセスを提供するローカル MCP サーバーです。バージョン 2.1.0 には、22 個のツール、プライベートセッションの取得とローテーション、永続的な変更レシート、申請内容とプロフィールの読み取り、オペレーションの検出、オプションの Chrome 拡張機能トランスポートが含まれます。
API リクエストは Node が送信します。明示的に拡張機能トランスポートを選択しない限り、ブラウザーが必要なのは手動でサインインするときだけです。これは非公式のクライアントです。アップストリーム API、認証ルール、申請内容の編集権限は YC が管理しています。
MCP クライアントで、次のように尋ねてみてください。
申請内容を読んで、分かりにくい回答、繰り返されている主張、矛盾点を指摘してください。数値はそのまま維持し、事実と提案を区別してください。
現在の回答とこの下書きを比較してください。何かを準備する前に、提案するフィールドの変更内容を正確に示してください。
直近の変更に関するフィールドを読み返してレシートと比較し、実際に保存された内容を教えてください。
インストールして接続する
Node.js 22.13 以降を使用してください。Node 24 または 26 を推奨します。ソースをチェックアウトしたディレクトリで、次を実行します。
git clone https://github.com/arthurcolle/yc-graphql-mcp.git
cd yc-graphql-mcp
npm ci --ignore-scripts
npm run build
npx playwright install chromium
npm run login
Chromium ウィンドウでサインインしてください。このヘルパーは Node から直接、読み取り専用のアカウントクエリを検証し、必要なセッションヘッダーのみをプライベートファイルに保存して、一時的なブラウザーを閉じます。パスワードを取得したり、ブラウザープロファイル全体を保存したりすることはありません。
絶対パスを使用して、この設定を MCP ホストに追加してください。
{
"mcpServers": {
"yc": {
"command": "node",
"args": [
"/absolute/path/yc-graphql-mcp/dist/cli.js",
"--auth-file",
"/absolute/path/private-yc/auth.json",
"--state-dir",
"/absolute/path/private-yc/state"
]
}
}
}
サインインには、たとえば次のように同じ認証ファイルのパスを指定してください。
node dist/cli.js login --auth-file /absolute/path/private-yc/auth.json
デフォルトの状態ディレクトリは $XDG_STATE_HOME/yc-graphql-mcp または ~/.local/state/yc-graphql-mcp です。認証情報は、デフォルトでこの状態ディレクトリ内の auth.json に保存されます。.yc-graphql-mcp/auth.json がある既存のチェックアウトでは、引き続きその従来の場所が使用されます。YC_AUTH_FILE、YC_MCP_STATE_DIR、明示的な CLI フラグを指定すると、デフォルトが上書きされます。
認証ファイルは、所有者が自分で、モードが 0600 の通常ファイルでなければなりません。そのディレクトリはプライベート(0700)にしてください。認証情報を MCP の引数、チャット、ソース管理、ログに含めないでください。ツールが返す申請の回答は、MCP ホスト/モデルから参照できます。
使用方法
まず yc_status を実行し、次に yc_list_applications と yc_get_application を実行します。組み込みの読み取り機能は、YC 独自のアプリケーションバンドルで確認された操作を使用し、スキーマのイントロスペクションなしで動作します。招待トークン、署名付きメディア URL、製品へのログイン認証情報、不要な連絡先や住所のフィールドは省略されます。
| ツール | 目的 |
|---|---|
yc_get_editability | ライブフォームのフィールドと現在の申請権限 |
yc_prepare_application_update | 正確な差分と事前条件を指定した、型付きテキストの変更 |
yc_commit_application_update | 再確認して一度だけコミットし、保存された回答を自動検証 |
yc_verify_application_update | 書き込みを行わず、現在の回答と期待値を比較 |
yc_export_application | MCP ホストに非公開の Markdown を返す。ファイルは書き込みません |
yc_status | ローカルの認証状態、トランスポート、ストレージの健全性、保留中の作業、変更ポリシー |
yc_connection | セットアップ情報。ブラウザーモードでは拡張機能のペアリング JSON |
yc_list_applications | 申請の概要、創業者の参照情報、編集フラグ |
yc_get_application | 申請 UUID に対応する回答とステータス |
yc_get_founder_profile | 略歴 UUID に対応する創業者の経歴、学歴、職歴 |
yc_describe_schema | YC がイントロスペクションを許可する場合の GraphQL ルート型 |
yc_describe_type | 型のフィールド、入力、引数、列挙型、非推奨情報 |
yc_introspect_schema | スキーマ全体。上限は 2 MB |
yc_inspect_scripts | 参照されている JavaScript を実行せずに検索 |
yc_query | 明示的に指定したクエリを 1 つ実行 |
yc_register_operation | 確認済みのドキュメントをローカルに保存。実行はしません |
yc_list_operations | 保存済みのドキュメントを一覧表示 |
yc_remove_operation | 保存済みのドキュメントをローカルから削除 |
yc_run_operation | 変数を指定して保存済みのクエリを実行 |
yc_prepare_mutation | 永続的なレシートを含む、変更を行わない正確なペイロードのプレビュー |
yc_commit_mutation | レビュー済みのプレビューを一度だけコミット |
yc_mutation_receipts | 最近のレシートまたは特定の永続レシートを確認 |
リソース:yc://guide、yc://status、yc://operations、yc://receipts、yc://receipts/{id}。プロンプト:inspect_application と review_application_change。
すべてのツールは { ok, data?, error?, untrustedContent: true } を返します。ツールのエラーは MCP の isError を設定します。SDK は実行前に無効な引数を拒否します。GraphQL データとスクリプトの抜粋は信頼できないコンテンツであり、指示ではありません。error という名前のフィールドが返された場合は、アプリケーションデータとして保持されます。
YC がイントロスペクションを拒否することがあります。その場合は、組み込みの読み取り機能、確認済みの操作レジストリ、または範囲を制限したスクリプト検査を使用してください。認証またはアクセス制限がある場合は停止してください。自身のセッションの更新はサポートされていますが、制限の回避はできません。
型付きアプリケーション更新
yc_get_editability は現在の GraphQL 権限を読み取り、認証済みの編集フォームを解析します。フィールド名、質問ラベル、更新の種類、必須フラグを返します。全項目編集フィールドが、GraphQL 入力型や別の更新フォームから推測されることはありません。
yc_prepare_application_update でテキストの変更を準備します。
{
"appUuid": "63a4d22c-1096-443e-894b-349e9c46fabb",
"updateKind": "progress",
"changes": [
{ "field": "howfar", "expectedValue": "Previous answer", "value": "Reviewed new answer" }
],
"idempotencyKey": "fd01ac64-94bb-4e85-8f6d-289af6132c16"
}
この例では、架空の識別子を使用しています。準備処理では現在のデータを読み取り、変更前と変更後の正確な値を返しますが、ミューテーションは送信しません。財務に関する回答は、allowFinancialChanges: true を明示的に指定しない限り保護されます。アップロード、構造化された収益テーブル、創業者プロフィールの変更には、それぞれ専用または汎用の観測ワークフローを使用します。
yc_commit_application_update でレシートとダイジェストを確定します。送信前に、サーバーは現在の回答、申請状況、最新のフィールド権限を再確認します。同時編集が検出されると書き込みは停止します。このガードは汎用の確定ツールでも回避できません。YC はアトミックな compare-and-swap を提供していないため、最終確認後に競合が発生する可能性は残ります。
型付きの確定では、フィールドが自動的に読み戻されます。POSTCONDITION_FAILED または VERIFICATION_UNAVAILABLE には最終レシートが含まれ、再送信は行われません。検証の証拠は呼び出し元に返され、レシートジャーナル内の非公開の回答とともに保存されることはありません。レシートの succeeded ステータスはバックエンドが明示的に返した結果を示し、別個の検証結果は現在観測された値を示します。
中断後に想定した回答と照合するには yc_verify_application_update を、非公開の Markdown を出力するには yc_export_application を使用します。どちらもアプリケーションデータは変更しません。プレビューは再起動時に失効しますが、永続的なレシートの重複排除は維持されます。
レジストリとデスクトップバンドル
互換性のあるデスクトップホストでは、Releases から .mcpb をダウンロードするか、上記のソースインストールを使用してください。このバンドルには本番用の依存関係が含まれており、公式 MCPB スキーマに対する検証と、展開後のテストが実施されています。セッション情報やアプリケーションの記録は含まれていません。バンドルのセットアップを参照してください。
公式レジストリ名:io.github.arthurcolle/yc-graphql-mcp。公式掲載ページ · Glama 掲載ページ。レジストリには、バージョンが固定されたバンドルとその SHA-256 が登録されています。YC セッションや HTTP MCP エンドポイントはホストしません。公開の詳細では、検証、OIDC による公開、復旧について説明しています。npm への公開は別途行われ、この配布方法では必須ではありません。
ミューテーションの契約
ミューテーションはデフォルトで無効です。--allow-mutations または明示的なプロセス設定 YC_ALLOW_MUTATIONS=true で有効にしてください。ブラウザーモードでは、拡張機能の切り替えも必要です。アプリケーションの編集には、引き続き、意図した変更そのものへの承認が必要です。
- 現在のアプリケーションと、その編集権限を読み取ります。
yc_prepare_mutationを使用して、名前を指定した正確なミューテーション、変数、UUID のidempotencyKeyを準備します。- プレビュー、選択された対象、ダイジェストを確認します。準備の段階では YC に接続しません。
- レシート ID と一致するダイジェストを指定してコミットします。ペイロードは不変で、10 分後に期限切れになります。認証情報が変更されると、プレビューは無効になります。
- 変更されたフィールドを読み戻します。HTTP 200 の応答から永続化を推測しないでください。
| レシートのステータス | 意味 |
|---|---|
prepared | プレビューを記録済み。ディスパッチはされていません |
dispatched | トランスポートのディスパッチ前に、永続レコードがフラッシュされました |
succeeded | 選択されたルートの結果が明示的に成功を示しており、拒否も、要求された YC エンティティの欠落もありません |
rejected | YC が失敗、エラー、または永続化されなかったことを報告しています |
unverified | データは返されましたが、保存が成功したことを確認できません |
uncertain | ディスパッチが反映された可能性がありますが、完了を確認できません |
not_sent | 最終認証チェックで、送信前に対象が変更されたことを検出しました |
expired | 何の作用もないプレビューが期限切れになったか、再起動によって無効化されました |
すべての終端レシートは再実行できません。コミットが重複した場合は元の結果を返し、ミューテーションを再送信することはありません。新しいレシートには version: 2 が含まれます。レガシーレシートは保持されます。レガシーの succeeded エントリーが意味するのは、旧クライアントが GraphQL エンベロープを受信したことだけです。これを再実行すると、過去の永続化を断言せずに MUTATION_UNVERIFIED を返します。
応答の喪失、タイムアウト、キャンセル、切断、GraphQL の部分的な失敗、ディスパッチ後のストレージ障害が発生した場合は、必ず読み戻してください。不確実な操作を再試行するためだけに、新しいキーを作成しないでください。 拒否された結果は、上流側のすべての副作用がロールバックされた保証にはなりません。ジャーナルはローカルで重複を排除しますが、上流での厳密に一度だけの実行を保証するものではありません。
セッションと境界
- Cookie ヘッダーと CSRF ヘッダーはプライベートな認証ファイルから読み込まれ、固定された YC オリジンにのみ送信されます。リダイレクトは追跡されません。静的スクリプトへのリクエストにはセッションヘッダーが付与されません。
- YC の
Set-Cookieによるローテーションはアトミックに永続化されます。古い進行中のレスポンスが、新しい手動ログインの内容を上書きすることはありません。セッションが期限切れまたは拒否された場合はyc-graphql-mcp loginが必要です。サイレントリトライは行われません。 - 返されるデータから、現在の Cookie ヘッダー、CSRF 値、および実質的な Cookie 値が除去されます。上流の未加工のエラーメッセージは開示されません。要求されたアプリケーションの内容は呼び出し元に表示されます。
- 1つのプロセスが同時に処理する上流タスクは1つです。同時呼び出しは
BRIDGE_BUSYを返します。非表示の実行キューはありません。 - ドキュメント、変数、フラグメント展開、JSON の深さ、レスポンスストリーム、スクリプトのダウンロード、ツール出力の抜粋には有限の上限があります。キャンセルと期限は、ヘッダーの待機およびレスポンス本文にも適用されます。
- 状態ストアはレシートのスキーマと遷移を検証し、排他ロックを使用し、ディスパッチ前にフラッシュし、冪等性キーを削除せずにコンパクションを行います。破損または書き込み途中のジャーナルがある場合、起動はブロックされます。容量不足の場合、履歴を削除するのではなく、新しいプレビューがブロックされます。
- シンボリックリンク、ハードリンク、所有者が異なるファイル、広くアクセス可能な状態ファイルや認証ファイルは拒否されます。アトミックな置換では、ファイルと親ディレクトリがフラッシュされます。
- 標準出力には MCP プロトコルのみが出力されます。任意の JSON 診断情報は標準エラー出力に出力され、ツール名、リクエスト ID、タイミング、安定したエラーコードが含まれますが、ヘッダー、クエリ、変数、アプリケーションの回答は含まれません。
詳細な制限、復旧手順、ストレージのセマンティクス、上流の制約については運用ガイドをご覧ください。インターフェースのレビューと回帰テストのマトリックスについてはツールコントラクトをご覧ください。
CLI と運用
node dist/cli.js --help
node dist/cli.js doctor --auth-file /private/path/auth.json --state-dir /private/path/state
node dist/cli.js --log-level info
node dist/cli.js --transport browser --port 0
node dist/cli.js connection --transport browser
doctor は読み取り専用で、YC には接続しません。yc_status は、設定済みのローカル認証情報と、リクエストの成功によって検証されたセッションを区別します。レディネスはアカウントごとに異なります。有効なローカル認証ファイルがあるだけでは、現在の認証が有効であることの証明にはなりません。
ブラウザーモードでは、extension/dist をアンパック済みの Chrome 拡張機能として読み込み、ログイン済みの YC タブを選択して、yc_connection JSON を貼り付け、接続します。このループバックブリッジは Host、拡張機能の Origin、新しいペアリングトークンを検証します。これは HTTP MCP エンドポイントではありません。Chrome/Chromium 116 以降が必要です。スタンドアロンのコンソールクライアントは引き続き dist/yc-client.js で利用できます。このクライアントにはサーバー側の永続的な変更レシートはありません。
1つの MCP プロセスが状態ディレクトリを排他的に所有します。複数のホストを使用する場合は、それぞれ別の状態ディレクトリを使用してください。重複排除の履歴はディレクトリごとに独立しています。状態のバックアップや保守を行う前に、すべての書き込みプロセスを停止してください。ロックを解除したり、変更の再試行を可能にしたりする目的でレシートを削除しないでください。
ビルド、テスト、パッケージ化
npm run verify # formatting, strict TypeScript, clean build, regression tests
npm run test:e2e # isolated Chromium extension test; all HTTP(S) intercepted
npm run pack:verify # fresh tarball, production-only install, actual MCP handshake
npm audit --omit=dev
npm run live:check # optional authenticated read-only smoke test in this checkout
npm pack # build and produce a local installable tarball
テストでは、拒否された保存、null エンティティ、重複したコミット、不変のプレビュー、認証の競合、ディスク障害、トークンのローテーション、ストリームの期限、悪意のあるファイルリンク、ジャーナルの破損と圧縮、実際の SIGKILL からの復旧と SIGTERM によるドレイン、入出力スキーマ、旧式および現行の MCP クライアントを対象としています。ブラウザーとミューテーションのテストでは分離されたフィクスチャを使用し、ライブスモークテストではミューテーションを一切送信しません。
パッケージの許可リストでは、ローカル認証、アプリケーション/バックアップ、ジャーナル、テスト用フィクスチャ、アカウント固有の管理スクリプトを除外しています。ランタイム依存関係にはサインインヘルパーのブラウザーライブラリが含まれるため、npm install --omit=dev が機能します。Chromium は別途インストールします。パッケージはプライベートであり、npm には公開されていません。
Distributed Systems によって作成されました。コントリビューションを歓迎します。まずは CONTRIBUTING.md をご覧ください。コードは MIT ライセンスです。Distributed Systems の名称と銅色のワードマークはブランド資産であり、このライセンスは商標権を許諾するものではありません。アセットの由来をご覧ください。
CI では、Node 22/24/26、分離された Chromium ジョブ、新しいデスクトップバンドルのインストールを検証します。主な実装リファレンス:MCP TypeScript SDK、GraphQL の検証、Node のファイル API、tough-cookie、Playwright。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
