search_jobs
Search LinkedIn jobs using advanced filters for keywords, location, company, experience level, job type, date posted, salary, industry, and function.
Instructions
Search LinkedIn jobs with advanced filters and criteria
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | No | Job search keywords | |
| location | No | Job location | |
| company | No | Company name | |
| experienceLevel | No | Experience level | |
| jobType | No | Job type (full-time, part-time, etc.) | |
| datePosted | No | Date posted filter | |
| salary | No | Salary range | |
| industryId | No | Industry ID | |
| functionId | No | Function ID |
Implementation Reference
- src/server.ts:104-122 (registration)Registers the 'search-jobs' tool with MCP server, linking the schema and handler. Uses 'search-jobs' as the tool name with linkedinApiSchemas.searchJobs schema and an async callback that calls clientService.searchJobs(params).
// Search Jobs Tool this.server.tool( 'search-jobs', 'Search for LinkedIn job postings based on various criteria', linkedinApiSchemas.searchJobs, async (params) => { this.logger.info('Executing LinkedIn Job Search', { keywords: params.keywords, location: params.location }) try { const jobs = await this.clientService.searchJobs(params) return this.createResourceResponse(jobs) } catch (error) { this.logger.error('LinkedIn Job Search Failed', error) throw error } } ) - src/services/client.service.ts:150-168 (handler)Core handler that executes the LinkedIn job search API call. Builds query parameters from keywords, location, companies, and jobType, then makes a GET request to '/jobs/search' endpoint.
public async searchJobs(params: SearchJobsParams): Promise<SearchJobsResult> { const queryParams = new URLSearchParams() const paramMapping: Record<string, string | undefined> = { keywords: params.keywords, location: params.location } Object.entries(paramMapping) .filter(([_, value]) => value !== undefined) .forEach(([key, value]) => queryParams.append(key, value as string)) this.appendArrayParams(queryParams, { 'company-name': params.companies, 'job-type': params.jobType }) return this.makeRequest<SearchJobsResult>('get', `/jobs/search?${queryParams.toString()}`) } - src/schemas/linkedin.schema.ts:36-41 (schema)Zod schema defining input validation for search_jobs tool: optional companies (string[]), jobType (string[]), keywords (string), and location (string).
searchJobs: { companies: z.array(z.string()).optional().describe('Filter by companies'), jobType: z.array(z.string()).optional().describe('Filter by job type (e.g., Full-Time, Contract)'), keywords: z.string().optional().describe('Keywords to search for in job postings'), location: z.string().optional().describe('Filter by location') }, - src/types/linkedin.d.ts:17-22 (schema)TypeScript interface for the input parameters of searchJobs: keywords?, location?, companies?, jobType?.
export interface SearchJobsParams { keywords?: string location?: string companies?: string[] jobType?: string[] } - src/types/linkedin.d.ts:97-112 (schema)TypeScript interface for the result shape of searchJobs: array of jobs with id, title, companyName, location, description, listedAt, expireAt, and paging metadata.
export interface SearchJobsResult { jobs: { id: string title: string companyName: string location: string description?: string listedAt: number expireAt?: number }[] paging: { count: number start: number total: number } }