{"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://staging-mcp-server-staging.up.railway.app/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"]},"get_role_status":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64}},"required":["role_id"]},"record_candidate_decision":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64},"role_candidate_id":{"type":"string","description":"The candidate row id (role_candidate_id, a UUID) from get_role_status.","maxLength":64},"decision":{"type":"string","description":"\"advance\" = move forward, \"pass\" = not a fit, \"hired\" = you hired this engineer.","enum":["advance","pass","hired"]},"reason":{"type":"string","description":"Why, in a sentence (recommended for pass): skills and fit only, no personal details.","maxLength":500}},"required":["role_id","role_candidate_id","decision"]},"request_engagement":{"type":"object","properties":{"role_id":{"type":"string","description":"Optional: the role (UUID) this request is for, so Ruzora sees the context.","maxLength":64}}},"request_founder_call":{"type":"object","properties":{"kind":{"type":"string","description":"\"kickoff\" once the MSA is signed; \"before_signing\" for questions before you sign.","enum":["before_signing","kickoff"]},"account_id":{"type":"string","description":"Optional, kickoff only: the account_id from get_role_status (engagement.account_id). Prefer role_id. Without either, your default team: the one you own, or the team you joined if yours has no roles or members.","maxLength":36},"role_id":{"type":"string","description":"Optional, kickoff only: the role you are hiring for; the kickoff is booked for that role's team.","maxLength":36}},"required":["kind"]},"request_interview":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64},"role_candidate_id":{"type":"string","description":"The candidate row id (role_candidate_id, a UUID) from get_role_status.","maxLength":64}},"required":["role_id","role_candidate_id"]},"export_candidate_packet":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64}},"required":["role_id"]},"import_candidates":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64},"candidates":{"type":"array","description":"Up to 25 candidates. Leave it out and set upload_link to get a link for a file instead.","items":{"type":"object","properties":{"name":{"type":"string","description":"The candidate's full name.","maxLength":200},"email":{"type":"string","description":"Optional: their email (used only to reach them later, e.g. a challenge).","maxLength":254},"cv_text":{"type":"string","description":"The CV as plain text. Ruzora never opens links: paste the text.","maxLength":60000}},"required":["name"]},"maxItems":25},"upload_link":{"type":"boolean","description":"true = return a one-time upload link (30 minutes) for a CSV (name, email, cv_text) or a ZIP of PDF CVs, for the user to open in a browser."}},"required":["role_id"]},"rank_candidates":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64},"role_candidate_ids":{"type":"array","description":"Optional: only these candidates (role_candidate_id values from get_role_status). Default: all of your own candidates on the role.","items":{"type":"string","maxLength":64},"maxItems":200}},"required":["role_id"]},"summarize_candidates":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64},"blind":{"type":"boolean","description":"true = no names or emails (first name + last initial only)."},"role_candidate_ids":{"type":"array","description":"Optional: only these candidates (role_candidate_id values from get_role_status). Default: all of your own candidates on the role.","items":{"type":"string","maxLength":64},"maxItems":200}},"required":["role_id"]},"confirm_candidate_informed":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64},"role_candidate_id":{"type":"string","description":"The candidate row id (role_candidate_id, a UUID) from get_role_status.","maxLength":64}},"required":["role_id","role_candidate_id"]},"plan_next_assessment":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64},"role_candidate_id":{"type":"string","description":"The candidate row id (role_candidate_id, a UUID) from get_role_status.","maxLength":64},"requested_type":{"type":"string","description":"Optional: a specific type the buyer asked for. For a Ruzora engineer only take_home (at most 2 hours, needs Ruzora's approval and the engineer's agreement).","enum":["take_home","async_coding","system_design","live_pairing","seeded_bug"]}},"required":["role_id","role_candidate_id"]},"create_assessment":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64},"role_candidate_id":{"type":"string","description":"The candidate row id (role_candidate_id, a UUID) from get_role_status.","maxLength":64},"type":{"type":"string","description":"Optional, default take_home. async_coding points at Ruzora's existing calibrated coding test.","enum":["take_home","async_coding"]},"assessment_id":{"type":"string","description":"Optional: an assessment id from an earlier create_assessment call. Alone it returns the status and the preview; with send: true it emails it to the candidate.","maxLength":64},"send":{"type":"boolean","description":"With assessment_id: email the ready assessment to the candidate. Only when the user asked to send it; a request to create or preview one is not a send."},"email":{"type":"string","description":"Only with send, for your own candidate with no email on file: where to send it.","maxLength":254}},"required":["role_id","role_candidate_id"]},"create_live_pad":{"type":"object","properties":{"role_id":{"type":"string","description":"The role id (a UUID) from save_role or the role page in the Sol app.","maxLength":64},"role_candidate_id":{"type":"string","description":"The candidate row id (role_candidate_id, a UUID) from get_role_status.","maxLength":64},"starts_at":{"type":"string","description":"Your own candidates only: when the call starts (ISO 8601, e.g. 2026-11-03T15:00:00Z). A Ruzora engineer's pad follows the booked interview.","maxLength":40},"language":{"type":"string","description":"Optional: python, javascript, typescript, java, go, … Default: the role's stack.","maxLength":20},"new":{"type":"boolean","description":"Replace the current pad (its links stop working). Default false: the current pad is returned."}},"required":["role_id","role_candidate_id"]}}}}]},"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":[]}}}]},{"id":"get_role_status","name":"Get a Role's Hiring Status","description":"See where a saved role stands with Ruzora: your company's agreement status and next step, the shortlisted engineers (blind until the kickoff call, named after) with your decision on each, and interview states. Read only. Never shows a price. 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":["role-status","blind-board"],"examples":["{\"skill\":\"get_role_status\",\"input\":{\"role_id\":\"<role uuid from save_role>\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"record_candidate_decision","name":"Record a Decision on a Candidate","description":"Record your decision on a shortlisted engineer for one of your roles: advance, pass (with a short reason) or hired. Sends the decision and reason to Ruzora, which uses them to improve the next matches. It never contacts the engineer and never sends an offer. 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":["candidate-decision"],"examples":["{\"skill\":\"record_candidate_decision\",\"input\":{\"role_id\":\"<role uuid>\",\"role_candidate_id\":\"<from get_role_status>\",\"decision\":\"advance\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"request_engagement","name":"Request Ruzora's MSA","description":"Ask Ruzora for the standard MSA (master services agreement) for your company. Sends the request to Ruzora and returns the key terms in plain words and where the signing link goes: your verified work email, never this result. It never quotes a price. 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":["msa-request","service-agreement"],"examples":["{\"skill\":\"request_engagement\",\"input\":{\"role_id\":\"<role uuid>\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"request_founder_call","name":"Book a Call with Ruzora's Founder","description":"Get the booking link for a video call with Ruzora's founder: \"kickoff\" after your MSA is signed (names and interviews open after it), or \"before_signing\" to talk first. Sends the request to Ruzora; nothing is booked until you pick a time. 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":["kickoff-call","founder-call"],"examples":["{\"skill\":\"request_founder_call\",\"input\":{\"kind\":\"kickoff\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"request_interview","name":"Request an Interview with a Ruzora Engineer","description":"Ask for an interview with a shortlisted Ruzora engineer. Sends nothing to Ruzora yet: interviews open after your company's MSA is signed and the kickoff call is done, and scheduling arrives in a later release, so today it returns your next step. 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":["interview-request"],"examples":["{\"skill\":\"request_interview\",\"input\":{\"role_id\":\"<role uuid>\",\"role_candidate_id\":\"<from get_role_status>\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"export_candidate_packet","name":"Export a Role's Candidate Packet","description":"Export a role's candidate packet as JSON for your ATS: each shortlisted engineer's profile, evidence and your decisions. Blind (no names, no contact details) until your company's kickoff call is done. Read only. Never shows a price. 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":["ats-export","candidate-packet"],"examples":["{\"skill\":\"export_candidate_packet\",\"input\":{\"role_id\":\"<role uuid>\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"import_candidates","name":"Import Your Own Candidates to a Role","description":"Add up to 25 of your own candidates to one of your roles. Sends their names, emails and CV text to Ruzora, or returns a one-time upload link for a CSV or a ZIP of PDF CVs. They stay yours, deleted with the role and never added to Ruzora's bench. Each CV is checked for prompt injection. 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":["own-candidates","cv-import"],"examples":["{\"skill\":\"import_candidates\",\"input\":{\"role_id\":\"<role uuid>\",\"candidates\":[{\"name\":\"Jane Smith\",\"cv_text\":\"<the CV as plain text>\"}]}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"rank_candidates","name":"Rank Your Own Candidates for a Role","description":"Score your own candidates on a role against its scorecard (stack, experience, must-haves), best first. Every score quotes the CV line it comes from. Also says how Ruzora's vetted bench compares when there is enough data. Read only; you decide. 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":["candidate-ranking","evidence-scoring"],"examples":["{\"skill\":\"rank_candidates\",\"input\":{\"role_id\":\"<role uuid>\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"summarize_candidates","name":"Summarize Your Own Candidates for a Role","description":"One short page per own candidate on a role (headline, years, skills, strengths with the CV quote, gaps, your decision) plus a pipeline summary. Set blind to hide names and emails, e.g. to share with a colleague. Read only. 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":["candidate-summary","pipeline-summary"],"examples":["{\"skill\":\"summarize_candidates\",\"input\":{\"role_id\":\"<role uuid>\",\"blind\":true}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"confirm_candidate_informed","name":"Confirm a Candidate Was Informed","description":"Record that you told one of your own candidates their CV is processed by Ruzora for this role. Sends that confirmation to Ruzora; it is required before any challenge or assessment goes to them. It does not contact the candidate. 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":["candidate-consent"],"examples":["{\"skill\":\"confirm_candidate_informed\",\"input\":{\"role_id\":\"<role uuid>\",\"role_candidate_id\":\"<from import_candidates>\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"plan_next_assessment","name":"Plan a Candidate's Next Assessment","description":"Propose the next test for a candidate on one of your roles, without repeating one they did: blocks, length, stop rules and integrity flags. Ruzora engineers are already vetted (live coding happens in the interview). Read only: it sends nothing. Never shows a price. 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":["assessment-plan","technical-assessment"],"examples":["{\"skill\":\"plan_next_assessment\",\"input\":{\"role_id\":\"<role uuid>\",\"role_candidate_id\":\"<from get_role_status>\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"create_assessment","name":"Create a Candidate Assessment","description":"Create a take-home work sample for a candidate on one of your roles. Sends the request to Ruzora, which checks it in a sandbox before you see it. Call again with assessment_id for the preview, and with send: true to email it to the candidate, only when the user asks to send it. Never shows a price. 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":["take-home","technical-assessment"],"examples":["{\"skill\":\"create_assessment\",\"input\":{\"role_id\":\"<role uuid>\",\"role_candidate_id\":\"<from get_role_status>\",\"type\":\"take_home\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]},{"id":"create_live_pad","name":"Create a Live Coding Pad","description":"Create a live coding pad for an interview: an interviewer link (language, problem, run, review flags) and a candidate link (type and run). Opens 15 min before, locks read only 2 h after. Sends the role and candidate ids to Ruzora. Paste or focus changes are review flags, never a rejection. 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":["live-coding","technical-interview"],"examples":["{\"skill\":\"create_live_pad\",\"input\":{\"role_id\":\"<role uuid>\",\"role_candidate_id\":\"<from get_role_status>\"}}"],"inputModes":["application/json"],"outputModes":["text/plain","text/markdown","application/json"],"securityRequirements":[{"schemes":{"ruzoraBuyerToken":{"list":[]}}}]}]}