Merge branch 'main' of https://github.com/daniel7an/jobsearch-mcp-server; branch 'main' of https://huggingface.co/spaces/Agents-MCP-Hackathon/jobsearch-mcp-server
Browse files- .gitattributes +1 -1
- README.md +6 -207
- src/config/__pycache__/__init__.cpython-313.pyc +0 -0
- src/config/__pycache__/settings.cpython-313.pyc +0 -0
- src/services/__pycache__/__init__.cpython-313.pyc +0 -0
- src/services/__pycache__/embedding_service.cpython-313.pyc +0 -0
- src/services/__pycache__/job_search_service.cpython-313.pyc +0 -0
- src/services/__pycache__/llm_service.cpython-313.pyc +0 -0
- src/services/__pycache__/profile_service.cpython-313.pyc +0 -0
- src/tools/__pycache__/__init__.cpython-313.pyc +0 -0
- src/tools/__pycache__/cover_letter_tool.cpython-313.pyc +0 -0
- src/tools/__pycache__/job_search_tool.cpython-313.pyc +0 -0
- src/tools/__pycache__/profile_tool.cpython-313.pyc +0 -0
- src/tools/__pycache__/qa_tool.cpython-313.pyc +0 -0
.gitattributes
CHANGED
@@ -17,4 +17,4 @@
|
|
17 |
job_search_results.json -filter
|
18 |
pyproject.toml -filter
|
19 |
package.json -filter
|
20 |
-
*.lock -filter
|
|
|
17 |
job_search_results.json -filter
|
18 |
pyproject.toml -filter
|
19 |
package.json -filter
|
20 |
+
*.lock -filter
|
README.md
CHANGED
@@ -1,213 +1,12 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
-
colorTo:
|
6 |
sdk: gradio
|
7 |
-
sdk_version:
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
-
license: mit
|
11 |
-
tags:
|
12 |
-
- mcp-server-track
|
13 |
-
- job-search
|
14 |
-
- mcp
|
15 |
-
- ai-agents
|
16 |
-
- gradio
|
17 |
-
- embeddings
|
18 |
-
- cover-letter
|
19 |
-
- career
|
20 |
---
|
21 |
|
22 |
-
|
23 |
-
|
24 |
-
**Smart job matching and instant application helper** - A comprehensive MCP server that revolutionizes the job search process using GPU embeddings and LLM-powered assistance.
|
25 |
-
|
26 |
-
## π― Hackathon Entry - Track 1: MCP Server/Tool
|
27 |
-
|
28 |
-
This project is submitted for the **Gradio Agents & MCP Hackathon 2025** under **Track 1: MCP Server/Tool**.
|
29 |
-
|
30 |
-
**Tag:** `mcp-server-track`
|
31 |
-
|
32 |
-
## π What It Does
|
33 |
-
|
34 |
-
This MCP server provides 4 core endpoints that transform how people search and apply for jobs:
|
35 |
-
|
36 |
-
### π Core MCP Endpoints:
|
37 |
-
|
38 |
-
1. **`profile.upsert`** - Store user rΓ©sumΓ©, skills, salary expectations, and career goals
|
39 |
-
2. **`jobs.search`** - Pull fresh job posts, rank with GPU embeddings, return fit scores
|
40 |
-
3. **`letter.generate`** - Create personalized cover letters using LLM
|
41 |
-
4. **`qa.reply`** - Draft concise answers to client questions
|
42 |
-
|
43 |
-
## π¬ Demo Video
|
44 |
-
|
45 |
-
> **Note:** A demo video showing the MCP server in action with various MCP clients (Claude Desktop, Cursor, etc.) will be added here.
|
46 |
-
|
47 |
-
## β¨ Key Features
|
48 |
-
|
49 |
-
### π§ GPU-Powered Job Matching
|
50 |
-
- **Sentence Embeddings**: Uses state-of-the-art transformer models to understand job descriptions and user profiles
|
51 |
-
- **FAISS Vector Search**: Real-time similarity matching between user skills and job requirements
|
52 |
-
- **Intelligent Ranking**: Returns jobs with personalized fit scores (0-100%)
|
53 |
-
|
54 |
-
### π€ LLM-Enhanced Applications
|
55 |
-
- **Smart Cover Letters**: Context-aware cover letter generation in multiple tones
|
56 |
-
- **Interview Q&A**: Instant responses to common interview questions
|
57 |
-
- **Career Guidance**: Personalized suggestions based on user profile
|
58 |
-
|
59 |
-
### π Efficiency Benefits
|
60 |
-
- **80%+ Time Savings**: Automates the most tedious parts of job searching
|
61 |
-
- **Quality Improvement**: Reduces copy-pasted applications with personalized content
|
62 |
-
- **Better Matching**: AI-driven job-to-skill matching vs. keyword search
|
63 |
-
|
64 |
-
## ποΈ Architecture
|
65 |
-
|
66 |
-
### GPU Processing (T4-small)
|
67 |
-
- Embeds user profiles and job descriptions using sentence-transformers
|
68 |
-
- Maintains FAISS index for real-time similarity search
|
69 |
-
- Efficient vector operations for large job databases
|
70 |
-
|
71 |
-
### LLM Integration
|
72 |
-
- Supports multiple providers (OpenAI, Anthropic, etc.)
|
73 |
-
- Optimized prompts for cover letters and Q&A responses
|
74 |
-
- Average calls under 300 tokens for cost efficiency
|
75 |
-
|
76 |
-
### MCP Protocol Implementation
|
77 |
-
- Full MCP server capabilities using Gradio
|
78 |
-
- RESTful API endpoints for all core functions
|
79 |
-
- Stateful user profile management
|
80 |
-
|
81 |
-
## π οΈ Installation & Setup
|
82 |
-
|
83 |
-
1. **Clone the repository:**
|
84 |
-
```bash
|
85 |
-
git clone <your-repo-url>
|
86 |
-
cd jobsearch-mcp-server
|
87 |
-
```
|
88 |
-
|
89 |
-
2. **Install dependencies:**
|
90 |
-
```bash
|
91 |
-
uv sync
|
92 |
-
```
|
93 |
-
|
94 |
-
3. **Set up environment variables:**
|
95 |
-
```bash
|
96 |
-
# Create .env file with:
|
97 |
-
OPENAI_API_KEY=your_openai_key
|
98 |
-
ANTHROPIC_API_KEY=your_anthropic_key
|
99 |
-
HUGGINGFACE_TOKEN=your_hf_token
|
100 |
-
```
|
101 |
-
|
102 |
-
4. **Run the server:**
|
103 |
-
```bash
|
104 |
-
uv run python app.py
|
105 |
-
```
|
106 |
-
|
107 |
-
## π± Usage Examples
|
108 |
-
|
109 |
-
### 1. Profile Setup
|
110 |
-
```python
|
111 |
-
# Store user profile
|
112 |
-
result = mcp_server.profile_upsert(
|
113 |
-
user_id="john_doe",
|
114 |
-
profile_data={
|
115 |
-
"resume": "Full resume text...",
|
116 |
-
"skills": ["Python", "React", "Node.js"],
|
117 |
-
"salary_wish": "$80,000 - $120,000",
|
118 |
-
"career_goals": "Senior full-stack developer role"
|
119 |
-
}
|
120 |
-
)
|
121 |
-
```
|
122 |
-
|
123 |
-
### 2. Job Search with AI Ranking
|
124 |
-
```python
|
125 |
-
# Find and rank jobs
|
126 |
-
results = mcp_server.jobs_search(
|
127 |
-
user_id="john_doe",
|
128 |
-
query="Python developer",
|
129 |
-
location="Remote",
|
130 |
-
job_type="full-time"
|
131 |
-
)
|
132 |
-
# Returns jobs with 0-100% fit scores
|
133 |
-
```
|
134 |
-
|
135 |
-
### 3. Generate Cover Letter
|
136 |
-
```python
|
137 |
-
# Create personalized cover letter
|
138 |
-
letter = mcp_server.letter_generate(
|
139 |
-
user_id="john_doe",
|
140 |
-
job_description="Job posting text...",
|
141 |
-
tone="professional"
|
142 |
-
)
|
143 |
-
```
|
144 |
-
|
145 |
-
### 4. Interview Q&A Assistant
|
146 |
-
```python
|
147 |
-
# Get help with interview questions
|
148 |
-
response = mcp_server.qa_reply(
|
149 |
-
user_id="john_doe",
|
150 |
-
question="Why should we hire you?",
|
151 |
-
context="Software engineering role"
|
152 |
-
)
|
153 |
-
```
|
154 |
-
|
155 |
-
## π» Technology Stack
|
156 |
-
|
157 |
-
- **Framework**: Gradio 5.0+ with MCP support
|
158 |
-
- **Embeddings**: sentence-transformers, FAISS
|
159 |
-
- **LLM**: OpenAI GPT/Anthropic Claude APIs
|
160 |
-
- **ML**: PyTorch, scikit-learn, pandas
|
161 |
-
- **Web**: httpx, aiohttp, requests
|
162 |
-
- **Data**: Beautiful Soup for job scraping
|
163 |
-
|
164 |
-
## π Typical User Flow
|
165 |
-
|
166 |
-
1. **One-time Setup**: Upload rΓ©sumΓ© and skills using `profile.upsert`
|
167 |
-
2. **Job Discovery**: Search for roles with `jobs.search` (e.g., "LLM engineer")
|
168 |
-
3. **Smart Ranking**: Get ranked list with AI-powered fit percentages
|
169 |
-
4. **Quick Apply**: Generate cover letter with `letter.generate`
|
170 |
-
5. **Interview Prep**: Use `qa.reply` for instant responses to recruiter questions
|
171 |
-
|
172 |
-
## π― Impact & Benefits
|
173 |
-
|
174 |
-
- **For Job Seekers**: Reduces application time by 80%+, improves match quality
|
175 |
-
- **For Recruiters**: Better-matched candidates, higher-quality applications
|
176 |
-
- **For Platforms**: Enhanced user engagement, data-driven insights
|
177 |
-
|
178 |
-
## π Innovation Highlights
|
179 |
-
|
180 |
-
1. **Hybrid AI Approach**: Combines GPU embeddings with LLM generation for optimal cost/performance
|
181 |
-
2. **MCP Integration**: Native MCP server that works with any MCP client
|
182 |
-
3. **Real-time Processing**: Sub-second job ranking for thousands of postings
|
183 |
-
4. **Contextual Understanding**: Deep semantic matching beyond keyword search
|
184 |
-
|
185 |
-
## π§ MCP Client Integration
|
186 |
-
|
187 |
-
This server works seamlessly with:
|
188 |
-
- **Claude Desktop** (Anthropic)
|
189 |
-
- **Cursor** IDE
|
190 |
-
- **Custom Gradio Apps** as MCP clients
|
191 |
-
- Any MCP-compatible application
|
192 |
-
|
193 |
-
## π Technical Specifications
|
194 |
-
|
195 |
-
- **Python**: 3.10+
|
196 |
-
- **Memory**: Optimized for efficient embedding storage
|
197 |
-
- **GPU**: T4-small compatible, CPU fallback available
|
198 |
-
- **API**: RESTful endpoints with full MCP protocol support
|
199 |
-
- **Scalability**: Designed for production deployment
|
200 |
-
|
201 |
-
## π€ Contributing
|
202 |
-
|
203 |
-
This project is part of the Gradio Agents & MCP Hackathon 2025. Contributions and feedback are welcome!
|
204 |
-
|
205 |
-
## π License
|
206 |
-
|
207 |
-
MIT License - see LICENSE file for details.
|
208 |
-
|
209 |
-
---
|
210 |
-
|
211 |
-
**Built for the Gradio Agents & MCP Hackathon 2025** π
|
212 |
-
|
213 |
-
*Transforming job search through intelligent automation and AI-powered matching*
|
|
|
1 |
---
|
2 |
+
title: Jobsearch Mcp Server
|
3 |
+
emoji: π
|
4 |
+
colorFrom: pink
|
5 |
+
colorTo: yellow
|
6 |
sdk: gradio
|
7 |
+
sdk_version: 5.33.0
|
8 |
app_file: app.py
|
9 |
pinned: false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
---
|
11 |
|
12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/config/__pycache__/__init__.cpython-313.pyc
ADDED
Binary file (333 Bytes). View file
|
|
src/config/__pycache__/settings.cpython-313.pyc
ADDED
Binary file (4.05 kB). View file
|
|
src/services/__pycache__/__init__.cpython-313.pyc
ADDED
Binary file (493 Bytes). View file
|
|
src/services/__pycache__/embedding_service.cpython-313.pyc
ADDED
Binary file (11.2 kB). View file
|
|
src/services/__pycache__/job_search_service.cpython-313.pyc
ADDED
Binary file (19.8 kB). View file
|
|
src/services/__pycache__/llm_service.cpython-313.pyc
ADDED
Binary file (14.7 kB). View file
|
|
src/services/__pycache__/profile_service.cpython-313.pyc
ADDED
Binary file (6.4 kB). View file
|
|
src/tools/__pycache__/__init__.cpython-313.pyc
ADDED
Binary file (466 Bytes). View file
|
|
src/tools/__pycache__/cover_letter_tool.cpython-313.pyc
ADDED
Binary file (8.91 kB). View file
|
|
src/tools/__pycache__/job_search_tool.cpython-313.pyc
ADDED
Binary file (5.78 kB). View file
|
|
src/tools/__pycache__/profile_tool.cpython-313.pyc
ADDED
Binary file (4.05 kB). View file
|
|
src/tools/__pycache__/qa_tool.cpython-313.pyc
ADDED
Binary file (13.3 kB). View file
|
|