Skip to main content
Glama

LinkMCP: hosted LinkedIn MCP server

Search LinkedIn Jobs

linkedin_search_jobs
Read-onlyIdempotent

Search open LinkedIn job postings by keywords and/or a region. Optional filters: work type (remote, hybrid, on-site), job type, experience level, date posted, Easy Apply only, and under 10 applicants. To find remote jobs, use work_type ["remote"], not the word "remote" in the keywords. Returns each posting with its title, company (and company page), location, work type, posted date, and a link to the job. A location value (e.g., "Slovenia", "Berlin") is resolved to a LinkedIn region automatically. Useful for sourcing open roles or tracking hiring activity in a market. Pass the returned cursor to get more results of the same search, with the same filters. Pacing: LinkedIn allows about 3 searches per minute from one account (people, Sales Navigator and job searches share this). Send searches one at a time. Searches sent in parallel wait in line, up to about 3 minutes.

Input Schema

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response. Pass this to fetch the next page of results.
sort_byNoThe order of the results: "relevance" (default) or "date" (newest first).
job_typeNoOnly jobs with these job types: "full_time", "part_time", "contract", "temporary", "internship", "volunteer", "other". Example: ["full_time", "contract"].
keywordsNoJob search keywords (e.g., "software engineer", "sales manager").
locationNoRegion or location to search in (e.g., "Slovenia", "London"). Resolved to a LinkedIn region automatically.
work_typeNoOnly jobs with these work types: "remote", "hybrid", "on_site". Example: ["remote"].
easy_applyNotrue = only jobs that you can apply to on LinkedIn (Easy Apply).
date_postedNoOnly jobs posted in this period: "past_day" (the last 24 hours), "past_week" or "past_month".
experience_levelNoOnly jobs for these experience levels: "internship", "entry_level", "associate", "mid_senior", "director", "executive".
under_10_applicantsNotrue = only jobs with fewer than 10 applicants.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • addedInput schema / properties / date_posted
      Added value: +{
      +  "description": "Only jobs posted in this period: \"past_day\" (the last 24 hours), \"past_week\" or \"past_month\".",
      +  "enum": [
      +    "past_day",
      +    "past_week",
      +    "past_month"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / easy_apply
      Added value: +{
      +  "description": "true = only jobs that you can apply to on LinkedIn (Easy Apply).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / experience_level
      Added value: +{
      +  "description": "Only jobs for these experience levels: \"internship\", \"entry_level\", \"associate\", \"mid_senior\", \"director\", \"executive\".",
      +  "items": {
      +    "enum": [
      +      "internship",
      +      "entry_level",
      +      "associate",
      +      "mid_senior",
      +      "director",
      +      "executive"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / job_type
      Added value: +{
      +  "description": "Only jobs with these job types: \"full_time\", \"part_time\", \"contract\", \"temporary\", \"internship\", \"volunteer\", \"other\". Example: [\"full_time\", \"contract\"].",
      +  "items": {
      +    "enum": [
      +      "full_time",
      +      "part_time",
      +      "contract",
      +      "temporary",
      +      "internship",
      +      "volunteer",
      +      "other"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / sort_by
      Added value: +{
      +  "description": "The order of the results: \"relevance\" (default) or \"date\" (newest first).",
      +  "enum": [
      +    "relevance",
      +    "date"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / under_10_applicants
      Added value: +{
      +  "description": "true = only jobs with fewer than 10 applicants.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / work_type
      Added value: +{
      +  "description": "Only jobs with these work types: \"remote\", \"hybrid\", \"on_site\". Example: [\"remote\"].",
      +  "items": {
      +    "enum": [
      +      "remote",
      +      "hybrid",
      +      "on_site"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, and the description adds genuinely new operational context: roughly 3 searches per minute per account shared across people, Sales Navigator and job searches; send searches one at a time; parallel searches queue for up to about 3 minutes. That is exactly the kind of rate-limit and concurrency behavior an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then filters, then return shape, then pagination and pacing — a sensible order with no filler sentences. It is dense at roughly eight sentences, but for a 10-parameter tool nearly every sentence carries operational weight; only the return-fields sentence is borderline redundant overhead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by listing returned fields (title, company/page, location, work type, posted date, job link). Combined with filter semantics, pagination, and rate limits, an agent has everything needed to call this correctly without opening the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description earns above baseline by adding semantics not in the schema: location values are auto-resolved to a LinkedIn region, work_type should be used instead of keyword text for remote, and the cursor must be paired with the original filters to get 'more results of the same search.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb+resource+scope: 'Search open LinkedIn job postings by keywords and/or a region.' It enumerates the filter dimensions and the returned fields, so an agent can distinguish it immediately from linkedin_get_job (single posting) and linkedin_search_people.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the use case ('sourcing open roles or tracking hiring activity in a market') and gives an explicit routing rule: 'To find remote jobs, use work_type ["remote"], not the word "remote" in the keywords.' It also prescribes how to continue a search (reuse the cursor with the same filters), which is a when/how-to instruction most definitions omit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.