Job Matcher MCP
Planned integration for searching job listings from Indeed's database, expanding job sources beyond Adzuna.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Job Matcher MCPfind senior product manager jobs in San Francisco"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ο»Ώ# Job Matcher MCP
π― AI-powered job search and resume customization MCP (Model Context Protocol) server
Automate your job search and customize your resume for each role in under a minute. Powered by job APIs and Claude LLM.
π Table of Contents
Related MCP server: job-search
π Quick Start
Goal: Get the server running with mock data in 5 minutes (no API keys needed).
1. Clone the repository
\\ash cd job-matcher-mcp \\
2. Install dependencies
\\ash pip install -r requirements.txt \\
3. Run with mock data
\\ash export USE_MOCK_DATA=true python mcp_server.py \\
Expected output:
\
=== Testing search_jobs ===
{
"success": true,
"job_listings": [
{
"id": "mock_1",
"title": "Senior Product Manager",
"company": "TechCorp Inc",
"location": "San Francisco, CA",
...
}
],
...
}
=== Testing customize_resume === { "success": true, "customized_resume": "# John Doe...", ... } `
β Success! Your MCP server is working. Now let's add real API keys.
β¨ Features
Feature | Status | Description |
Job Search | β MVP | Query 1000s of job listings via Adzuna API |
Resume Customization | β MVP | AI-powered resume tailoring using Claude |
Skill Matching | β MVP | Identify matched/missing skills |
ATS Optimization | β MVP | Automatic keyword injection for ATS |
Mock Data Mode | β MVP | Test without API keys |
Multi-API Support | π v1.2 | Add Indeed, LinkedIn, AngelList |
Cover Letter Generation | π v1.2 | Auto-generate cover letters |
Application Tracking | π v2.0 | Track applications & interviews |
π§ Installation
Prerequisites
Python 3.10 or higher
pip (Python package manager)
Git
Step 1: Clone the repository
\\ash git clone https://github.com/yourusername/job-matcher-mcp.git cd job-matcher-mcp \\
Step 2: Create virtual environment (recommended)
\\ash
macOS/Linux
python3 -m venv venv source venv/bin/activate
Windows
python -m venv venv .\venv\Scripts\Activate.ps1 \\
Step 3: Install dependencies
\\ash pip install -r requirements.txt \\
βοΈ Configuration
1. Get API Keys
Adzuna API (Free)
Create an account
Create an app to get App ID and App Key
Free tier: ~100 requests/day
Anthropic Claude API (Paid, .50-5/month)
Create an account
Generate an API key
Pricing: ~.003 per 1K input tokens, .015 per 1K output tokens
2. Create .env file
\\ash cp .env.example .env \\
3. Add your API keys to .env
\\env ADZUNA_APP_ID=your_actual_app_id ADZUNA_APP_KEY=your_actual_app_key ANTHROPIC_API_KEY=sk-ant-your_actual_api_key USE_MOCK_DATA=false LOG_LEVEL=INFO \\
4. Load environment variables
\\ash
macOS/Linux
export \
Windows PowerShell
Get-Content .env | ForEach-Object { , \ = .Split('=') if () { Set-Item -Path env:\ -Value \ } } \\
π» Usage
Run the server
\\ash python mcp_server.py \\
Test with curl (example)
\\ash
Search for jobs
curl -X POST http://localhost:8000/tools/search_jobs \ -H "Content-Type: application/json" \ -d '{ "role": "Product Manager", "location": "San Francisco, CA", "experience_years": 5, "max_results": 10 }'
Customize resume
curl -X POST http://localhost:8000/tools/customize_resume \ -H "Content-Type: application/json" \ -d '{ "base_resume": "...", "job_description": "...", "template": "modern" }' \\
Python example
\\python from mcp_server import JobMatcherMCPServer
server = JobMatcherMCPServer()
Search jobs
jobs = server.search_jobs( role="Product Manager", location="San Francisco, CA", experience_years=5, max_results=10 ) print(jobs)
Customize resume
resume = server.customize_resume( base_resume="Your resume text here...", job_description="Job description here...", template="modern" ) print(resume) \\
π οΈ MCP Tools Reference
Tool 1: \search_jobs\
Search for job listings based on criteria.
Input Schema
\\json { "role": "Product Manager", // Required: Job title "location": "San Francisco, CA", // Required: Geographic location "experience_years": 5, // Required: Years of experience "max_results": 10, // Optional: Limit results (default: 10) "use_mock_data": false // Optional: Use mock data (default: false) } \\
Output Schema
\\json { "success": true, "job_listings": [ { "id": "12345", "title": "Senior Product Manager", "company": "TechCorp", "location": "San Francisco, CA", "link": "https://...", "salary_min": 120000, "salary_max": 160000, "posted_date": "2026-08-17T10:00:00Z", "description_snippet": "We are looking for..." } ], "total_found": 123, "search_time_ms": 1234, "error": null } \\
Example
\\python jobs = server.search_jobs( role="Product Manager", location="Remote", experience_years=3, max_results=5 ) \\
Tool 2: \customize_resume\
Customize resume for a specific job using AI.
Input Schema
\\json { "base_resume": "# Jane Doe...", // Required: Your resume text "job_description": "We are looking for...", // Required: Job posting "template": "modern", // Optional: modern|classic|minimal "use_mock_data": false // Optional: Use mock data } \\
Output Schema
\\json { "success": true, "customized_resume": "# Jane Doe...", "match_analysis": { "skills_match_percentage": 82, "matched_skills": ["Product Management", "Leadership"], "missing_skills": ["Machine Learning", "Cloud"], "suggestions": ["Add ML experience if applicable"], "keywords_added": ["Data-driven", "Cross-functional"] }, "generation_time_ms": 2345, "error": null } \\
Example
\\python customized = server.customize_resume( base_resume=open("resume.txt").read(), job_description=open("job_posting.txt").read(), template="modern" ) \\
ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β User/AI Agent (Chat, Script, API Client) β ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ β MCP Protocol ββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ β Job Matcher MCP Server β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β β Tool: search_jobs() β β β β - Query Adzuna API β β β β - Parse & structure results β β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β β Tool: customize_resume() β β β β - Send to Claude API β β β β - Parse & return customized resume β β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β β External APIs β β β β - Adzuna Job Search API β β β β - Anthropic Claude API β β β ββββββββββββββββββββββββββββββββββββββββββββββββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Troubleshooting
Issue: \ModuleNotFoundError: No module named 'anthropic'\
Solution: Install dependencies \\ash pip install -r requirements.txt \\
Issue: \API request failed: Unauthorized\
Solution: Check your API keys in .env \\ash
Verify keys are set
echo
echo
\\
Issue: \No jobs found\
Solution: Try a different role/location or increase max_results \\python
Try broader search
jobs = server.search_jobs( role="Manager", # More general term location="New York, NY", experience_years=5, max_results=50 ) \\
Issue: \Claude API response too slow\
Solution: Use mock data for testing \\python resume = server.customize_resume( base_resume="...", job_description="...", use_mock_data=True # Skip API call ) \\
Issue: \Rate limit exceeded\
Solution: Adzuna free tier has limits. Implement caching: \\python
Store job search results
cached_jobs = {} key = f"{role}{location}{experience_years}" if key not in cached_jobs: cached_jobs[key] = server.search_jobs(...) \\
π’ Deployment
Deploy to Vercel
\\ash
1. Create Vercel account at https://vercel.com
2. Install Vercel CLI
npm install -g vercel
3. Deploy
vercel
4. Add environment variables in Vercel dashboard
Settings β Environment Variables
\\
Deploy to Railway
\\ash
1. Create Railway account at https://railway.app
2. Connect your Git repository
3. Add environment variables in Railway dashboard
\\
π Performance Metrics (Target)
Operation | Target Time | Actual |
Job search | <5 seconds | ~2-3s |
Resume customization | <10 seconds | ~3-5s |
Mock job search | <100ms | ~50ms |
Mock resume customization | <500ms | ~200ms |
π API References
Adzuna API: https://developer.adzuna.com/docs
Claude API: https://docs.anthropic.com/
MCP Protocol: https://modelcontextprotocol.io/
π License
MIT License - see LICENSE file for details
π¨βπΌ Author
Built for tech product managers in job transition.
Version: 1.0.0
Last Updated: 2026-08-17
Status: MVP Ready
This server cannot be deployed
Maintenance
Related MCP Connectors
GetJobzi MCP server for job search, application tracking, and career forecasting.
Generate tailored, ATS-optimized resume PDFs and cover letters from a job description, over MCP.
AI job search MCP β fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Public MCP server for discovering open jobs. Search, filter, and get application links.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for maintaining a professional profile database and generating tailored, ATS-optimized resumes for specific job postings.1-
- AlicenseNot gradedqualityDmaintenanceA job-search MCP server that ranks roles, drafts cover letters, and rehearses Q&A answers using a candidate profile, with live listings from five public sources.54 npmMIT
- AlicenseCqualityDmaintenanceAn MCP server that enables AI-assisted job search workflows including job discovery, application tracking, resume evaluation, and cover letter generation, with support for multiple job sources and scheduled scraping.8310 npm1AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes job-search and application-management capabilities to compatible AI clients, enabling discovery of vacancies, drafting of tailored application materials, and coordinated human-approved submissions.MIT