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 어시스턴트든 이 이력서를 도구로 제공받아 추측 대신 출처가 명시된 근거 있는 답변을 얻을 수 있습니다 — API 키도, 가입도 필요 없고, 연결할 URL 하나만 있으면 됩니다.

CI Latest release Deployed on Vercel

실제 MCP 세션의 터미널 녹화: 라이브 hire-me-mcp 엔드포인트에 연결하고, 도구를 나열한 다음, "event-driven architecture"로 get-skill-evidence를 호출하여 특정 업무 이력 항목을 가리키는 출처가 명시된 근거 있는 답변을 받는 모습.

  • 라이브 사이트: https://hire-me-mcp-web.vercel.app

  • 다운로드 가능한 이력서 (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의 단일 프로필 레코드(이름, 헤드라인, 위치, 가용성, 짧은 소개)를 인용과 함께 하나의 객체로 반환합니다. '이 사람이 누구인지' 또는 '현재 가용성/위치가 무엇인지'를 한눈에 확인할 때 사용하세요. 역할별 업무 이력(이 경우 get-experience 사용), 특정 프로젝트 세부 정보(이 경우 search-projects 사용), 특정 스킬이나 기술이 명시되어 있는지 확인(이 경우 get-skill-evidence 사용)에는 사용하지 마세요. 입력값이 필요 없습니다. 정상 작동 시 '결과 없음'은 발생하지 않습니다 — 이 서버의 데이터셋에는 항상 정확히 하나의 프로필만 있습니다.

"Marcos Alvarez는 누구이며, 현재 새로운 역할에 열려 있나요?"

get-experience

선택적 구조화 필터(회사, 기술 태그, YYYY-MM 날짜 범위, 현재/과거 상태)와 일치하는 Marcos Alvarez의 업무 이력의 모든 항목을 최신순 목록으로 반환하며, 각 항목에 인용이 포함됩니다. '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

단일 명명된 스킬 또는 기술을 조회하고 세 가지 정직한 결과 중 하나를 보고합니다: 'claimed'(지원 증거가 있는 스킬), 'not-claimed'(자체 설명과 관련 스킬이 있는 명시적이고 인정된 공백), 또는 'unknown'(어느 쪽과도 일치하지 않는 용어). 특정 기술에 대해 'X를 아는지' 또는 'Y로 작업한 적이 있는지' 질문받을 때 사용하세요. 전체 스킬 목록을 탐색하거나(이 서버에는 그런 도구가 없음) 키워드로 프로젝트 설명을 검색하는 데는 사용하지 마세요(대신 search-projects 사용). 질문이 단일 스킬이 아닌 역할이나 회사에 관한 것일 때 get-experience를 대체하지도 않습니다. 'not-claimed' 또는 'unknown' 결과는 오류가 아니라 정상적이고 성공적인 답변입니다 — 재시도하거나 그 주변을 지어내지 말고 정직하게 전달하세요.

"Marcos가 이벤트 기반 아키텍처로 작업한 적이 있나요? 증거를 보여 주세요."

search-career

Marcos Alvarez의 경력 콘텐츠(경력, 프로젝트, 스킬, 글) 전체 텍스트에 대해 퍼지(fuzzy) 의미론적 검색을 실행하고 관련성 점수와 인용이 포함된 순위 발췌문을 반환하거나, 유사도 임계값을 넘는 내용이 없을 때 명시적 '관련 콘텐츠 없음' 결과를 반환합니다. 구조화된 조회로 직접 답할 수 없는 개방형, 교차 주제, 또는 개념적 질문에 사용하세요 — 예: '이벤트 기반 아키텍처로 작업한 적이 있는지', '팀 리딩 경험이 어떤지', '비용 최적화에 관한 것'. 질문이 결정적 도구가 이미 정확히 답하는 특정 구조화 조회에 매핑될 때는 사용하지 마세요: 그가 누구인지는 get-profile, 역할/회사/날짜 범위 업무 이력은 get-experience, 키워드/태그 프로젝트 검색은 search-projects, 특정 명명된 스킬 또는 기술 확인은 get-skill-evidence — 이들을 먼저 선호하고, 맞지 않을 때만 이 도구로 폴백하세요. 이 도구는 호출당 비용이 더 높고(쿼리를 임베딩함) 여기의 다른 모든 도구와 동일한 서버 전체 속도 제한이 적용됩니다 — 같은 질문에 반복 호출하지 마세요.

"엔지니어링 팀 리딩과 멘토링에 대한 Marcos의 경험은 어떤가요?"

(여섯 번째 도구인 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은 workspace:* 프로토콜을 통해 위의 packages/*에 의존합니다 — 상대 경로 ../../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

사이트 자체 절대 출처(origin)에 대한 선택적 재정의. 필수 아님 — 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 — 이 코드베이스에서 작업하는 모든 코딩 에이전트를 위한 규칙: 테스트 우선 개발, 표준 명령, 그리고 둘 다를 강제하는 세 계층.

  • docs/mcp.md — 전체 MCP 연결 가이드(모든 클라이언트, 속도 제한, 문제 해결), JSON-LD Person, 경로별 OpenGraph/Twitter 카드, /.well-known/mcp.json에 대한 "Discovery: machine-readable metadata" 섹션 포함 — 그리고 이 중 어떤 것이 MCP 사양 정의(이 무인증 서버의 경우 없음)인지 vs 프로젝트 규칙인지.

  • /llms.txt — 이 저장소 대신 배포된 URL을 받은 방문자를 위한 사이트 자체 에이전트 진입점.

  • 보안 체크리스트 — 일회성 보안 점검(의존성 감사, 비밀 키 위생, MCP 입력 퍼징, 속도 제한 재검증)이 #57에 반영 예정입니다; 이 PR이 병합되면 이 섹션은 docs/security-checklist.md로 바로 연결됩니다.

  • 이슈 트래커 — 로드맵, 진행 중인 작업, 오래된 스니펫이나 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.
    -