search_jobs
Find job opportunities on LinkedIn by entering specific search terms to match career interests and requirements.
Instructions
Search for jobs on LinkedIn using a search term.
Args: search_term (str): Search term to use for the job search.
Returns: List[Dict[str, Any]]: List of job search results
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| search_term | Yes |
Implementation Reference
- linkedin_mcp_server/tools/job.py:58-79 (handler)The primary handler function for the 'search_jobs' MCP tool. It uses linkedin_scraper.JobSearch to find jobs matching the input search_term, converts Job objects to dictionaries, and handles exceptions with error formatting.@mcp.tool() async def search_jobs(search_term: str) -> List[Dict[str, Any]]: """ Search for jobs on LinkedIn using a search term. Args: search_term (str): Search term to use for the job search. Returns: List[Dict[str, Any]]: List of job search results """ try: driver = safe_get_driver() logger.info(f"Searching jobs: {search_term}") job_search = JobSearch(driver=driver, close_on_complete=False, scrape=False) jobs = job_search.search(search_term) # Convert job objects to dictionaries return [job.to_dict() for job in jobs] except Exception as e: return handle_tool_error_list(e, "search_jobs")
- linkedin_mcp_server/server.py:29-29 (registration)Invocation of register_job_tools during MCP server creation, which registers the search_jobs tool (and other job tools) via decorators.register_job_tools(mcp)
- linkedin_mcp_server/tools/job.py:24-106 (registration)The register_job_tools function defines and registers all job-related tools including search_jobs using @mcp.tool() decorators.def register_job_tools(mcp: FastMCP) -> None: """ Register all job-related tools with the MCP server. Args: mcp (FastMCP): The MCP server instance """ @mcp.tool() async def get_job_details(job_id: str) -> Dict[str, Any]: """ Get job details for a specific job posting on LinkedIn Args: job_id (str): LinkedIn job ID (e.g., "4252026496", "3856789012") Returns: Dict[str, Any]: Structured job data including title, company, location, posting date, application count, and job description (may be empty if content is protected) """ try: # Construct clean LinkedIn URL from job ID job_url = f"https://www.linkedin.com/jobs/view/{job_id}/" driver = safe_get_driver() logger.info(f"Scraping job: {job_url}") job = Job(job_url, driver=driver, close_on_complete=False) # Convert job object to a dictionary return job.to_dict() except Exception as e: return handle_tool_error(e, "get_job_details") @mcp.tool() async def search_jobs(search_term: str) -> List[Dict[str, Any]]: """ Search for jobs on LinkedIn using a search term. Args: search_term (str): Search term to use for the job search. Returns: List[Dict[str, Any]]: List of job search results """ try: driver = safe_get_driver() logger.info(f"Searching jobs: {search_term}") job_search = JobSearch(driver=driver, close_on_complete=False, scrape=False) jobs = job_search.search(search_term) # Convert job objects to dictionaries return [job.to_dict() for job in jobs] except Exception as e: return handle_tool_error_list(e, "search_jobs") @mcp.tool() async def get_recommended_jobs() -> List[Dict[str, Any]]: """ Get your personalized recommended jobs from LinkedIn Returns: List[Dict[str, Any]]: List of recommended jobs """ try: driver = safe_get_driver() logger.info("Getting recommended jobs") job_search = JobSearch( driver=driver, close_on_complete=False, scrape=True, # Enable scraping to get recommended jobs scrape_recommended_jobs=True, ) if hasattr(job_search, "recommended_jobs") and job_search.recommended_jobs: return [job.to_dict() for job in job_search.recommended_jobs] else: return [] except Exception as e: return handle_tool_error_list(e, "get_recommended_jobs")