search_specific_job_site
Search for AI/ML internships and entry-level positions on LinkedIn, Indeed, Glassdoor, ZipRecruiter, or Monster. Filter results by location and Python proficiency to find relevant job opportunities with application URLs.
Instructions
Search for jobs on a specific job site
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | Job site to search | |
| location | No | Job location | Remote |
| maxResults | No | Maximum number of results to return |
Implementation Reference
- src/index.ts:160-184 (handler)The handler function for the 'search_specific_job_site' tool. It parses arguments, builds a JobFilter for AI/ML entry-level jobs requiring Python, calls jobSearchService.searchSite, and returns the results as a JSON string in the MCP response format.private async searchSpecificJobSite(args: any) { const { site, location = 'Remote', maxResults = 25 } = args; const filter: JobFilter = { location, maxResults, includeInternships: true, includeFullTime: true, keywords: [], experienceLevel: 'entry', requiredSkills: ['python'], jobTypes: ['ai', 'ml', 'machine learning', 'artificial intelligence', 'data science'] }; const results = await this.jobSearchService.searchSite(site, filter); return { content: [ { type: 'text', text: JSON.stringify(results, null, 2) } ] }; }
- src/index.ts:76-96 (schema)Input schema defining parameters for the tool: site (required, enum of job sites), location, maxResults.inputSchema: { type: 'object', properties: { site: { type: 'string', enum: ['linkedin', 'indeed', 'glassdoor', 'ziprecruiter', 'monster'], description: 'Job site to search' }, location: { type: 'string', description: 'Job location', default: 'Remote' }, maxResults: { type: 'number', description: 'Maximum number of results to return', default: 25 } }, required: ['site'] }
- src/index.ts:107-110 (registration)Registration in the tool dispatch switch statement within the CallToolRequestSchema handler.case 'search_ai_ml_jobs': return await this.searchAIMLJobs(args); case 'search_specific_job_site': return await this.searchSpecificJobSite(args);
- src/index.ts:73-97 (registration)Tool registration in the ListToolsRequestSchema response, including name, description, and input schema.{ name: 'search_specific_job_site', description: 'Search for jobs on a specific job site', inputSchema: { type: 'object', properties: { site: { type: 'string', enum: ['linkedin', 'indeed', 'glassdoor', 'ziprecruiter', 'monster'], description: 'Job site to search' }, location: { type: 'string', description: 'Job location', default: 'Remote' }, maxResults: { type: 'number', description: 'Maximum number of results to return', default: 25 } }, required: ['site'] } }
- Core helper method called by the handler. Retrieves the site-specific scraper, calls its search method with the filter, applies post-search filtering, and returns structured results or error.async searchSite(site: string, filter: JobFilter): Promise<JobSearchResult> { const startTime = Date.now(); const scraper = this.scrapers.get(site.toLowerCase()); if (!scraper) { throw new Error(`Unsupported job site: ${site}`); } try { const jobs = await scraper.search(filter); const filteredJobs = this.filterJobs(jobs, filter); return { site, jobs: filteredJobs, totalFound: filteredJobs.length, searchTime: Date.now() - startTime }; } catch (error) { return { site, jobs: [], totalFound: 0, searchTime: Date.now() - startTime, error: error instanceof Error ? error.message : 'Unknown error' }; } }