作业匹配MCP服务器
提供智能作业匹配功能的模型上下文协议(MCP)服务器。从职位描述中提取结构化的工作要求,并从LlamaCloud简历索引中查找/排名候选人。
🚀 特性
核心工作匹配功能
extract_job_requirements-从职位描述文本中提取结构化数据find_matching_candidates-从LlamaCloud索引中查找候选人并对其进行排名search_candidates_by_skills-按特定技能搜索候选人score_candidate_qualifications-根据工作要求对候选人进行评分
附加功能
add/subtract/multiply-基本数学函数(向后兼容)
📋 可用的MCP工具
职位描述处理
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)-根据工作要求对候选人进行评分
📋 功能详细信息
1.提取工作要求
extract_job_requirements(jd_text: str) -> str输入: 职位描述文本(从职位发布中复制)
输出: JSON字符串包含:
title:职位名称company:公司名称location:工作地点required_qualifications:一系列必需的资格preferred_qualifications:一系列首选资格description:工作总结experience_level:经验水平(初级/中级/高级)employment_type:就业类型(全职/合同制等)
2.查找LlamaCloud的候选人并对其进行排名
find_matching_candidates(required_qualifications: str, preferred_qualifications: str, top_k: int, enable_reranking: bool) -> str输入:
required_qualifications:逗号分隔的必需资格preferred_qualifications:逗号分隔的首选资格top_k:要检索的最大候选项(默认值:10)enable_reranking:是否启用重新登录(默认值:True)
输出: JSON字符串包含:
candidates:一系列有分数和分析的候选人total_candidates:找到的候选人数量search_parameters:有关搜索配置的详细信息
主要特点:
- 从LlamaCloud索引中检索候选者 使用语义搜索
- 加权评分:所需资格具有更高的权重
- 匹配百分比:总体兼容性得分
- 详细说明:每次资格评估
3.按技能搜索候选人
search_candidates_by_skills(skills: str, top_k: int) -> str输入:
skills:以逗号分隔的技能或关键字列表top_k:要检索的最佳候选人数(默认值:10)
输出: 带有匹配候选人及其分数的JSON
4.对候选人资格进行评分
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:职位描述(可选)
输出: 综合分析包括:
- 优势与劣势
- 详细评分明细
- 招聘建议
- 角色匹配评估
🛠️ 设置和配置
1.配置API密钥和设置
你有 两个选项 配置:
选项A:环境变量(建议用于生产)
# Required: OpenAI API Key
export OPENAI_API_KEY="your-openai-api-key"
# Required: LlamaCloud Configuration
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"
# Optional: Server Configuration
export PORT="8080"
export HOST="0.0.0.0"
export REQUEST_TIMEOUT="30.0"
export OPENAI_TEMPERATURE="0.1"选项B:在config.py中直接配置(用于本地开发)
- 打开
config.py并替换占位符值:
# Replace these placeholder values with your actual API keys:
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密钥提交给版本控制!
获取API密钥:
*如果没有LlamaCloud凭据,服务器将使用模拟候选数据进行测试。*
2.保护您的API密钥(重要!)
如果您计划将此代码提交到版本控制,请创建 .gitignore 文件以保护您的敏感信息:
# Create .gitignore file
cat > .gitignore B[extract_job_requirements]
B --> C[Structured Requirements JSON]
C --> D[find_matching_candidates]
E[LlamaCloud Index] --> D
D --> F[Ranked Candidates with Scores]
C --> G[score_candidate_qualifications]
H[Individual Resume] --> G
G --> I[Detailed Analysis & Recommendations]🎯 用例
1.自动简历筛选
# Extract requirements from job posting
job_reqs = extract_job_requirements(job_posting_text)
# Find top candidates from your resume database
top_candidates = find_matching_candidates("Python, JavaScript, React", "AWS, Docker", 10, True)
# Get detailed analysis of promising candidates
for candidate in top_5:
analysis = score_candidate_qualifications(candidate['resume'], job_reqs, candidate['name'])2.招聘渠道整合
- ATS集成:自动对传入的应用程序进行评分
- 招聘工具:提供数据驱动的候选人排名
- 面试准备:生成针对候选人的面试问题
3.就业市场分析
- 需求趋势:跟踪不同职位的共同资格
- 候选人差距分析:识别候选人库中缺失的技能
- 工资基准:将需求与薪酬数据相关联
🚀 部署
先决条件
请确保您已完成以下设置:
- Python 3.10+
- UV包管理器
- 谷歌云SDK(gcloud)
- 配置的项目ID:
export PROJECT_ID= - 已创建工件注册表存储库:
remote-mcp-servers
地方发展
# 1. Install dependencies
uv install
# 2. Configure API keys (choose one method):
# Method A: Set environment variables
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"
# Method B: Edit config.py directly (see configuration section above)
# 3. Run server
python server.py服务器将于启动 http://localhost:8080/mcp 并记录它正在使用的配置:
[INFO]: LlamaCloudService initialized with index: your-index-name
[INFO]: MCP server starting on 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}')"如果你看到占位符值,如“你的openai-api密钥在这里”,你的配置需要更新。
Docker部署
# Build image
docker build -t job-matching-mcp .
# Run container
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运行
初始部署
# Build and push to Artifact Registry
gcloud builds submit --region=us-central1 \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/remote-mcp-servers/mcp-server:latest
# Deploy to 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:重建容器并推送到工件注册表
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 # Configuration constants
├── models.py # Data structures
├── server.py # Main MCP server
├── Dockerfile # Container configuration
├── pyproject.toml # Python dependencies
├── services/
│ ├── openai_service.py # OpenAI API integration
│ └── llamacloud_service.py # LlamaCloud integration
├── tools/
│ ├── math_tools.py # Math operations (add, subtract, multiply)
│ ├── job_tools.py # Job description extraction
│ └── candidate_tools.py # Candidate search and scoring
└── test_server.py # Test client🔧 定制
评分标准
修改中的评分提示 services/openai_service.py 调整评估标准:
- 更改评分范围(0-2到0-5等)
- 调整所需/首选资格之间的权重
- 添加特定于域的评估标准
呼叫云集成
对于具有真实候选数据的生产部署:
- 设置LlamaCloud帐户并创建简历索引
- 在中配置环境变量
config.py - 用实际的LlamaCloud API调用替换模拟候选数据
OpenAI模型选择
更改模型 config.py:
OPENAI_MODEL = "gpt-4o-mini" # Fast and cost-effective
# OPENAI_MODEL = "gpt-4o" # Higher quality, more expensive📈 性能和扩展
- 并发请求:FastMCP处理多个同时进行的作业匹配请求
- 缓存:考虑为频繁的作业需求提取实现Redis
- 速率限制:OpenAI API有速率限制;实现高容量使用的排队
- 成本优化:使用
gpt-4o-mini对于大多数操作,gpt-4o用于批判性分析
🔐 安全考虑
安全说明
- 始终使用
--no-allow-unauthenticated要求云运行的身份验证 - 确保用户拥有
roles/run.invokerIAM角色访问服务器 - 使用Cloud Run代理进行具有身份验证的本地测试
- API密钥:从不将API密钥提交到版本控制
- 输入验证:服务器验证所有输入并处理格式错误的数据
- 错误处理:当外部服务不可用时,性能会下降
- 数据隐私:恢复通过OpenAI处理的数据;考虑数据保留策略
🔍 故障排除
常见问题:
配置问题:
- “无效的API密钥”错误:
- 检查API密钥是否在中正确设置 config.py 或环境变量 - 验证API密钥是否有效并具有正确的权限 - 对于OpenAI:确保您已设置信用/账单
- “找不到LlamaCloud索引”:
- 验证 LLAMA_CLOUD_INDEX_NAME 与您的实际索引名称匹配 - 检查 LLAMA_CLOUD_ORGANIZATION_ID 是正确的 - 确保您的LlamaCloud API密钥可以访问指定的索引
- 服务器显示占位符值:
- 如果你在日志中看到“你的openai api密钥在这里”,那么你的配置没有正确加载 - 检查您是否设置了环境变量或进行了编辑 config.py 直接 - 更改配置后重新启动服务器
部署问题:
- 身份验证错误:确保Cloud Run代理正在运行,并且您具有适当的IAM角色
- 构建失败检查 pyproject.toml 中的 Dockerfile 和依赖关系
- 端口冲突:使用
lsof -ti:8080 | xargs kill -9释放端口8080
日志:
查看云运行日志:
gcloud run services logs tail mcp-server --region=us-central1查看本地服务器日志:
# Server logs are printed to console when running locally
python server.py🤝 贡献
- 分叉存储库
- 创建要素分支
- 添加新功能的测试
- 确保所有测试通过
- 提交拉取请求
📄 许可证
MIT许可证-有关详细信息,请参阅许可证文件。
______________________________________________________________________
准备好通过人工智能驱动的工作匹配彻底改变您的招聘流程! 🎯✨
