Skip to main content
Glama

Joeb

Search jobs

search_jobs
Read-only

Call start_job_search before the first search in a conversation, for how to work through a search with the user.

Search Joeb's job postings with a natural-language query and return the best matches as ranked text rows.

Returns the top limit matches (default 25, at most 100), best first, one row each: {rank}. [{id}] {title} — {company} · {place} · {remote|on-site} · {seniority} · {salary} · posted {age} A fact the posting lacks is left out. The bracketed id is the job's first 12 characters; every tool takes it back, as it takes any unique prefix of 8 or more characters. detail sets how much a row shows: "brief" is that one line (about 70 tokens), "summary" (the default) adds the job's Smart Digest summary, and "digest" adds the company, the day to day, the requirements and the posting's URL. The raw posting text is never included; get_jobs with include_posting=true reads it.

There is no offset. Every search leaves out the jobs the user has liked, dismissed or marked applied (list_saved_jobs lists them) and the postings of companies the user has blocked (list_blocked_companies lists the blocks). So to get the next matches, record the user's decisions with update_jobs, then run the same search again. A job left undecided normally comes back near the top, as an unswiped card would, though not for certain: each search re-reads the query, and the listings can refresh between runs. To look further without deciding, raise limit.

A requirement no filter covers (visa sponsorship, office locations, tech stack, benefits) goes in the query: ranking weighs the query against each posting's content. Then confirm it on the candidates with detail="digest" or get_jobs(include_posting=true) before telling the user a job meets it.

The reply's first lines count the matches and say whether the location was applied, ignored (a remote_only search) or could not be applied, in which case the search covered the whole US and the user should be told. A reply holds at most 40,000 characters: rows that would cross that are left out, and its last lines say how many.

Limited to 5 searches per minute per user, shared with the Joeb web app. Past the limit the search fails with an error saying how many seconds to wait. Refine the query and search again rather than retrying the same search.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "query": "<query>"
    },
    "name": "search_jobs"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNoHow many of the top-ranked matches to return, from 1 to 100.
queryYesWhat the user is looking for, in plain language: the role, skills, domain and anything else that matters.
detailNoHow much of each job its row shows: "brief", one line of facts; "summary", that line and the Smart Digest summary; "digest", the summary plus the company, the day to day, the requirements and the posting's URL.summary
postedNoOnly jobs posted within the last "week" or "month". Omit it for any time.
remoteNo"remote_only", "onsite_only", or "all", which is the same as omitting it.
locationNoA specific US city to search around, e.g. "Austin, TX". Omit it to search the whole US. A region, a state or a place outside the US can't be filtered on, and a remote_only search ignores it.
radius_kmNoHow far around location to search, in kilometers. Omit it for the default radius.
seniorityNoOnly jobs at these levels. Empty or omitted: every level.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover only the read-only, non-destructive safety profile; the description adds substantial behavior the agent could not otherwise know: liked/dismissed/applied jobs and blocked companies are silently excluded, undecided jobs usually recur but listings can refresh, replies cap at 40,000 characters, and location handling is reported in the reply header (applied, ignored, or unavailable meaning a whole-US search). It also discloses the 5-per-minute rate limit shared with the web app and that a failure reports the wait in seconds.

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?

Despite its length, the text is front-loaded with the routing pointer and the one-line purpose, then proceeds through return format, paging semantics, query strategy, and limits in a logical order. A few sentences restate schema facts (limit default 25, max 100), which is small but real redundancy.

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 an 8-parameter search tool with no output schema, the description supplies everything an agent needs: exact row format, what is omitted from rows, paging without offset, exclusion side effects, character cap on replies, and the rate limit. Nothing material is left to inference.

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 defines every parameter, including the location and radius caveats and the enum options. The description adds some value beyond it — the token cost of detail="brief" (about 70 tokens), what each detail tier appends, and the id-prefix rule (8+ characters) that applies across tools — but most parameter meaning is already in the schema, so the baseline 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?

States a specific verb and resource ("Search Joeb's job postings with a natural-language query") plus the return shape ("best matches as ranked text rows"). It clearly separates itself from get_jobs by naming that tool as the reader of raw posting text.

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

Usage Guidelines5/5

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

Explicitly says to call start_job_search before the first search, explains that there is no offset and that the next page comes from recording decisions with update_jobs and re-running, and tells the agent to raise limit to look further without deciding. It also routes uncovered requirements into the query and names get_jobs(include_posting=true) and detail="digest" as the confirmation path.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources