Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "search_jobs"
⟨152 unchanged words⟩ and reports each row's `relevance` (0-1). `exclude_employer_types` (e.g. ['staffing']) drops roles whose posting is classified as that employer type -- 'direct', 'staffing', 'consultancy' or 'unknown'; unclassified roles are kept unless 'unknown' is listed. `q` is independent of `function`: pass both to ⟨61 unchanged words⟩
⟨15 unchanged words⟩ "Exclude Agencies","type":"boolean"},"exclude_employer_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Exclude Employer Types"},"function":{"anyOf":[{"type":"string ⟨108 unchanged words⟩
Changed the definition of "register_webhook"
⟨47 unchanged words⟩ `secret` is optional; supply one to verify the`X-Plane-Signature``X-Reqbeat-Signature` on delivered payloads, omit it and one is generated(itandisreturned once in `secret` (neverreturnedagain after this call).Registration itself is free -- the`watch_company` call that follows iswhat bills.
Changed the definition of "cancel_watch", "find_company", "find_qualified_reqs" and 12 more
⟨10 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨13 unchanged words⟩
⟨108 unchanged words⟩ never an error. Never billed. No key yet?On theThehostedcallHTTP endpoint send no `X-API-Key` header and the lookup runs
Changed the definition of "get_open_reqs" and "search_jobs"
⟨47 unchanged words⟩ published, null when it gave none. `function`must beis a functionidname (asaseenpriorinresult'sprior`function_name`,resultslike 'Software & IT');or aplainfunction
Changed the definition of "search_jobs" and "who_is_hiring_for"
⟨4 unchanged words⟩ -- the individual open roles across companies matching`role` (function)`function` / `geo` (country) / `since`, one ⟨68 unchanged words⟩ . Use `who_is_hiring_for` for the company-granular reverse view.`role``function` must be a function id (as seen in prior results); a plainrolefunction name like 'engineering' is rejected with an explicit ⟨28 unchanged words⟩ `relevance` (0-1). `q` is independent of`role``function`: pass both to search titles within one ⟨118 unchanged words⟩
Changed the definition of "find_qualified_reqs", "watch_company" and "who_is_hiring_for"
⟨53 unchanged words⟩ industry, industry_terms, headcount_band, company_kind), `req` (raw_titleq,title_excludesq_excludes, seniority_level,job_family,function, skills, remote_type, location) and `event` (company_id, ⟨28 unchanged words⟩ , "Germany"]}, "req": {"raw_titleq": ["backend engineer"]}} -> live ⟨84 unchanged words⟩
Added "find_qualified_reqs"; changed the definition of "get_open_reqs", "get_role", "is_hiring" and 2 more (14 tools before, 15 now)
The company's current active reqs, deduped across boards --ATS/board-onlyLinkedIn-excluded: ATS tenants plus public job boards and aggregators; each row's `boards` names its source. Freshness-floored. Each row's `first_seen` is our first observation of the req,freshness-floored.not the employer's posting date; `source_posted_at` is the date the source itself published, null when it gave none. `function` must be a function id (as ⟨33 unchanged words⟩
⟨34 unchanged words⟩ with `get_open_reqs`. Scoped exactly as `search_jobs` is:
Changed the definition of "cancel_watch", "list_watches", "register_webhook" and 1 more
⟨68 unchanged words⟩ key: a blank one returns a signup link.Plane session only: `watch_subscriptions` is plane-owned.
⟨88 unchanged words⟩ key: a blank one returns a signup link.Plane session only: `watch_subscriptions` is plane-owned.
Certificate changed, valid to 2026-12-14
Certificate recorded, valid to 2026-10-16
Authorization not required
First tool surface recorded: 14 tools (server version 1.1.2)
Showing the latest 12 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨30 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨5 unchanged words⟩
⟨61 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨43 unchanged words⟩
⟨50 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨12 unchanged words⟩
⟨54 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨7 unchanged words⟩
⟨95 unchanged words⟩ and it is not billed. No key yet?On the hosted HTTP endpoint the first calls are free: send no `X-API-Key` header and theThelookupcallrunsanswersonwith ashared demo credential, billed tonobody and marked as such, untilsignupalinkper-IPinsteadlimitofisthereached.role.
⟨27 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨14 unchanged words⟩
⟨38 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨7 unchanged words⟩
⟨27 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨7 unchanged words⟩
⟨10 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨5 unchanged words⟩
⟨38 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨7 unchanged words⟩
⟨10 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨22 unchanged words⟩
⟨210 unchanged words⟩ `cursor` instead of raising `limit`. No key yet?On the hosted HTTP endpoint the first calls are free: send no `X-API-Key` header and the search runs on a shared demo credential -- a smaller page, billed to nobody, and the result says so -- until a per-IP limit is reached, afterThewhich thecallansweranswersbecomeswith a signup linkwhose minted key finishes this exactsearch. On any other transport a blank key answers with that signup linkinsteadstraightofaway.rows.
⟨66 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨51 unchanged words⟩
⟨43 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨16 unchanged words⟩
⟨137 unchanged words⟩ rather than an empty page. No key yet?On the hosted HTTP endpoint the first calls are free: passPass `plane_api_key` as an empty string and thesearch runs on a shared demo credential -- a smaller page, billed to nobodycall--answersuntilwith aper-IPsignuplimitlinkisinsteadreached,ofafterrows;whichon theanswer becomeshostedaHTTPsignupendpointlinkthewhosekeyminteditkeymints finishes this exact search.On any other transport a blank key answers with that signup link straight away.Already holding a company_id and only need a yes/no? Use `is_hiring`.
⟨56 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨41 unchanged words⟩
⟨29 unchanged words⟩ "Deprecated: pass the key in the `X-API-Key`header, or omit the header for demo mode.header. Removed in 1.2.","title":"Plane Api ⟨20 unchanged words⟩
⟨88 unchanged words⟩ Use `who_is_hiring_for` for the company-granular reverse view. `function`must beis a functionidname (asaseenpriorinresult'sprior`function_name`,resultslike 'Software & IT');aorplaina functionnameid (its `function`); anything else, like 'engineering', is rejectedwith anexplicit error that lists the names, rather than an empty result -- pass plain ⟨152 unchanged words⟩
⟨15 unchanged words⟩ it knows which companies exist. Reverse who's-hiring-for {roletitle, geo} search: companies with active reqs matching`role`/`geo`/`since``q`/`geo`/`since`, deduped by company, keyset-paginated via `cursor`.`role``q` is free text matched against the posting title ⟨57 unchanged words⟩ each) -- an empty result bills nothing.role=q="backend engineer", geo="USA" -> the ⟨107 unchanged words⟩
⟨74 unchanged words⟩ ","title":"Plane Api Key"},"roleq":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"RoleQ"},"since":{"anyOf":[{"format ⟨27 unchanged words⟩
⟨18 unchanged words⟩ as the authenticated key. Meters one `watch` unit. `event_types` names which events fire it, at least one of: `opened` (a req seen for the first time), `reobserved` (a known req seen again on a later day), `reposted` (a req that came back after it was gone), `closed` (a req verified gone from its source). Anything else is refused and creates nothing: a watch on a type that never fires would be billed and silent. A free key holds a limited number of ⟨24 unchanged words⟩
⟨6 unchanged words⟩ "integer"},"event_types":{"items":{"enum":["opened","reobserved","reposted","closed"],"type":"string"},"minItems":1,"title":"Event Types","type":" ⟨58 unchanged words⟩
⟨41 unchanged words⟩ matched against the posting title, not anid.id; plurals and other inflections match, so "backend engineers" is the same search. `geo` is resolved to a stored country before ⟨155 unchanged words⟩
⟨13 unchanged words⟩ the cheap gate before spending a richer call.ATS/board-onlyLinkedIn-excluded (ATS tenants plus public job boards and aggregators) and freshness-floored. Takes the integer `company_id` from an ⟨78 unchanged words⟩
⟨24 unchanged words⟩ each with its own `company_id` + `req_key`),ATS-onlyLinkedIn-excluded+(ATS tenants plus public job boards and aggregators; each row's `board` names its source) + freshness-floored. `since` filters on `first_seen`, our first observation of the req (not the employer's posting date); each row's `source_posted_at` is the date the source itself published, null when it gave none. Keyset-paginated via the opaque `cursor` (a prior ⟨194 unchanged words⟩
⟨7 unchanged words⟩ "default":null,"title":"Cursor"},"exclude_agencies":{"default":false,"title":"Exclude Agencies","type":"boolean"},"geo":{"anyOf":[{"type":"string ⟨93 unchanged words⟩ "}],"default":null,"title":"Sort"},"source_type":{"anyOf":[{"enum":["ats_tenant","board"],"type":"string"},{"type":"null"}],"default":null,"title":"Source Type"}},"title":"search_jobsArguments","type":"object"}
⟨7 unchanged words⟩ "default":null,"title":"Cursor"},"exclude_agencies":{"default":false,"title":"Exclude Agencies","type":"boolean"},"geo":{"anyOf":[{"type":"string ⟨73 unchanged words⟩ "}],"default":null,"title":"Since"},"source_type":{"anyOf":[{"enum":["ats_tenant","board"],"type":"string"},{"type":"null"}],"default":null,"title":"Source Type"}},"title":"who_is_hiring_forArguments","type":"object"}
Find live roles matching an ICP — WHEN an agent already knows its ideal customer profile and wants the matching open roles as rows it can act on: several countries, an industry, a headcount band and title keywords in ONE call, instead of a search followed by a lookup per company. `criteria` takes up to three groups -- `company` (country, industry, industry_terms, headcount_band, company_kind), `req` (raw_title, title_excludes, seniority_level, job_family, skills, remote_type, location) and `event` (company_id, board, source_type, ats_vendor, country) -- AND across fields, OR within one. A f…
⟨75 unchanged words⟩ the `watch_company` call that follows is what bills.Plane session only: `webhook_endpoints` is plane-owned and this tool reads no corpus table.
WriteWHENbacka company you reached through aconversionsignaloutcomeconvertsfor--`company_id`a reply, a meeting, a closed deal -- report it back. Takes the `company_id`, a shortlabel-flywheel`outcome`substrate.labelAppendsoftoyour`outcome_labels`choosingscoped(e.g.to"meeting_booked"), thecaller's`observed_at`owntimecustomer. Planeitsessionhappenedonlyand, optionally, the `req_key` of the role that prompted the outreach:`outcome_labels`{"company_id":is1234,plane-owned"outcome": "meeting_booked",(Phase"observed_at":1"2026-10-01T09:00:00Z"}dropped->its{"id": 87}. Each call adds oneforeignrecord,keyvisibleintoonlythetocorpus)yourandownthisaccount;toolnothingreadsis overwritten,nosocorpusreporttable.a later stage as a new outcome. Never billed. Needs your key: a blank one returns a signup link.