{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_d9869jz4qev9","handle":"workorai","url":"https://wellknown.network/agents/workorai","links":{"self":"https://wellknown.network/agents/workorai/record.json","html":"https://wellknown.network/agents/workorai","markdown":"https://wellknown.network/agents/workorai/record.md","api":"https://wellknown.network/api/v1/agents/workorai","status":"https://wellknown.network/api/v1/agents/workorai/status","claim":"https://wellknown.network/agents/workorai/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/workorai/claim.json","badge":"https://wellknown.network/agents/workorai/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/workorai/history","tools":"https://wellknown.network/api/v1/agents/workorai/tools"},"ard":{"identifier":"urn:air:workorai.com:server:workorai","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"workorai","summary":"WorkorAI talent marketplace MCP: candidate job search and employer hiring with explainable matching","description":"WorkorAI talent marketplace MCP: candidate job search and employer hiring with explainable matching","publisher":{"name":"work0r-ai","url":null},"homepage":null,"repository":"https://github.com/work0r-ai/agent-kit","version":"0.4.3","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://workorai.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-07-02T14:55:32.451379Z","publishedAt":"2026-07-02T14:55:32.451379Z","registryName":"io.github.work0r-ai/workorai"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"productivity.hr","name":"HR & Recruiting","confidence":1,"provenance":"derived"},{"slug":"data.vector-search","name":"Vector Search","confidence":0.583,"provenance":"derived"},{"slug":"content.social","name":"Social Media","confidence":0.525,"provenance":"derived"},{"slug":"dev.terminal","name":"Terminal & Shell","confidence":0.525,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"}],"categories":["content","data","dev","productivity"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-11T05:25:55.292Z","lastProbedAt":"2026-10-11T05:25:55.292Z","statusComputedAt":"2026-10-11T05:27:07.457Z","reliability30d":{"probes":111,"successRate":1,"p50Ms":32,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":110,"ok":110,"authBoundaryOk":0,"serviceOk":110,"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-11T05:25:55.292Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":26,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T23:22:44.529Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":21,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T16:33:12.570Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":30,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T10:29:05.493Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":20,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T04:32:55.341Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":36,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T22:27:11.090Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":41,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T15:33:11.282Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":24,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T09:27:36.453Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":75,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T02:27:32.907Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":37,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T20:24:39.676Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":32,"error":null,"detail":{"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"toolCount":29,"toolsHash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","serverName":"workor-mcp","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"request_access","description":"Use when someone wants to find work/jobs (candidate) or hire/find candidates (employer) but the authenticated role tools are not usable yet. Explains role-speci"},{"name":"candidate.search_jobs","description":"Semantically rank published jobs against the authenticated candidate profile (embedding-based fit). Optional tier (best|good|weak) narrows to a match-quality ba"},{"name":"candidate.get_job","description":"Fetch a single published job by id."},{"name":"candidate.get_applications","description":"List the candidate's own job applications (newest first) with status, dates, the originating interview score, and a job summary. Returns only the caller's appli"},{"name":"candidate.set_saved_job","description":"Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Retu"},{"name":"candidate.get_saved_jobs","description":"List the candidate's saved (bookmarked) jobs, newest first. Only currently PUBLISHED jobs are returned — a job saved earlier then closed/archived is omitted."},{"name":"candidate.accept_invitation","description":"Accept an employer's invitation to a job (INVITED -> APPLIED). Idempotent — accepting an already-accepted invite succeeds. Returns NOT_INVITED when there is no "},{"name":"candidate.decline_invitation","description":"Decline an employer's invitation to a job (INVITED -> DECLINED). TERMINAL — a declined invite blocks any re-invite from the employer, so only decline when the c"},{"name":"candidate.withdraw_application","description":"Withdraw the candidate's active application to a job (APPLIED -> WITHDRAWN). Idempotent (withdrawing again succeeds). Returns NOT_APPLIED when there is no activ"},{"name":"candidate.apply_to_job","description":"Apply the candidate to a PUBLISHED job, reusing their evaluated profile interview as evidence. Idempotent (re-applying succeeds; `reused` is true when an applic"},{"name":"employer.list_jobs","description":"List jobs owned by the current employer account."},{"name":"employer.get_job","description":"Fetch a single employer job record by id. Returns NOT_FOUND for missing jobs and for jobs owned by another employer (no existence leak)."},{"name":"employer.create_job","description":"Parse raw text via Gemini AI and create a DRAFT job under the current employer. Synchronous: latency 5-30s. The agent can then call employer.update_job to refin"},{"name":"employer.update_job","description":"Update the fields of an existing employer job. Accepts a partial whitelist; rawInput and dataSource are not editable (the wrapper auto-flips dataSource to USER_"},{"name":"employer.publish_job","description":"Transition a DRAFT job to PUBLISHED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.close_job","description":"Transition a PUBLISHED job to CLOSED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in PUBLISHED."},{"name":"employer.archive_job","description":"Transition a CLOSED job to ARCHIVED. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in CLOSED."},{"name":"employer.delete_job","description":"Permanently delete a DRAFT job that was never published. Returns NOT_FOUND for missing or non-owner jobs and CONFLICT when the job is not in DRAFT."},{"name":"employer.search_candidates_for_job","description":"Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORK"},{"name":"employer.search_candidates_by_query","description":"Free-form semantic search across discoverable (interviewed) candidates with no job context. The query is embedded and candidates are ranked by semantic similari"},{"name":"employer.get_candidate","description":"Fetch a discoverable candidate by user id. Returns search-entry shape plus a light interview slice (overallScore + summary + completedAt + evaluatedAt) and `exi"},{"name":"employer.get_candidate_evidence","description":"Fetch the interview EVIDENCE (facts proven in the interview + their Q&A, the interview summary, the résumé summary, and GitHub/LinkedIn signals) for ONE candida"},{"name":"employer.invite_candidate","description":"Invite a discoverable candidate to one of the employer's PUBLISHED jobs. Creates a JobApplication with status=INVITED. If a prior WITHDRAWN row exists for this "},{"name":"employer.list_applicants","description":"List the live (APPLIED) applicants on one of the employer's jobs. The candidate showcase + interview overallScore/summary are always returned; contact fields ar"},{"name":"employer.set_review_status","description":"Update the employer review state on an application (NEW / REVIEWING / SHORTLISTED / REJECTED / HIRED). SHORTLISTED and HIRED unlock the candidate's direct conta"},{"name":"employer.get_applicant_detail","description":"Full applicant bundle: resume, interview light slice (overallScore + summary + facts), GitHub analysis, LinkedIn analysis. The verbatim transcript is delivered "},{"name":"employer.get_applicant_transcript","description":"Verbatim interview transcript for one applicant. Ownership-only gate (same as the UI Download button — no SHORTLISTED/HIRED requirement). Returns an empty array"},{"name":"employer.list_invitations","description":"List the pending (INVITED) candidates on one of the employer's jobs — candidates who have been invited but have not yet accepted or declined."},{"name":"employer.cancel_invitation","description":"Cancel a pending invitation sent to a candidate. The invitation record is deleted; the employer can re-invite the same candidate later."}],"package":null,"toolSurface":{"id":"ts_2ghyr64ek96k","endpointId":"ep_2uxy83hephkw","hash":"73681c850679cbf802be04a2822c3a9b0c45ef940ad45036d2b3b14a1652d4e4","toolCount":29,"serverName":"workor-mcp","serverVersion":"0.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-12T10:25:57.543Z","lastSeenAt":"2026-10-11T05:25:55.299Z","observations":107,"toolNames":["request_access","candidate.search_jobs","candidate.get_job","candidate.get_applications","candidate.set_saved_job","candidate.get_saved_jobs","candidate.accept_invitation","candidate.decline_invitation","candidate.withdraw_application","candidate.apply_to_job","employer.list_jobs","employer.get_job","employer.create_job","employer.update_job","employer.publish_job","employer.close_job","employer.archive_job","employer.delete_job","employer.search_candidates_for_job","employer.search_candidates_by_query","employer.get_candidate","employer.get_candidate_evidence","employer.invite_candidate","employer.list_applicants","employer.set_review_status","employer.get_applicant_detail","employer.get_applicant_transcript","employer.list_invitations","employer.cancel_invitation"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_2uxy83hephkw","url":"https://workorai.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-06T03:20:37.730Z","auth":{"observedAt":"2026-10-06T03:20:37.820Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-06T03:20:37.868Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"workorai.com","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-08-21T14:56:24.000Z","validTo":"2026-11-19T14:56:23.000Z","daysToExpiry":39,"sanCount":2,"fingerprint256":"7B:85:FF:EA:F6:9D:2D:A8:7D:79:4E:9F:A9:16:CA:16:C4:C3:46:B1:9F:CF:60:B4:75:83:41:A8:64:B7:65:75"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.work0r-ai/workorai","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.work0r-ai%2Fworkorai","firstSeenAt":"2026-09-07T06:18:08.399Z","fetchedAt":"2026-10-08T15:19:20.063Z","normalizedAt":"2026-10-08T15:19:20.063Z"}]},"firstSeenAt":"2026-09-07T06:18:08.399Z","updatedAt":"2026-10-11T05:28:13.381Z"}