Skip to content
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": []
            }
          }
        }
      ]
    }
  ]
}