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

Terminal recording of a real MCP session: connecting to the live hire-me-mcp endpoint, listing its tools, then calling get-skill-evidence with "event-driven architecture" and receiving a cited, grounded answer pointing at a specific work-history entry.

  • 线上网站: https://hire-me-mcp-web.vercel.app

  • 可下载的简历(PDF): 直接从 packages/career-data 生成——同一数据源、同一 领域层,没有单独维护的副本。从网站页头("下载简历")和 /llms.txt 的 Site 部分链接;稳定的下载路径是上述线上网站的 /cv/<slugified-name>-cv.pdf。内容有任何变化时,随时用 pnpm generate:cv 重新生成并提交 结果(提交的 PDF 随每次部署一起发布——Vercel 自己的构建只构建/部署 Next.js 应用,因此 PDF 生成刻意没有接入其中)。同一内容的打印版 HTML 视图 在 /cv/print 提供。

  • Agent 文档: 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 在领导工程团队和指导他人方面有什么经验?"

工具

回答内容

示例问题

get-profile

返回 Marcos Alvarez 的单一个人档案记录——姓名、头衔、所在地、可用状态和简短简介——作为一个对象,并附有引用支持。用于快速回答"这个人是谁"或"他当前的可用状态/所在地是什么"。不要用它来按角色逐一查看工作经历(使用 get-experience)、查看具体项目详情(使用 search-projects),或检查是否声称具备某项特定技能或技术(使用 get-skill-evidence)。无需输入。正常操作中不存在"无结果"的情况——此服务器的数据集始终恰好包含一条个人档案。

"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

查找单个指定技能或技术,并报告三种诚实结果之一:'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 在领导工程团队和指导方面有什么经验?"

(第六个工具 ping 仅作为连接诊断存在。)

架构图

一个 pnpm + Turborepo 的 monorepo。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

站点自身绝对源地址的可选覆盖项。非必需——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 模块(迁移、摄取、searchCareer)的 Neon Postgres 连接字符串。参见 packages/core/README.md。

NEON_API_KEY, NEON_PROJECT_ID

仅用于为数据库集成测试套件创建/删除一次性 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

完整的测试金字塔机制(preview 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 规范定义(对于这个无认证服务器,均非规范定义)而非项目约定。

  • /llms.txt — 站点自身的代理入口点,供拿到部署 URL 而非本仓库的访客使用。

  • 安全清单 — 一次性安全审查(依赖审计、密钥卫生、MCP 输入模糊测试、速率限制复核)正在 #57 中落地;该 PR 合并后,本节将直接链接到 docs/security-checklist.md。

  • 问题跟踪器 — 路线图、进行中的工作,以及报告过期代码片段或 MCP 服务器 bug 的地方。

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.
    -