🔨 Implement core functionality for Job Search MCP Server, including user profile management, job search, cover letter generation, and Q&A response tools. Add configuration and service layers, and establish dependency management with uv. Introduce .gitignore and .python-version files for environment setup.
4fd18a2
"""Profile tool for managing user profiles - profile.upsert endpoint.""" | |
from typing import Dict, Any | |
from ..services import ProfileService | |
class ProfileTool: | |
"""Tool for managing user profiles.""" | |
def __init__(self): | |
self.profile_service = ProfileService() | |
def upsert(self, user_id: str, profile_data: str) -> Dict[str, Any]: | |
""" | |
Store or update user profile. | |
This is the main profile.upsert endpoint that stores the user résumé, | |
skills, salary expectations, and career goals. | |
Args: | |
user_id: Unique identifier for the user | |
profile_data: JSON string containing user profile information | |
Expected format: | |
{ | |
"resume": "Full resume text...", | |
"skills": ["Python", "JavaScript", "React", ...], | |
"salary_wish": "$80,000 - $120,000 annually", | |
"career_goals": "Looking to transition into senior developer role...", | |
"experience_level": "Mid-level", # Optional | |
"location": "Remote", # Optional | |
"education": "BS Computer Science", # Optional | |
"certifications": ["AWS Certified"] # Optional | |
} | |
Returns: | |
Dict with success status, message, and profile metadata | |
""" | |
return self.profile_service.upsert_profile(user_id, profile_data) | |
def get(self, user_id: str) -> Dict[str, Any]: | |
""" | |
Get user profile by ID. | |
Args: | |
user_id: Unique user identifier | |
Returns: | |
Dict with profile data or error message | |
""" | |
try: | |
profile = self.profile_service.get_profile(user_id) | |
if profile: | |
return {"success": True, "profile": profile.dict()} | |
else: | |
return {"success": False, "message": "Profile not found"} | |
except Exception as e: | |
return {"success": False, "message": f"Error retrieving profile: {str(e)}"} | |
def delete(self, user_id: str) -> Dict[str, Any]: | |
""" | |
Delete user profile. | |
Args: | |
user_id: Unique user identifier | |
Returns: | |
Dict with operation result | |
""" | |
try: | |
deleted = self.profile_service.delete_profile(user_id) | |
if deleted: | |
return {"success": True, "message": "Profile deleted successfully"} | |
else: | |
return {"success": False, "message": "Profile not found"} | |
except Exception as e: | |
return {"success": False, "message": f"Error deleting profile: {str(e)}"} | |
def list_all(self) -> Dict[str, Any]: | |
""" | |
List all user IDs with profiles. | |
Returns: | |
Dict with list of user IDs | |
""" | |
try: | |
user_ids = self.profile_service.list_profiles() | |
return {"success": True, "user_ids": user_ids, "count": len(user_ids)} | |
except Exception as e: | |
return {"success": False, "message": f"Error listing profiles: {str(e)}"} | |