HTTP Server with MCP Support について
Jake Gaylor の履歴書やプロフィールを人や AI システムに提供する、Express と TypeScript によるサービスです。採用担当者や候補者を評価する AI クライアント向けで、履歴書 JSON を起動時に取得し、Web、テキスト、MCP、A2A の各インターフェースで公開します。
主な機能
- 01Webページとテキスト形式の履歴書
- 02候補者情報を取得する MCP ツール
- 03A2A エージェントカードとエンドポイント
- 04職務適合性評価と面接質問の生成
- 05空き状況の確認と面談予約
活用シーン
- 01AI クライアントから経歴やリンクを取得
- 02求人内容に基づく候補者の適合性評価
- 03構造化された選考情報と面談枠の確認
MCP 対応
Streamable HTTP または従来の SSE 経由で、履歴書やリンクの取得、職務評価、面接質問の生成、日程調整ツールを公開します。npx @jhgaylor/me-mcp を使った stdio 接続にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ai.jakegaylor.com
Jake Gaylor の情報を AI システムが読み取れるようにする、Express + TypeScript サーバーです。1 つのデプロイで、同じ履歴書と略歴を基にした 4 つのインターフェースを提供します。
- Web ページ(
GET /):人間向け - プレーンテキストのコンテキスト(
GET /llms.txt):LLM とクローラー向け - MCP サーバー(
/mcp):人間が設定した AI クライアント向け - A2A エージェント(
/a2a+ エージェントカード):独自にサイトを検出するエージェント向け
履歴書の内容は起動時に jakegaylor.com/resume.json から取得して Markdown に変換されるため、手作業で編集しなくても、すべてのインターフェースに最新の内容が反映されます。
エンドポイント
| エンドポイント | 提供内容 |
|---|---|
GET / | Web ページ |
GET /llms.txt | 履歴書 + 基本的な信条(プレーンテキスト) |
POST /mcp(+ GET/DELETE) | Streamable HTTP 経由の MCP |
GET /sse + POST /messages | 従来の SSE トランスポート経由の MCP |
GET /.well-known/agent-card.json | A2A エージェントカード(v1.0。従来のクライアント向けに v0.3 へ変換)。キーが設定されている場合は JWS 署名付き |
GET /.well-known/jwks.json | カード署名の検証用公開鍵 |
POST /a2a | A2A JSON-RPC エンドポイント(v1.0 + v0.3 互換) |
MCP
@jhgaylor/candidate-mcp-server を基盤として構築されています。公開されるツール:
get_resume_text、get_resume_url、get_linkedin_url、get_github_url、get_website_url、get_website_text、contact_candidate(Jake にメールを送信)、generate_interview_questions、assess_role_fit、get_candidate_preferences(構造化されたスクリーニングデータ。src/preferences.ts を参照)、get_availability + book_intro_call(A2A スキルと同じ仮予約確認および 1 日あたりの上限ガードレールを備えた、Cal.com を利用したスケジュール調整)
クライアントを https://ai.jakegaylor.com/mcp に接続するか、ローカルで stdio 経由により npx @jhgaylor/me-mcp を実行してください。
A2A
@a2a-js/sdk を基盤とする A2A v1.0 エージェントです。v0.3 互換レイヤーが有効になっています。A2A-Version ヘッダーを送信しないクライアントは、プロトコル上 v0.3 として扱われます。また、デプロイ済みのクライアントのほとんどは、現在も v0.3 を使用しています。カードは同じ URL で両方のバージョンを案内します。
スキル:
about-jake— 履歴書、略歴、スクリーニングデータに基づき、低コストの LLM を使用して Jake の経験に関する質問に回答します。LLM キーが設定されていない場合や呼び出しに失敗した場合は、履歴書全体を Markdown で返すため、どちらの場合もスキルの契約が維持されます。candidate-preferences— 構造化されたスクリーニングデータ(職種、レベル、勤務地、転居、リモート勤務、就労資格、報酬に関する方針、稼働状況、履歴書へのリンク)を、JSON データパートと Markdown で返します。スクリーニング/日程調整関連のキーワード、またはmetadata.skillによって起動します。値はsrc/preferences.tsにあります。assess-role-fit— 職務記述書(JD:プレフィックス、または職務記述書形式の長文テキスト)を送信すると、率直な LLM 評価による適合性評価が返されます。判定、履歴書の引用付きの強み、率直に示した不足点、日程などの条件確認、面接での質問案が含まれます。LLM を利用できない場合は履歴書を返します。schedule-intro-call— 日程調整の意図を含むメッセージには、セルフホストされた Cal.com(cal.jakegaylor.com、公開予約エンドポイント。ライセンスが必要な API は不要)の空き枠を返します。BOOK: <slot> | <email> | <name> | <note>で予約を作成します。ガードレール:予約には Jake の確認が必要(Cal.com 標準機能)、副作用の実行には明示的なBOOK:プレフィックスが必要、1 日あたりの試行回数に上限あり。設定はsrc/calcom.tsのCAL_*環境変数で行います。connect-via-mcp— MCP に言及するメッセージには、より豊富な MCP インターフェースへの接続手順を返します。contact-jake—CONTACT:で始まるメッセージをメールで Jake に転送します。明示的なプレフィックス、またはmetadata.skill = "contact-jake"がある場合に限り、メール送信が実行されます。
例:
curl -X POST https://ai.jakegaylor.com/a2a \
-H "Content-Type: application/json" -H "A2A-Version: 1.0" \
-d '{"jsonrpc":"2.0","id":1,"method":"SendMessage","params":{"message":{
"messageId":"m1","role":"ROLE_USER",
"parts":[{"text":"What is Jake's experience with Kubernetes?"}]}}}'
設定
| 環境変数 | 用途 |
|---|---|
PORT | HTTP ポート(デフォルトは 3000) |
RESEND_API_KEY | Resend SMTP 経由のメール(設定されている場合に優先) |
EMAIL_FROM | Resend の送信元アドレス(ドメインは Resend で認証済みである必要があります) |
MAILGUN_API_KEY | Mailgun 経由のメール(Resend が設定されていない場合のフォールバック) |
OPENROUTER_API_KEY | OpenRouter 経由の about-jake 用 LLM(設定されている場合に優先) |
OPENAI_API_KEY | OpenAI を直接利用する about-jake 用 LLM(フォールバック) |
LLM_MODEL | モデルの上書き(デフォルトは OpenRouter で openai/gpt-5.4-nano、OpenAI で gpt-5.4-nano) |
A2A_BASE_URL | エージェントカードに埋め込まれる公開ベース URL(デフォルトは https://ai.jakegaylor.com) |
A2A_SIGNING_KEY_JWK | エージェントカードに署名する秘密 ES256 JWK(kid を含む)。未設定の場合は署名なしのカードを配信します |
POSTHOG_API_KEY | サーバー側のエージェントトラフィック分析(カードの取得、MCP/A2A リクエスト、スキルのルーティング)。未設定の場合、分析は無効です |
POSTHOG_HOST | PostHog エンドポイント(デフォルトは https://us.i.posthog.com) |
メールキーが設定されていない場合、contact_candidate/contact-jake は適切に失敗を報告します。LLM キーが設定されていない場合、about-jake は完全に決定論的に動作します。
開発
npm install
npm run build # tsc
npm run dev # stdio transport, auto-reload
npm run dev:web # HTTP transport on :3000, auto-reload
src/
├── index.ts # Entry point; picks stdio or HTTP transport
├── express.ts # HTTP server: web, MCP, A2A mounting
├── a2a.ts # A2A agent card, executor, skills
├── preferences.ts # Structured screening data (edit values here)
├── stdio.ts # STDIO transport for MCP
├── config.ts # Server + candidate config; fetches resume at boot
├── resumeMarkdown.ts # JSON Resume → markdown renderer
└── types.ts # Shared types
デプロイ
main へのプッシュをトリガーとして、GitHub Actions がマルチアーキテクチャの Docker イメージ(jhgaylor/jake-gaylor-com-mcp-server)をビルドします。その後、ワークフローは k8s/kustomization.yaml を新しい sha-<commit> タグに固定し、変更をコミットしてリポジトリに戻します。Flux がリポジトリを監視し、home-cloud k3s クラスターでデプロイをロールアウトします。実行時のシークレットは InfisicalSecret(k8s/infisicalsecret.yaml を参照)経由で Infisical から取得され、envFrom を通じてポッドに渡されます。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。