LinkedIn Jobs Feed MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@LinkedIn Jobs Feed MCP ServerFind account executive jobs in Germany this week and list company domains"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
LinkedIn Jobs Feed MCP Server
An MCP server for the Mamba Labs LinkedIn Jobs Feed actor on Apify. Give it job searches and locations. It returns one row per job from LinkedIn's public job search, with the employer's own website domain attached.
What's Inside
Related MCP server: LinkedIn Jobs MCP Server
What it does
Source: LinkedIn's public guest job search and job posting pages only. No login, no cookie, no profile or company page reads.
Employer domain: a company name autocomplete, then a web search, once per employer and cached; returned only when the domain clearly matches the company name (
domain_statusresolved), otherwise empty and labeled.Rows: one
jobrow per job with the posting details, and one freesearchrow per search and location withjobs_foundandjobs_returned.Filters and schedules: posted within, workplace type, experience level, job type, excluded companies, and
only_newwith astate_key.
All of the work runs on Apify. This package is a thin client that starts the actor run, waits for it, and hands back the dataset rows.
Quick start
You need Node.js 18 or newer and an Apify account with an API token.
Add this to your Claude Desktop config (claude_desktop_config.json), Cursor, or any MCP client:
{
"mcpServers": {
"mamba-linkedin-jobs-feed": {
"command": "npx",
"args": [
"-y",
"@mambalabsdev/mcp-linkedin-jobs-feed"
],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}Restart the client. The search_linkedin_jobs tool appears.
Prerequisites
Node.js 18 or newer.
An Apify API token from console.apify.com/account/integrations, set as
APIFY_TOKEN. The server lists its tool without a token; a call needs one.
Example prompts
"Find account executive jobs posted in Germany this week and give me the hiring companies' domains."
"Which companies in London posted a head of sales or SDR manager job in the last 24 hours?"
"Every morning, list new remote RevOps jobs in the United States with the company domain."
Tool
search_linkedin_jobs. One tool. Example arguments:
{
"keywords": [
"account executive"
],
"locations": [
"Germany"
],
"max_jobs_per_search": "5"
}Inputs
Every buyer facing input of the actor, unchanged. Omitted inputs take the actor's own defaults. Numbers and booleans are sent as strings.
Input | Type | Description |
| array | One job search per line, as you would type it in LinkedIn's job search, for example account executive, or sdr manager saas. Up to 50 searches per run (keywords times locations) |
| array | Optional. One location per line, as LinkedIn's job search takes it: a country (Germany), a city (London, England, United Kingdom), or a region (European Union). Each search runs once per location. Empty searches worldwide |
| string | Only jobs posted in this window, as LinkedIn dates them |
| array | Optional. Any of: on_site, remote, hybrid |
| array | Optional. Any of: internship, entry, associate, mid_senior, director, executive |
| array | Optional. Any of: full_time, part_time, contract, temporary, internship, volunteer, other |
| string | Job rows returned per search, newest first. Default 100, up to 1000 (LinkedIn shows guests about 1,000 results per search) |
| array | Optional. Drop jobs whose company name contains one of these, ignoring case, for example staffing agencies you do not want |
| string | true reads each job's public posting page. No extra charge |
| string | true looks up each employer's own website domain by name with a web search, and returns it only when the domain clearly matches the name. No extra charge |
| string | true returns only jobs that an earlier run with the same state key did not return. The first run returns every job in the window |
| string | Names the saved state for only new jobs. Use one key per schedule, for example ae-germany-daily |
| string | true forgets the saved state for this state key |
| string | Optional. The run stops before it would charge more than this |
Pricing
Pay per event on Apify, billed to your Apify account. Prices in USD.
Event | Free plan | Bronze | Silver | Gold |
| $0.0015 | $0.001425 | $0.00135 | $0.001275 |
| $0.001 | $0.001 | $0.001 | $0.001 |
Search rows and the row for a refused input are free. Posting details and the domain lookup carry no extra charge.
Your keys
The actor needs no key and no LinkedIn account. It reads public job pages and a public search results page and holds no key of any kind. Mamba Labs pays the platform and proxy costs of the run.
Full actor documentation
apify.com/mambalabs/linkedin-jobs-feed
License
MIT. See LICENSE.
Available Tools
1 toolsearch_linkedin_jobsSearch LinkedIn jobs with the employer domainARead-only
Search LinkedIn jobs by keywords and location and return one row per job with the employer's own website domain attached. Reads only LinkedIn's public guest job search and job posting pages, with no login. Each job row carries title, company, company page, location, posting date, job link, and by default the description, seniority level, employment type, job function, industries, and applicant count. The employer domain comes from a public company name autocomplete, then a web search, and is returned only when it clearly matches (domain_status resolved). Filters: posted within 24h, week, or month; workplace type; experience level; job type; excluded companies. only_new with a state_key returns only jobs earlier runs did not return. One free search row per search and location gives the counts. A run that does not succeed is returned as an error with its run ID. Read-only; requires an APIFY_TOKEN; Apify charges per job row returned and once per run start; search rows are free.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | No | One job search per line, as you would type it in LinkedIn's job search, for example account executive, or sdr manager saas. Up to 50 searches per run (keywords times locations) | |
| only_new | No | true returns only jobs that an earlier run with the same state key did not return. The first run returns every job in the window | |
| job_types | No | Optional. Any of: full_time, part_time, contract, temporary, internship, volunteer, other | |
| locations | No | Optional. One location per line, as LinkedIn's job search takes it: a country (Germany), a city (London, England, United Kingdom), or a region (European Union). Each search runs once per location. Empty searches worldwide | |
| state_key | No | Names the saved state for only new jobs. Use one key per schedule, for example ae-germany-daily | |
| reset_state | No | true forgets the saved state for this state key | |
| posted_within | No | Only jobs posted in this window, as LinkedIn dates them | |
| max_charge_usd | No | Optional. The run stops before it would charge more than this | |
| include_details | No | true reads each job's public posting page. No extra charge | |
| workplace_types | No | Optional. Any of: on_site, remote, hybrid | |
| exclude_companies | No | Optional. Drop jobs whose company name contains one of these, ignoring case, for example staffing agencies you do not want | |
| experience_levels | No | Optional. Any of: internship, entry, associate, mid_senior, director, executive | |
| find_company_domain | No | true looks up each employer's own website domain by name with a web search, and returns it only when the domain clearly matches the name. No extra charge | |
| max_jobs_per_search | No | Job rows returned per search, newest first. Default 100, up to 1000 (LinkedIn shows guests about 1,000 results per search) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations say read-only and open-world, and the description adds what the annotations cannot: no login required, only public guest pages read, APIFY_TOKEN required, billing per job row plus once per run start, search rows free, a max_charge_usd ceiling, and that domains are only returned on a clear match. Error behavior (run ID on failure) is also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return shape, then filters, then cost — a sensible order for a 14-parameter tool. It is a dense single paragraph with mild redundancy (the employer-domain provenance is explained twice, once for the company autocomplete and again for find_company_domain).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter tool with no output schema, the description compensates by enumerating the returned fields (title, company, company page, location, posting date, job link, plus default details) and covering auth, cost, and error behavior. Nothing an agent needs before calling it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already carries the parameter documentation and a 3 baseline applies. The description reinforces the filter set, the only_new/state_key pairing, and the domain-matching condition, but it adds little syntax or default detail the schema doesn't already state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search LinkedIn jobs by keywords and location") plus the distinguishing output ("one row per job with the employer's own website domain attached"). An agent immediately knows what it gets back that a plain job search wouldn't give.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: filters available, that only_new + state_key yields incremental jobs across scheduled runs, that each search/location pair yields a free count row, and that failures come back as errors with a run ID. It lacks explicit when-not-to-use guidance, but there are no siblings to route against and the cost/free-row hints effectively steer call design.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.0- First observed
search_linkedin_jobs
TDQS
Scored across 1 tool
With only one tool there is no possibility of misselection; its purpose (keyword+location LinkedIn job search with employer domain enrichment) is stated unambiguously. An agent cannot confuse it with anything else in the set.
The single name `search_linkedin_jobs` follows a clean snake_case verb_noun pattern with a clear platform qualifier. There is no competing convention to clash with.
One tool is thin for a server, even though the tool itself is extremely feature-dense (filters, dedup state, enrichment). The scope is narrow enough that a single entry point is defensible, but it sits at the borderline of 'too few tools'.
Search covers a lot of ground, but the surface is a single operation: there is no fetch-by-job-id for detail refresh, no company/employer lookup tool, and no way to page or resume beyond the coarse only_new state. Agents can work around this, but the lifecycle is not fully covered.
Maintenance
Related MCP Connectors
LinkedIn job listings as JSON: salary, recruiter, applicants, company data. No login. From $0.40/1k
LinkedIn companies, hiring signals and public profiles by URL. No login, no cookies. Pay per result.
Search job postings across Indeed, LinkedIn, and more from one request - titles, companies
Indeed job listings by keyword and location, and full postings, as structured JSON.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides tools for automating LinkedIn job post search and management. Job opportunities often appear in LinkedIn posts first, before they're posted on traditional job boards. By monitoring LinkedIn posts, you can discover opportunities earlier and get a competitive advantage in your job search.20 npm7ISC
- AlicenseAqualityCmaintenanceEnables users to search LinkedIn's public job listings with advanced filters like location, salary, and experience level. It allows MCP-compatible clients to retrieve real-time job opportunities without requiring LinkedIn authentication or API keys.12MIT
- FlicenseNot gradedqualityDmaintenanceEnables job search on LinkedIn through MCP tools, including keyword and location search, filtering by remote, easy apply, experience level, job type, and date, and retrieving job details.-
- AlicenseNot gradedqualityAmaintenanceSearches LinkedIn for job posts, filters out non-vacancies and out-of-market roles, and provides a local dashboard to triage and rate the remaining openings.1ISC