Back to Ruzora Hiring Agent
Card snapshot
www.ruzora.com
·
2026-11-08 14:07:55 UTC
·
3247bbe3e732e7d880e089aa98026f8e4d517d79956c534358d4223933000926
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"name": "Ruzora Hiring Agent",
"description": "Ruzora connects US companies with vetted senior software engineers in Latin America. Agents can browse blind profiles of vetted engineers, verify a Ruzora Vetted badge, request a vetted shortlist (within 72 hours), check fit for a hiring quote, send a candidate Ruzora's coding challenge and track a coding challenge's status. Profiles stay blind until a service agreement is signed. Read skills are open; skills that send data need a verified work email (verify_work_email, then confirm_work_email, then \"Authorization: Bearer <buyer_token>\"). Tasks complete synchronously; a refused task says the next step in its status message.",
"supportedInterfaces": [
{
"url": "https://mcp.ruzora.com/a2a",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
}
],
"provider": {
"organization": "Ruzora",
"url": "https://www.ruzora.com"
},
"version": "1.0.0",
"documentationUrl": "https://www.ruzora.com/developers/mcp",
"iconUrl": "https://www.ruzora.com/ruzora_logo.png",
"capabilities": {
"streaming": false,
"pushNotifications": false,
"extendedAgentCard": false,
"extensions": [
{
"uri": "https://www.ruzora.com/a2a/extensions/skill-input-schema/v1",
"description": "JSON Schema of each skill's \"input\" object (A2A v1.0.1). Optional: unknown fields are ignored, invalid input comes back as TASK_STATE_INPUT_REQUIRED naming the field.",
"required": false,
"params": {
"skills": {
"search_vetted_engineers": {
"type": "object",
"properties": {
"stack": {
"type": "array",
"description": "Technologies, e.g. [\"React\", \"Node\", \"AWS\"]",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 8
},
"level": {
"type": "string",
"description": "Optional seniority filter",
"enum": [
"Mid",
"Senior",
"Staff"
]
},
"min_overlap_hours": {
"type": "number",
"description": "Optional minimum overlap with US working hours",
"minimum": 0,
"maximum": 10
},
"page": {
"type": "number",
"description": "Optional page of results: 1 (default) is the best matches. Send 2, 3... only when the user asks to see more engineers for the same search; the previous result names the next page.",
"minimum": 1,
"maximum": 10
}
},
"required": [
"stack"
]
},
"verify_ruzora_badge": {
"type": "object",
"properties": {
"badge": {
"type": "string",
"description": "Badge ID (a UUID) or the badge/verification URL",
"maxLength": 300
}
},
"required": [
"badge"
]
},
"get_vetting_status": {
"type": "object",
"properties": {
"status_url": {
"type": "string",
"description": "The status page URL (or its token) returned when the challenge was sent",
"maxLength": 400
}
},
"required": [
"status_url"
]
},
"verify_work_email": {
"type": "object",
"properties": {
"work_email": {
"type": "string",
"description": "The user's WORK email (personal inboxes are refused)",
"maxLength": 254,
"format": "email"
},
"for_tool": {
"type": "string",
"description": "Which action this verification is for (the email names it, so the user knows what they confirm)",
"enum": [
"request_vetted_shortlist",
"check_hiring_fit",
"send_coding_challenge"
]
}
},
"required": [
"work_email"
]
},
"confirm_work_email": {
"type": "object",
"properties": {
"work_email": {
"type": "string",
"description": "The same work email given to verify_work_email",
"maxLength": 254,
"format": "email"
},
"code": {
"type": "string",
"description": "The 6-digit code from the email, exactly as the user typed it",
"maxLength": 12
},
"verification_id": {
"type": "string",
"description": "From verify_work_email: always pass it, with the code, or alone once the user clicked \"Yes, this is me\" in the email",
"maxLength": 64
}
},
"required": [
"work_email"
]
},
"request_vetted_shortlist": {
"type": "object",
"properties": {
"full_name": {
"type": "string",
"description": "Hiring manager full name",
"maxLength": 160
},
"work_email": {
"type": "string",
"description": "Work email (personal inboxes are refused). The shortlist goes here.",
"maxLength": 254,
"format": "email"
},
"company": {
"type": "string",
"description": "Company name",
"maxLength": 200
},
"role": {
"type": "string",
"description": "Role title, e.g. \"Senior backend engineer\"",
"maxLength": 200
},
"seniority": {
"type": "string",
"description": "Seniority: mid (3-5 years), senior (5-8 years) or staff (8+ years, lead)",
"enum": [
"mid",
"senior",
"staff"
]
},
"required_skills": {
"type": "array",
"description": "Must-have skills only (hard filter), e.g. [\"Python\", \"Postgres\"]",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 8
},
"preferred_skills": {
"type": "array",
"description": "Nice-to-have skills (ranking only)",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 12
},
"engineers": {
"type": "number",
"description": "How many engineers (default 1)",
"minimum": 1,
"maximum": 20
},
"timeline": {
"type": "string",
"description": "When they should start, e.g. \"within a month\"",
"maxLength": 100
},
"notes": {
"type": "string",
"description": "Context: what they will own, time-zone needs, the role scorecard summary",
"maxLength": 2000
}
},
"required": [
"full_name",
"work_email",
"company",
"role",
"seniority"
]
},
"check_hiring_fit": {
"type": "object",
"properties": {
"full_name": {
"type": "string",
"description": "Full name",
"maxLength": 200
},
"work_email": {
"type": "string",
"description": "Work email",
"maxLength": 254,
"format": "email"
},
"company": {
"type": "string",
"description": "Company name",
"maxLength": 200
},
"your_title": {
"type": "string",
"description": "The asker's own position: founder_ceo, cto_vp_eng, eng_manager, hr_ops_finance or other",
"enum": [
"founder_ceo",
"cto_vp_eng",
"eng_manager",
"hr_ops_finance",
"other"
]
},
"role_count": {
"type": "string",
"description": "How many engineers",
"enum": [
"one",
"two_three",
"four_plus",
"not_sure"
]
},
"runway": {
"type": "string",
"description": "Company runway: under 6 months, 6-12, 12-18, 18+, or bootstrapped without revenue",
"enum": [
"lt_6mo",
"6_12mo",
"12_18mo",
"18_plus_mo",
"bootstrapped_no_revenue"
]
},
"seat_budget": {
"type": "string",
"description": "Monthly budget per engineer: under $4,500, $4,500-5,999, $6,000-7,999, $8,000+, or not sure",
"enum": [
"lt_4500",
"4500_5999",
"6000_7999",
"8000_plus",
"not_sure"
]
},
"timing": {
"type": "string",
"description": "When you need them: asap, within_month, one_to_three_months, three_plus or no_timeline",
"enum": [
"asap",
"within_month",
"one_to_three_months",
"three_plus",
"no_timeline"
]
}
},
"required": [
"full_name",
"work_email",
"your_title",
"role_count",
"runway",
"seat_budget",
"timing"
]
},
"send_coding_challenge": {
"type": "object",
"properties": {
"requester_name": {
"type": "string",
"description": "Full name of the person hiring",
"maxLength": 160
},
"work_email": {
"type": "string",
"description": "Their WORK email (personal inboxes are refused). The report and status go here.",
"maxLength": 254,
"format": "email"
},
"company": {
"type": "string",
"description": "Hiring company name",
"maxLength": 200
},
"role": {
"type": "string",
"description": "Role being hired, e.g. \"Senior backend engineer\"",
"maxLength": 200
},
"stack": {
"type": "string",
"description": "Main stack, e.g. \"Python, Django, Postgres\"",
"maxLength": 300
},
"candidate_name": {
"type": "string",
"description": "Candidate's name",
"maxLength": 160
},
"candidate_github_url": {
"type": "string",
"description": "Optional GitHub profile URL",
"maxLength": 300,
"format": "uri"
},
"candidate_linkedin_url": {
"type": "string",
"description": "Optional LinkedIn profile URL",
"maxLength": 300,
"format": "uri"
},
"candidate_informed": {
"type": "boolean",
"description": "True only when the user has confirmed the candidate knows they will receive a technical assessment from Ruzora on the company's behalf."
}
},
"required": [
"requester_name",
"work_email",
"company",
"role",
"candidate_name",
"candidate_informed"
]
}
}
}
}
]
},
"securitySchemes": {
"ruzoraBuyerToken": {
"httpAuthSecurityScheme": {
"scheme": "Bearer",
"bearerFormat": "Ruzora buyer token",
"description": "Proof that the user owns a work email, valid 7 days. Get it with the verify_work_email skill (emails the user a 6-digit code) and then confirm_work_email (code + verification_id). Required only by skills that list this scheme."
}
}
},
"defaultInputModes": [
"application/json"
],
"defaultOutputModes": [
"text/plain",
"text/markdown",
"application/json"
],
"skills": [
{
"id": "search_vetted_engineers",
"name": "Search Ruzora's Vetted Engineers",
"description": "See blind profiles of senior engineers in Latin America who already passed Ruzora's coding and interview vetting and are available now, filtered by stack, level and US-hours overlap. Call it with SendMessage: one data part {\"skill\": \"<id>\", \"input\": {...}} (mediaType application/json); the input fields are in the card extension https://www.ruzora.com/a2a/extensions/skill-input-schema/v1.",
"tags": [
"hiring",
"latam-engineers",
"blind-profiles",
"talent-search"
],
"examples": [
"{\"skill\":\"search_vetted_engineers\",\"input\":{\"stack\":[\"Python\",\"Postgres\"],\"level\":\"Senior\"}}"
],
"inputModes": [
"application/json"
],
"outputModes": [
"text/plain",
"text/markdown",
"application/json"
]
},
{
"id": "verify_ruzora_badge",
"name": "Verify a Ruzora Vetted Badge",
"description": "Check that a candidate's \"Ruzora Vetted\" badge is real and current, which stacks it covers, and when the vetting happened. Pass the badge ID or badge URL. Call it with SendMessage: one data part {\"skill\": \"<id>\", \"input\": {...}} (mediaType application/json); the input fields are in the card extension https://www.ruzora.com/a2a/extensions/skill-input-schema/v1.",
"tags": [
"badge-verification",
"credential-check"
],
"examples": [
"{\"skill\":\"verify_ruzora_badge\",\"input\":{\"badge\":\"<the badge link exactly as the candidate shared it>\"}}"
],
"inputModes": [
"application/json"
],
"outputModes": [
"text/plain",
"text/markdown",
"application/json"
]
},
{
"id": "get_vetting_status",
"name": "Check a Ruzora Vetting Request",
"description": "Check progress on a coding challenge you sent through Ruzora: not started, in progress, finished, or expired, and scores once the report is delivered. Pass the status page URL. Call it with SendMessage: one data part {\"skill\": \"<id>\", \"input\": {...}} (mediaType application/json); the input fields are in the card extension https://www.ruzora.com/a2a/extensions/skill-input-schema/v1.",
"tags": [
"challenge-status",
"progress-tracking"
],
"examples": [
"{\"skill\":\"get_vetting_status\",\"input\":{\"status_url\":\"https://www.ruzora.com/vetting/status/<token>\"}}"
],
"inputModes": [
"application/json"
],
"outputModes": [
"text/plain",
"text/markdown",
"application/json"
]
},
{
"id": "verify_work_email",
"name": "Verify a Work Email",
"description": "Step 1 before a Ruzora action that needs a verified buyer: emails the user a 6-digit code and a confirm link. The user reads the code back; confirm_work_email takes it. Sends the email address to Ruzora. Call it with SendMessage: one data part {\"skill\": \"<id>\", \"input\": {...}} (mediaType application/json); the input fields are in the card extension https://www.ruzora.com/a2a/extensions/skill-input-schema/v1.",
"tags": [
"email-verification",
"one-time-code"
],
"examples": [
"{\"skill\":\"verify_work_email\",\"input\":{\"work_email\":\"cto@yourcompany.com\",\"for_tool\":\"request_vetted_shortlist\"}}"
],
"inputModes": [
"application/json"
],
"outputModes": [
"text/plain",
"text/markdown",
"application/json"
]
},
{
"id": "confirm_work_email",
"name": "Confirm a Work Email",
"description": "Step 2: the 6-digit code the user read from the email, with the verification_id from verify_work_email (or the verification_id alone once they clicked the link), becomes a buyer_token for verified Ruzora actions, valid 7 days, and opens their Sol account. Sends the email and code to Ruzora. Call it with SendMessage: one data part {\"skill\": \"<id>\", \"input\": {...}} (mediaType application/json); the input fields are in the card extension https://www.ruzora.com/a2a/extensions/skill-input-schema/v1.",
"tags": [
"code-confirmation",
"buyer-token"
],
"examples": [
"{\"skill\":\"confirm_work_email\",\"input\":{\"work_email\":\"cto@yourcompany.com\",\"code\":\"123456\",\"verification_id\":\"<from verify_work_email>\"}}"
],
"inputModes": [
"application/json"
],
"outputModes": [
"text/plain",
"text/markdown",
"application/json"
]
},
{
"id": "request_vetted_shortlist",
"name": "Request a Vetted Engineer Shortlist",
"description": "Ask Ruzora for a shortlist of vetted senior engineers in Latin America for a role (ideally from a role scorecard). A vetted shortlist within 72 hours; profiles are blind until an agreement is signed. Needs a work email. Sends the name, email and company given to Ruzora. Needs a verified work email: send \"Authorization: Bearer <buyer_token>\" (from verify_work_email then confirm_work_email). Call it with SendMessage: one data part {\"skill\": \"<id>\", \"input\": {...}} (mediaType application/json); the input fields are in the card extension https://www.ruzora.com/a2a/extensions/skill-input-schema/v1.",
"tags": [
"shortlist",
"candidate-matching",
"72-hour-turnaround"
],
"examples": [
"{\"skill\":\"request_vetted_shortlist\",\"input\":{\"full_name\":\"Alex Kim\",\"work_email\":\"cto@yourcompany.com\",\"company\":\"Your Company\",\"role\":\"Senior backend engineer\",\"seniority\":\"senior\",\"required_skills\":[\"Python\",\"Postgres\"]}}"
],
"inputModes": [
"application/json"
],
"outputModes": [
"text/plain",
"text/markdown",
"application/json"
],
"securityRequirements": [
{
"schemes": {
"ruzoraBuyerToken": {
"list": []
}
}
}
]
},
{
"id": "check_hiring_fit",
"name": "Check Fit for a Hiring Quote",
"description": "Answer Ruzora's 5 quick questions (roles, runway, budget per engineer, timing) to see whether a quote makes sense and the next step to it: usually a 15-minute call with the founder. Explains the flat monthly pricing; no price list. Sends the name, email and company given to Ruzora. Needs a verified work email: send \"Authorization: Bearer <buyer_token>\" (from verify_work_email then confirm_work_email). Call it with SendMessage: one data part {\"skill\": \"<id>\", \"input\": {...}} (mediaType application/json); the input fields are in the card extension https://www.ruzora.com/a2a/extensions/skill-input-schema/v1.",
"tags": [
"pricing-quote",
"fit-check"
],
"examples": [
"{\"skill\":\"check_hiring_fit\",\"input\":{\"full_name\":\"Alex Kim\",\"work_email\":\"cto@yourcompany.com\",\"your_title\":\"cto_vp_eng\",\"role_count\":\"one\",\"runway\":\"12_18mo\",\"seat_budget\":\"6000_7999\",\"timing\":\"within_month\"}}"
],
"inputModes": [
"application/json"
],
"outputModes": [
"text/plain",
"text/markdown",
"application/json"
],
"securityRequirements": [
{
"schemes": {
"ruzoraBuyerToken": {
"list": []
}
}
}
]
},
{
"id": "send_coding_challenge",
"name": "Send a Candidate the Ruzora Coding Challenge",
"description": "Runs Ruzora's coding challenge + technical questions (~25 min, free) on a candidate the user found; returns a candidate link and a status link. Needs the user's confirmation that the candidate knows. Sends both names, the email, company and profile links to Ruzora. Needs a verified work email: send \"Authorization: Bearer <buyer_token>\" (from verify_work_email then confirm_work_email). Call it with SendMessage: one data part {\"skill\": \"<id>\", \"input\": {...}} (mediaType application/json); the input fields are in the card extension https://www.ruzora.com/a2a/extensions/skill-input-schema/v1.",
"tags": [
"coding-challenge",
"technical-assessment"
],
"examples": [
"{\"skill\":\"send_coding_challenge\",\"input\":{\"requester_name\":\"Alex Kim\",\"work_email\":\"cto@yourcompany.com\",\"company\":\"Your Company\",\"role\":\"Senior backend engineer\",\"candidate_name\":\"Candidate Name\",\"candidate_informed\":true}}"
],
"inputModes": [
"application/json"
],
"outputModes": [
"text/plain",
"text/markdown",
"application/json"
],
"securityRequirements": [
{
"schemes": {
"ruzoraBuyerToken": {
"list": []
}
}
}
]
}
]
}