search_ai_ml_jobs
Search for AI and machine learning job opportunities including internships and full-time roles across multiple job platforms with location filtering and keyword targeting.
Instructions
Search for AI/ML internships and full-time roles across multiple job sites
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| includeFullTime | No | Include full-time positions | |
| includeInternships | No | Include internship positions | |
| keywords | No | Additional keywords to search for (e.g., ["machine learning", "deep learning", "NLP"]) | |
| location | No | Job location (e.g., "Remote", "San Francisco, CA", "New York, NY") | Remote |
| maxResults | No | Maximum number of results to return |
Implementation Reference
- src/index.ts:128-158 (handler)The handler function for the 'search_ai_ml_jobs' tool. It extracts parameters from args, constructs a JobFilter tailored for entry-level AI/ML jobs requiring Python, calls JobSearchService.searchAllSites, and returns the JSON-stringified results.private async searchAIMLJobs(args: any) { const { location = 'Remote', maxResults = 50, includeInternships = true, includeFullTime = true, keywords = [] } = args; const filter: JobFilter = { location, maxResults, includeInternships, includeFullTime, keywords, experienceLevel: 'entry', // Less than 1 year requiredSkills: ['python'], jobTypes: ['ai', 'ml', 'machine learning', 'artificial intelligence', 'data science'] }; const results = await this.jobSearchService.searchAllSites(filter); return { content: [ { type: 'text', text: JSON.stringify(results, null, 2) } ] }; }
- src/index.ts:37-72 (registration)Registration of the 'search_ai_ml_jobs' tool in the ListTools response, including its name, description, and detailed input schema.{ name: 'search_ai_ml_jobs', description: 'Search for AI/ML internships and full-time roles across multiple job sites', inputSchema: { type: 'object', properties: { location: { type: 'string', description: 'Job location (e.g., "Remote", "San Francisco, CA", "New York, NY")', default: 'Remote' }, maxResults: { type: 'number', description: 'Maximum number of results to return', default: 50 }, includeInternships: { type: 'boolean', description: 'Include internship positions', default: true }, includeFullTime: { type: 'boolean', description: 'Include full-time positions', default: true }, keywords: { type: 'array', items: { type: 'string' }, description: 'Additional keywords to search for (e.g., ["machine learning", "deep learning", "NLP"])', default: [] } }, required: [] } },
- src/index.ts:40-71 (schema)Input schema definition for the 'search_ai_ml_jobs' tool, specifying parameters like location, maxResults, internship/full-time inclusion, and keywords.inputSchema: { type: 'object', properties: { location: { type: 'string', description: 'Job location (e.g., "Remote", "San Francisco, CA", "New York, NY")', default: 'Remote' }, maxResults: { type: 'number', description: 'Maximum number of results to return', default: 50 }, includeInternships: { type: 'boolean', description: 'Include internship positions', default: true }, includeFullTime: { type: 'boolean', description: 'Include full-time positions', default: true }, keywords: { type: 'array', items: { type: 'string' }, description: 'Additional keywords to search for (e.g., ["machine learning", "deep learning", "NLP"])', default: [] } }, required: [] }
- Helper method in JobSearchService that performs parallel searches across all job sites (LinkedIn, Indeed, etc.) using the provided filter and aggregates the results.async searchAllSites(filter: JobFilter): Promise<JobSearchResponse> { const startTime = Date.now(); const results: JobSearchResult[] = []; // Search all sites in parallel const searchPromises = Array.from(this.scrapers.keys()).map(async (site) => { try { const result = await this.searchSite(site, filter); return result; } catch (error) { return { site, jobs: [], totalFound: 0, searchTime: 0, error: error instanceof Error ? error.message : 'Unknown error' }; } }); const searchResults = await Promise.all(searchPromises); results.push(...searchResults); const totalJobs = results.reduce((sum, result) => sum + result.jobs.length, 0); return { results, totalJobs, searchTimestamp: new Date().toISOString(), filters: filter }; }