{"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","engineers","bench","blind-profiles","latin-america"],"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":["hiring","verification","badge"],"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":["hiring","coding-challenge","status"],"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":["auth","work-email"],"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":["auth","work-email"],"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":["hiring","shortlist","engineers"],"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":["hiring","pricing","fit"],"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":["hiring","coding-challenge","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":[]}}}]}]}