Skip to main content
Glama

Filter postings

filter_jobs
Read-onlyIdempotent

Count and list job postings by conditions, all optional, all of which must hold (the arguments below, and a keyword query as in search_jobs). Returns total (with a query at most 5000 are counted; total_is_lower_bound says there are more) and a page of up to limit postings as in search_jobs, without the snippet, from offset (more: true: a next page, from next_offset); limit 0 returns the total only. collected is the first and last day any posting was fetched; facets counts all the matches. Without a query the page is in a neutral order, not ranked; with one it is ranked as in search_jobs; sort changes the order. A condition matches only postings that state the field (not experience or english, nor japanese unless it asks not_required: a posting that states nothing passes those); include_unstated: true lets the others through. The answer's not_stated counts, for each condition on a field that a posting may leave unstated (all but experience, exclude_company_type and new_grad), the postings that match every other condition but state nothing for it. A model read location, salary, japanese, english, remote, visa, overtime, experience, engagement from single-posting pages (141308 of the 141322 postings served). Usually right, not always (location about 97%, salary and remote 90 to 95%): confirm with get_job before telling the user; overtime, visa and english are hints. average_overtime_hours: the monthly overtime the posting states (0: none), apart from overtime_hours, the fixed overtime the pay includes. not_extracted: true marks a posting that was never processed (part-time-only, restricted), not one that states nothing: read it with get_job before saying what it offers. Part-time-only postings are not served. Copies are folded as in search_jobs (see folded). total counts the folded postings too. Results are examples, never the user's only options. What a posting does not state (pay, overtime) is unknown: never invent it. Cite each posting's url and day (the user confirms there); never estimate the user's chance of being hired. A pay floor the user states is basis min, the default (max only with their agreement). Guide: job_search_guide (results).

Input Schema

NameRequiredDescriptionDefault
sortNosalary: annual pay, high to low, by the bottom of the stated range; postings that state no pay last. newest: by date_posted, newest first; known for 106760 of the 141322 postings served (76%), the others last. experience_fit: needs experience.years (the years the user has); postings that state up to those years first, the closest first, then those that state none, then those that state more.
visaNotrue: postings that say they sponsor a visa (not those that say they do not or say nothing)
limitNoMost postings to return (default 10); 0 lists none and returns the total (and the facets) only
queryNoKeywords as in search_jobs; leave out to count by the conditions alone
facetsNoCount all the matches, not only the page, by any of these (salary_band: the bottom of the stated pay)
offsetNoWhere the page starts, in postings from 0 (default 0): the next_offset of the previous page
remoteNoRemote work: any of these
salaryNoPay in yen that reaches at_least in its period. A floor the user states (年収600万以上) is basis min, the default (the bottom of the stated range reaches it); basis max (the top reaches it, so a range that starts lower passes) only after the user agrees to see those; with too few results, say so and ask first. One stated figure is both. A posting that states its pay in another period is not compared, and most state it per month, so a yearly-only condition leaves them out. Up to four {at_least, period, basis} alternatives, any one may hold. A posting that states no salary is left out (not_stated.salary counts them; include_unstated: true lists them)
companyNoCompany, as in search_jobs
englishNoEnglish requirement (either: as for japanese)
sourcesNoas in search_jobs
japaneseNoJapanese requirement (either: Japanese or English will do)
locationNoWork location contains this text, as the page writes it; width and case ignored, nothing translated (東京 does not find Tokyo)
new_gradNotrue: only postings aimed at new graduates (the title says 新卒, 27卒, 卒業予定, 第二新卒, or is a selection internship, インターン); new_grad_kind says which. Use it only when the user says they are a new graduate
overtimeNoFixed overtime stated as at most max_hours hours a month (0: states none)
employmentNoas in search_jobs
engagementNoWho the work is done for, stated by the posting itself (explicit statements only; accuracy is not measured yet): in_house the employer's own product or service, client_site placement at a client's site (SES, 技術者派遣, 客先常駐), client_project delivery for clients (受託, SI)
experienceNoThe years of experience the user has in the kind of work they look for. years: names them; every result then shows experience_gap (years asked less these), nothing is left out. max_years: leaves out postings that state a larger requirement (the largest must-have counts), only when the user asks for that: a gap in years is a fact to report, never a reason to drop a posting. A posting that states no years passes (include_unstated changes nothing here): a result has extracted.experience_years, or experience_not_stated: true; tell the user which
prefectureNoPostings located in any of these prefectures (the normalised place): 東京都, 東京 and Tokyo are the same. A nationwide, remote or place-less posting names none and needs include_unstated, which adds a place-less one only where its head office is (推定); an overseas one never matches
company_typeNoOnly companies of these types: product (own product or service), si_contract (SI, contract work), staffing (dispatch, SES), other_industry, unknown. Judged once per company by a model, about 96% precision for staffing and 100% for product on 148 companies; 7430 of 7739 are tagged. The secondary type is only a hint. No tag fails unless include_unstated
average_overtimeNoOvertime worked, as stated: the monthly average is at most max_hours (0: states none; a company-wide average counts (average_overtime_scope: company); ほぼなし and 少なめ are not stated)
include_unstatedNotrue: also postings that state nothing for the field, and those not processed (not_extracted). Default: only those that state it and match; experience and english let through those that state nothing, and so does japanese unless it asks not_required; false: not english and japanese either
exclude_company_typeNoDrop companies of these types, judged as above (["staffing"] removes dispatch and SES firms). No tag passes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, but the description adds substantial operational context beyond them: the 5000-count cap with total_is_lower_bound, page/offset/next_offset mechanics, ordering behavior with and without a query, facet counting across all matches, extraction accuracy caveats (location ~97%, salary/remote 90-95%, overtime/visa/english as hints), not_extracted semantics, unserved part-time-only postings, folded copies affecting totals, and explicit warnings never to invent pay or estimate hiring odds. This is rich disclosure an agent could not get from the annotations alone.

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

Conciseness3/5

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

The description is front-loaded with purpose and key return semantics, and most sentences carry real information. However, it is dense and run-on, packing many clauses into semicolon-chained sentences, and it duplicates some material already covered exhaustively by the schema. For a 23-parameter tool some length is warranted, but readability and structure suffer.

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, yet the description explains the return shape thoroughly: total with lower-bound caveat, page of postings without snippet, offset/next_offset pagination, collected date range, facets, not_stated counts, and the distinction between average_overtime_hours and overtime_hours. It also documents unserved and unprocessed postings. Given the tool's complexity, an agent has enough to call it 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%, so the schema already documents all 23 parameters in depth, including enums and nested objects. The description mostly cross-references the schema ('as in search_jobs') and restates select behaviors like limit 0 returning only the total. It adds some cross-parameter meaning—notably that all conditions must hold and how not_stated interacts with include_unstated—but the schema does the heavy lifting, so the 3 baseline is 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 opening sentence states a specific verb pair and resource: 'Count and list job postings by conditions'. It clarifies scope ('all optional, all of which must hold') and references search_jobs for keyword semantics, so an agent can distinguish it as the filtered count/list variant. It stops short of explicitly naming when to prefer search_jobs over this tool, which keeps it from 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?

Usage guidance is embedded throughout: 'Use it only when the user says they are a new graduate' for new_grad, the pay-floor basis min/max rule with 'ask first' when results are thin, 'confirm with get_job before telling the user', and 'Guide: job_search_guide'. These give clear when/when-not conditions for several high-stakes parameters. There is no single upfront statement of when to choose this tool over search_jobs, which prevents a 5.

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