Skip to main content
Glama
garusis

Hire-me MCP

by garusis

hire-me-mcp

hire-me-mcp は Marcos Alvarez のポートフォリオを、ライブで照会可能な API として再構築したものです。公開・匿名の Model Context Protocol(MCP)サーバーと Next.js サイトが、どちらも同じ実在のキャリアデータを読み取るため、あらゆる AI アシスタントにこの CV をツールとして渡せば、推測ではなく引用付きの根拠ある回答が得られます。API キー不要、サインアップ不要、接続は URL 1 つだけです。

CI Latest release Deployed on Vercel

実際の MCP セッションのターミナル記録: 本番の hire-me-mcp エンドポイントに接続し、ツールを一覧表示した後、get-skill-evidence を "event-driven architecture" で呼び出し、特定の職歴エントリを指し示す引用付きの根拠ある回答を受け取る様子。

  • ライブサイト: https://hire-me-mcp-web.vercel.app

  • ダウンロード可能な CV(PDF): packages/career-data から直接生成 — 同じソース、同じ ドメインレイヤーを使用し、別途管理するコピーはありません。サイトヘッダー(「Download CV」)と /llms.txt の Site セクションからリンクされています。安定したダウンロードパスは上記ライブサイトの /cv/<slugified-name>-cv.pdf です。コンテンツが変更されたら pnpm generate:cv でいつでも再生成し、 結果をコミットしてください(コミットされた PDF はすべてのデプロイに同梱されます — Vercel のビルドは Next.js アプリのビルド/デプロイのみを行うため、PDF 生成は意図的に組み込まれていません)。同じコンテンツの 印刷対応 HTML ビューは /cv/print で提供されます。

  • エージェント向けドキュメント: docs/mcp.md(全クライアント、レート制限、トラブルシューティング)と サイト自身の /llms.txt エントリポイント。

  • セキュリティチェックリスト: 今回のローンチと同時に #57 で公開予定 — docs/security-checklist.md が マージされたらここにリンクします。

  • ライブ MCP エンドポイント(Streamable HTTP、認証なし):

https://hire-me-mcp-web.vercel.app/api/mcp

30秒で試す

API キー不要、OAuth 不要、アカウント不要。MCP の Streamable HTTP トランスポートに対応したクライアントなら、 上の URL を「リモートサーバー」/「カスタムコネクタ」フィールドに貼り付けるだけで接続できます。

Claude Code(CLI):

claude mcp add --transport http hire-me-mcp https://hire-me-mcp-web.vercel.app/api/mcp

Cursor / VS Code(.cursor/mcp.json または .vscode/mcp.json):

{
  "mcpServers": {
    "hire-me-mcp": {
      "url": "https://hire-me-mcp-web.vercel.app/api/mcp"
    }
  }
}

Claude ウェブ/デスクトップのカスタムコネクターフロー、生の curl ヘルスチェック、レート制限、 トラブルシューティングはすべて docs/mcp.md にあります — これが正規の接続ガイドです。 上記のスニペットはすべて、そのガイドが参照するのと同じ接続メタデータモジュール(packages/connect-metadata、 pnpm generate:connect 経由)から生成されるため、サーバーが実際に提供する内容と同期がずれることはありません。

Related MCP server: Developer Portfolio MCP Server

質問できること

すべてのツール応答には、回答の根拠となった特定のプロフィールレコード、役職、プロジェクトへの引用が含まれます — 推測ではなく、根拠ある回答です。

  • 「Marcos Alvarez とは誰ですか?現在新しい役割にオープンですか?」

  • 「Marcos は 2022 年以降何に取り組んできましたか?最近の役割を順に説明してください。」

  • 「Marcos が TypeScript または Kubernetes を使ったプロジェクトを見せてください。」

  • 「Marcos はイベント駆動アーキテクチャに取り組んだ経験がありますか?証拠を見せてください。」

  • 「エンジニアリングチームのリードとメンタリングに関する Marcos の経験は?」

Tool

What it answers

Example question

get-profile

Marcos Alvarez の単一のプロフィールレコード(名前、見出し、所在地、稼働状況、短い経歴)を、引用情報付きの1つのオブジェクトとして返します。'この人物は誰か' や '現在の稼働状況・所在地は何か' を一目で答えるために使用します。役職ごとの職務履歴(get-experience を使用)、特定のプロジェクトの詳細(search-projects を使用)、特定のスキルやテクノロジーが主張されているかどうかの確認(get-skill-evidence を使用)には使用しないでください。入力は不要です。通常の運用では '結果なし' という結果はありません — このサーバーのデータセットには常に正確に1つのプロフィールが存在します。

"Marcos Alvarez とは誰で、現在新しい役割にオープンですか?"

get-experience

Marcos Alvarez の職務履歴から、オプションの構造化フィルター(企業、テクノロジータグ、YYYY-MM の日付範囲、現在/過去のステータス)に一致するすべてのエントリーを、新しい順に並べたリストとして返し、各エントリーに引用情報を添えます。'会社Xで何をしたか'、'年Yに何に取り組んだか'、'現在何をしているか' に答えるために使用します。フィルターフィールドを指定せずに呼び出すと、全履歴を返します。単一のプロフィール概要(get-profile を使用)、プロジェクトの説明のキーワード検索(search-projects を使用)、名前付きスキルが主張されているかの確認(get-skill-evidence を使用)には使用しないでください。どの役割にも一致しないフィルターは、エラーではなく空のリストを伴う成功結果を返します。

"Marcos は2022年以降、何に取り組んできましたか?最近の役割を説明してください。"

search-projects

Marcos Alvarez のプロジェクトポートフォリオをキーワードおよび/またはテクノロジータグで検索し、関連性スコア、一致フィールドの説明、引用情報をそれぞれに添えたランク付けされた一致結果を返します。マッチングはプロジェクト名、要約、本文、テクノロジータグに対する決定的なキーワード/タグ検索であり、現在のところクエリの意味論的または埋め込みベースの理解はありません。特定のプロジェクトを探したり説明したりするよう求められた場合に使用します(例: 'React を使用したプロジェクトを見せて'、'Kubernetes で何を構築したか')。時系列の職務履歴(get-experience を使用)や、スキルが主張されているかどうか(証拠またはギャップ)の確認(get-skill-evidence を使用)には使用しないでください。どのプロジェクトにも一致しないクエリは、エラーではなく空のリストを伴う成功結果を返します。空または空白のみのクエリも同様に動作します。

"Marcos が TypeScript または Kubernetes を使用したプロジェクトを見せてください。"

get-skill-evidence

単一の名前付きスキルまたはテクノロジーを検索し、3つの正直な結果のいずれかを報告します: 'claimed'(裏付けとなる証拠付きのスキル)、'not-claimed'(独自の記述と関連スキルを伴う、明示的で認識されたギャップ)、または 'unknown'(用語がどちらにも一致しない)。特定のテクノロジーについて 'X を知っていますか' や 'Y で作業したことがありますか' と尋ねられた場合に使用します。完全なスキルリストの閲覧(このサーバーにはそのようなツールはありません)や、プロジェクトの説明のキーワード検索(代わりに search-projects を使用)には使用しないでください。また、質問が単一のスキルではなく役割や企業に関するものである場合、get-experience の代わりにはなりません。'not-claimed' または 'unknown' の結果は、エラーではなく正常で成功した回答です — 再試行したり、その周辺で捏造したりせず、正直にそのまま伝えてください。

"Marcos はイベント駆動アーキテクチャで作業したことがありますか?証拠を見せてください。"

search-career

Marcos Alvarez のキャリアコンテンツ(経験、プロジェクト、スキル、執筆)の全文に対してファジーで意味論的な検索を実行し、関連性スコアと引用情報をそれぞれに添えたランク付けされた抜粋を返します。類似度しきい値を超えるものが何もない場合は、明示的な '関連コンテンツが見つかりません' という結果を返します。構造化ルックアップでは直接答えられない、自由形式、横断的、または概念的な質問に使用します — 例: 'イベント駆動アーキテクチャで作業したことがあるか'、'チームを率いた経験は何か'、'コスト最適化について何かあるか'。質問が、決定的なツールがすでに正確に答えられる特定の構造化ルックアップに対応する場合は使用しないでください: 人物像は get-profile、役割/企業/日付範囲の職務履歴は get-experience、キーワード/タグのプロジェクト検索は search-projects、特定の名前付きスキルまたはテクノロジーの確認は get-skill-evidence — これらを優先し、当てはまらない場合にのみこのツールにフォールバックしてください。このツールは呼び出しごとにコストが高く(クエリを埋め込みます)、同じ呼び出しごとにコストが高く(クエリを埋め込みます)、ここにある他のすべてのツールと同じサーバー全体のレート制限の対象となります — 同じ質問に対して繰り返し呼び出さないでください。

"Marcos のエンジニアリングチームのリードとメンタリングの経験はどのようなものですか?"

(6つ目のツールである ping は、純粋に接続性の診断のために存在します。)

アーキテクチャマップ

pnpm + Turborepo のモノレポです。Node >= 22(CI と Vercel は 24 で実行)、pnpm 10(packageManager で固定)。

apps/
  web/                  Next.js 15 App Router app — the site, the chat widget, and the public MCP endpoint (app/api/mcp/route.ts)
packages/
  core/                 Framework-free domain layer (search, citations) — consumed by apps/web
  career-data/          Zod-typed career content (profile, experience, projects, skills) — the single source of truth
  agent/                Mastra-based interview chat agent (grounded RAG over packages/career-data) + eval suite
  connect-metadata/     Typed MCP connection metadata, per-client snippet renderers, and the generated-region injector (#17)
tooling/
  tdd-guard/             Source<->test path mapping and TDD allow/block decision logic, used by .claude/hooks

apps/web は上記の packages/* に workspace:* プロトコル経由で依存します — 相対的な ../../packages/... インポートや tsconfig のパスハックは決して使用しません。packages/core と packages/career-data は、公開 MCP エンドポイントを直接支えているため、フレームワーク非依存のままです。すべてのパッケージは共有の tsconfig.base.json(strict: true)を拡張します。

ローカル開発

前提条件: Node >= 22、pnpm 10(corepack enable が固定バージョンを自動的に取得します)。

pnpm install              # install all workspace dependencies + git hooks (lefthook)
pnpm dev                  # turbo run dev — runs all dev servers (site at http://localhost:3000)
pnpm turbo lint typecheck test build   # the canonical pipeline — same one CI and the Stop hook run

必要な環境変数(名前のみ — 完全な根拠と各変数が参照される場所については .env.example を参照してください。実際の値は決してコミットされません):

変数

目的

SITE_URL

サイト自身の絶対オリジンのオプション上書き。必須ではありません — Vercel が自動的に導出します。

UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN

/api/mcp レート制限を支える Upstash Redis の認証情報。未設定の場合はエラーではなくフェイルオープン(制限なし)になります。

RATELIMIT_MAX_REQUESTS, RATELIMIT_WINDOW_SECONDS

MCP エンドポイントのレート制限ウィンドウを上書きします。

CHAT_PROVIDER, CHAT_MODEL_ID

チャットエージェントのモデルプロバイダー/ID を選択して固定します。

GOOGLE_GENERATIVE_AI_API_KEY

CHAT_PROVIDER=google(デフォルト)の場合に必須です。

ANTHROPIC_API_KEY

CHAT_PROVIDER=anthropic の場合のみ必須です。

CHAT_SESSION_RATELIMIT_MAX_REQUESTS, CHAT_SESSION_RATELIMIT_WINDOW_SECONDS, CHAT_IP_RATELIMIT_MAX_REQUESTS, CHAT_IP_RATELIMIT_WINDOW_SECONDS, CHAT_AGENT_MAX_STEPS

チャットのガードレール調整 — apps/web/README.md の「Chat guardrails」を参照してください。

DATABASE_URL

@hire-me-mcp/core/db モジュール用の Neon Postgres 接続文字列(マイグレーション、取り込み、searchCareer)。packages/core/README.md を参照してください。

NEON_API_KEY, NEON_PROJECT_ID

DB 統合テストスイート専用の使い捨て Neon ブランチを作成/削除します — メインデータベースに対しては決して使用されません。

クリーンなチェックアウトで pnpm turbo lint typecheck test build をパスさせるために必須のものはありません。

pnpm lint                 # turbo run lint — Biome, the only linter/formatter in this repo
pnpm typecheck             # turbo run typecheck — strict TypeScript everywhere
pnpm test                  # turbo run test — Vitest, co-located *.test.ts(x) next to source
pnpm build                 # turbo run build — builds all packages in dependency order
pnpm test:e2e               # Playwright smoke test against a production build
pnpm test:mcp               # protocol-level MCP integration suite (real SDK client, real server process)
pnpm eval:agent              # chat agent groundedness/gap-honesty/relevance evals
pnpm eval:retrieval          # searchCareer recall@k/precision@k/MRR golden-dataset eval
pnpm generate:connect:check  # verify the generated regions above are up to date with the real tool registry

完全なテストピラミッドの仕組み(プレビュー e2e、Lighthouse、pre-commit フック、CI ジョブ、ブランチ保護)、および Vercel デプロイをローカルで再現する方法は、docs/development.md と docs/deployment.md にあります — このセクションではコマンドのみを列挙し、「理由」は説明しません。

詳細

  • AGENTS.md — このコードベースで作業するコーディングエージェント向けのルール: テストファースト開発、標準コマンド、およびその両方を強制する3つのレイヤー。

  • docs/mcp.md — 完全な MCP 接続ガイド(すべてのクライアント、レート制限、トラブルシューティング)。JSON-LD Person、ルートごとの OpenGraph/Twitter カード、/.well-known/mcp.json に関する 「Discovery: machine-readable metadata」 セクション、およびそれらのうちどれが MCP 仕様で定義されているか(この認証なしサーバーではなし)とプロジェクト規約かを含みます。

  • /llms.txt — このリポジトリではなくデプロイされた URL を渡された訪問者向けの、サイト自身のエージェントエントリポイント。

  • セキュリティチェックリスト — 一度きりのセキュリティパス(依存関係監査、シークレット衛生、MCP 入力ファジング、レート制限の再検証)が #57 に追加される予定です。この PR がマージされると、このセクションは docs/security-checklist.md に直接リンクします。

  • Issue トラッカー — ロードマップ、進行中の作業、および古いスニペットや MCP サーバーのバグを報告する場所。

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides a structured API for AI agents to query a person's resume, including profile, projects, writing, and gated access to experience and skills.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Turn any data source into an MCP server in 5 minutes. Build knowledge bases that AI assistants like Claude and Cursor can query directly.
    2
    12 npm
    22
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A local MCP server that gives AI agents structured access to a personal Obsidian knowledge vault, with semantic search, organization through Maps of Content, and git-backed history.
    -