Skip to main content
Glama
dubaikseniia-wq

entra-mcp

ENTRA MCP — the first agent-ready job platform

Let your AI find your job. This MCP server connects Claude, Cursor, Windsurf or any MCP client to ENTRA — thousands of verified AI & tech jobs aggregated straight from company hiring systems (OpenAI, Anthropic, SpaceX, Stripe + 300 more). Zero ghost jobs.

Agents search, match, rank and prepare. Humans decide and apply — no spam, no auto-submission.

Install

Claude Code

claude mcp add entra -- npx -y entra-mcp

Claude Desktop (claude_desktop_config.json), Cursor (.cursor/mcp.json), Windsurf (~/.codeium/windsurf/mcp_config.json)

{
  "mcpServers": {
    "entra": { "command": "npx", "args": ["-y", "entra-mcp"] }
  }
}

From source:

npm install && npm run build
claude mcp add entra -- node "/path/to/entra-mcp/dist/index.js"

Requires Node 18+. No API key needed — everything is read-only against the public ENTRA API.

Then just ask: "Find me remote ML engineer roles paying $200K+, tell me which companies are hiring most, and prepare an application for the best fit."

Related MCP server: remoote-mcp

Tools

Tool

What it does

Example call

search_jobs

Search live verified jobs. Filters: work_location (remote/onsite/hybrid), country (ISO-2), company (slug or name), salary_min (annual), experience, posted_within_days. rank_by: date (default) · salary · fit (with profile_keywords). Returns total_found + jobs with id/title/company/location/salary/published_at/url.

{"query":"machine learning engineer","remote":true,"country":"US","salary_min":200000,"rank_by":"salary","posted_within_days":14,"limit":10}

get_job

Full role details: description, requirements, skills, salary band, apply link

{"job_id":"<id from search_jobs>"}

list_companies

Who's hiring on ENTRA, with open-role counts and profile links

{"query":"anthropic"}

match_jobs

AI matching, live. Pass resume_text (≤8000 chars) or skills[], optional target_role, remote_only, country, min_salary, limit (≤20). Extracts skills/role/seniority deterministically, runs 2–4 searches, dedupes, and returns a ranked list with fit_score (0–100), why[], matched_skills, skill_gaps, salary, interview_chance_hint (high/medium/low).

{"resume_text":"Senior ML engineer, 7 years, PyTorch, RAG, AWS…","remote_only":true,"limit":10}

match_profile

Backward-compatible alias of match_jobs (skills[], role_hint)

{"skills":["python","llm","rag"],"role_hint":"ML engineer"}

salary_stats

Salary stats for a role from listings that publish a band: count_with_salary, min / p25 / median / p75 / max per currency (annualized; USD as USD-equivalent, other currencies as-is), top 5 companies

{"query":"software engineer","country":"US"}

companies_hiring

Which companies are hiring for a role right now: open-role counts, sample titles, latest post date, verified flag, profile URLs

{"query":"AI engineer","remote_only":true,"limit":15}

prepare_application

Human-in-the-loop apply link + checklist

{"job_id":"<id>"}

Every job in every response carries verified: true, a salary band when the company lists one, and an apply URL of the form https://entracareers.com/{country}/vacancies/{id}?utm_source=agent&utm_medium=mcp — we welcome agent traffic.

Sample: match_jobs

{
  "source": "ENTRA — verified roles aggregated from company ATSs. Finds and ranks; you apply.",
  "profile": { "skills_used": ["machine learning", "python", "rag", "llm", "pytorch", "aws"], "target_role": "machine learning engineer", "seniority": "6+ yrs (7+ years mentioned)" },
  "queries_run": ["machine learning engineer", "python", "rag", "llm"],
  "candidates_considered": 142,
  "matches": [
    {
      "title": "Machine Learning Engineer, Inference",
      "company": "OpenAI",
      "location": "San Francisco, United States",
      "work_location": "remote",
      "salary": "$295K–555K/yr",
      "url": "https://entracareers.com/us/vacancies/…?utm_source=agent&utm_medium=mcp",
      "fit_score": 88,
      "interview_chance_hint": "high",
      "why": [
        "Skills: 5/6 matched (machine learning, python, llm, pytorch, aws)",
        "Title match: \"Machine Learning Engineer, Inference\" fits \"machine learning engineer\"",
        "Seniority: job asks 6+ yrs, you read as 6+ yrs — match",
        "Remote role (as requested)",
        "Salary band listed: $295K–555K/yr"
      ],
      "skill_gaps": ["rag"]
    }
  ]
}

Honesty note

  • Matching is deterministic — a keyword dictionary plus rules, no LLM in the loop. fit_score is explainable, not a prediction; interview_chance_hint is derived from fit_score only (never a made-up percentage).

  • salary_stats uses listed bands only — roles without a published band are excluded, and nothing is estimated.

  • search_jobs rank_by: "salary" returns salaried listings only; posted_within_days is applied client-side over the most recent 500 matches.

  • Nothing is submitted on your behalf. prepare_application returns a link and a checklist; the human applies.

Why ENTRA is agent-ready (and others aren't)

  • LinkedIn bans agents. Indeed's MCP is search-only. Tools that scrape break on CAPTCHAs.

  • ENTRA owns the inventory — verified jobs from company ATSs — so agents get clean, legal, structured access with consented apply links.

  • Every listing: verified: true + salary bands + utm_source=agent (we welcome agent traffic).

AI matching is live via match_jobs — connect your profile at entracareers.com.

Roadmap

  • Coming: employer tools (API keys)post_job and applicant search once ENTRA issues API tokens (job posting currently requires a browser session). Employers: entracareers.com/employer/pricing — Founding plan from $10.

  • Hosted (remote) MCP endpoint.

Development

npm run build      # tsc → dist/
npm run selftest   # calls the live API directly, no MCP client
npm run smoke      # spawns the server over stdio with the MCP SDK client and exercises every tool

Environment: ENTRA_API_URL (default https://entracareers.com/api), ENTRA_SITE_URL (default https://entracareers.com).

MIT © ENTRA

Available Tools

8 tools
companies_hiringCompanies hiring for a roleA
Read-onlyIdempotent

Which companies are hiring for a role right now: aggregates ENTRA search results (up to 300 most recent roles) into companies with open-role counts, sample titles, latest post date, verified flag and profile URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax companies (default 15, max 25)
queryYesRole query, e.g. "AI engineer"
countryNoISO-2 country code or country name
remote_onlyNoOnly remote roles

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral detail beyond those hints: the data source (ENTRA), the recency/volume cap (up to 300 most recent roles), and the exact output fields returned (counts, sample titles, latest post date, verified flag, profile URLs). No contradictions with annotations.

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

Conciseness5/5

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

The description is a single efficient sentence that front-loads the core question and then packs the essential aggregation details and output fields into a compact clause. Every phrase adds value and there is no filler or repetition.

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

Completeness4/5

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

Given there is no output schema, the description does a good job of listing the return fields and the aggregation scope. Combined with the fully documented input schema and safety annotations, an agent has enough to select and invoke the tool correctly. It could be more explicit about edge cases such as empty results or how the verified flag behaves, but these are minor gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters clearly. The description adds no parameter-specific meaning beyond what the schema provides; it reinforces that the query is a role query, but that information is already present in the schema. Baseline 3 is appropriate.

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 names a specific verb ('aggregates'), a clear resource (ENTRA search results), and the resulting company-level view with concrete output fields. It is distinguishable from sibling tools like search_jobs and list_companies because it describes an aggregation into companies rather than raw job listings or a general company directory.

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

Usage Guidelines4/5

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

The description gives clear context: it is for answering 'which companies are hiring for a role right now' and explains that it aggregates up to 300 recent search results into companies. It does not explicitly name sibling alternatives or state when not to use them, but the aggregation framing makes the appropriate use case evident.

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

get_jobGet job detailsA
Read-onlyIdempotent

Full details of one ENTRA job by id: description, requirements, skills, salary band, company, apply link.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob id from search_jobs / match_jobs

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description's fetch semantics ('Full details of one...') fully align — no contradiction. The description adds value beyond annotations by specifying the returned content fields, giving the agent a concrete picture of what a successful call yields.

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

Conciseness5/5

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

A single front-loaded sentence establishes the purpose ('Full details of one ENTRA job by id') and a colon-delimited field list packs the output expectations into compact form. Zero filler words; every element earns its place.

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?

For a single-parameter read tool, the definition is complete: the schema fully documents job_id, annotations cover safety/idempotency, and the description's field list effectively substitutes for an output schema by telling the agent what to expect. No critical invocation detail is missing.

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

Parameters3/5

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

Schema description coverage is 100% — job_id is already documented as 'Job id from search_jobs / match_jobs', so the baseline of 3 applies. The description adds only marginal context ('ENTRA' qualifier and 'by id'), which confirms the parameter's role without adding format or constraint details.

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 states a specific verb+resource scope — 'Full details of one ENTRA job by id' — and enumerates the exact fields returned (description, requirements, skills, salary band, company, apply link). The 'one...by id' phrasing clearly separates it from list/search siblings like search_jobs, match_jobs, and salary_stats.

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

Usage Guidelines3/5

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

Usage is implied: the description signals this tool is for retrieving a single job's full details once an id is known. However, it never explicitly states when to use it versus siblings, nor does it name alternatives or exclusions. The schema's parameter hint ('Job id from search_jobs / match_jobs') supplies the provenance, but the description itself offers no routing guidance.

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

list_companiesList companies on ENTRAA
Read-onlyIdempotent

List companies hiring on ENTRA (OpenAI, Anthropic, SpaceX, Stripe and 300+ more) with open-role counts and profile links.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 20)
queryNoFilter by company name

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral context by specifying what the result contains (open-role counts and profile links) and the breadth of coverage ('300+ more'), which is valuable since there is no output schema.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that names the action, the resource, and key output details without redundant phrasing. The parenthetical examples are brief and reinforce the open-world scope rather than wasting space.

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

Completeness4/5

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

For a simple read-only list tool with two optional parameters and no output schema, the description covers the essential return information and scope. It is slightly incomplete only in not disambiguating from the 'companies_hiring' sibling, but the schema and annotations handle the rest adequately.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents 'limit' and 'query' adequately. The description adds no parameter-specific meaning beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a specific verb ('List'), a resource ('companies hiring on ENTRA'), and the returned data ('open-role counts and profile links'). It is clear on its own, but it does not distinguish itself from the similarly named sibling 'companies_hiring', so it misses full differentiation.

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

Usage Guidelines2/5

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

No explicit guidance is given about when to use this tool versus alternatives like 'search_jobs' or 'companies_hiring'. The intended use for company-level overviews is implied by the description, but exclusions and alternative routing are absent.

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

match_jobsMatch a candidate to jobsA
Read-onlyIdempotent

AI matching, live: pass resume_text (free text) or skills[] plus optional target_role / remote_only / country / min_salary. Extracts skills, role and seniority deterministically, runs 2–4 searches, dedupes and ranks with an explainable fit_score (0–100), why[], matched_skills, skill_gaps, salary and a qualitative interview_chance_hint. ENTRA finds and ranks; the human applies.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax matches (default 10, max 20)
skillsNoKey skills if you have no resume text, e.g. ["python","llm","rag"]
countryNoISO-2 country code or country name
min_salaryNoMinimum ANNUAL salary in USD
remote_onlyNoOnly remote roles
resume_textNoFree-text resume / profile (≤8000 chars). Skills, role and seniority are extracted deterministically.
target_roleNoTarget role, e.g. "machine learning engineer" (overrides the role detected in resume_text)

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already mark it read-only/idempotent, and the description adds substantial behavior: deterministic extraction, 2–4 searches, dedup, explainable fit_score, why[], matched_skills, skill_gaps, salary, interview_chance_hint, and the note that the human applies. This goes well beyond the structured annotations.

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

Conciseness5/5

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

Three high-signal sentences: inputs are front-loaded, behavior and output are compactly specified, and the final sentence conveys the no-application side effect. No filler.

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?

With no output schema, the description explains the main return concepts (fit_score, why[], matched_skills, skill_gaps, salary, interview_chance_hint) and the matching pipeline, so an agent knows what to expect and what it can do with the result.

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

Parameters3/5

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

Schema coverage is 100% with detailed parameter descriptions, so the baseline is 3. The description reiterates which parameters are optional but does not add materially new semantics beyond the schema.

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

Purpose4/5

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

The description clearly states the verb ('match'), resource ('jobs'), and input modes (resume_text or skills[]), and lists the ranking output (fit_score 0–100). It does not explicitly contrast itself with match_profile or search_jobs, so it misses the sibling-differentiation bar for a 5.

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

Usage Guidelines4/5

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

The opening sentence gives concrete usage context: provide resume_text or skills[], plus optional filters, and it will run searches and rank matches. It does not name alternatives or state when not to use it, but the usage context is clear enough for 4.

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

match_profileMatch profile (alias of match_jobs)A
Read-onlyIdempotent

Backward-compatible alias of match_jobs: skills[] (+ role_hint, remote_only, limit) → ranked verified roles with fit explanation.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
skillsYesKey skills / technologies, e.g. ["python","llm","rag"]
role_hintNoTarget role, e.g. "ML engineer"
remote_onlyNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so safety and side effects are covered. The description adds behavioral value by disclosing the output nature: ranked verified roles with fit explanation, and it reassures that behavior is backward-compatible with match_jobs. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single dense sentence that front-loads the alias identity and then compactly maps inputs to outputs. Every element contributes: alias, parameter list, optionality, and return type. There is no filler or redundancy.

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

Completeness4/5

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

There is no output schema, but the description provides the essential return information: ranked verified roles with a fit explanation. Combined with the annotation safety profile and the explicit parameter list, the definition is sufficiently complete for a thin alias wrapper. Minor missing details such as exact response shape are not critical given the alias relationship.

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

Parameters3/5

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

The description enumerates all four parameters and uses parentheses to indicate optionality, which aligns with the schema's required skills. However, it does not add meaningful detail for remote_only or limit beyond their names, and schema description coverage is only 50%, so the description only partially compensates for parameters without descriptions.

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 clearly identifies the tool as a backward-compatible alias of match_jobs and specifies the exact transformation: skills[] plus optional modifiers to ranked verified roles with fit explanation. This gives an agent a specific verb, resource, and outcome, and immediately connects it to the sibling match_jobs.

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

Usage Guidelines4/5

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

By stating that this is an alias of match_jobs, the description gives clear context that the same use conditions apply; the agent can infer that this is the legacy-compatible variant of the match_jobs sibling. It does not provide explicit exclusions or a strong 'prefer X over Y' rule, but the alias relationship is usable guidance.

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

prepare_applicationPrepare a human-in-the-loop applicationA
Read-onlyIdempotent

Prepare an application for an ENTRA job: returns the direct apply link and a short checklist. The human reviews and applies — no auto-submission.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob id from search_jobs / match_jobs

TDQS

A4.3/5.0
Behavior4/5

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

Despite the 'prepare' wording, the description explicitly clarifies that no application is submitted and that a human performs the final step. This adds practical behavioral context beyond the readOnlyHint and idempotentHint annotations.

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

Conciseness5/5

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

The description is one tight, front-loaded sentence. It states the action, the target, the return value, and the key behavioral constraint without any filler.

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?

With one well-documented parameter, non-mutating annotations, and a description that explains both the output and the no-auto-submission behavior, an agent has everything needed to invoke this tool correctly. No output schema exists, but the description covers the expected result.

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

Parameters3/5

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

The single parameter job_id is fully documented in the schema with a clear source ('from search_jobs / match_jobs'). The description does not add extra parameter-level details, but the schema already carries the necessary meaning.

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?

States a specific verb and resource: 'prepare an application for an ENTRA job' with a concrete outcome ('returns the direct apply link and a short checklist'). This clearly differentiates it from sibling search/match tools and communicates its distinct role.

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

Usage Guidelines4/5

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

The description makes the intended workflow explicit: the tool prepares materials for a human to review and apply, with no auto-submission. It does not name specific sibling alternatives, but the context is clear enough for an agent to know when this tool is appropriate.

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

salary_statsSalary stats for a roleA
Read-onlyIdempotent

Salary statistics for a role query from ENTRA listings that publish a band (up to 150 most recent): count_with_salary, min / p25 / median / p75 / max per currency (annualized; USD reported as USD-equivalent, other currencies as-is), top 5 companies by count. Listed bands only — no estimates.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesRole query, e.g. "machine learning engineer"
countryNoISO-2 country code or country name
experienceNoExperience level
remote_onlyNoOnly remote roles

TDQS

A4.5/5.0
Behavior5/5

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

With annotations already marking the tool as read-only, open-world, and idempotent, the description adds substantial behavioral detail: the 150-most-recent cap, per-currency breakdown, annualization, USD-equivalent conversion, and the exclusion of estimates. This goes well beyond the annotation hints.

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

Conciseness5/5

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

The description is a single dense paragraph that front-loads the purpose and packs the output shape and limitations into compact clauses. There is no filler, and every phrase adds meaningful information.

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, but the description enumerates the returned statistics, currency handling, company ranking, and source limitations. Combined with the full parameter schema and annotations, an agent has sufficient detail to invoke the tool correctly.

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

Parameters3/5

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

The input schema already documents all four parameters with 100% coverage, so the description does not need to repeat them. It lightly reinforces that the query is a role query but adds no new parameter-level semantics. Baseline 3 is appropriate.

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 clearly states what the tool computes: salary statistics (count, min, percentiles, median, max, top companies) for a role query from ENTRA listings. This is unambiguously distinct from sibling tools like search_jobs, list_companies, and match_jobs.

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

Usage Guidelines4/5

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

It gives clear context: use it for role queries against ENTRA listings that publish salary bands, and it explicitly warns that it covers listed bands only, not estimates. It does not explicitly name alternatives or say when not to use it, but the intended use case is well implied.

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

search_jobsSearch ENTRA jobsA
Read-onlyIdempotent

Search thousands of verified AI & tech jobs on ENTRA (aggregated directly from company hiring systems — zero ghost jobs). Filters: work location, country, company, annual salary, experience, posted_within_days. rank_by date | salary | fit (fit needs profile_keywords). Returns total_found and live roles with salary bands and apply links.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 10, max 50)
queryYesFree-text search, e.g. "machine learning engineer"
remoteNoShorthand for work_location="remote"
companyNoCompany slug or name, e.g. "openai" or "Stripe"
countryNoISO-2 country code (US, GB, DE, AE…) or country name
rank_byNodate (default) · salary (listed bands only, high→low) · fit (needs profile_keywords)
experienceNoExperience level
salary_minNoMinimum ANNUAL salary (default currency USD; ENTRA converts other currencies)
work_locationNoFilter by work location
sort_by_salaryNoDeprecated — use rank_by="salary"
salary_currencyNoCurrency for salary_min (default USD)
profile_keywordsNoCandidate skills for rank_by="fit", e.g. ["python","pytorch","llm"]
posted_within_daysNoOnly roles published in the last N days

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish the safety profile (readOnly, idempotent, openWorld). The description adds useful behavior beyond that: data origin (company hiring systems, zero ghost jobs), and what is returned (total_found, live roles with salary bands and apply links). This helps an agent anticipate output shape without an output schema.

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

Conciseness5/5

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

Three dense sentences front-load the core promise, then compactly list filters, sorting behavior, and return info. No wasted words; all sentences carry distinct value for an agent deciding whether and how to call the tool.

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

Completeness4/5

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

For a read-only search tool with 13 well-documented parameters and no output schema, the description covers the main filters, sort options, a parameter dependency, and return summary. It could mention pagination limits or the remote shorthand, but the schema already covers those details, so nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are fully documented in structured form. The description summarizes key filters (work location, country, company, salary, experience, posted_within_days) and clarifies the fit dependency, but adds little semantic detail beyond the schema.

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

Purpose4/5

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

Description opens with a specific verb and resource: 'Search thousands of verified AI & tech jobs on ENTRA'. It clearly states the tool's function and main selling points (verified, aggregated from company systems). However, it does not distinguish itself from siblings like match_jobs, so it misses the top score.

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

Usage Guidelines3/5

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

The description provides practical how-to guidance by listing available filters and explaining rank_by behavior, including the prerequisite that fit needs profile_keywords. It does not, however, state when to choose this tool over siblings such as match_jobs or get_job, so usage context is implied rather than explicit.

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. 8 tool updatesv0.2.0
    • First observedcompanies_hiring
    • First observedget_job
    • First observedlist_companies
    • First observedmatch_jobs
    • First observedmatch_profile
    • First observedprepare_application
    • First observedsalary_stats
    • First observedsearch_jobs

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation3/5

search_jobs vs match_jobs are distinguishable (filtered search vs AI matching), and list_companies vs companies_hiring are distinguishable by scope, but match_profile is explicitly a backward-compatible alias of match_jobs, creating a redundant tool. Overall, descriptions clarify intent, but some overlap remains.

Naming Consistency4/5

Most tools follow a verb_noun pattern such as search_jobs, get_job, list_companies, and prepare_application. However, salary_stats and companies_hiring break the pattern, and get_job is singular while related tools use plural nouns.

Tool Count4/5

Eight tools is a reasonable scope for a job-search and matching server. However, match_profile being an alias of match_jobs means one tool is largely redundant, keeping the count slightly less clean than it could be.

Completeness5/5

The tool set covers the core job-search lifecycle: discovery, detail lookup, AI matching, salary benchmarking, company filtering, and application preparation. No significant gaps are apparent for the server's stated purpose, and the human-in-the-loop application flow is intentional.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to pull live job listings from major ATS platforms (Greenhouse, Lever, Ashby, Workable), Hacker News hiring threads, and detect hiring signals on company career pages.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to search and explore remote job listings, salary stats, and popular roles, and supports token-authenticated actions like job alerts and apply redirects.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI clients to serve as a personal career analyst by searching, matching, and explaining job recommendations, managing job applications, and syncing public job boards through standardized MCP tools.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to search and analyze job listings from verified company boards privately, matching resumes to roles with evidence and suggesting resume improvements.
    1,614 npm
    MIT