简历职位匹配服务

一个基于Spring Boot的AI简历分析与职位匹配服务,通过LLM提取结构化简历信息并利用JSearch API进行智能职位推荐。

  • by anupamatrey
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 anupamatrey/job-recommendations-mcp-server

使用说明

MCP服务器POC-基于人工智能的简历到工作匹配

一个基于Spring Boot的模型上下文协议(MCP)服务器,使用AI嵌入和JSearch API提供智能简历分析和工作匹配功能。

🎯 概述

此MCP服务器使AI助手(如Claude Desktop、Cline)能够:

  • 上传并分析简历 -使用LLM提取结构化信息
  • 店铺简历嵌入 -基于向量的语义搜索存储
  • 将简历与工作匹配 -使用JSearch API(RapidAPI)查找相关职位
  • 排名职位匹配 -基于语义相似度和过滤器对作业进行评分

🏗️ 建筑

┌─────────────────────┐
│  Claude Desktop /   │
│  Cline (MCP Client) │
└──────────┬──────────┘
           │ SSE/STDIO
           ▼
┌─────────────────────┐
│  MCP Server         │
│  (Spring Boot)      │
├─────────────────────┤
│  • ResumeTools      │
│  • MatchingTools    │
│  • CourseService    │
└──────────┬──────────┘
           │
    ┌──────┴──────┐
    ▼             ▼
┌─────────┐  ┌──────────┐
│ Vector  │  │ JSearch  │
│ Store   │  │ API      │
│(In-Mem) │  │(RapidAPI)│
└─────────┘  └──────────┘

📦 组件

MCP工具

  • upload_resume -处理简历文本并生成结构化摘要
  • get_sume_summary -按ID检索存储的简历摘要
  • match_resume_to_jobs -从JSearch API查找匹配作业并对其进行排名
  • 获取全部课程 -列出可用课程的演示工具
  • Getcoursebyid -按标题获取课程的演示工具
  • print_env -打印环境变量的诊断工具
  • llm诊断 -LLM配置和健康检查的诊断工具

服务

  • 简历服务 -简历处理和基于LLM的提取
  • 矢量存储服务 -具有余弦相似度的内存向量存储
  • 嵌入服务 -文本到向量嵌入(存根实现)
  • JSearchService -与用于作业列表的JSearch API集成
  • LlmClient -LLM聊天完成界面

🚀 入门指南

先决条件

  • Java 21+
  • 等级8.14.3+
  • 具有JSearch API访问权限的RapidAPI帐户
  • Claude Desktop或Cline(VS代码扩展)

步骤1:克隆和设置

git clone <repository-url>
cd job-recommendations-mcp-server

步骤2:配置API密钥

  1. 复制示例环境文件:
copy .env.example .env
  1. 编辑 .env 并添加您的RapidAPI密钥:
JSEARCH_API_KEY=your_actual_rapidapi_key_here
JSEARCH_API_HOST=jsearch.p.rapidapi.com

从以下位置获取API密钥:https://rapidapi.com/letscrape-6bRBa3QguO5/api/jsearch

步骤3:构建项目

# Windows
gradlew.bat clean bootJar

# Unix/Linux/Mac
./gradlew clean bootJar

JAR将在以下位置创建: build/libs/job-recommendations-mcp-server-0.0.1.jar

步骤4:选择运输方式

方案A:STDIO(地方发展)

配置:

  • 注释中的SSE配置 application.properties
  • 未注释: spring.main.web-application-type=none

Claude桌面配置 (claude_desktop_config.json):

{
  "mcpServers": {
    "resume-matcher": {
      "command": "java",
      "args": [
        "-jar",
        "C:\\Workspace\\mcp\\job-recommendations-mcp-server\\build\\libs\\job-recommendations-mcp-server-0.0.1.jar"
      ]
    }
  }
}

选项B:SSE(生产就绪)

配置:

  • 保持当前 application.properties (SSE已启用)
  • 服务器在上运行 http://localhost:8080

运行服务器:

java -jar build/libs/job-recommendations-mcp-server-0.0.1.jar

Claude桌面配置:

{
  "mcpServers": {
    "resume-matcher": {
      "url": "http://localhost:8080/sse"
    }
  }
}

对于Cline(VS代码): 添加到VS代码设置.json:

{
  "cline.mcpServers": {
    "resume-matcher": {
      "url": "http://localhost:8080/sse"
    }
  }
}

步骤5:重新启动MCP客户端

  • 克劳德桌面版:重新启动应用程序
  • 克莱恩:重新加载VS代码窗口

💡 使用示例

示例1:上传简历

在Claude Desktop或Cline中:

Upload my resume:

John Doe
Senior Software Engineer
5 years experience in Java, Spring Boot, AWS
Skills: Microservices, Docker, Kubernetes
Location: San Francisco, CA

答复:

{
  "resumeId": "abc-123-def",
  "name": "John Doe",
  "title": "Senior Software Engineer",
  "years_experience": 5,
  "skills": ["Java", "Spring Boot", "AWS", "Docker", "Kubernetes"],
  "summary_text": "...",
  "status": "processed"
}

示例2:匹配工作

Find jobs matching resume abc-123-def in San Francisco

服务器将:

  1. 从矢量存储中获取简历摘要
  2. 查询JSearch API中的相关作业
  3. 计算作业的嵌入
  4. 按语义相似性对作业进行排名
  5. 返回得分最高的比赛

🔧 配置

应用程序属性

属性 描述 默认值
spring.ai.mcp.server.transport 运输方式(sse/stdio) sse
server.port HTTP服务器端口(SSE模式) 8080
jsearch.api.key RapidAPI JSearch密钥 来自 .env
jsearch.api.host JSearch API主机 jsearch.p.rapidapi.com

环境变量

创建 .env file(永远不要提交此内容):

JSEARCH_API_KEY=your_key_here
JSEARCH_API_HOST=jsearch.p.rapidapi.com

🏭 生产部署

部署到AWS

选项1:ECS Fargate

# Build Docker image
docker build -t mcp-server .

# Push to ECR
aws ecr get-login-password | docker login --username AWS --password-stdin <ecr-url>
docker tag mcp-server:latest <ecr-url>/mcp-server:latest
docker push <ecr-url>/mcp-server:latest

# Deploy to ECS (use Fargate)

选项2:弹性豆茎

# Package JAR
gradlew.bat bootJar

# Deploy via EB CLI
eb init
eb create mcp-server-env
eb deploy

客户端配置(生产):

{
  "mcpServers": {
    "resume-matcher": {
      "url": "https://mcp.yourcompany.com/sse",
      "headers": {
        "Authorization": "Bearer <api-token>"
      }
    }
  }
}

🧪 测试

使用MCP检查员进行手动测试

# Install MCP Inspector
npm install -g @modelcontextprotocol/inspector

# Test your server
mcp-inspector http://localhost:8080/sse

单元测试

gradlew.bat test

📁 项目结构

job-recommendations-mcp-server/
├── src/main/java/com/anupam/
│   ├── job/recommendations/mcp/server/
│   │   ├── Course.java
│   │   ├── CourseService.java
│   │   └── JobRecommendationsMcpServerApplication.java
│   └── mcp/
│       ├── ai/              # LLM client interfaces
│       │   ├── chat/
│       │   ├── LlmClient.java
│       │   └── OpenAILlmClient.java
│       ├── service/         # Business logic services
│       │   ├── ResumeService.java
│       │   ├── VectorStoreService.java
│       │   ├── EmbeddingService.java
│       │   └── JSearchService.java
│       ├── tools/           # MCP-exposed tools
│       │   ├── ResumeTools.java
│       │   ├── MatchingTools.java
│       │   ├── LlmDiagnostics.java
│       │   ├── EnvPrinter.java
│       │   └── JobDto.java
│       └── util/            # Utilities
│           └── JsonUtils.java
├── src/main/resources/
│   └── application.properties
├── .env                     # API keys (gitignored)
├── .env.example            # Template for .env
├── build.gradle
└── README.md

🔐 安全说明

  • 永不承诺 .env -包含敏感的API密钥
  • 使用环境变量 -对于生产中的所有秘密
  • 添加身份验证 -为生产SSE端点实现API令牌
  • 仅限HTTPS -将TLS用于生产部署

🛠️ 故障排除

问题:“ClassNotFoundException:标准Servlet环境”

解决方案: 确保 spring-boot-starter-web 处于依赖关系中

问题:“JSearch API返回401”

解决方案: 验证您的RapidAPI密钥 .env 文件

问题:“Claude Desktop中的服务器已断开连接”

解决方案:

  • 检查Spring Boot横幅是否已禁用(spring.main.banner-mode=off)
  • 确保没有日志写入stdout(只有JSON-RPC消息)

问题:“找不到.env文件”

解决方案: 创建 .env 从 .env.example 在项目根中

📚 资源

🤝 贡献

  1. 复刻仓库
  2. 创建特征分支(git checkout -b feature/amazing-feature)
  3. 提交更改(git commit -m 'Add amazing feature')
  4. 推送到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

📝 许可证

该项目根据MIT许可证获得许可。

👥 作者

  • Anupam-初步工作

🙏 致谢

  • Spring AI团队为MCP服务器提供支持
  • Claude和MCP方案的人体工程学
  • 用于JSearch API访问的RapidAPI