list_jobs_in_frame
List published jobs in the person's frame
All MCP toolsRead
The listing twin of count_jobs_in_frame — ask that for how MANY postings fit, ask this for WHICH: derives the five-axis frame (occupations ∩ locations ∩ salary ∩ office frequency ∩ employment type) from the person's SAVED desired conditions and lists ONLY the published postings inside it, newest first (published desc — the fixed order; the same set and order as the person's own matchwire search page). The applied frame rides the answer: its occupations are the saved references' ids (occupations are counted by id), and its employmentTypes are the saved desired employment types unless employmentTypes overrides them for this call — the search page's band, which never touches the saved conditions; change the frame itself by saving conditions with save_conditions first. skills narrows this call the same way the band's skills chips narrow the search page — postings listing EVERY named skill, normalized-exact — and the answer's narrowedBy.skills echoes the applied spellings beside the frame, which has no skills arm; count_jobs_in_frame counts the saved frame alone and takes no skills. Listing as the person themselves covers the whole market (every employer's published postings); listing with an organization's credential covers only THAT organization's postings. Every returned row is logged as an impression. Paginated by keyset cursor: pass the returned nextCursor as the next call's cursor to continue; null nextCursor = the final page. Occupation references in the answer carry name as the display name in the saved language of the person this call acts for (the bound person, or the person named as the one acted for on the caller's own side; a service key acting for nobody reads the connection's language) — read the id as the identity, never the name.
Input schema
{
"type": "object",
"properties": {
"personId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The person whose saved conditions define the frame (persons.id)."
},
"employmentTypes": {
"description": "Override of the saved employment-type arm (the search page's band): absent or empty keeps the saved types; any list replaces them for this call, and every type spells no condition (undisclosed included). The answer's frame.employmentTypes shows what was applied.",
"type": "array",
"items": {
"type": "string",
"enum": [
"FULL_TIME",
"PART_TIME",
"CONTRACTOR",
"TEMPORARY",
"INTERN"
],
"description": "Employment type (schema.org vocabulary): \"FULL_TIME\", \"PART_TIME\", \"CONTRACTOR\", \"TEMPORARY\", or \"INTERN\". Other values are rejected."
}
},
"skills": {
"description": "Narrow THIS call to postings that list EVERY named skill — the search page's band's skills chips: normalized-exact (width, case, whitespace and katakana/hiragana folded; never a substring, so \"Go\" does not match \"Google\"), in the posting's skills or skillRequirements, required and preferred alike; postings listing no skills fall out. Absent or empty = no narrowing. Never saved and not a frame arm — the answer's narrowedBy.skills shows what was applied, separately from frame. Pass the same skills on every page of one walk.",
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 256
}
},
"limit": {
"description": "Page size, 1..50 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"cursor": {
"description": "Opaque continuation token — the previous page's nextCursor. Omit for the first page.",
"type": "string",
"minLength": 1
}
},
"required": [
"personId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output schema
{
"type": "object",
"properties": {
"personId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"frame": {
"type": "object",
"properties": {
"occupations": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Occupation numbers of the desired occupations. Empty = no occupation condition."
},
"locations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Z]{2}$",
"description": "ISO 3166-1 alpha-2 country code: exactly two uppercase letters, e.g. \"JP\". Three-letter codes (\"JPN\"), subdivision codes (\"JP-13\"), country names, and lowercase are rejected."
},
{
"type": "string",
"pattern": "^[A-Z]{2}-[A-Z0-9]{1,3}$",
"description": "ISO 3166-2 subdivision code: two uppercase letters, a hyphen, then 1-3 uppercase alphanumerics, e.g. \"JP-13\" (Tokyo). Country-only codes (\"JP\"), place names, and lowercase are rejected."
}
],
"description": "Desired-location entry: a whole country as an ISO 3166-1 alpha-2 code (e.g. \"US\") or one region as an ISO 3166-2 subdivision code (e.g. \"JP-13\"). Names, lowercase, and three-letter codes are rejected."
},
"description": "Desired work locations, country and/or region codes. Empty = no location condition."
},
"salaryRows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code (exactly three uppercase letters). Required — no default."
},
"min": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Desired annual lower bound in raw currency units (non-negative integer). Required — a row without a lower bound does not exist in the contract."
},
"max": {
"description": "Optional annual upper bound in raw currency units; the posting↔row match never reads it, while the shared internal candidate facet fold reads it as the row's upper bound. Must be >= min when present.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"unit": {
"default": "YEAR",
"description": "Salary period unit; rows are always annual (\"YEAR\").",
"type": "string",
"const": "YEAR"
}
},
"required": [
"currency",
"min",
"unit"
],
"additionalProperties": false,
"description": "One per-currency desired-salary lower-bound row (annual): matching is strict against postings in this row's currency only — never converted, never compared across currencies."
},
"description": "Per-currency annual lower-bound rows (the RESOLVED spelling). Empty = no salary condition."
},
"officeModes": {
"type": "object",
"properties": {
"none": {
"type": "boolean",
"description": "Postings with remote = \"none\" are within the frame."
},
"hybrid": {
"type": "boolean",
"description": "Postings with remote = \"hybrid\" are within the frame."
},
"full": {
"type": "boolean",
"description": "Postings with remote = \"full\" are within the frame."
}
},
"required": [
"none",
"hybrid",
"full"
],
"additionalProperties": false,
"description": "The office-frequency mode mapping as one boolean per posting remote mode (officeFrequencyRemoteModes). All true = no work-style condition. A posting whose remote is ABSENT (undisclosed) is ALWAYS within the frame regardless of these booleans."
},
"employmentTypes": {
"type": "array",
"items": {
"type": "string",
"enum": [
"FULL_TIME",
"PART_TIME",
"CONTRACTOR",
"TEMPORARY",
"INTERN"
],
"description": "Employment type (schema.org vocabulary): \"FULL_TIME\", \"PART_TIME\", \"CONTRACTOR\", \"TEMPORARY\", or \"INTERN\". Other values are rejected."
},
"description": "Employment-type condition in the CONDITION spelling: empty = no employment condition — also the spelling of every type (`employmentTypesCondition`). A posting with an UNDISCLOSED employmentType is within the frame only under the empty spelling."
}
},
"required": [
"occupations",
"locations",
"salaryRows",
"officeModes",
"employmentTypes"
],
"additionalProperties": false,
"description": "Job frame: the five-axis count predicate input — occupations ∩ locations ∩ salary ∩ office frequency ∩ employment type. Always complete: \"no condition\" is an empty array / all-true booleans, never a missing key."
},
"total": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Published postings matching the SAME predicates as rows (the applied frame, employment arm included, and the skills narrowing when passed) — display-only; walk pages via nextCursor, never this number."
},
"narrowedBy": {
"description": "Present only when skills narrowed this call: the applied skill spellings as passed. The frame has no skills arm, so the narrowing is reported here, beside it.",
"type": "object",
"properties": {
"skills": {
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"description": "The skill spellings this call was narrowed by, as passed (trimmed, in order)."
}
},
"required": [
"skills"
],
"additionalProperties": false
},
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"jobId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The posting's jobs.id — read the full posting with get_published_job_posting (as the person) or get_job_posting (an organization's own posting)."
},
"orgName": {
"type": "string",
"description": "The hiring organization's display name."
},
"publishedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "When the posting was published (the sort key — newest first)."
},
"facts": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "The denormalized `jobs.title` column (both readers carry it)."
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Read-time excerpt of posting.description, truncated to 160 code points; null when the posting has no description."
},
"baseSalary": {
"type": "object",
"properties": {
"currency": {
"default": "JPY",
"description": "ISO 4217 currency code (exactly three uppercase letters). Defaults to \"JPY\".",
"type": "string",
"pattern": "^[A-Z]{3}$"
},
"min": {
"description": "Lower bound of the range as a non-negative integer; must be <= max when both are present.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"max": {
"description": "Upper bound of the range as a non-negative integer; must be >= min when both are present.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"unit": {
"default": "YEAR",
"description": "Salary period unit: \"YEAR\" (annual amounts, the default), \"MONTH\", or \"HOUR\".",
"type": "string",
"enum": [
"YEAR",
"MONTH",
"HOUR"
]
}
},
"required": [
"currency",
"unit"
],
"additionalProperties": false,
"description": "Salary range in a single ISO 4217 currency (non-negative integers, min <= max); the period is given by `unit` (annual by default)."
},
"remote": {
"type": "string",
"enum": [
"none",
"hybrid",
"full"
],
"description": "Remote-work classification: \"none\" (on-site), \"hybrid\", or \"full\" (fully remote). Other values are rejected; absent = undisclosed. \"Full remote within Japan\" composes as remote \"full\" + applicantLocation countries [\"JP\"]."
},
"employmentType": {
"type": "string",
"enum": [
"FULL_TIME",
"PART_TIME",
"CONTRACTOR",
"TEMPORARY",
"INTERN"
],
"description": "Employment type (schema.org vocabulary): \"FULL_TIME\", \"PART_TIME\", \"CONTRACTOR\", \"TEMPORARY\", or \"INTERN\". Other values are rejected."
},
"jobLocation": {
"description": "Work location as ONE ISO 3166-2 subdivision code, e.g. \"JP-13\" (the deprecated single field, same shape as jobPostingSchema); readers use jobLocationsOf over the fragment.",
"type": "string",
"pattern": "^[A-Z]{2}-[A-Z0-9]{1,3}$"
},
"jobLocations": {
"description": "Work locations as a mixed country/region list, e.g. [\"JP-13\", \"JP-27\"] (any of the listed sites) or [\"JP\"] (anywhere within the country), unique and insertion-order-preserving. An empty array is rejected — absent = undisclosed (the same meaning as the deprecated single `jobLocation` being absent). Readers of the single `jobLocation` migrate to this list via `jobLocationsOf`; a redundant country⊇region pair is accepted (the desiredLocations posture — the UI absorbs it, matching is unaffected).",
"minItems": 1,
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Z]{2}$",
"description": "ISO 3166-1 alpha-2 country code: exactly two uppercase letters, e.g. \"JP\". Three-letter codes (\"JPN\"), subdivision codes (\"JP-13\"), country names, and lowercase are rejected."
},
{
"type": "string",
"pattern": "^[A-Z]{2}-[A-Z0-9]{1,3}$",
"description": "ISO 3166-2 subdivision code: two uppercase letters, a hyphen, then 1-3 uppercase alphanumerics, e.g. \"JP-13\" (Tokyo). Country-only codes (\"JP\"), place names, and lowercase are rejected."
}
],
"description": "Desired-location entry: a whole country as an ISO 3166-1 alpha-2 code (e.g. \"US\") or one region as an ISO 3166-2 subdivision code (e.g. \"JP-13\"). Names, lowercase, and three-letter codes are rejected."
}
},
"occupations": {
"description": "Job occupations: references { id, name? } to occupation rows, unique by id, in the order stated. An empty array is rejected — absent = unclassified (the house nonempty-optional pattern). Parallel to (never replacing) the raw `title` verbatim.",
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The occupation's number (an `occupations` row) — the identity predicates count on."
},
"name": {
"description": "The row's display name in the reader's language, added when a read answers (trimmed, non-empty). Optional on a write and never stored — a stored reference carries the number alone.",
"type": "string",
"pattern": "^\\S(?:[\\s\\S]*\\S)?$"
}
},
"required": [
"id"
],
"additionalProperties": false,
"description": "Occupation reference: { id, name? } — the row's number, plus the display name a read adds in the reader's language (a write may carry one; it is not stored)."
}
},
"published": {
"type": "boolean",
"description": "Published ⇔ true (the ADR-0082 visibility fact) — false renders the no-longer-published chip."
}
},
"required": [
"title",
"summary",
"published"
],
"additionalProperties": false,
"description": "Job facts: the shared read-model fragment for decision detail and the engagement rail — a lenient read-time projection of the canonical posting."
}
},
"required": [
"jobId",
"orgName",
"publishedAt",
"facts"
],
"additionalProperties": false
},
"description": "One page, published desc — the fixed most-recently-published-first order."
},
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Pass as the next call's cursor to continue; null on the final page."
}
},
"required": [
"personId",
"frame",
"total",
"rows",
"nextCursor"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}