一个提供智能工作匹配能力的模型上下文协议(MCP)服务器。从工作描述中提取结构化的职位要求,并从LlamaCloud简历索引中查找/排序候选人。
extract_job_requirements - 从工作描述文本中提取结构化数据find_matching_candidates - 从LlamaCloud索引中查找并排序候选人search_candidates_by_skills - 按特定技能搜索候选人score_candidate_qualifications - 对候选人的资格进行评分add / subtract / multiply - 基本数学函数(向后兼容)extract_job_requirements(job_description_text: str) - 从文本中提取结构化的职位要求find_matching_candidates(required_qualifications: str, preferred_qualifications: str, top_k: int, enable_reranking: bool) - 查找符合职位资格的候选人search_candidates_by_skills(skills: str, top_k: int) - 按特定技能搜索候选人score_candidate_qualifications(candidate_resume: str, required_qualifications: str, preferred_qualifications: str, job_title: str, job_description: str) - 对候选人的资格进行评分extract_job_requirements(jd_text: str) -> str
输入: 工作描述文本(从职位发布中复制)
输出: 包含以下内容的 JSON 字符串:
title: 职位名称company: 公司名称location: 工作地点required_qualifications: 必要资格条件数组preferred_qualifications: 优先资格条件数组description: 工作概述experience_level: 经验水平(初级/中级/高级)employment_type: 就业类型(全职/合同等)find_matching_candidates(required_qualifications: str, preferred_qualifications: str, top_k: int, enable_reranking: bool) -> str
输入:
required_qualifications: 逗号分隔的必要资格条件preferred_qualifications: 逗号分隔的优先资格条件top_k: 最多检索的候选人数量(默认:1enable_reranking: 是否启用重新排名(默认:True)输出: 包含以下内容的 JSON 字符串:
candidates: 带有分数和分析的候选人数组total_candidates: 找到的候选人总数search_parameters: 关于搜索配置的详细信息关键特性:
search_candidates_by_skills(skills: str, top_k: int) -> str
输入:
skills: 逗号分隔的技能或关键词列表top_k: 检索的顶级候选人数量(默认:10)输出: 包含匹配候选人及其分数的 JSON
score_candidate_qualifications(candidate_resume: str, required_qualifications: str, preferred_qualifications: str, job_title: str, job_description: str) -> str
输入:
candidate_resume: 候选人的简历文本required_qualifications: 逗号分隔的必要资格条件preferred_qualifications: 逗号分隔的优先资格条件job_title: 用于上下文的职位名称(可选)job_description: 用于上下文的职位描述(可选)输出: 包含以下内容的综合分析:
您有两个配置选项:
# 必需:OpenAI API 密钥
export OPENAI_API_KEY="your-openai-api-key"
# 必需:LlamaCloud 配置
export LLAMA_CLOUD_API_KEY="your-llamacloud-api-key"
export LLAMA_CLOUD_INDEX_NAME="your-resume-index-name"
export LLAMA_CLOUD_PROJECT_NAME="your-project-name"
export LLAMA_CLOUD_ORGANIZATION_ID="your-organization-id"
# 可选:服务器配置
export PORT="8080"
export HOST="0.0.0.0"
export REQUEST_TIMEOUT="30.0"
export OPENAI_TEMPERATURE="0.1"
打开 config.py 并替换占位符值:
# 替换这些占位符值为您的实际 API 密钥:
OPENAI_API_KEY = "your-actual-openai-api-key-here"
LLAMA_CLOUD_API_KEY = "your-actual-llamacloud-api-key-here"
LLAMA_CLOUD_ORGANIZATION_ID = "your-actual-org-id-here"
LLAMA_CLOUD_INDEX_NAME = "your-actual-index-name"
⚠️ 安全警告:如果您直接编辑 config.py,切勿将 API 密钥提交到版本控制!
没有 LlamaCloud 凭据时,服务器会使用模拟候选人数据进行测试。
如果您计划将此代码提交到版本控制,请创建一个 .gitignore 文件以保护您的敏感信息:
# 创建 .gitignore 文件
cat > .gitignore << EOF
# 环境变量和敏感文件
.env
.env.local
.env.production
config_local.py
# Python
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
.venv/
venv/
# IDE
.vscode/
.idea/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
EOF
替代方案:您也可以创建一个单独的 config_local.py 文件,其中包含您的实际密钥,并在 config.py 中导入它,然后将 config_local.py 添加到 .gitignore。
# 使用 uv 安装(推荐)
uv install
# 或者使用 pip
pip install fastmcp httpx
python server.py
服务器将在 http://localhost:8080/mcp 启动(或 PORT 环境变量指定的端口)
运行全面的测试套件:
# 先启动服务器
python server.py
# 在另一个终端中运行测试
python test_server.py
测试套件将:
工作描述处理
候选人检索
智能评分
匹配计算
加权评分 = (必要总分 × 2) + 优先总分
匹配百分比 = (加权评分 / 最大可能评分) × 100
graph TD
A[工作描述文本] --> B[extract_job_requirements]
B --> C[结构化要求 JSON]
C --> D[find_matching_candidates]
E[LlamaCloud 索引] --> D
D --> F[带有分数的排名候选人]
C --> G[score_candidate_qualifications]
H[个人简历] --> G
G --> I[详细分析及建议]
# 从职位发布中提取要求
job_reqs = extract_job_requirements(job_posting_text)
# 从您的简历数据库中查找顶级候选人
top_candidates = find_matching_candidates("Python, JavaScript, React", "AWS, Docker", 10, True)
# 获取有希望候选人的详细分析
for candidate in top_5:
analysis = score_candidate_qualifications(candidate['resume'], job_reqs, candidate['name'])
确保您已设置以下内容:
export PROJECT_ID=<your-project-id>remote-mcp-servers# 1. 安装依赖项
uv install
# 2. 配置 API 密钥(选择一种方法):
# 方法 A:设置环境变量
export OPENAI_API_KEY="your-openai-api-key"
export LLAMA_CLOUD_API_KEY="your-llamacloud-api-key"
export LLAMA_CLOUD_INDEX_NAME="your-index-name"
export LLAMA_CLOUD_ORGANIZATION_ID="your-org-id"
# 方法 B:直接编辑 config.py(参见配置部分)
# 3. 运行服务器
python server.py
服务器将在 http://localhost:8080/mcp 启动,并记录其使用的配置:
[INFO]: LlamaCloudService 初始化,索引:your-index-name
[INFO]: MCP 服务器正在 0.0.0.0:8080 启动
您可以通过运行以下命令来验证您的配置是否正常工作:
python -c "from config import OPENAI_API_KEY, LLAMA_CLOUD_API_KEY, LLAMA_CLOUD_INDEX_NAME; print(f'OpenAI: {OPENAI_API_KEY[:10]}..., LlamaCloud: {LLAMA_CLOUD_API_KEY[:10]}..., Index: {LLAMA_CLOUD_INDEX_NAME}')"
如果看到类似 "your-openai-api-key-here" 的占位符值,则需要更新您的配置。
# 构建镜像
docker build -t job-matching-mcp .
# 运行容器
docker run -p 8080:8080 \
-e OPENAI_API_KEY="your-key" \
-e LLAMA_CLOUD_API_KEY="your-key" \
job-matching-mcp
📚 参考文档:在不到 10 分钟内将远程 MCP 服务器部署到 Google Cloud Run
# 构建并推送到 Artifact Registry
gcloud builds submit --region=us-central1 \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/remote-mcp-servers/mcp-server:latest
# 部署到 Cloud Run
gcloud run deploy mcp-server \
--image us-central1-docker.pkg.dev/$PROJECT_ID/remote-mcp-servers/mcp-server:latest \
--region=us-central1 \
--no-allow-unauthenticated \
--set-env-vars OPENAI_API_KEY="your-key",LLAMA_CLOUD_API_KEY="your-key"
在对您的 MCP 服务器进行了代码更改后,按照以下步骤重新部署:
步骤 1:重建容器并推送到 Artifact Registry
gcloud builds submit --region=us-central1 \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/remote-mcp-servers/mcp-server:latest
步骤 2:将更新的容器重新部署到 Cloud Run
gcloud run deploy mcp-server \
--image us-central1-docker.pkg.dev/$PROJECT_ID/remote-mcp-servers/mcp-server:latest \
--region=us-central1 \
--no-allow-unauthenticated
步骤 3:测试部署(可选)
启动 Cloud Run 代理以测试您的更新服务器:
gcloud run services proxy mcp-server --region=us-central1
然后运行您的测试脚本:
uv run test_server.py
mcp-on-cloudrun/
├── config.py # 配置常量
├── models.py # 数据结构
├── server.py # 主 MCP 服务器
├── Dockerfile # 容器配置
├── pyproject.toml # Python 依赖项
├── services/
│ ├── openai_service.py # OpenAI API 集成
│ └── llamacloud_service.py # LlamaCloud 集成
├── tools/
│ ├── math_tools.py # 数学运算(加法、减法、乘法)
│ ├── job_tools.py # 工作描述提取
│ └── candidate_tools.py # 候选人搜索和评分
└── test_server.py # 测试客户端
修改 services/openai_service.py 中的评分提示以调整评估标准:
对于使用真实候选人数据的生产部署:
config.py 中配置环境变量在 config.py 中更改模型:
OPENAI_MODEL = "gpt-4o-mini" # 快速且成本效益高
# OPENAI_MODEL = "gpt-4o" # 质量更高,但更昂贵
gpt-4o-mini,关键分析使用 gpt-4o--no-allow-unauthenticated 要求 Cloud Run 认证roles/run.invoker IAM 角色以访问服务器“无效 API 密钥” 错误:
config.py 或环境变量中“LlamaCloud 索引未找到”:
LLAMA_CLOUD_INDEX_NAME 与您的实际索引名称匹配LLAMA_CLOUD_ORGANIZATION_ID 是否正确服务器显示占位符值: