关于 HTTP Server with MCP Support
这是一个以 Jake Gaylor 的简历和个人资料为基础的 Express 与 TypeScript 服务,同时提供网页、纯文本内容、MCP 接口和 A2A Agent。它面向希望让 AI 系统查询候选人经历、评估职位匹配度或安排沟通的用户。
主要功能
- 01提供简历与个人资料查询
- 02生成面试问题并评估职位匹配
- 03提供候选人筛选偏好数据
- 04查询空闲时段并安排通话
- 05同时提供 MCP 与 A2A 接口
适用场景
- 01让 AI 客户端查询候选人经历
- 02根据职位描述评估匹配情况
- 03查看时段并预约介绍通话
- 04通过指定请求联系候选人
MCP 相关
服务在 `/mcp` 提供 Streamable HTTP,并支持旧版 SSE;也可通过 stdio 本地运行。工具涵盖简历、链接、职位评估、联系和预约等操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
ai.jakegaylor.com
一个基于 Express + TypeScript 的服务,让 AI 系统能够理解 Jake Gaylor。一次部署即可通过四种接口访问同一份简历和个人简介:
- 网页(
GET /),供人类查看 - 纯文本上下文(
GET /llms.txt),供大模型和爬虫使用 - MCP 服务(
/mcp),供人类配置的 AI 客户端使用 - A2A Agent(
/a2a+ Agent 卡片),供自主发现此网站的 Agent 使用
服务启动时会从 jakegaylor.com/resume.json 获取简历内容并渲染为 Markdown,因此所有接口始终保持最新,无需手动编辑。
端点
| 端点 | 提供内容 |
|---|---|
GET / | 网页 |
GET /llms.txt | 纯文本格式的简历和核心信念 |
POST /mcp(+ GET/DELETE) | 基于 Streamable HTTP 的 MCP |
GET /sse + POST /messages | 基于旧版 SSE 传输的 MCP |
GET /.well-known/agent-card.json | A2A Agent 卡片(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(基于 Cal.com 的日程安排,采用与 A2A 技能相同的待确认和每日上限防护机制)
将客户端连接到 https://ai.jakegaylor.com/mcp,或通过 npx @jhgaylor/me-mcp 在本地通过 stdio 运行。
A2A
一个基于 @a2a-js/sdk 构建的 A2A v1.0 Agent,并启用了 v0.3 兼容层——根据协议,未发送 A2A-Version 标头的客户端会被视为使用 v0.3,而目前大多数已部署的客户端仍使用该版本。卡片会在同一 URL 上声明支持这两个版本。
技能:
about-jake— 使用基于简历、个人简介和筛选数据的小型大模型回答有关 Jake 经验的问题。如果未配置大模型密钥或调用失败,则会回退为返回完整的 Markdown 简历,确保技能契约始终成立。candidate-preferences— 返回结构化筛选数据(职位类型、级别、地点、搬迁、远程办公、工作许可、薪酬态度、可工作时间、简历链接),格式为 JSON 数据部分加 Markdown。由筛选/后勤相关关键词或metadata.skill触发。值存储在src/preferences.ts中。assess-role-fit— 发送职位描述(使用JD:前缀,或任何较长且符合职位描述格式的文本),即可获得由大模型评估的真实匹配度:结论、附有简历引用的优势、明确列出的差距、后勤条件核对,以及建议的面试问题。如果没有可用的大模型,则回退为返回简历。schedule-intro-call— 表达日程安排意图的消息会返回自托管 Cal.com(cal.jakegaylor.com,公开预约端点,无需授权 API)的可选时段;BOOK: <slot> | <email> | <name> | <note>会创建预约。防护机制:预约需要 Jake 确认(由 Cal.com 原生支持)、必须使用明确的BOOK:前缀才会执行副作用,并设有每日尝试次数上限。通过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 提供大模型(设置后优先使用) |
OPENAI_API_KEY | 直接通过 OpenAI 为 about-jake 提供大模型(备用方案) |
LLM_MODEL | 覆盖模型(默认值:OpenRouter 上为 openai/gpt-5.4-nano,OpenAI 上为 gpt-5.4-nano) |
A2A_BASE_URL | 写入 Agent 卡片的公开基础 URL(默认值为 https://ai.jakegaylor.com) |
A2A_SIGNING_KEY_JWK | 用于签署 Agent 卡片的私有 ES256 JWK(需包含 kid);未设置时提供未签名的卡片 |
POSTHOG_API_KEY | 服务端 Agent 流量分析(卡片获取、MCP/A2A 请求、技能路由);未设置时会停用分析 |
POSTHOG_HOST | PostHog 端点(默认值为 https://us.i.posthog.com) |
未设置任何邮件密钥时,contact_candidate/contact-jake 会妥善报告失败。未设置任何大模型密钥时,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 集群上滚动更新部署。运行时密钥由 Infisical 通过 InfisicalSecret 提供(参见 k8s/infisicalsecret.yaml),并通过 envFrom 注入 Pod。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。