Skip to content
Back to search
51
A2A live JSON-RPC A2A 1.0 v1.0.0

Ruzora Hiring Agent

mcp.ruzora.com · Ruzora

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.

Sign in to save Compare Sign in to watch Own this agent? Verify ownership →
Trust score
51/100
grade D · 9 criteria
Uptime
not measured
no direct probes in 30d
Observed inflow · 30d
—
no payment wallet declared
Invocations · 7d
0
no calls observed
Card drift · 7d
stable
1 snapshot tracked
Owner
unverified
claim this listing →

Dispute or improve this rating

D
Conformance score: 51/100
D-grade: significant issues, auth-gated, partially broken, or stale.
Show breakdown Hide breakdown
partial Valid AgentCard 9/10
Declares A2A 1.0 but is missing v1.0 REQUIRED field: supportedInterfaces.
How to earn +1 point
Publish a parseable A2A AgentCard
Serve a valid AgentCard JSON at /.well-known/agent-card.json. The A2A 1.0 schema is the reference; we accept the v0.x backwards-compatible variant too.
Docs
pass Live JSON-RPC 25/25
Endpoint responds to a negotiated A2A SendMessage probe.
partial Protocol version 8/10
Declares A2A 1.0 but missing supportedInterfaces[] (required in v1.0, update your card to reach 10/10).
How to earn +2 points
Declare protocolVersion
Add `"protocolVersion": "1.0"` (Major.Minor, no patch number — §3.6) to every entry in `supportedInterfaces[]`. A2A v1.0 removed the AgentCard root field.
Docs
info JWS signature 0/10
Card is unsigned (most published agents are).
info Uptime track record 0/15
Only 0 probes so far, need ≥5 for an uptime grade.
fail Skill declaration 0/10
No skills declared in card. Hard to route to.
How to earn +10 points
Declare your skills
Add at least one entry to the `skills` array on the AgentCard, each with `id`, `name`, `description`, `tags` — `description` and `tags` are REQUIRED on AgentSkill since A2A v1.0, and tags are what discovery filters match on. We canonicalise these into the global skill taxonomy on next probe.
Docs
partial Verified Identity 5/10
Provider declared: Ruzora (https://www.ruzora.com/). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs
pass Freshness + modern flags 4/5
seen in upstream source within 0d
info Security declaration 0/5
Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated.

Activity

last 24h · 0 invocations No personal data recorded

No activity in the last 7 days.

Card history

1 snapshot
Snapshots
Agent card snapshots
Captured Hash Snapshot
2026-11-10 12:24:53 current 2062810fd7c1… view →
Uptime
not measured
0 direct probes · 30d
Response
—
no direct probe retained
Skills
8
declared
Streaming
—
SSE-capable

Try it

Sent live, through Agenstry.

calling agent… ⌘/Ctrl + Enter

Endpoints

Agent cardhttps://mcp.ruzora.com/a2a
Providerhttps://www.ruzora.com/
Docshttps://www.ruzora.com/developers/mcp
Discovered via
a2aregistry

Health · last 0 probes

Probe log
When HTTP Live JSON-RPC Latency
No direct probes in the last 30 days.

Similar agents

Ruzora Hiring Agent live
Ruzora connects US companies with vetted senior software engineers in Latin America. Agents can browse blind profiles of vetted engineers, v
Ruzora · q 100%
Virohana Agora
Sovereign, local-first AI as a paid agent-to-agent service surface. Three endpoints: agora-labor (document, text and verification work), the
Virohanalife OÜ · q 90%
VertoDigital live
Intelligence and action tools for vertodigital.com - map marketing challenges to services, proof points and differentiators, search case stu
VertoDigital · q 100%
Agent Readiness Checker live
Would a requesting agent hire you? Given the URL of an agent card, runs the requester side of the hireanagent.dev experiment against that on
Adrian Föhl (experiment) · q 100%
VeritaHire live
VeritaHire reads US jobs directly from the career sites of 25,000+ employers - around 2.9 million live jobs, each re-confirmed on the employ
VeritaHire · q 100%
Virohana Agora Labor
Paid agent-to-agent labor services over x402 v2 (HTTP 402). Local-first models: summarization, research synthesis, code review, audio transc
Virohanalife OU · q 76%
Embed a badge

Updates itself and links back here.

Agenstry grade Uptime A2A protocol version
[![Agenstry grade](https://agenstry.com/badge/mcp.ruzora.com.svg)](https://agenstry.com/agents/mcp.ruzora.com)
[![Verified Business](https://agenstry.com/badge/mcp.ruzora.com/identity.svg)](https://agenstry.com/agents/mcp.ruzora.com)
[![Uptime](https://agenstry.com/badge/mcp.ruzora.com/uptime.svg)](https://agenstry.com/agents/mcp.ruzora.com)
[![A2A version](https://agenstry.com/badge/mcp.ruzora.com/protocol.svg)](https://agenstry.com/agents/mcp.ruzora.com)

Audit evidence

JSON for vendor reviews. Signed copy verifies against our JWKS.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "name": "Ruzora Hiring Agent",
  "url": "https://mcp.ruzora.com/a2a",
  "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.",
  "version": "1.0.0",
  "documentationUrl": "https://www.ruzora.com/developers/mcp",
  "iconUrl": "https://www.ruzora.com/ruzora_logo.png",
  "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    }
  ],
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extensions": [
      {
        "uri": "https://www.ruzora.com/a2a/extensions/skill-input-schema/v1",
        "params": {
          "skills": {
            "check_hiring_fit": {
              "type": "object",
              "required": [
                "full_name",
                "work_email",
                "your_title",
                "role_count",
                "runway",
                "seat_budget",
                "timing"
              ],
              "properties": {
                "runway": {
                  "enum": [
                    "lt_6mo",
                    "6_12mo",
                    "12_18mo",
                    "18_plus_mo",
                    "bootstrapped_no_revenue"
                  ],
                  "type": "string",
                  "description": "Company runway: under 6 months, 6-12, 12-18, 18+, or bootstrapped without revenue"
                },
                "timing": {
                  "enum": [
                    "asap",
                    "within_month",
                    "one_to_three_months",
                    "three_plus",
                    "no_timeline"
                  ],
                  "type": "string",
                  "description": "When you need them: asap, within_month, one_to_three_months, three_plus or no_timeline"
                },
                "company": {
                  "type": "string",
                  "maxLength": 200,
                  "description": "Company name"
                },
                "full_name": {
                  "type": "string",
                  "maxLength": 200,
                  "description": "Full name"
                },
                "role_count": {
                  "enum": [
                    "one",
                    "two_three",
                    "four_plus",
                    "not_sure"
                  ],
                  "type": "string",
                  "description": "How many engineers"
                },
                "work_email": {
                  "type": "string",
                  "format": "email",
                  "maxLength": 254,
                  "description": "Work email"
                },
                "your_title": {
                  "enum": [
                    "founder_ceo",
                    "cto_vp_eng",
                    "eng_manager",
                    "hr_ops_finance",
                    "other"
                  ],
                  "type": "string",
                  "description": "The asker's own position: founder_ceo, cto_vp_eng, eng_manager, hr_ops_finance or other"
                },
                "seat_budget": {
                  "enum": [
                    "lt_4500",
                    "4500_5999",
                    "6000_7999",
                    "8000_plus",
                    "not_sure"
                  ],
                  "type": "string",
                  "description": "Monthly budget per engineer: under $4,500, $4,500-5,999, $6,000-7,999, $8,000+, or not sure"
                }
              }
            },
            "verify_work_email": {
              "type": "object",
              "required": [
                "work_email"
              ],
              "properties": {
                "for_tool": {
                  "enum": [
                    "request_vetted_shortlist",
                    "check_hiring_fit",
                    "send_coding_challenge"
                  ],
                  "type": "string",
                  "description": "Which action this verification is for (the email names it, so the user knows what they confirm)"
                },
                "work_email": {
                  "type": "string",
                  "format": "email",
                  "maxLength": 254,
                  "description": "The user's WORK email (personal inboxes are refused)"
                }
              }
            },
            "confirm_work_email": {
              "type": "object",
              "required": [
                "work_email"
              ],
              "properties": {
                "code": {
                  "type": "string",
                  "maxLength": 12,
                  "description": "The 6-digit code from the email, exactly as the user typed it"
                },
                "work_email": {
                  "type": "string",
                  "format": "email",
                  "maxLength": 254,
                  "description": "The same work email given to verify_work_email"
                },
                "verification_id": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "From verify_work_email: always pass it, with the code, or alone once the user clicked \"Yes, this is me\" in the email"
                }
              }
            },
            "get_vetting_status": {
              "type": "object",
              "required": [
                "status_url"
              ],
              "properties": {
                "status_url": {
                  "type": "string",
                  "maxLength": 400,
                  "description": "The status page URL (or its token) returned when the challenge was sent"
                }
              }
            },
            "verify_ruzora_badge": {
              "type": "object",
              "required": [
                "badge"
              ],
              "properties": {
                "badge": {
                  "type": "string",
                  "maxLength": 300,
                  "description": "Badge ID (a UUID) or the badge/verification URL"
                }
              }
            },
            "send_coding_challenge": {
              "type": "object",
              "required": [
                "requester_name",
                "work_email",
                "company",
                "role",
                "candidate_name",
                "candidate_informed"
              ],
              "properties": {
                "role": {
                  "type": "string",
                  "maxLength": 200,
                  "description": "Role being hired, e.g. \"Senior backend engineer\""
                },
                "stack": {
                  "type": "string",
                  "maxLength": 300,
                  "description": "Main stack, e.g. \"Python, Django, Postgres\""
                },
                "company": {
                  "type": "string",
                  "maxLength": 200,
                  "description": "Hiring company name"
                },
                "work_email": {
                  "type": "string",
                  "format": "email",
                  "maxLength": 254,
                  "description": "Their WORK email (personal inboxes are refused). The report and status go here."
                },
                "candidate_name": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Candidate's name"
                },
                "requester_name": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Full name of the person hiring"
                },
                "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."
                },
                "candidate_github_url": {
                  "type": "string",
                  "format": "uri",
                  "maxLength": 300,
                  "description": "Optional GitHub profile URL"
                },
                "candidate_linkedin_url": {
                  "type": "string",
                  "format": "uri",
                  "maxLength": 300,
                  "description": "Optional LinkedIn profile URL"
                }
              }
            },
            "search_vetted_engineers": {
              "type": "object",
              "required": [
                "stack"
              ],
              "properties": {
                "page": {
                  "type": "number",
                  "maximum": 10,
                  "minimum": 1,
                  "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."
                },
                "level": {
                  "enum": [
                    "Mid",
                    "Senior",
                    "Staff"
                  ],
                  "type": "string",
                  "description": "Optional seniority filter"
                },
                "stack": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 40
                  },
                  "maxItems": 8,
                  "description": "Technologies, e.g. [\"React\", \"Node\", \"AWS\"]"
                },
                "min_overlap_hours": {
                  "type": "number",
                  "maximum": 10,
                  "minimum": 0,
                  "description": "Optional minimum overlap with US working hours"
                }
              }
            },
            "request_vetted_shortlist": {
              "type": "object",
              "required": [
                "full_name",
                "work_email",
                "company",
                "role",
                "seniority"
              ],
              "properties": {
                "role": {
                  "type": "string",
                  "maxLength": 200,
                  "description": "Role title, e.g. \"Senior backend engineer\""
                },
                "notes": {
                  "type": "string",
                  "maxLength": 2000,
                  "description": "Context: what they will own, time-zone needs, the role scorecard summary"
                },
                "company": {
                  "type": "string",
                  "maxLength": 200,
                  "description": "Company name"
                },
                "timeline": {
                  "type": "string",
                  "maxLength": 100,
                  "description": "When they should start, e.g. \"within a month\""
                },
                "engineers": {
                  "type": "number",
                  "maximum": 20,
                  "minimum": 1,
                  "description": "How many engineers (default 1)"
                },
                "full_name": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Hiring manager full name"
                },
                "seniority": {
                  "enum": [
                    "mid",
                    "senior",
                    "staff"
                  ],
                  "type": "string",
                  "description": "Seniority: mid (3-5 years), senior (5-8 years) or staff (8+ years, lead)"
                },
                "work_email": {
                  "type": "string",
                  "format": "email",
                  "maxLength": 254,
                  "description": "Work email (personal inboxes are refused). The shortlist goes here."
                },
                "required_skills": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 60
                  },
                  "maxItems": 8,
                  "description": "Must-have skills only (hard filter), e.g. [\"Python\", \"Postgres\"]"
                },
                "preferred_skills": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 60
                  },
                  "maxItems": 12,
                  "description": "Nice-to-have skills (ranking only)"
                }
              }
            }
          }
        },
        "required": false,
        "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."
      }
    ]
  },
  "protocolVersion": "1.0",
  "provider": {
    "organization": "Ruzora",
    "url": "https://www.ruzora.com/"
  }
}