{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_5e8c4jpcnynd","handle":"joa-job-opportunities-api","url":"https://wellknown.network/agents/joa-job-opportunities-api","links":{"self":"https://wellknown.network/agents/joa-job-opportunities-api/record.json","html":"https://wellknown.network/agents/joa-job-opportunities-api","markdown":"https://wellknown.network/agents/joa-job-opportunities-api/record.md","api":"https://wellknown.network/api/v1/agents/joa-job-opportunities-api","status":"https://wellknown.network/api/v1/agents/joa-job-opportunities-api/status","claim":"https://wellknown.network/agents/joa-job-opportunities-api/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/joa-job-opportunities-api/claim.json","badge":"https://wellknown.network/agents/joa-job-opportunities-api/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/joa-job-opportunities-api/history","tools":"https://wellknown.network/api/v1/agents/joa-job-opportunities-api/tools"},"ard":{"identifier":"urn:air:api.jobopportunitiesapi.org:server:joa-job-opportunities-api","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"JOA — Job Opportunities API","summary":"Search live employer-direct job postings, company hiring signal, market stats and the change feed.","description":"Search live employer-direct job postings, company hiring signal, market stats and the change feed.","publisher":{"name":"org.jobopportunitiesapi","url":null},"homepage":"https://jobopportunitiesapi.org/docs/mcp","repository":null,"version":"1.0.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://api.jobopportunitiesapi.org/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-07T19:04:54.903066Z","publishedAt":"2026-10-07T19:04:54.903066Z","registryName":"org.jobopportunitiesapi/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"productivity.hr","name":"HR & Recruiting","confidence":1,"provenance":"derived"},{"slug":"data.news","name":"News & Feeds","confidence":0.833,"provenance":"derived"}],"categories":["data","productivity"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 5h ago.","lastOkAt":"2026-10-09T22:27:32.517Z","lastProbedAt":"2026-10-09T22:27:32.517Z","statusComputedAt":"2026-10-09T22:28:59.461Z","reliability30d":{"probes":26,"successRate":1,"p50Ms":95,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":26,"ok":26,"authBoundaryOk":0,"serviceOk":26,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-09T22:27:32.517Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":143,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"b166c2251461ed46cd605544280f75ed993292ba04f5faf36d6fe6581c1fef3b","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T15:32:52.661Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":81,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"1bb1c485d5566aa8d3f67ec4ceff95da2529cb05ed85e2a47cad6077200845b8","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T08:28:37.659Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":182,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"9d80691a2a9f5a14328b62f595899751224c8c6d208934f5af082bd5d0eaf031","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T02:26:31.889Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":94,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"9d80691a2a9f5a14328b62f595899751224c8c6d208934f5af082bd5d0eaf031","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T19:24:38.774Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":141,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"9d80691a2a9f5a14328b62f595899751224c8c6d208934f5af082bd5d0eaf031","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T13:21:54.847Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":112,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"9d80691a2a9f5a14328b62f595899751224c8c6d208934f5af082bd5d0eaf031","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T06:24:20.449Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":75,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"9d80691a2a9f5a14328b62f595899751224c8c6d208934f5af082bd5d0eaf031","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T00:25:18.427Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":92,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"9d80691a2a9f5a14328b62f595899751224c8c6d208934f5af082bd5d0eaf031","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T17:30:20.753Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":81,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"9d80691a2a9f5a14328b62f595899751224c8c6d208934f5af082bd5d0eaf031","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T10:49:53.002Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":36,"error":null,"detail":{"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"toolCount":6,"toolsHash":"235a7b4969ede862c0e23af7b7bb3fee0bc2c17ea71a8809ef6a91ae7e5fa5be","serverName":"jobopportunitiesapi","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"search_jobs","description":"Search JOA's live ledger of employer-direct job postings (current count: the coverage tool). Filter by country, city, US state, job category/family, seniority, "},{"name":"get_job","description":"Fetch a single job posting's full detail: the complete advert description, per-field provenance (published/inferred/absent), and closure info if the role has si"},{"name":"company_hiring","description":"Look up one employer by slug: its profile (website, industry, live open-role count) and its 30/90/365-day open-roles trend (daily snapshots from 2026-10-06, ear"},{"name":"market_signals","description":"Aggregate, keyless market statistics: salary percentiles (p25/p50/p75, annualised EUR) and time-to-fill (days) by job family x country x seniority, plus listing"},{"name":"coverage","description":"Aggregate, keyless facts about the dataset itself: total live listings, employers with a live listing, per-source breakdown, and freshness (how recently every r"},{"name":"changes_since","description":"The incremental change feed: every job created, updated, withdrawn or delisted since a given cursor, in change order, with a next_since cursor to resume from --"}],"package":null,"toolSurface":{"id":"ts_gwzkesaxafc5","endpointId":"ep_un83mgwczeuw","hash":"b166c2251461ed46cd605544280f75ed993292ba04f5faf36d6fe6581c1fef3b","toolCount":6,"serverName":"jobopportunitiesapi","serverVersion":"1.0.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-09T22:27:32.533Z","lastSeenAt":"2026-10-09T22:27:32.533Z","observations":1,"toolNames":["search_jobs","get_job","company_hiring","market_signals","coverage","changes_since"],"distinctSurfaces":6},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"org.jobopportunitiesapi/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/org.jobopportunitiesapi%2Fmcp","firstSeenAt":"2026-10-03T00:22:56.139Z","fetchedAt":"2026-10-08T19:19:57.789Z","normalizedAt":"2026-10-08T19:19:57.789Z"}]},"firstSeenAt":"2026-10-03T00:22:56.139Z","updatedAt":"2026-10-09T22:29:53.626Z"}