jsong1004/myjob-mcp-server
If you are the rightful owner of myjob-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
MyJob MCP Server is a standalone Model Context Protocol server designed for intelligent job searching and career management, operating anonymously with Firestore database integration.
MyJob MCP Server
A standalone Model Context Protocol (MCP) server that provides intelligent job searching and career management capabilities. No authentication required - works anonymously with Firestore database integration.
🌟 Overview
This MCP server enables AI agents to perform sophisticated job searches, resume management, and career assistance. It features intelligent job filtering that excludes already saved jobs and includes SerpAPI fallback for comprehensive job discovery.
✨ Key Features
🧠 Intelligent Job Search
- Smart Filtering: Automatically excludes already saved jobs from search results
- Firestore Integration: Searches through comprehensive job database with 1000+ jobs
- SerpAPI Fallback: Falls back to Google Jobs when no new opportunities found locally
- Advanced Search: Searches across titles, descriptions, qualifications, and responsibilities
- Location & Keyword Matching: Intelligent filtering with fuzzy matching
👤 User-Based Resume Management
- Multi-User Support: Look up resumes by user name (e.g., "Jaehee Song")
- User-Specific Data: Each resume linked to user via
userIdfield - Default Resume Management: Each user can have one default resume
- Firestore-First: Real data from Firestore, no mock data fallbacks
Required Firestore Collections:
users: Documents withname,email, etc.resumes: Documents withuserId,isDefault,content, etc.jobs: Job listings with detailed informationsavedJobs: User's saved job collection
🔧 Tools (Actions)
🔍 Job Search & Management
- search_jobs - Intelligent job search with saved job filtering + SerpAPI fallback
- score_jobs - AI-powered job matching scores
- save_job - Save jobs to Firestore collection
- get_company_info - Detailed company research
📄 Resume Management
- upload_resume - Upload resumes to Firestore
- delete_resume - Remove resumes with default management
- set_default_resume - Set user's default resume
- tailor_resume - AI-powered resume tailoring for specific jobs
✉️ Cover Letter Generation
- cover_letter - Generate and edit professional cover letters
🛠️ Utility Tools
- get_job_ids - Extract job IDs from search results
- get_default_resume - Get user's default resume
- get_resume - Get specific resume by ID
- get_resume_by_name - Get default resume by user name
- get_resumes_by_name - Get all resumes for a user
- list_resumes - List all available resumes
- get_job_details - Get comprehensive job information
Resources (Data Access)
- myjob://saved-jobs - Access saved jobs with status tracking
- myjob://resumes - Access resume collection
- myjob://profile - Access user profile and preferences
Prompts (Templates)
- career_advisor - Get personalized career advice
- job_match_analysis - Analyze job fit and get detailed feedback
🚀 Quick Start
1. Installation
git clone https://github.com/yourusername/myjob-mcp-server.git
cd myjob-mcp-server
npm install
npm run build
2. Environment Setup
# Copy environment template
cp .env.example .env
# Edit .env with your Firebase and SerpAPI credentials
FIREBASE_PROJECT_ID=your-project-id
SERPAPI_API_KEY=your-serpapi-key # Optional for Google Jobs fallback
3. Firestore Security Rules
Add these rules to your Firestore security rules:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /jobs/{jobId} {
allow read: if true;
}
match /resumes/{resumeId} {
allow read, write: if true;
}
match /savedJobs/{savedJobId} {
allow read, write: if true;
}
match /users/{userId} {
allow read: if true;
}
}
}
Usage
4. Claude Desktop Integration
Add to your Claude Desktop MCP settings (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"myjob": {
"command": "node",
"args": ["/absolute/path/to/myjob-mcp-server/dist/index.js"],
"env": {
"API_BASE_URL": "http://localhost:3000"
}
}
}
}
📖 Usage Examples
Intelligent Job Search
// Search for Data Engineer jobs, automatically excludes saved jobs
{
"name": "search_jobs",
"arguments": {
"keywords": "Data Engineer",
"location": "Seattle, WA",
"limit": 10
}
}
User-Specific Resume Lookup
// Get Jaehee Song's default resume
{
"name": "get_resume_by_name",
"arguments": {
"userName": "Jaehee Song"
}
}
// Get all of Jaehee's resumes
{
"name": "get_resumes_by_name",
"arguments": {
"userName": "Jaehee Song",
"limit": 10
}
}
Save Jobs to Firestore
{
"name": "save_job",
"arguments": {
"jobId": "job_12345",
"notes": "Great company culture, matches my skills"
}
}
AI-Powered Job Scoring
{
"name": "score_jobs",
"arguments": {
"jobIds": ["job123", "job456"],
"resumeData": {
"skills": ["Python", "Machine Learning", "AWS"]
}
}
}
Career Advice
{
"name": "career_advisor",
"arguments": {
"topic": "interview_prep",
"job_title": "Senior Data Engineer",
"industry": "tech",
"experience_level": "senior"
}
}
🛠️ Development
Run in Development Mode
npm run dev
Testing Tools
# Test job search functionality
node test-intelligent-search.js
# Test resume functionality
node test-resume-fetch.js
# Test Firestore connection
node test-firestore.js
Build for Production
npm run build
npm start
🏗️ Architecture
Core Components
- Data Service: Firestore integration with intelligent caching
- Tool Handlers: MCP tool implementations with validation
- Smart Search: Job filtering with SerpAPI fallback
- User Management: Multi-user resume and job management
Database Collections
📁 Firestore Database
├── 👤 users (name, email, profile data)
├── 📄 resumes (userId, content, isDefault)
├── 💼 jobs (title, company, description, requirements)
└── ⭐ savedJobs (userId, jobId, notes, status)
🚨 Error Handling
- Firestore Permissions: Clear error messages for missing security rules
- Input Validation: Zod schema validation on all inputs
- Graceful Fallbacks: SerpAPI fallback when local search returns no results
- User-Friendly Messages: Helpful error messages with setup instructions
🔒 Security & Privacy
- No Authentication Required: Works anonymously for maximum accessibility
- Firestore Security Rules: Database-level access controls
- Input Sanitization: All inputs validated and sanitized
- No Data Storage: Server doesn't store user credentials or sensitive data
📊 Performance
- Smart Caching: Firestore queries optimized with intelligent limits
- Batch Operations: Multiple operations batched for efficiency
- Parallel Processing: Concurrent API calls where possible
- Token Optimization: Efficient response formats to minimize token usage
🤝 Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
📜 License
ISC License - see LICENSE file for details
🙏 Acknowledgments
- Built with Model Context Protocol (MCP)
- Firebase/Firestore for database
- SerpAPI for Google Jobs integration
- TypeScript for type safety