Talandor
Public MCP report

Resume Booster Job Board

https://bwhdazbotpblihdxcmho.supabase.co/functions/v1/agent-mcp

Official Registry

Official Registry · work.resumebooster/jobs · Publisher: work.resumebooster

Last observed

Unreachable now
Can I use it?

The endpoint was not reachable for this check

Insufficient evidence is a limit of this public check, not a judgment that the server is unusable. Retry later.

https://bwhdazbotpblihdxcmho.supabase.co/functions/v1/agent-mcp
Tools15
AuthNot listed in this check
ProtocolNot listed in this check
EvidenceTransport only
Latency12002 ms

See the measured evidence

Client fit

Compatibility is inferred from published configuration rules and is not manually verified in each client.

Client setup cannot be inferred yet. This public check did not observe a complete tool contract or an authentication challenge, so there is no honest compatibility signal.

Show compatibility evidence

Rule evidence: Remote HTTPS rule v0.2 · reviewed 2026-09-12 · Remote HTTP rule v0.2 · reviewed 2026-09-12 · Remote app rule v0.2 · reviewed 2026-09-12 · Protocol and transport rule v0.2 · reviewed 2026-09-12

What changed

Endpoint became unreachable since
· The latest public check could not reach the endpoint after a previous working observation. Watch would confirm an outage after two failed checks.
Critical

A Watch would confirm an outage after two failed checks, then alert only if it may affect the selected client.

Evidence and limitations

Method: anonymous Streamable HTTP probe. We never invoke a tool.

Attempted protocols: 2026-07-28, 2025-11-25

ProtocolNot listed in this check
TransportNot confirmed as Streamable HTTP
AuthNo authentication challenge in this check
EvidenceTransport only
Total latency12002 ms
Response bytes0

NETWORK_ERROR — The endpoint could not be reached; try again later.

Server-provided content. Tool names, descriptions and schemas below are copied from the MCP server. They may be in another language. Talandor does not translate or verify them.
Tools and declared exposure

Server annotations are declarations, not verified behavior.

Show 15 of 15 server-provided tool definitions
application_status
Declared read-only
Show server-provided details
Application status
Server description (copied; language not verified)
Status of applications the key owner's agent has requested — queued, submitted, refused (with the refusing gate named), or failed. Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Most recent N, default 20, max 50."
    }
  }
}
board_stats
Declared read-only
Show server-provided details
Board statistics
Server description (copied; language not verified)
Live board statistics from cache (cheap to call): servable and tracked posting totals, the count of company job boards with open roles (boards, not employers — one employer can run several), the category set, freshness stamp. Answers with no key too, with a withKey block saying what a free key adds.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {}
}
check_apply_support
Declared read-only
Show server-provided details
Check apply support
Server description (copied; language not verified)
Whether the apply agent can submit an application for this job on the user's behalf, and what that requires. Jobs on non-supported systems still return their direct applyUrl for the human to use. For whether THIS KEY may apply at all, call key_status — this tool answers about the job, not the key. Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    }
  }
}
check_jobs_open
Declared read-only
Show server-provided details
Check which jobs are still open
Server description (copied; language not verified)
Are these postings still on the board? Answers up to 200 ids in one call — the tool for re-verifying a saved shortlist before acting on it, instead of spending a metered get_job per posting. Returns open:{id:boolean} plus the closed ids, and names the basis of the answer: it reads the board's index (a closed posting is one the employer's feed stopped listing), not the employer's site at this instant, and it is a weaker test than get_job's — read `basis` before reporting a posting as live to a person. Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "ids"
  ],
  "properties": {
    "ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 200,
      "description": "Job ids from search_jobs. Up to 200 per call; anything past that is named in notChecked rather than silently dropped."
    }
  }
}
debug_search
Declared read-only
Show server-provided details
Explain a search
Server description (copied; language not verified)
Explain WHY a search returns what it does — the board's own decision trace merged with the run's outcome. Shows the parsed query (terms, exclusions, intent-lifts, alias expansions), which filters were applied vs IGNORED and why, the route and retriever chosen, the ranking regime (ranked/ring-merged/deep-page and the seam), plus the real run's route, timings, count basis and any fallback. Use this when a search returns surprising, empty, or mis-ranked results — it turns 'why?' into one call. Takes the SAME arguments as search_jobs. Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {
    "sort": {
      "enum": [
        "relevance",
        "newest",
        "salary"
      ],
      "type": "string",
      "description": "Default relevance."
    },
    "limit": {
      "type": "number",
      "description": "Rows per page, 1-60. Default 20."
    },
    "query": {
      "type": "string",
      "description": "Search terms. Supports exclusions: 'engineer -senior'."
    },
    "offset": {
      "type": "number",
      "description": "Paging offset — pass back the previous response's nextOffset."
    },
    "remote": {
      "type": "boolean",
      "description": "Only remote-friendly roles."
    },
    "vendor": {
      "type": "string",
      "description": "Comma list of hiring-system vendors (greenhouse, lever, ashby, …), max 8."
    },
    "country": {
      "type": "string",
      "description": "ISO-2 codes, comma-separated, max 5. E.g. 'US,GB'."
    },
    "category": {
      "type": "string",
      "description": "Comma list of category slugs (see board_stats for the live set), max 3."
    },
    "location": {
      "type": "string",
      "description": "City/state/metro, e.g. 'texas', 'NYC', 'berlin'."
    },
    "maxYears": {
      "type": "number",
      "description": "Only roles asking for at most N years of experience."
    },
    "payBasis": {
      "enum": [
        "hourly",
        "salaried"
      ],
      "type": "string",
      "description": "Restrict to hourly or salaried pay."
    },
    "workMode": {
      "type": "string",
      "description": "Comma list of: remote, hybrid, onsite."
    },
    "companies": {
      "type": "string",
      "description": "Scope to specific employers: a comma list of companyToken values from job cards (or from the site's employer pages). An employer the board does not carry simply matches nothing; tokens the board drops are named in ignoredFilters."
    },
    "salaryMax": {
      "type": "number",
      "description": "Annual USD-equivalent salary ceiling."
    },
    "salaryMin": {
      "type": "number",
      "description": "Annual USD-equivalent salary floor. Note: only ~13% of postings state pay."
    },
    "department": {
      "type": "string",
      "description": "Substring match on the employer's own department/team text."
    },
    "experience": {
      "type": "string",
      "description": "Comma list of seniority bands the POSTING asks for: entry, mid, senior, expert. Rows whose band could not be read are excluded — use maxYears for the candidate's own side of the question."
    },
    "maxAgeDays": {
      "type": "number",
      "description": "Only postings from the last N days (1-30)."
    },
    "postedAfter": {
      "type": "string",
      "description": "ISO-8601 instant; only postings the EMPLOYER dated after it. Undated rows fall out of this window (unlike maxAgeDays, which falls back to when the board first saw a posting), so this is the strict form of 'new'."
    },
    "hasStatedPay": {
      "type": "boolean",
      "description": "Only postings that state a salary (excludes the ~87% that don't)."
    },
    "agentReadyOnly": {
      "type": "boolean",
      "description": "Only jobs the apply agent can submit to on the user's behalf."
    },
    "employmentType": {
      "type": "string",
      "description": "Comma list of: full_time, part_time, contract, temporary, internship."
    },
    "excludeAgencies": {
      "type": "boolean",
      "description": "Hide postings from staffing/recruiting agencies (their job cards carry agency:true). Agencies are served by default; this is an opt-in narrowing."
    },
    "includeUnstatedPay": {
      "type": "boolean",
      "description": "WIDENS an active salaryMin/salaryMax band to also admit postings that state no pay at all. Inert with no band set (unpriced rows are already included). The response says salaryStatedOnly when a band is narrowing without it."
    }
  }
}
employer_growth
Declared read-only
Show server-provided details
Did this employer's board grow?
Server description (copied; language not verified)
Did this employer's board serve more roles than it did 7 days earlier? One row per companyToken (up to 20 per call), judged by the board itself from our own daily observation and passed through untouched: grew, no-growth, or unknown — and unknown ALWAYS carries unknown_reason (a feed bigger than one visit can read, a board too new or too small for a rate, a gap in our own series, a pool that was replaced rather than grown…): an unknown is a reading we could not take, never a no. The bars the verdict uses: at least 10 roles served at the window's start; then BOTH at least 4 more roles AND at least 25% more, on a board tracked for at least 21 days, with every read in the window whole. Per BOARD (a vendor tenant), never summed across an employer's boards; more roles served is roles opened net of roles that came down — not a headcount and not a hire. This tool never ranks employers, and no list of growing employers exists here or anywhere on the board. Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "companyTokens"
  ],
  "properties": {
    "companyTokens": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 20,
      "minItems": 1,
      "description": "companyToken values from job cards or search_jobs. Up to 20; more is refused with the count named."
    }
  }
}
employer_hiring_record
Declared read-only
Show server-provided details
An employer's hiring record on this board
Server description (copied; language not verified)
For each employer handle (companyToken, up to 20 per call), that employer's own record on this board: open_roles now, closed_90d (postings we watched come off this board in the last 90 days, re-lists excluded), superseded_90d (the re-lists, a floor), the two medians from the employer's own stated dates (lower bounds), tracking_days (how long we have watched THIS board, capped at 90) and feed_total (what its feed advertised at the last check). A takedown is not a hire — a filled role, a cancelled one and a withdrawn one look identical from here — and it is a record of one BOARD, never summed across an employer's boards, never a headcount. A board with no closure observed answers record:'unknown' with the reason, never a verdict about the employer: on a board bigger than one visit can read, no closure is observable to us until we complete a provable full pass and then watch a role go after it, so silence there is about our instrument. Every row carries its basis. Every row also carries layoff_filing — the newest layoff filing joined to that employer by a hand-curated alias or an exact multi-token name match, a US state WARN notice or an SEC 8-K Item 2.05 disclosure, printed as a filing (filer verbatim, its dates with their bases, count, state or form, link), read hourly from SEC EDGAR and nightly from state notices, null when none qualifies within 90 days, and no part of record or any verdict; layoff_basis on the response says what it is and is not. Pair with employer_growth for the other half of what the site calls "Actively hiring". Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "companyTokens"
  ],
  "properties": {
    "companyTokens": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 20,
      "minItems": 1,
      "description": "companyToken values from job cards or search_jobs (a vendor tenant, e.g. 'acme' or 'gici~wd5~Careers'). Up to 20; more is refused with the count named."
    }
  }
}
fetch
Declared read-only
Show server-provided details
Fetch (alias of get_job, in ChatGPT's research shape)
Server description (copied; language not verified)
An ALIAS of get_job in the fixed shape ChatGPT's deep-research and company-knowledge connectors call: one id in (from search), {id,title,text,url,metadata} out. text is the posting's full description; metadata carries the job card's structured fields (pay, experience, location, workMode, postedAt, companyToken, agentReady). A dead id answers with what the board knows — a watched closure, an aged-out stub, or not found — in text and metadata, never a stale card. Any other client should call get_job.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "A job id from search."
    }
  }
}
fit_resume
Declared read-only
Show server-provided details
Score a résumé against the board
Server description (copied; language not verified)
Score a résumé against open jobs, for an agent holding a CV: reads the occupation out of resumeText (or uses `query` if given), searches the board for it, and scores up to 20 results 0-100 with the matched and missing terms per job. PAID — needs a paid API key, exactly like POST /v1/fit on the data API, or a live Agent Pass on the key's account; a free key gets an in-band refusal naming where to upgrade. A null fit means the posting has no stored description to score. Returns the terms it read from the CV so the agent can pick a different one and call again with `query`. Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "resumeText"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Jobs to score, 1-20 (default 20)."
    },
    "query": {
      "type": "string",
      "description": "Optional job title to search instead of the one read from the résumé."
    },
    "remote": {
      "type": "boolean"
    },
    "country": {
      "type": "string"
    },
    "location": {
      "type": "string"
    },
    "resumeText": {
      "type": "string",
      "description": "The candidate's résumé as plain text (100+ characters)."
    }
  }
}
get_job
Declared read-only
Show server-provided details
Get one job
Server description (copied; language not verified)
Full detail for one job id (from search_jobs), including the complete description text and when the employer's feed last confirmed it open. A resumebooster.work/jobs?job=<id> link's id is this argument (and fetch's, check_apply_support's and request_application's). For several ids at once, use get_jobs — it costs ONE call against the daily quota instead of one per posting. Needs a key or a sign-in. With neither, call fetch with the same id.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "The job id, e.g. 'greenhouse:acme:12345'."
    }
  }
}
get_jobs
Declared read-only
Show server-provided details
Get several jobs
Server description (copied; language not verified)
Full detail for up to 10 job ids in ONE call — the shortlist form of get_job. Each id answers with a card plus its description; ids that closed, aged out or were never on this board come back in `unavailable` with the reason named, so one dead id never costs you the other nine. Set includeDescription=false for cards and freshness only (much smaller, and no vendor fetch). Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "ids"
  ],
  "properties": {
    "ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "description": "Job ids from search_jobs. Up to 10 per call — each one is a separate detail read that may fetch the employer's page."
    },
    "includeDescription": {
      "type": "boolean",
      "description": "Default true. Descriptions are capped at 8,000 characters here; call get_job for the whole text of one."
    }
  }
}
key_status
Declared read-only
Show server-provided details
This key's limits and powers
Server description (copied; language not verified)
What THIS key is and may do: tier, requests left this minute, calls left today (both including this call), whether fit_resume (and engine=ranked on the data API) answers on it, and whether the apply tools would — with any blocker named: account link, Agent plan or live pass, mandate, résumé on file. On an Agent Pass: when the clock ends and how many applications are left (a pass starts at the first call other than this one). Call it first in a keyed session, and after any 'quota' or 'rate' refusal. Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {}
}
request_application
Declared destructive
Show server-provided details
Request an application
Server description (copied; language not verified)
Ask the board's apply agent to submit an application to this job on behalf of the key's owner. Needs an account key (mint one at https://resumebooster.work/agents), an active Agent plan OR a live Agent Pass (bought signed-in at https://resumebooster.work/agents/pass), and a mandate set in Account — call key_status first: it says which of the three is missing, and on a pass how many applications and how much time are left. Every application passes the same gates as the signed-in flow, including the honesty classifier: answers are drawn from the owner's own profile and never invented. Ask the person for a yes on this specific job id before calling. Needs a key or a sign-in.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "jobId"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Optional note stored with the request (not sent to the employer)."
    },
    "jobId": {
      "type": "string",
      "description": "The job id from search_jobs."
    }
  }
}
search
Declared read-only
Show server-provided details
Search (alias of search_jobs, in ChatGPT's research shape)
Server description (copied; language not verified)
An ALIAS of search_jobs in the fixed shape ChatGPT's deep-research and company-knowledge connectors call: one query string in, {results:[{id,title,url}]} out. Every result's id is the job id fetch and every other tool take; url is the employer's own apply page when the board holds one, else the posting's page on the site. Same board, same ranking, same limit as an unkeyed search_jobs (10 rows); the disclosures ride beside the results. Any other client should call search_jobs, which takes every filter.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Free text — title, skills, a place, exclusions with a leading minus."
    }
  }
}
search_jobs
Declared read-only
Show server-provided details
Search jobs
Server description (copied; language not verified)
Search the live job board (postings pulled directly from employers' own hiring systems, 30-day freshness cap; board_stats carries the live totals). Returns compact job cards — including the board's own parsed pay (salaryMinAnnual/salaryMaxAnnual/salaryPeriod), experience band and minYears, so pay and seniority never have to be re-read out of prose — plus the board's honesty disclosures: exact totals when knowable (countUnavailable otherwise), filters it could not honour (ignoredFilters), words it read as filters (intentFilters), and spelling suggestions. Set agentReadyOnly=true to see only jobs the apply agent can submit to directly.
Input schema (server-provided preview — do not copy)
{
  "type": "object",
  "properties": {
    "sort": {
      "enum": [
        "relevance",
        "newest",
        "salary"
      ],
      "type": "string",
      "description": "Default relevance."
    },
    "limit": {
      "type": "number",
      "description": "Rows per page, 1-60. Default 20."
    },
    "query": {
      "type": "string",
      "description": "Search terms. Supports exclusions: 'engineer -senior'."
    },
    "offset": {
      "type": "number",
      "description": "Paging offset — pass back the previous response's nextOffset."
    },
    "remote": {
      "type": "boolean",
      "description": "Only remote-friendly roles."
    },
    "vendor": {
      "type": "string",
      "description": "Comma list of hiring-system vendors (greenhouse, lever, ashby, …), max 8."
    },
    "country": {
      "type": "string",
      "description": "ISO-2 codes, comma-separated, max 5. E.g. 'US,GB'."
    },
    "category": {
      "type": "string",
      "description": "Comma list of category slugs (see board_stats for the live set), max 3."
    },
    "location": {
      "type": "string",
      "description": "City/state/metro, e.g. 'texas', 'NYC', 'berlin'."
    },
    "maxYears": {
      "type": "number",
      "description": "Only roles asking for at most N years of experience."
    },
    "payBasis": {
      "enum": [
        "hourly",
        "salaried"
      ],
      "type": "string",
      "description": "Restrict to hourly or salaried pay."
    },
    "workMode": {
      "type": "string",
      "description": "Comma list of: remote, hybrid, onsite."
    },
    "companies": {
      "type": "string",
      "description": "Scope to specific employers: a comma list of companyToken values from job cards (or from the site's employer pages). An employer the board does not carry simply matches nothing; tokens the board drops are named in ignoredFilters."
    },
    "salaryMax": {
      "type": "number",
      "description": "Annual USD-equivalent salary ceiling."
    },
    "salaryMin": {
      "type": "number",
      "description": "Annual USD-equivalent salary floor. Note: only ~13% of postings state pay."
    },
    "department": {
      "type": "string",
      "description": "Substring match on the employer's own department/team text."
    },
    "experience": {
      "type": "string",
      "description": "Comma list of seniority bands the POSTING asks for: entry, mid, senior, expert. Rows whose band could not be read are excluded — use maxYears for the candidate's own side of the question."
    },
    "maxAgeDays": {
      "type": "number",
      "description": "Only postings from the last N days (1-30)."
    },
    "postedAfter": {
      "type": "string",
      "description": "ISO-8601 instant; only postings the EMPLOYER dated after it. Undated rows fall out of this window (unlike maxAgeDays, which falls back to when the board first saw a posting), so this is the strict form of 'new'."
    },
    "hasStatedPay": {
      "type": "boolean",
      "description": "Only postings that state a salary (excludes the ~87% that don't)."
    },
    "agentReadyOnly": {
      "type": "boolean",
      "description": "Only jobs the apply agent can submit to on the user's behalf."
    },
    "employmentType": {
      "type": "string",
      "description": "Comma list of: full_time, part_time, contract, temporary, internship."
    },
    "excludeAgencies": {
      "type": "boolean",
      "description": "Hide postings from staffing/recruiting agencies (their job cards carry agency:true). Agencies are served by default; this is an opt-in narrowing."
    },
    "includeUnstatedPay": {
      "type": "boolean",
      "description": "WIDENS an active salaryMin/salaryMax band to also admit postings that state no pay at all. Inert with no band set (unpriced rows are already included). The response says salaryStatedOnly when a band is narrowing without it."
    }
  }
}

How to use this MCP

Talandor checks the server; it does not connect the server to your assistant.

Choose your client below, then copy the endpoint or configuration. Authentication is completed with the MCP provider, never inside Talandor.

Open the official client guide (opens in a new tab)
Observation history
Unreachable now
No protocol
Unreachable now
No protocol
Unreachable now
No protocol
Unreachable now
No protocol
Unreachable now
No protocol
Operational
2025-11-25 · 15 tools
Unreachable now
No protocol
Operational
· stable since
2025-11-25 · 15 tools · no change · 8 checks
Complete public contract · 2025-11-25 · 15 tools
2686ec1bb947

Deep monitoring eligibility

Not eligible yet

Only transport-level evidence was observed; no public tools/list contract was confirmed.

Personal Watch is not open yet. This report does not start a Watch or a payment.

See public monitoring
Watch · 9 €/month

Watch is not available for this evidence

This result does not yet expose a complete public contract or a qualified authentication surface, so there is nothing honest to watch yet. A Watch needs a complete public contract or a qualified authentication surface before it can monitor meaningful changes.

Full WatchAvailability, protocol, auth and public tool contract changes
Surface WatchAvailability, TLS, protocol and auth surface — no private tool diff

Watch checkout is not open. This page does not start a payment. You can sign in from the header; that creates an account, not a Watch. Opening date: not announced yet. Hosted checkout remains closed.

See Watch price, terms and refunds