Show HN: OJCP – an open protocol for agent-consumable job data
Introducing OJCP: An Open Protocol for Agent-Consumable Job Data
OJCP (Open Job Context Protocol) is a v0.1 draft specification designed as the universal standard for how AI agents locate, analyze, and interact with employment opportunities.
Rather than relying on fragmented web scraping, OJCP allows agents to navigate the job market through a structured, machine-readable framework.
Governance Model: To ensure neutrality, OJCP is managed by an independent steering committee. It is a coalition-driven effort involving ATS vendors, job boards, staffing agencies, employers, and agent platforms. Each member holds exactly one seat with
no veto power, ensuring no single vendor controls the standard.
🌐 The Vision: Built for the Agentic Web
The goal of OJCP is to replace opaque, human-only application portals with a shared language that is structured, discoverable, and respects user privacy.
Key Capabilities
- Universal MCP Integration: Any client utilizing the Model Context Protocol (MCP) can immediately execute
search_jobs,get_job_detail, andbegin_application. - Automated Discovery: Providers host a manifest at
/.well-known/ojcp.json, allowing agents to automatically detect available tools and application workflows. - Privacy-First Matching: By utilizing resume embeddings, agents can calculate fit-scoring without the need to transmit Personally Identifiable Information (PII).
- Contextual Ranking: Agents provide a
CandidateContextto receive personalized results, where providers return afit_scoreand afit_rationale. - Native Browser Access: Through
navigator.modelContext, browser-based agents can interact with OJCP tools directly.
The Fit-Score Logic
The matching process can be represented as a function of the candidate's profile and the job requirements:
🛠 Technical Specification
OJCP consists of seven core schemas and six standardized MCP tools. While search_jobs is a mandatory implementation, all other tools are highly recommended. For proprietary features, providers should use namespaced identifiers (e.g., acme:get_referral_link).
Standard MCP Tools
search_jobs(Required)get_job_detailget_employer_contextbegin_applicationsubmit_applicationcheck_application_status
Schema Definitions
| Schema | File | Key Components |
|---|---|---|
| Job Manifest | manifest.json | ojcp_version, provider, tools, mcp_endpoint, auth, rate_limits |
| Job Posting | job-posting.json | Extends schema.org/JobPosting with ojcp_id, skills_required, experienceLevel, apply_paths, urgency |
| Candidate Context | candidate-context.json | consent_scope, skills, experience_years, employment_type_preference |
| Agent Declaration | agent-declaration.json | agent_id, acting_on_behalf_of, interaction_mode, user_consent_token |
| Verification Step | verification-step.json | step_id, type, verifier_id, verification_url, human_required |
| Verification Proof | verification-proof.json | JWS proof containing iss, aud, sub, iat, exp, nonce (No PII); subject_hash (SHA-256) |
| Verifier Manifest | verifier-manifest.json | Found at /.well-known/ojcp-verifier.json; includes verification_types, proof_format (jws|jws+jwe), public_keys_url (JWKS) |
⚙️ How It Works
The lifecycle of an OJCP interaction follows a linear progression from discovery to tracking.
- Discover: The agent queries the OJCP Registry or probes the provider's
/.well-known/ojcp.jsonto identify tools and auth requirements. - Search: The agent executes
search_jobs. IfCandidateContextis provided, the provider returns a personalizedfit_score. - Apply: The agent initiates the process via
begin_application, passing theagent_declarationand a user consent token. - Track: The agent monitors the pipeline using
check_application_statusfor structured updates.
📖 Examples & Implementation
Discovery Payload
Below is an example of a provider's manifest file:
{
"ojcp_version": 0.1,
"provider": {
"name": "Acme Careers",
"employer_id": "acme",
"description": "Global leader in industrial innovation",
"industries": ["manufacturing", "engineering"],
"hq_location": { "city": "Chicago", "state": "IL", "country": "US" }
},
"mcp_endpoint": "https://careers.acme.com/ojcp/mcp",
"tools": [
"search_jobs",
"get_job_detail",
"get_employer_context",
"begin_application",
"check_application_status"
],
"apply_paths": ["ats_direct", "provider_hosted"],
"auth": {
"required": true,
"optional_scopes": ["apply", "candidate_data"]
},
"rate_limits": {
"anonymous_rps": 10,
"authenticated_rps": 50,
"burst_limit": 100
}
}
Normalized Apply Paths
OJCP categorizes application methods so agents can determine the best path of action.
| Type | Description | Agent Support |
|---|---|---|
ats_direct | Direct submission to ATS (e.g., Greenhouse, Lever) | Varies |
provider_hosted | Provider manages flow and delivers to ATS | Full Support |
platform_native | Third-party flow (e.g., Indeed Easy Apply) | Limited |
email | Legacy email submissions | Not Supported |
external_redirect | Redirect to an opaque external page | Not Supported |
custom | Non-standard/Conversational mechanisms | Varies |
🚀 Get Started
Try the Live Playground
You can test the protocol against mock data using the following endpoints:
- MCP Endpoint:
/api/mcp - Manifest:
/.well-known/ojcp.json
Available Test Actions:
- Execute
search_jobs(Filter by Min Salary or Remote) - Execute
get_job_detail(Try ID:globex:sa-2026-004) - Execute
begin_application(Requires Session Token) - Execute
submit_application(Requires Mock Proof) - Execute
check_status(Requires Application ID)
Contribution
Whether you are developing an agent, managing an ATS, or running a job board, the specification is open for contributions.
- Read the Full Spec: Detailed security and tool requirements.
- Explore Schemas: Access JSON Schemas for
JobPostingandAgentDeclaration. - GitHub: View the source and submit PRs.