Skip to main content
Glama

Server Details

Live job openings from Workday, Greenhouse, Lever, Ashby, Workable and Personio career sites.

Ownership verified
Status
Healthy
Uptime
98.6% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
kiskecske24/hiring-signals-mcp
GitHub Stars
0

TDQS

B3.3/5.0

Scored across 6 tools

Disambiguation2/5

The two scraper tools (ats-jobs-scraper and workday-jobs-scraper) are nearly indistinguishable: both claim to auto-detect Workday, Greenhouse, Lever, Ashby, Workable, Recruitee, and Personio, differing mainly in price and filter fields. An agent cannot reliably pick which one to call for a given company, forcing arbitrary or duplicate selection. The four platform tools (abort/get run, dataset items, key-value record) are distinct from each other.

Naming Consistency3/5

The platform tools follow a clean kebab-case verb-noun pattern (abort-actor-run, get-actor-run, get-dataset-items, get-key-value-store-record), but the two actor tools use a totally different vendor-prefixed convention (kadi_bence--ats-jobs-scraper) with underscores and a double dash. Readable, but two conventions coexist in one set.

Tool Count3/5

Six tools is a small but reasonable set, yet the composition is lopsided: two domain-specific scrapers sit alongside four generic Apify plumbing tools, so the 'hiring signals' surface is thin. It leans toward borderline rather than well-scoped.

Completeness2/5

Core scraping plus reading dataset output is covered, but there are hard dead ends: get-key-value-store-record needs an exact key with no tool to list keys or stores, and there is no way to list actors or discover actor IDs. The hiring-signals workflow also lacks any resume/aggregate or field-selection support beyond dataset filtering.

Available Tools

6 tools
abort-actor-runAbort Actor runA
DestructiveIdempotent
Inspect

Abort an Actor run that is currently starting or running. For runs with status SUCCEEDED, FAILED, ABORTING, ABORTED, or TIMED-OUT, this call has no effect. The results will include the updated run details after the abort request.

USAGE:

  • Use when you need to stop a run that is taking too long or misconfigured.

USAGE EXAMPLES:

  • user_input: Abort run y2h7sK3Wc

  • user_input: Gracefully abort run y2h7sK3Wc

NameRequiredDescriptionDefault
runIdYesThe ID of the Actor run to abort.
gracefullyNoIf true, the Actor run will abort gracefully with a 30-second timeout.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the no-effect-on-terminal-states rule, which is exactly what makes the idempotent hint meaningful, plus the fact that updated run details come back. It omits auth/permission requirements and any rate-limit behavior.

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 the core action and the state constraint, and every prose sentence earns its place. The 'USAGE EXAMPLES' block of raw user_input lines is mostly decorative and pads the definition slightly.

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?

With an output schema present, return values need not be spelled out, and the description still notes that updated run details are returned. For a two-parameter mutation with full annotation coverage, only auth requirements are unaddressed, which is a minor gap.

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 both parameters and the 30-second graceful-abort timeout are already documented in the schema. The description only gestures at 'gracefully' via an example, adding no syntax or semantic meaning beyond the schema. Baseline 3 applies.

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?

Specific verb (Abort) plus resource (Actor run) and a state qualifier ('currently starting or running'), which immediately distinguishes it from siblings like call-actor and get-actor-run. An agent can select it without opening the schema.

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?

Explicit when-to-use ('stop a run that is taking too long or misconfigured') and an explicit no-op condition (terminal statuses such as SUCCEEDED, FAILED, ABORTED, TIMED-OUT). It does not name an alternative tool or describe prerequisites, so it falls short of a 5.

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

get-actor-runGet Actor runA
Read-onlyIdempotent
Inspect

Get detailed information about a specific Actor run.

Returns run result: status, storages (datasets/keyValueStores alias map), stats, summary, nextStep.

  • summary describes the past (e.g. "SUCCEEDED in 22s. 47 items; 3 fields available.").

  • nextStep prescribes one primary follow-up action with identifiers interpolated (e.g. "Use get-dataset-items with datasetId=...").

  • waitSecs (0–45, default 30) waits up to that many seconds for terminal status before returning.

USAGE:

  • Use to check the status of a run started by any Actor-running tool.

  • Pass waitSecs > 0 to block until terminal (or until the cap elapses).

USAGE EXAMPLES:

  • user_input: Show details of run y2h7sK3Wc

  • user_input: Wait for run y2h7sK3Wc to finish

NameRequiredDescriptionDefault
runIdYesThe ID of the Actor run.
waitSecsNoMaximum seconds to wait for the run to reach a terminal state (SUCCEEDED, FAILED, ABORTED, TIMED-OUT). 0 returns immediately with the current status. Cap: 45. Default: 30.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, but the description adds real behavioral context beyond them: the summary vs. nextStep semantics, and that waitSecs blocks for up to 45s (default 30) before returning the current state. This is substantive added value, though it doesn't cover error/failure modes.

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 the core purpose, then segmented into Returns/USAGE/EXAMPLES blocks. Every line carries information, though the two usage examples are somewhat redundant with the USAGE prose, adding minor length.

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 an output schema present and 100% parameter coverage, the description need only orient the agent, which it does fully: purpose, when to use, wait semantics, and concrete invocation examples. Nothing needed to call it correctly is missing.

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, but the description goes further by framing waitSecs as a blocking/wait mechanism with its cap and default, and by describing what runId's run produces. Slight above-baseline value over the schema text.

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?

States a specific verb and resource ('Get detailed information about a specific Actor run') and enumerates the returned result fields (status, storages, stats, summary, nextStep). It does not explicitly distinguish itself from siblings like call-actor or abort-actor-run, so it falls just short of the 5 benchmark.

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 USAGE block names the condition ('check the status of a run started by any Actor-running tool') and explains when to pass waitSecs > 0 to block until terminal. It gives clear context but stops short of explicit exclusions or naming the sibling to use for other run operations.

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

get-dataset-itemsGet dataset itemsA
Read-onlyIdempotent
Inspect

Get items (rows) from a dataset — the output/results produced by an Actor run. Returns the rows themselves, not dataset metadata, counts, or a schema. When the user provides a datasetId and asks to retrieve results, output, data, or rows, call this tool directly. Default limit is 20. Use clean=true to skip empty items and hidden fields.

USAGE:

  • Use when you need to read data from a dataset (all items or only selected fields).

USAGE EXAMPLES:

  • user_input: Retrieve results from dataset abc123

  • user_input: Get only metadata.url and title from dataset username~my-dataset

NameRequiredDescriptionDefault
descNoIf true, results are returned in reverse order (newest to oldest).
omitNoComma-separated list of fields to exclude from results.
cleanNoIf true, returns only non-empty items and skips hidden fields (starting with #). Shortcut for skipHidden=true and skipEmpty=true.
limitNoMaximum number of items to return. Default is 20.
fieldsNoComma-separated list of fields to include in results. Fields in output are sorted as specified. Use dot notation for nested objects (e.g. "metadata.url"); the server auto-flattens parent prefixes.
offsetNoNumber of items to skip at the start. Default is 0.
flattenNoComma-separated list of fields to flatten (e.g. flatten="metadata" turns {"metadata":{"url":"x"}} into {"metadata.url":"x"}). Normally derived automatically from dot-notation in `fields`; specify only as a diagnostic override.
datasetIdYesDataset ID or username~dataset-name.

Output Schema

NameRequiredDescription
itemsYesDataset items
limitYesLimit used for pagination
offsetYesOffset used for pagination
summaryYesSummary of the result
nextStepYesOne follow-up action with tool name
datasetIdYesDataset ID
itemCountYesNumber of items returned
totalItemCountYesTotal items in dataset
apifyConsoleUrlNoPersonalized Apify Console link to the dataset; present only for Console sessions

TDQS

A4.3/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint=true and idempotentHint=true, the description adds valuable behavioral context: returns rows themselves, default limit of 20, and clean=true behavior. It also clarifies the nature of the return value beyond the schema.

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?

Well-structured with clear USAGE and USAGE EXAMPLES sections. Some redundancy ('Get items (rows)...' and 'Returns the rows themselves...') but overall efficient and front-loaded with purpose.

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 the tool has 8 parameters, an output schema, and rich annotations, the description adequately covers key behaviors, usage triggers, and examples. It doesn't explain every parameter but relies on the schema for that, which is appropriate.

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 baseline is 3. The description adds extra meaning by explaining default limit (20) and the clean=true shortcut, which supplements the schema. It also provides examples for fields usage, though most parameter semantics are in the schema.

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?

Description clearly states the tool gets items (rows) from a dataset and explicitly distinguishes it from metadata, counts, or schema. It names the exact resource (dataset items) and the action (get), and provides direct trigger phrases for when to use it.

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?

Provides explicit use cases ('when the user provides a datasetId and asks to retrieve results...'), and clarifies what it is not for (metadata, counts, schema). However, it does not name alternative tools explicitly, only implies them.

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

get-key-value-store-recordGet key-value store recordA
Read-onlyIdempotent
Inspect

Get the value stored under a specific key in a key-value store — a single record, not a listing of all keys. Requires the exact key name. The response preserves the original Content-Encoding; most clients handle decompression automatically.

USAGE:

  • Use when you need to retrieve a specific record (JSON, text, or binary) from a store.

USAGE EXAMPLES:

  • user_input: Get record INPUT from store abc123

  • user_input: Get record data.json from store username~my-store

NameRequiredDescriptionDefault
recordKeyYesKey of the record to retrieve.
keyValueStoreIdYesKey-value store ID or username~store-name.

Output Schema

NameRequiredDescription
keyYesRecord key
valueYesThe stored value (JSON, text, or binary)
summaryYesSummary of the result
contentTypeNoMIME type of the stored value
keyValueStoreIdYesKey-value store ID

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior. The description adds genuine context beyond that: the exact key name is required, and the response preserves the original Content-Encoding with most clients decompressing automatically. That encoding note is real operational value an agent would otherwise not know.

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 the core action and scope, then a short behavioral note, then usage. The USAGE line slightly overlaps the first sentence, but the examples earn their space by showing realistic inputs. 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 an output schema present there is no need to describe return values, and the annotations carry the safety profile. For a two-parameter read tool, the description supplies everything else an agent needs: exactness of the key, allowed value types, and the encoding caveat.

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 description coverage is 100%, so the baseline is 3. The description still adds a semantic constraint the schema omits — that the key must be an exact match — and the examples show the 'username~my-store' form of the store ID, gently reinforcing the ID format.

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?

Specific verb (get) + resource (value under a key in a key-value store) with an explicit scope boundary: 'a single record, not a listing of all keys.' None of the sibling tools overlap with this resource, and the anti-scope clause removes any ambiguity about whether it enumerates keys.

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 USAGE line gives a clear triggering condition — retrieving a specific record (JSON, text, or binary) — and two concrete examples anchor it. It lacks explicit when-not-to-use guidance or named alternatives, but no similar sibling exists to route against.

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

kadi_bence--ats-jobs-scraperkadi_bence/ats-jobs-scraperB
Destructive
Inspect

This tool calls the Actor "kadi_bence/ats-jobs-scraper" and retrieves its output results. Actor description: Get open jobs of any company by name: Stripe, Ramp (Greenhouse, Lever, Ashby, Workable, Recruitee, Personio) and NVIDIA, Salesforce (Workday) in one run, board auto-detected. Filters: title, location, remote. Returns per job: title, team, location, salary, date, URL. Default: 20/company. $1.25/1K.

NameRequiredDescriptionDefault
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
companiesNoOne per line, e.g. Stripe, ramp.com, Hugging Face, or a board URL like https://jobs.lever.co/spotify. The Actor detects which applicant tracking system (ATS) each company uses; the RUN_SUMMARY record shows the board it found. If a company is not found, open its careers page, click a job and paste the board URL (e.g. https://job-boards.greenhouse.io/stripe). Example values: ["Stripe","Ramp","Hugging Face"]
locationsNoKeep jobs whose location text contains ANY of these as a whole word, e.g. London, Germany, US, Remote ('US' matches 'Remote - US' but not 'Austin'). A job with several locations is kept if any of them matches. Not case-sensitive. Leave empty for all.
remoteOnlyNoKeep only jobs whose work mode is remote (from the ATS's workplace field, or 'remote' in the location or title).
monitorNameNoSeparate 'already seen' lists for different schedules, e.g. 'engineers' and 'sales'. Use a new name to start over with a fresh baseline. Example values: "default"default
onlyNewJobsNoRemember returned jobs and output only NEW ones on later runs. Ideal for a daily schedule (hiring signals, job alerts). The first run stores a baseline and returns everything. You only pay for new jobs. Jobs cut off by 'Max jobs per company' are not remembered, so they come in a later run.
atsPlatformsNoWhich applicant systems to try when detecting a company's job board. Leave all selected unless you know the platform (fewer = faster). Workday is tried only when none of the others has the company (large employers like NVIDIA, Salesforce, Intel). Board URLs are always read directly. Example values: ["greenhouse","lever","ashby","workable","recruitee","personio","workday"]
titleExcludesNoDrop jobs whose title contains ANY of these words, e.g. intern, senior, manager. Not case-sensitive ('intern' also drops 'International'; use 'internship' to be precise). Filtered-out jobs are not charged.
titleIncludesNoKeep only jobs whose title contains ANY of these words, e.g. engineer, data scientist. Not case-sensitive. Leave empty for all titles. Filtered-out jobs are not saved and not charged.
titleKeywordsNoSame as 'Job title must contain' above, as one comma-separated text, e.g. 'engineer, data'. Kept for existing tasks; both lists are combined.
postedWithinDaysNoOnly jobs posted in the last N days, e.g. 7. Use 1 for jobs posted in about the last day. Leave empty for any date.
stripContactInfoNoRemoves e-mail addresses and phone numbers from descriptions. Recommended, so you don't store personal data (GDPR). Example values: true
descriptionFormatNoHow to output the job description. Example values: "text"text
maxJobsPerCompanyNoStop after this many jobs per company. 0 = no limit (all open jobs). The default without input (API, MCP and AI-agent calls) is 20. Example values: 20
proxyConfigurationNoNot needed for these public APIs. Enable only if you see blocking errors. Example values: {"useApifyProxy":false}

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare openWorldHint=true and destructiveHint=true, so the agent knows this triggers an external, side-effecting run. The description adds genuinely useful non-schema context: pricing at $1.25/1K jobs and a default cap of 20 per company. It stops short of saying what gets written where (dataset vs. key-value store) or that repeated runs incur repeated charges.

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?

Roughly three sentences, front-loaded with the action and followed by a dense capability/cost summary; nothing is gratuitous. The opening 'This tool calls the Actor ... and retrieves its output results' is boilerplate wrapper text that could be dropped without loss, keeping it short of a 5.

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

Completeness3/5

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

For a 15-parameter, zero-required wrapper with a full schema and an output schema, the description covers purpose, scope, defaults and cost adequately. It omits the one thing an agent most needs to choose between this and kadi_bence--workday-jobs-scraper, and says nothing about how to handle partial/failed company detection beyond the RUN_SUMMARY record mentioned in the schema.

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 every one of the 15 parameters is already documented in the schema, including waitSecs polling semantics and the ATS platform enum. The description only restates the filter dimensions (title, location, remote) and the returned fields, adding no syntax or format detail beyond the schema, so the baseline 3 applies.

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?

States a concrete verb and resource: calls the kadi_bence/ats-jobs-scraper Actor, which gets open jobs of any company by name across Greenhouse, Lever, Ashby, Workable, Recruitee, Personio and Workday, with board auto-detection and title/location/remote filters. That is specific enough for an agent to know what it does. It never acknowledges the sibling kadi_bence--workday-jobs-scraper, so the boundary between the two (this one covers Workday 'only when none of the others has the company') is left for the agent to infer.

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?

The text describes capability ('Get open jobs of any company by name') but gives no when-to-use, when-not-to-use, or alternative-tool routing, even though a directly overlapping sibling (kadi_bence--workday-jobs-scraper) exists. The $1.25/1K and 20/company default hint at cost-sensitive use but are not framed as guidance.

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

kadi_bence--workday-jobs-scraperkadi_bence/workday-jobs-scraperA
Destructive
Inspect

This tool calls the Actor "kadi_bence/workday-jobs-scraper" and retrieves its output results. Actor description: Get open jobs of any company by name: NVIDIA, Salesforce, Intel (Workday) and Stripe, Ramp (Greenhouse, Lever, Ashby, Workable, Personio) in one run, system auto-detected. Filters: title, country, date. Returns per job: title, team, location, salary, date, URL. Default: 20/company. $0.90/1K.

NameRequiredDescriptionDefault
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
companiesNoEasiest option: type company names or domains, one per line, e.g. NVIDIA, Salesforce, intel.com. The Actor finds their Workday career site(s) automatically; the RUN_SUMMARY record lists the boards it found. A domain is more precise than a common word (target.com instead of Target). Companies not on Workday (e.g. Stripe) are looked up on Greenhouse, Lever, Ashby, Workable, Recruitee and Personio automatically. If a company is still not found, paste its career site URL below. Example values: ["NVIDIA"]
countriesNoKeep only jobs in these countries: names or ISO codes, e.g. US, Germany, GB. Jobs with several locations are kept if ANY location matches. Uses the career site's own country filter when it has one (faster). Other words (e.g. California) are matched as location text. Filtered-out jobs are not charged.
startUrlsNoOr paste Workday career site URLs, e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite. A URL with filters applied on the career site (location, category, search) keeps those filters. Single job URLs work too (the whole board is scraped).
careerSitesNoLarge companies often run several Workday boards (main, students, subsidiaries). 'All' scrapes every public board; 'Main only' picks the primary external board. Example values: "all"all
monitorNameNoUse different names to keep separate 'already seen' lists for different schedules with the same URLs. Example values: "default"default
onlyNewJobsNoRemember which jobs were already returned and output only NEW postings on the next runs. Ideal for scheduled runs (daily alerts). The first run outputs everything and stores a baseline. You only pay for new jobs.
titleExcludesNoDrop jobs whose title contains ANY of these words, e.g. intern, senior, manager. Not case-sensitive ('intern' also drops 'International'; use 'internship' to be precise). Filtered-out jobs are not charged.
titleIncludesNoKeep only jobs whose title contains ANY of these words, e.g. engineer, data scientist. Not case-sensitive. Leave empty for all titles. Filtered-out jobs are not saved and not charged.
includeDetailsNoFetch each job's detail page: description, exact posted date, all locations, country, salary. Turn off for a faster, cheaper title/location-only list. Example values: true
maxConcurrencyNoParallel requests to the career site. Keep it low to be polite; 4 is fast enough for most boards. Example values: 4
maxJobsPerSiteNoStop after this many jobs per career site. 0 = no limit (all jobs, even boards with 10,000+ postings). The Console prefill is 50 for a quick test run. The default without input (API, MCP and AI-agent calls) is 20. Example values: 50
searchKeywordsNoOptional full-text search, exactly like the search box on the career site (e.g. "data engineer"). Leave empty for all jobs.
postedWithinDaysNoOnly return jobs posted in the last N days (e.g. 7). Leave empty for any date.
stripContactInfoNoRecommended (GDPR). Some postings include a recruiter's personal contact details; this removes them. Example values: true
descriptionFormatNoHow to output the job description. Example values: "text"text
proxyConfigurationNoUsually not needed: Workday career sites are public. Enable Apify Proxy only if you see many 403/429 errors. Example values: {"useApifyProxy":false}
otherSystemsFallbackNoWhen a company name has no Workday career site, look for its Greenhouse, Lever, Ashby, Workable, Recruitee or Personio job board instead (e.g. Stripe, Ramp, Hugging Face), so one run covers big employers and startups. Same output fields; the 'ats' field shows the source. Example values: true

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the agent knows this triggers an open-world, potentially costly operation. The description adds genuinely useful non-annotation context: the cost model ('$0.90/1K'), the default volume (20/company), and that the tool invokes an Actor and retrieves its results. It does not, however, explain run lifecycle, the waitSecs/nextStep polling contract, or what 'destructive' actually means here, so it remains partial.

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?

Two sentences, front-loaded with the mechanism ('calls the Actor ... retrieves its output results') followed by the dense capability summary. The wrapper boilerplate is slightly redundant, but the size is proportionate to an 18-parameter tool and every clause carries 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?

An output schema exists, so return-value explanation is optional, yet the description still lists the key per-job fields. With all 18 parameters fully documented in the schema and the actor's scope, ATS coverage, defaults and pricing stated, an agent has enough to call this 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?

Schema description coverage is 100% across all 18 parameters, so the schema already documents every field in depth. The description only gestures at a subset (title/country/date filters), adding no syntax, format, or interaction detail beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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 and resource: retrieve open jobs for named companies across Workday and other ATS platforms, with concrete filters (title, country, date) and return fields. It is unambiguous about what the tool does, but it never distinguishes itself from the very similar sibling kadi_bence--ats-jobs-scraper, leaving the agent to guess which job scraper to pick.

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 use case is clearly implied ('get open jobs of any company by name'), and the auto-detection behavior plus fallback to Greenhouse/Lever/etc. is noted. However, there is no explicit when-to-use/when-not guidance and no mention of the closely related ats-jobs-scraper sibling, so routing between the two job tools is left to inference.

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. 1 tool update
    • Changedkadi_bence--ats-jobs-scraper2 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / companyName / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / updatedDate / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  2. 1 tool update
    • Changedkadi_bence--ats-jobs-scraper2 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / companyName / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / updatedDate / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  3. 1 tool update
    • Changedkadi_bence--ats-jobs-scraper2 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / companyName / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / updatedDate / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  4. 1 tool update
    • Changedkadi_bence--ats-jobs-scraper2 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / companyName / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / updatedDate / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]

Publisher details

Operator
Bence Kadi
Vendor relationship
Independent
Trust center
Not applicable
Restrictions
Requires an Apify account (free plan works). Runs on Apify's hosted MCP server; usage is billed per saved job on the user's own Apify account. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Live open jobs from companies' own Greenhouse, Lever and Ashby boards via their official public APIs, with publish-verified dates, age, long-open and repost signals, filters and change tracking.
    5
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to locate companies' public job boards across Greenhouse, Lever, Ashby and Workable, browse and filter live openings by keyword, location, department and remote status, and read full job descriptions with pay ranges and apply links. Requires no accounts, API keys or authentication, and is read-only.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Gives AI agents a daily-refreshed index of 350k+ open jobs scraped from 12,000+ company career sites on Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee and Personio. Enables keyword, country, remote, seniority and recency job searches, discovery of roles opened since yesterday, and weekly company hiring-signal rankings, with per-call cost caps.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables real-time job search across thousands of companies' open roles from Greenhouse, Lever, Ashby, and SmartRecruiters, with full-text filtering and company-specific queries, no API key required.
    2
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.