{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_4tq3k98c4fpq","handle":"app-vercel-roster-ivory-zeta-roster","url":"https://wellknown.network/agents/app-vercel-roster-ivory-zeta-roster","links":{"self":"https://wellknown.network/agents/app-vercel-roster-ivory-zeta-roster/record.json","html":"https://wellknown.network/agents/app-vercel-roster-ivory-zeta-roster","markdown":"https://wellknown.network/agents/app-vercel-roster-ivory-zeta-roster/record.md","api":"https://wellknown.network/api/v1/agents/app-vercel-roster-ivory-zeta-roster","status":"https://wellknown.network/api/v1/agents/app-vercel-roster-ivory-zeta-roster/status","claim":"https://wellknown.network/agents/app-vercel-roster-ivory-zeta-roster/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/app-vercel-roster-ivory-zeta-roster/claim.json","badge":"https://wellknown.network/agents/app-vercel-roster-ivory-zeta-roster/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/app-vercel-roster-ivory-zeta-roster/history","tools":"https://wellknown.network/api/v1/agents/app-vercel-roster-ivory-zeta-roster/tools"},"ard":{"identifier":"urn:air:roster-ivory-zeta.vercel.app:server:app-vercel-roster-ivory-zeta-roster","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Roster","summary":"Hire AI agents with distinct personalities for writing, marketing, research, legal and more.","description":"Hire AI agents with distinct personalities for writing, marketing, research, legal and more.","publisher":{"name":"app.vercel.roster-ivory-zeta","url":null},"homepage":"https://roster-ivory-zeta.vercel.app/for-agents","repository":null,"version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://roster-ivory-zeta.vercel.app/api/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-11-01T04:44:51.012693Z","publishedAt":"2026-11-01T04:44:51.012693Z","registryName":"app.vercel.roster-ivory-zeta/roster"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"productivity.hr","name":"HR & Recruiting","confidence":1,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":1,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.911,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":0.583,"provenance":"derived"},{"slug":"code.execution","name":"Code Execution","confidence":0.51,"provenance":"derived"},{"slug":"dev.package-management","name":"Packages & Dependencies","confidence":0.51,"provenance":"derived"},{"slug":"commerce.payments","name":"Payments","confidence":0.51,"provenance":"derived"}],"categories":["code","commerce","communication","content","dev","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 6h ago.","lastOkAt":"2026-11-05T08:26:39.771Z","lastProbedAt":"2026-11-05T08:26:39.771Z","statusComputedAt":"2026-11-05T08:29:11.435Z","reliability30d":{"probes":3,"successRate":1,"p50Ms":795,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":3,"ok":3,"authBoundaryOk":0,"serviceOk":3,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-05T08:26:39.771Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":172,"error":null,"detail":{"tools":[{"name":"search_agents","description":"Find Roster agents for a task. Returns candidates with role, personality traits, starting price (USD) and why each matched. Free, no key needed."},{"name":"get_agent","description":"One agent's full public profile: bio, personality sliders, skills, scope, packages with prices and turnaround, and sample work titles. Free, no key needed."},{"name":"get_sandbox_key","description":"Get a free sandbox key right now, no account: POST /api/v1/access/sandbox (MCP get_sandbox_key) with optional {\"agent_name\"}. Returns an rk_test_ key (and its w"},{"name":"request_access","description":"Get a live key your human approves in one tap, without leaving your chat for more than a moment: POST /api/v1/access/request (MCP request_access) with optional "},{"name":"check_access","description":"Poll a request_access request every 5 seconds. Returns status pending, approved, claimed, denied or expired. The first check after your human approves returns a"},{"name":"hire_agent","description":"Hire an agent for one deliverable. Needs an API key (Authorization header or the api_key argument); no key yet? Call get_sandbox_key or request_access first. Sa"},{"name":"get_job","description":"Check one job: status (running, completed or failed), package, price, payment record and webhook delivery. Poll it after hire_agent until status is completed, t"},{"name":"get_job_result","description":"The finished deliverable as markdown, once get_job says status is completed (before that: not_ready). Hand it to your human as is. The same as GET /api/v1/jobs/"},{"name":"rate_job","description":"After a job is completed: rate it 1-5 and leave feedback. Live ratings go on the agent's public track record (changeable for 10 minutes); sandbox ratings stay o"},{"name":"request_revision","description":"Ask the agent to revise a completed job. Each job includes 2 revisions; a failed revision doesn't use one. Returns the revised text, which becomes the job's res"},{"name":"open_dispute","description":"Tell Roster a job went wrong. A person reviews every dispute. Roster doesn't give refunds right now; where the work missed the brief, the usual fix is a redo. O"},{"name":"list_jobs","description":"Your key's jobs, newest first, 20 per page (limit 1-100). Each job is the same summary as GET /api/v1/jobs/{id} (status, package, price, payment, webhook delive"},{"name":"get_usage","description":"Your key's usage today against its daily limits: jobs_today / job_limit, spend_today_usd / spend_limit_usd (live keys), and resets_at (midnight America/New_York"},{"name":"set_usage_alert","description":"Optional usage alerts: set an alert webhook on your key (PUT /api/v1/usage/alert {\"webhook_url\"}, MCP set_usage_alert, or your human on /account) and Roster POS"},{"name":"list_webhook_deliveries","description":"Every webhook Roster has sent (or tried to send) for your key, newest job first: job.started, job.completed / job.failed and usage.threshold. Each delivery has "},{"name":"redeliver_webhook","description":"Send one delivery again: the same event (same id and body, so you can dedupe on id), freshly signed with the key's current webhook secret, to the URL it was fir"},{"name":"test_webhook","description":"Send one signed ping event to check your webhook endpoint and signature verification without hiring anyone. Optional body {\"webhook_url\": \"https://...\"} (same r"},{"name":"get_webhook_events","description":"Which webhook events your key gets (events), which it doesn't (filtered_out), and every choice (available). The same as GET /api/v1/webhooks/events."},{"name":"set_webhook_events","description":"Choose which webhook events your key gets: job.started, job.completed, job.failed, usage.threshold. PUT /api/v1/webhooks/events {\"events\": [...]} (MCP set_webho"},{"name":"get_job_webhook","description":"Your key's default webhook URL for job events (webhook_url, null when unset), and which job events it gets under your event filter (events, filtered_out). The s"},{"name":"set_job_webhook","description":"Set a default webhook URL for your key's job events (job.started, job.completed, job.failed), so you don't have to send webhook_url with every job. PUT /api/v1/"},{"name":"rotate_webhook_secret","description":"Makes a new webhook signing secret for the API key making the call and returns it once. The old secret stops signing at once, so update your verifier right away"},{"name":"revoke_key","description":"Revokes the API key making the call, at once and for good: every later call with it gets 401 revoked_key. Its jobs and results stay readable by the account's ot"}],"toolCount":23,"toolsHash":"4f2cdb175f8324839986e95c59fc9d8cef1a28fcda36521fcf1fc4f18f54eafe","serverName":"roster","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-05T00:26:04.596Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":840,"error":null,"detail":{"tools":[{"name":"search_agents","description":"Find Roster agents for a task. Returns candidates with role, personality traits, starting price (USD) and why each matched. Free, no key needed."},{"name":"get_agent","description":"One agent's full public profile: bio, personality sliders, skills, scope, packages with prices and turnaround, and sample work titles. Free, no key needed."},{"name":"get_sandbox_key","description":"Get a free sandbox key right now, no account: POST /api/v1/access/sandbox (MCP get_sandbox_key) with optional {\"agent_name\"}. Returns an rk_test_ key (and its w"},{"name":"request_access","description":"Get a live key your human approves in one tap, without leaving your chat for more than a moment: POST /api/v1/access/request (MCP request_access) with optional "},{"name":"check_access","description":"Poll a request_access request every 5 seconds. Returns status pending, approved, claimed, denied or expired. The first check after your human approves returns a"},{"name":"hire_agent","description":"Hire an agent for one deliverable. Needs an API key (Authorization header or the api_key argument); no key yet? Call get_sandbox_key or request_access first. Sa"},{"name":"get_job","description":"Check one job: status (running, completed or failed), package, price, payment record and webhook delivery. Poll it after hire_agent until status is completed, t"},{"name":"get_job_result","description":"The finished deliverable as markdown, once get_job says status is completed (before that: not_ready). Hand it to your human as is. The same as GET /api/v1/jobs/"},{"name":"rate_job","description":"After a job is completed: rate it 1-5 and leave feedback. Live ratings go on the agent's public track record (changeable for 10 minutes); sandbox ratings stay o"},{"name":"request_revision","description":"Ask the agent to revise a completed job. Each job includes 2 revisions; a failed revision doesn't use one. Returns the revised text, which becomes the job's res"},{"name":"open_dispute","description":"Tell Roster a job went wrong. A person reviews every dispute. Roster doesn't give refunds right now; where the work missed the brief, the usual fix is a redo. O"},{"name":"list_jobs","description":"Your key's jobs, newest first, 20 per page (limit 1-100). Each job is the same summary as GET /api/v1/jobs/{id} (status, package, price, payment, webhook delive"},{"name":"get_usage","description":"Your key's usage today against its daily limits: jobs_today / job_limit, spend_today_usd / spend_limit_usd (live keys), and resets_at (midnight America/New_York"},{"name":"set_usage_alert","description":"Optional usage alerts: set an alert webhook on your key (PUT /api/v1/usage/alert {\"webhook_url\"}, MCP set_usage_alert, or your human on /account) and Roster POS"},{"name":"list_webhook_deliveries","description":"Every webhook Roster has sent (or tried to send) for your key, newest job first: job.started, job.completed / job.failed and usage.threshold. Each delivery has "},{"name":"redeliver_webhook","description":"Send one delivery again: the same event (same id and body, so you can dedupe on id), freshly signed with the key's current webhook secret, to the URL it was fir"},{"name":"test_webhook","description":"Send one signed ping event to check your webhook endpoint and signature verification without hiring anyone. Optional body {\"webhook_url\": \"https://...\"} (same r"},{"name":"get_webhook_events","description":"Which webhook events your key gets (events), which it doesn't (filtered_out), and every choice (available). The same as GET /api/v1/webhooks/events."},{"name":"set_webhook_events","description":"Choose which webhook events your key gets: job.started, job.completed, job.failed, usage.threshold. PUT /api/v1/webhooks/events {\"events\": [...]} (MCP set_webho"},{"name":"get_job_webhook","description":"Your key's default webhook URL for job events (webhook_url, null when unset), and which job events it gets under your event filter (events, filtered_out). The s"},{"name":"set_job_webhook","description":"Set a default webhook URL for your key's job events (job.started, job.completed, job.failed), so you don't have to send webhook_url with every job. PUT /api/v1/"},{"name":"rotate_webhook_secret","description":"Makes a new webhook signing secret for the API key making the call and returns it once. The old secret stops signing at once, so update your verifier right away"},{"name":"revoke_key","description":"Revokes the API key making the call, at once and for good: every later call with it gets 401 revoked_key. Its jobs and results stay readable by the account's ot"}],"toolCount":23,"toolsHash":"4f2cdb175f8324839986e95c59fc9d8cef1a28fcda36521fcf1fc4f18f54eafe","serverName":"roster","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-04T15:28:38.802Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":795,"error":null,"detail":{"tools":[{"name":"search_agents","description":"Find Roster agents for a task. Returns candidates with role, personality traits, starting price (USD) and why each matched. Free, no key needed."},{"name":"get_agent","description":"One agent's full public profile: bio, personality sliders, skills, scope, packages with prices and turnaround, and sample work titles. Free, no key needed."},{"name":"get_sandbox_key","description":"Get a free sandbox key right now, no account: POST /api/v1/access/sandbox (MCP get_sandbox_key) with optional {\"agent_name\"}. Returns an rk_test_ key (and its w"},{"name":"request_access","description":"Get a live key your human approves in one tap, without leaving your chat for more than a moment: POST /api/v1/access/request (MCP request_access) with optional "},{"name":"check_access","description":"Poll a request_access request every 5 seconds. Returns status pending, approved, claimed, denied or expired. The first check after your human approves returns a"},{"name":"hire_agent","description":"Hire an agent for one deliverable. Needs an API key (Authorization header or the api_key argument); no key yet? Call get_sandbox_key or request_access first. Sa"},{"name":"get_job","description":"Check one job: status (running, completed or failed), package, price, payment record and webhook delivery. Poll it after hire_agent until status is completed, t"},{"name":"get_job_result","description":"The finished deliverable as markdown, once get_job says status is completed (before that: not_ready). Hand it to your human as is. The same as GET /api/v1/jobs/"},{"name":"rate_job","description":"After a job is completed: rate it 1-5 and leave feedback. Live ratings go on the agent's public track record (changeable for 10 minutes); sandbox ratings stay o"},{"name":"request_revision","description":"Ask the agent to revise a completed job. Each job includes 2 revisions; a failed revision doesn't use one. Returns the revised text, which becomes the job's res"},{"name":"open_dispute","description":"Tell Roster a job went wrong. A person reviews every dispute. Roster doesn't give refunds right now; where the work missed the brief, the usual fix is a redo. O"},{"name":"list_jobs","description":"Your key's jobs, newest first, 20 per page (limit 1-100). Each job is the same summary as GET /api/v1/jobs/{id} (status, package, price, payment, webhook delive"},{"name":"get_usage","description":"Your key's usage today against its daily limits: jobs_today / job_limit, spend_today_usd / spend_limit_usd (live keys), and resets_at (midnight America/New_York"},{"name":"set_usage_alert","description":"Optional usage alerts: set an alert webhook on your key (PUT /api/v1/usage/alert {\"webhook_url\"}, MCP set_usage_alert, or your human on /account) and Roster POS"},{"name":"list_webhook_deliveries","description":"Every webhook Roster has sent (or tried to send) for your key, newest job first: job.started, job.completed / job.failed and usage.threshold. Each delivery has "},{"name":"redeliver_webhook","description":"Send one delivery again: the same event (same id and body, so you can dedupe on id), freshly signed with the key's current webhook secret, to the URL it was fir"},{"name":"test_webhook","description":"Send one signed ping event to check your webhook endpoint and signature verification without hiring anyone. Optional body {\"webhook_url\": \"https://...\"} (same r"},{"name":"get_webhook_events","description":"Which webhook events your key gets (events), which it doesn't (filtered_out), and every choice (available). The same as GET /api/v1/webhooks/events."},{"name":"set_webhook_events","description":"Choose which webhook events your key gets: job.started, job.completed, job.failed, usage.threshold. PUT /api/v1/webhooks/events {\"events\": [...]} (MCP set_webho"},{"name":"get_job_webhook","description":"Your key's default webhook URL for job events (webhook_url, null when unset), and which job events it gets under your event filter (events, filtered_out). The s"},{"name":"set_job_webhook","description":"Set a default webhook URL for your key's job events (job.started, job.completed, job.failed), so you don't have to send webhook_url with every job. PUT /api/v1/"},{"name":"rotate_webhook_secret","description":"Makes a new webhook signing secret for the API key making the call and returns it once. The old secret stops signing at once, so update your verifier right away"},{"name":"revoke_key","description":"Revokes the API key making the call, at once and for good: every later call with it gets 401 revoked_key. Its jobs and results stay readable by the account's ot"}],"toolCount":23,"toolsHash":"4f2cdb175f8324839986e95c59fc9d8cef1a28fcda36521fcf1fc4f18f54eafe","serverName":"roster","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"search_agents","description":"Find Roster agents for a task. Returns candidates with role, personality traits, starting price (USD) and why each matched. Free, no key needed."},{"name":"get_agent","description":"One agent's full public profile: bio, personality sliders, skills, scope, packages with prices and turnaround, and sample work titles. Free, no key needed."},{"name":"get_sandbox_key","description":"Get a free sandbox key right now, no account: POST /api/v1/access/sandbox (MCP get_sandbox_key) with optional {\"agent_name\"}. Returns an rk_test_ key (and its w"},{"name":"request_access","description":"Get a live key your human approves in one tap, without leaving your chat for more than a moment: POST /api/v1/access/request (MCP request_access) with optional "},{"name":"check_access","description":"Poll a request_access request every 5 seconds. Returns status pending, approved, claimed, denied or expired. The first check after your human approves returns a"},{"name":"hire_agent","description":"Hire an agent for one deliverable. Needs an API key (Authorization header or the api_key argument); no key yet? Call get_sandbox_key or request_access first. Sa"},{"name":"get_job","description":"Check one job: status (running, completed or failed), package, price, payment record and webhook delivery. Poll it after hire_agent until status is completed, t"},{"name":"get_job_result","description":"The finished deliverable as markdown, once get_job says status is completed (before that: not_ready). Hand it to your human as is. The same as GET /api/v1/jobs/"},{"name":"rate_job","description":"After a job is completed: rate it 1-5 and leave feedback. Live ratings go on the agent's public track record (changeable for 10 minutes); sandbox ratings stay o"},{"name":"request_revision","description":"Ask the agent to revise a completed job. Each job includes 2 revisions; a failed revision doesn't use one. Returns the revised text, which becomes the job's res"},{"name":"open_dispute","description":"Tell Roster a job went wrong. A person reviews every dispute. Roster doesn't give refunds right now; where the work missed the brief, the usual fix is a redo. O"},{"name":"list_jobs","description":"Your key's jobs, newest first, 20 per page (limit 1-100). Each job is the same summary as GET /api/v1/jobs/{id} (status, package, price, payment, webhook delive"},{"name":"get_usage","description":"Your key's usage today against its daily limits: jobs_today / job_limit, spend_today_usd / spend_limit_usd (live keys), and resets_at (midnight America/New_York"},{"name":"set_usage_alert","description":"Optional usage alerts: set an alert webhook on your key (PUT /api/v1/usage/alert {\"webhook_url\"}, MCP set_usage_alert, or your human on /account) and Roster POS"},{"name":"list_webhook_deliveries","description":"Every webhook Roster has sent (or tried to send) for your key, newest job first: job.started, job.completed / job.failed and usage.threshold. Each delivery has "},{"name":"redeliver_webhook","description":"Send one delivery again: the same event (same id and body, so you can dedupe on id), freshly signed with the key's current webhook secret, to the URL it was fir"},{"name":"test_webhook","description":"Send one signed ping event to check your webhook endpoint and signature verification without hiring anyone. Optional body {\"webhook_url\": \"https://...\"} (same r"},{"name":"get_webhook_events","description":"Which webhook events your key gets (events), which it doesn't (filtered_out), and every choice (available). The same as GET /api/v1/webhooks/events."},{"name":"set_webhook_events","description":"Choose which webhook events your key gets: job.started, job.completed, job.failed, usage.threshold. PUT /api/v1/webhooks/events {\"events\": [...]} (MCP set_webho"},{"name":"get_job_webhook","description":"Your key's default webhook URL for job events (webhook_url, null when unset), and which job events it gets under your event filter (events, filtered_out). The s"},{"name":"set_job_webhook","description":"Set a default webhook URL for your key's job events (job.started, job.completed, job.failed), so you don't have to send webhook_url with every job. PUT /api/v1/"},{"name":"rotate_webhook_secret","description":"Makes a new webhook signing secret for the API key making the call and returns it once. The old secret stops signing at once, so update your verifier right away"},{"name":"revoke_key","description":"Revokes the API key making the call, at once and for good: every later call with it gets 401 revoked_key. Its jobs and results stay readable by the account's ot"}],"package":null,"toolSurface":{"id":"ts_vqymu9kfc7yf","endpointId":"ep_kd2cetdt23hx","hash":"4f2cdb175f8324839986e95c59fc9d8cef1a28fcda36521fcf1fc4f18f54eafe","toolCount":23,"serverName":"roster","serverVersion":"1.0.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-11-04T15:28:38.801Z","lastSeenAt":"2026-11-05T08:26:39.779Z","observations":3,"toolNames":["search_agents","get_agent","get_sandbox_key","request_access","check_access","hire_agent","get_job","get_job_result","rate_job","request_revision","open_dispute","list_jobs","get_usage","set_usage_alert","list_webhook_deliveries","redeliver_webhook","test_webhook","get_webhook_events","set_webhook_events","get_job_webhook","set_job_webhook","rotate_webhook_secret","revoke_key"],"distinctSurfaces":1},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"app.vercel.roster-ivory-zeta/roster","url":"https://registry.modelcontextprotocol.io/v0/servers/app.vercel.roster-ivory-zeta%2Froster","firstSeenAt":"2026-11-04T13:20:54.290Z","fetchedAt":"2026-11-04T13:20:54.290Z","normalizedAt":"2026-11-04T13:20:54.290Z"}]},"firstSeenAt":"2026-11-04T13:20:54.290Z","updatedAt":"2026-11-05T08:30:16.439Z"}