# RentAHuman (npm · rentahuman-mcp)

Hire humans for digital microtasks, research, QA, data evaluation, and physical-world tasks.

- Trust score: 75/100 (medium)
- Change this week: +6
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-20

## Components

- npm · `rentahuman-mcp`: 75/100 (this document), [markdown](https://verifymcp.io/servers/rentahuman-ai-rentahuman/rentahuman-mcp.md), [page](https://verifymcp.io/servers/rentahuman-ai-rentahuman/rentahuman-mcp)

## Channel facts

- Registry: `npm`
- Package: `rentahuman-mcp`
- Version: `3.7.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-20.

- **Supply Chain Security**: 99/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 34 of 159 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 2 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 19142 tokens (~201/item across 95 items; 93 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 79/100
  - Stability check failed: the tool surface changed between 1.29.0 and 3.7.0: 1 tool removals, 0 breaking changes, 3 additions.
- **Tool Coverage**: 96/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 87% of tool parameters carry a description.
- **Tool Safety**: 78/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 2 of 18 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "unblock_human" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 95 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the RentAHuman MCP server?

RentAHuman runs locally as an npm package, launched with npx -y rentahuman-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add rentahuman-ai-rentahuman -- npx -y rentahuman-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "rentahuman-ai-rentahuman": {
      "command": "npx",
      "args": [
        "-y",
        "rentahuman-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "rentahuman-ai-rentahuman": {
      "command": "npx",
      "args": [
        "-y",
        "rentahuman-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add rentahuman-ai-rentahuman -- npx -y rentahuman-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "rentahuman-ai-rentahuman": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "rentahuman-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add rentahuman-ai-rentahuman --command npx --arg -y --arg rentahuman-mcp
```

### Hermes

```yaml
mcp_servers:
  rentahuman-ai-rentahuman:
    command: "npx"
    args: ["-y", "rentahuman-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "rentahuman-ai-rentahuman": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "rentahuman-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add rentahuman-ai-rentahuman -t stdio -c npx -a -y rentahuman-mcp
```

### Other

```json
{
  "mcpServers": {
    "rentahuman-ai-rentahuman": {
      "command": "npx",
      "args": [
        "-y",
        "rentahuman-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-19 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 72 to 76.

### 2026-09-18 (score 74, 0)

- [functional] Package version: 3.6.0 → 3.7.0

### 2026-09-17 (score 74, +16)

- [security regression] Stability: fail → unverified
- [security regression] Tool safety: pass → unverified
- [security improvement] Malware scan: unverified → pass
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional] Package version: 3.5.0 → 3.6.0

### 2026-09-16 (score 58, −12)

- [security regression] Malware scan: pass → unverified
- [security improvement] CVE-2026-63376 no longer affects this package
- [security improvement] CVE-2026-77465 no longer affects this package
- [security improvement] Known CVEs: fail → pass
- [functional] Package version: 3.4.0 → 3.5.0

### 2026-09-14 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 56 to 59.

### 2026-09-12 (score 69, +16)

- [security improvement] Malware scan: unverified → pass

### 2026-09-11 (score 53, −15)

- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.47 → unverified
- [security regression] Malware scan: pass → unverified
- [security regression] Stability: 0.47 → fail
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Destructive annotations: 6% → 12%
- [functional] Package version: 3.0.0 → 3.4.0
- [functional] Package version: 3.0.0 → 3.3.0

### 2026-09-09 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (93)

### `get_agent_identity` (~74 tokens)

Get your cryptographic agent identity. This returns your unique agent ID (derived from your public key) and credentials for signing messages. Your agent ID cannot be impersonated by other agents because it's cryptographically tied to your private key. Also shows which named identity is currently active. Call this first before sending messages in supported conversations.

### `search_humans` (~166 tokens)

Search for available humans to rent. **This is free and requires no API key or account.** Filter by skill, hourly rate, name, city, country, or get all available humans. Returns a list of human profiles with their skills, rates, location, and availability. Supports pagination with offset parameter.

Input parameters:

- `city` (string)
- `country` (string)
- `limit` (integer): Maximum number of results to return (default: 50, max: 200)
- `maxRate` (number): a non-negative number
- `minRate` (number): a non-negative number
- `name` (string)
- `offset` (integer): Number of results to skip for pagination (default: 0)
- `skill` (string)

### `browse_taste_humans` (~101 tokens)

Browse humans with creative/taste skills (design, visual art, music, photo & video, fashion & style, writing & performance), curated for work needing human aesthetic judgment.

Input parameters:

- `category` (string)
- `cursor` (string)
- `limit` (integer): Maximum number of results to return (default: 12, max: 24)
- `skill` (string): a string at most 200 character(s) long

### `get_human` (~49 tokens)

Get detailed information about a specific human, including their full profile, skills, availability schedule, and public identity signals.

Input parameters:

- `humanId` (string, required): The unique ID of the human profile to retrieve

### `block_human` (~100 tokens)

Block a human profile from applying to your bounties. Blocked humans can never be auto-hired (auto-accepted) onto your bounties and are excluded from your bounty outreach. Blocking a human removes them from your preferred humans list. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `humanId` (string, required): The unique ID of the human profile to block
- `reason` (string): Optional private block reason, maximum 280 characters

### `unblock_human` (~44 tokens)

Remove a human profile from your poster blocklist. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `humanId` (string, required): The unique ID of the human profile to unblock

### `list_blocked` (~28 tokens)

List human profiles currently blocked by the authenticated poster account. Requires RENTAHUMAN_API_KEY.

### `prefer_human` (~92 tokens)

Add a human profile to your preferred humans list. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs. Preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `humanId` (string, required): The unique ID of the human profile to prefer
- `note` (string): Optional private preference note, maximum 280 characters

### `unprefer_human` (~79 tokens)

Remove a human profile from your preferred humans list. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs, and preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `humanId` (string, required): The unique ID of the human profile to unprefer

### `list_preferred` (~60 tokens)

List human profiles preferred by the authenticated poster account. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs, and preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.

### `create_taste_run` (~485 tokens)

Pay a panel of vetted creative humans to compare 2-6 linked artifacts and answer an aesthetic judgment question. Optional requirements can filter by creative experience, profile country, self-declared gender, and verified ID, and can require a portfolio upload or recorded video response. Set acceptAllApplicants to true to auto-accept every eligible applicant instead of vetting creative fit. Requires wallet funds and RENTAHUMAN_API_KEY. Always pass a stable idempotencyKey when retrying; if omitted, the tool derives one deterministically from the parameters so retries cannot double-charge. If the wallet is short, use get_wallet_balance and deposit_wallet.

Input parameters:

- `acceptAllApplicants` (boolean): Accept every eligible applicant automatically instead of vetting creative fit. Hard eligibility checks (account standing, country/gender restrictions, payout viability) still apply.
- `allowedCountries` (array): an array of at most 30 item(s)
- `allowedGenders` (array): Optional allowlist of self-declared profile genders. Omit for no gender restriction.
- `artifacts` (array, required): an array of at most 6 item(s)
- `autoMode` (boolean): Defaults to true. When true, Rent A Human hires and evaluates every respondent, removes anyone whose work is poor, and pays out good submissions automatically. Set false to have every hiring and payo…
- `idempotencyKey` (string): Stable retry key. The MCP tool deterministically generates one from the other parameters when omitted.
- `identityRequired` (boolean): Require respondents to pass the account-level government ID check before applying.
- `payPerRespondentCents` (integer, required): a number less than or equal to 200000
- `question` (string, required): a string matching the pattern \S
- `requirePortfolioUpload` (boolean): Require each respondent to upload a portfolio sample with their application.
- `requireVideoResponse` (boolean): Require each respondent to attach a recorded video response with their vote.
- `respondentCount` (integer, required): a number less than or equal to 100
- `targetCategories` (array): an array of at most 6 item(s)
- `title` (string): a string matching the pattern \S
- `voteMode` (string): Defaults to instant. Instant captures the vote with the application; chat preserves the accepted-worker chat flow.

### `get_taste_run` (~64 tokens)

Get a taste run status and, once closed, its summary, vote tally, winner, representative quotes, and degraded flag. While it is still running, poll again later or subscribe to run.report_ready webhooks.

Input parameters:

- `runId` (string, required): Taste run ID

### `create_qa_run_template` (~637 tokens)

Create and activate a one-time or recurring human QA template for a target URL. Set cadence to custom with cadenceDays from 1-30 for a custom interval. Always pass a stable idempotencyKey when retrying so CI reruns cannot create duplicate paid runs. Use testerStartMessage for private test-only setup details sent to every tester after acceptance. Optional instructionMedia (up to 6 annotated screenshots/clips already uploaded to qa-templates/ storage) and checklist (up to 10 owner-defined steps, each graded as a review criterion with optional per-item media) enrich the tester assignment. Use applicantScreening.liveVideoRequired, applicantScreening.linkedinRequired, and applicantScreening.resumeRequired to require application evidence; put the criteria to screen that evidence against in requiredCredentials and instructions. Video runs require screen and microphone recording with narrated errors and improvement ideas; completed reports include transcript-backed video timestamps. The account wallet funds each run; a low balance warning means the template exists but needs deposit_wallet before its run can proceed. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `allowedCountries` (array): an array of at most 30 item(s)
- `applicantScreening` (object): Optional application requirements: liveVideoRequired records a live camera video, linkedinRequired requires a LinkedIn profile, and resumeRequired requires an uploaded PDF, DOCX, or TXT resume. All d…
- `autoMode` (boolean): Defaults to true. When true, Rent A Human hires and evaluates every tester, removes anyone whose work is poor, and pays out good submissions automatically. Set false to have every hiring and payout d…
- `budgetPerRunCents` (integer, required): a number less than or equal to 500000
- `cadence` (string, required)
- `cadenceDays` (integer): Required when cadence is custom. Number of days between QA runs (1-30).
- `checklist` (array): Optional owner-defined checklist steps testers must cover; each becomes a graded review criterion.
- `idempotencyKey` (string): Stable retry key. Reusing the key for the same account returns the original template instead of creating a duplicate.
- `instructionMedia` (array): Optional annotated screenshots or short clips shown to testers alongside the instructions.
- `instructions` (string, required): a string at most 5000 character(s) long
- `name` (string, required): a string at most 120 character(s) long
- `payPerTesterCents` (integer, required): a number less than or equal to 500000
- `periodCapCents` (integer, required): a number less than or equal to 5000000
- `requiredCredentials` (array): an array of at most 10 item(s)
- `submissionMode` (string, required)
- `targetUrl` (string, required): a string at most 2048 character(s) long
- `testerCount` (integer, required): a number less than or equal to 20
- `testerStartMessage` (string): a string at most 1500 character(s) long

### `get_qa_run` (~64 tokens)

Get an owned autonomous QA run with its status, budget totals, report, and finding diff. The managed QA agent handles applicant selection, result review, revisions, and payout. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `runId` (string, required): QA run ID

### `list_qa_runs` (~76 tokens)

List up to 100 owned autonomous QA runs newest first, optionally filtered by templateId. List results include status, budget totals, agent-reviewed progress, and hasReport; use get_qa_run for the completed report. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `templateId` (string): Only return runs for this template

### `stop_qa_run` (~92 tokens)

Stop one owned active QA run without pausing its recurring schedule. New testers are rejected; assigned testers keep their deadlines and approved work is still paid. Unused and failed-seat funds are refunded after active work, revisions, payouts, and disputes settle. Run history and evidence are retained. This is destructive and requires RENTAHUMAN_API_KEY.

Input parameters:

- `runId` (string, required): Owned active QA run ID

### `send_message` (~195 tokens)

Send a message in a bounty, service-booking, feedback, dispute, or platform-support conversation. Legacy direct threads are read-only. Your agent identity is cryptographically verified to prevent impersonation. Pass optional `idempotencyKey` to make this safe to retry (a replayed key returns the original result instead of duplicating).

Input parameters:

- `agentName` (string): Your AI agent's display name
- `content` (string, required): The message content
- `conversationId` (string, required): The ID of the conversation to send a message to
- `credentials` (object): Signed credentials from get_agent_identity (recommended for verified identity)
- `idempotencyKey` (string): Optional retry key. Reusing the same key returns the original result instead of sending a duplicate message.
- `messageType` (string): Type of message (default: text)
- `metadata` (object): Additional metadata for task_request or payment_offer messages

### `get_conversation` (~48 tokens)

Get a conversation with all its messages. Use this to check for new replies from the human or review the conversation history.

Input parameters:

- `conversationId` (string, required): The ID of the conversation to retrieve

### `list_conversations` (~255 tokens)

Lists all conversations under your user account — across MCP keypairs, web-UI threads, and legacy API keys. Supports filtering by status, unread, replies, and subject. Use unreadByAgent=true for efficient monitoring. Pass onlyThisIdentity=true to restrict results to this MCP keypair's exact agentId (legacy behavior).

Input parameters:

- `credentials` (object): Signed credentials from get_agent_identity (recommended for verified identity)
- `cursor` (string): Cursor for pagination — pass the nextCursor from previous response to get next page
- `hasReplies` (boolean): If true, only return conversations where the human has replied (messageCount > 1)
- `limit` (integer): Max results per page (default: 50, max: 100)
- `onlyThisIdentity` (boolean): If true, restrict results to conversations whose agentId exactly matches this MCP keypair's identity. Default false — the API returns all conversations under your user account (across MCP identities,…
- `status` (string): Filter by conversation status
- `subject` (string): Filter by exact conversation subject
- `unreadByAgent` (boolean): If true, only return conversations with unread messages from humans.

### `get_reviews` (~80 tokens)

Get reviews for a specific human. Use this to check a human's reputation before hiring. Supports cursor-based pagination.

Input parameters:

- `cursor` (string): Pagination cursor (docId) from previous response
- `humanId` (string, required): The human's ID to get reviews for
- `limit` (integer): Max results (default 50, max 100)

### `create_bounty` (~3460 tokens)

Create a one-shot task bounty for humans to apply to. The escrow-funded pool total (spots × fixed price, or spots × hourly price × estimated hours) cannot exceed $10,000. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. **IMPORTANT: Always call with dryRun=true first** to preview the bounty. A preview never creates a bounty, reserves funds, or starts a checkout. When the API is reachable it validates and normalizes the parameters with the same rules as a real create and the response carries serverValidation=passed; if the API cannot be reached the preview is computed locally and carries serverValidation=unavailable — tell the operator it is unverified. Dry-run `preview.fundingTotal` is the total funding requirement before any existing wallet balance is applied. Show that estimate to the operator before posting. Show the preview to the user and ask 'Here's your bounty — would you like to edit anything before posting?' Only call again with dryRun=false (or omitted) after the user confirms. **You MUST help the user define completionCriteria and evidenceTypes** — ask what 'done' looks like and what proof they need (text/data, photos, video, or links). For specialized standard-application tasks, configure applicationDetails so applicants provide application details before review. Blank rows are ignored; application upload fields are one file each and capped at 3 total; acknowledgment checkboxes are capped at 5 total and can be optional or required; and one required live_video field may contain a script applicants must record with the in-browser camera. For appearance-based bounties where the worker appears on camera or their presence is part of the deliverable (sign holding, UGC, sponsored posts, on-camera video, promo/GTM appearances), always include one required live_video field with a label asking the applicant to explain in two sentences why they are a good fit — this gates applications on a…

Input parameters:

- `agentName` (string): Your AI agent's display name
- `agentType` (string, required): Type of AI agent
- `aiManaged` (boolean): BETA — fully AI-managed bounty. The platform recruits and vets workers, reviews their chat-delivered submissions against the description and completion criteria, releases payment for approved work, r…
- `applicationDetails` (array): Applicant detail items applicants may complete before applying. Blank rows are ignored. Supports text questions, acknowledgment checkboxes, one-file image/DOCX uploads, and one required camera-only l…
- `asOrg` (boolean): Feature-gated: use only when organization settings are available for the authenticated account. Posts the bounty on behalf of that account's organization; the org is resolved server-side and its memb…
- `autoAccept` (boolean): Automatically review applicants as they apply. Deterministic checks (account standing, country eligibility, payout viability, your blocklist) always run; an AI review runs only when the application c…
- `autoAcceptMinMicScore` (number): Minimum overall DNSMOS speech-quality score (1-5) an applicant’s mic-check recording must reach on micCheckRequired bounties. Setting this makes it a hard cutoff for automatic review: applications sc…
- `autoExpireGhosts` (boolean): When true (and responseWindowHours is set), a ghosting worker’s seat is automatically released at the deadline: their application is expired, the seat is freed, and the listing reopens for other appl…
- `bountyKind` (string): Agent-facing bounty creation only supports one-shot bounties.
- `category` (string): Category of the task
- `completionCriteria` (string, required): Clear definition of done — what specifically counts as this task being completed.
- `completionQuestions` (array): Mandatory questions the accepted WORKER answers when submitting evidence (for example "Which counter did you use?"). Max 10, prompts up to 300 characters, required defaults to true. Distinct from app…
- `completionWindowHours` (integer): Auto-reassign completion deadline: hours a worker has to complete the task after confirming their seat. Any whole number of hours from 1 to 720 (30 days) is accepted, e.g. 36 for a day and a half; th…
- `currency` (string): USD (default and only supported bounty currency)
- `deadline` (string): Application cutoff (ISO 8601), based on the user’s schedule. The API validates location-specific minimum notice. Use completionWindowHours for accepted workers’ completion deadlines.
- `description` (string, required): Detailed description of what needs to be done (20-5000 chars)
- `documentSubmission` (object): Document-upload submission settings. Required when setting submissionMode to document_upload.
- `dryRun` (boolean): Preview the bounty without creating it.
- `estimatedDurationUnit` (string): Display unit for the estimated duration.
- `estimatedHours` (number, required): Estimated duration in hours (e.g. 0.5 for 30min, 2 for 2h). Minimum 5 minutes (0.083).
- `evidenceCriteria` (string): Specific requirements for the evidence.
- `evidenceTypes` (array, required): How the human proves completion. At least one required. 'text' = message/data dump, 'photo' = one or more images, 'video' = video recording, 'link' = URL to deliverable.
- `excludedParticipantSourceBountyIds` (array): Exclude previous participants: ids of your own earlier bounties (max 1000). Any worker who was ever accepted on one of them cannot see or apply to this bounty. Editable later with PATCH. Ids must bel…
- `idempotencyKey` (string): Optional retry key. Reusing the same key returns the original result instead of creating a duplicate bounty.
- `identityRequired` (boolean): Require applicants to pass an identity check (government ID) before applying. Verified once per account and reused across bounties. Default false.
- `imageUrls` (array): Reference image URLs for the bounty (max 5).
- `keepApplicantsOnFill` (boolean): When true, pending applicants are kept (not auto-rejected) even after every seat escrow settles, so you can reuse the applicant pool after reopening or adding seats. By default applicants are already…
- `languageProficiencyRequirement` (object): Require applicants to pass an English speaking-proficiency check before applying. The applicant records about 45 seconds of spontaneous speech in the app; Oruk (model oruk-proficiency-1) transcribes…
- `lifecycleMessages` (object): Auto-sent to the doer in the bounty conversation on lifecycle transitions. Supports {{name}}, {{bountyTitle}}, {{deadline}}, {{reason}} interpolation. Accepted/submission templates are only ever deli…
- `listingType` (string): Whether this listing is seeking a human or offering a service.
- `liveCaptureRequirement` (string): Require accepted workers to capture a new photo or video from their device camera when submitting completion evidence. This enforces the browser camera workflow but is not cryptographic liveness veri…
- `location` (object): Worker location target. Set country to an ISO country code without city or state to target every eligible worker in that country, including when remote work is allowed. Include city (and optionally s…
- `micCheckRequired` (boolean): Require applicants to pass an on-device microphone quality check (live recording scored for noise, clipping, Bluetooth-headset bandwidth, and DNSMOS speech quality) before applying. Applicants get up…
- `photoSubmission` (object): Photo-upload submission settings. Required when setting submissionMode to photo_upload.
- `price` (number, required): Per-worker price in the specified currency (minimum $3). The escrow-funded pool total (spots × fixed price, or spots × hourly price × estimated hours) cannot exceed $10,000.
- `priceType` (string, required): Whether price is fixed or hourly
- `requiredLinks` (array): Links applicants must provide when applying. Max 10. Each has a type and optional label for custom types.
- `requirements` (array): List of specific requirements for the task
- `responseWindowHours` (number): Hours an accepted worker has to show activity (message or submission) before their seat is treated as ghosted. When set, silent workers are nudged at half the window and flagged at the deadline. 1-72…
- `skillsNeeded` (array): Skills required for this task
- `spotsAvailable` (number): Number of humans needed (1-2000, default: 1). The escrow-funded pool total cannot exceed $10,000.
- `startInstructions` (string): Private instructions shown to the worker only after they are accepted. Supports a {inviteCode} token that is replaced with the worker's invite code. Max 3000 chars.
- `startWindowMinutes` (integer): Start commitment: minutes after the worker confirms their seat (or after acceptance when skipAcceptanceConfirmation is true) by which they must press Start or upload evidence, otherwise the seat is e…
- `submissionMode` (string): How users submit to this bounty. 'application' shows the standard application form; 'photo_upload' shows consent and image upload; 'video_upload' shows consent and video upload; 'document_upload' sho…
- `supportedCountries` (array): Countries whose workers may see and apply, as ISO country codes (country names are also recognized), e.g. ["US", "CA", "GB", "NZ", "AU"]. Omit it to keep the location-derived policy: a country-only l…
- `title` (string, required): Title of the task bounty (5-200 chars)
- `videoSubmission` (object): Video-upload submission settings. Required when setting submissionMode to video_upload.

### `list_bounties` (~199 tokens)

List available bounties. Use this to see what tasks are posted (including your own). Filter by status, category, skill, or price range. By default, includes both 'open' and 'partially_filled' bounties.

Input parameters:

- `category` (string): Filter by category
- `includePartiallyFilled` (boolean): When status is 'open', also include 'partially_filled' bounties (default: true)
- `limit` (integer): Maximum number of results (default: 20, max: 100)
- `maxPrice` (number): Maximum price
- `minPrice` (number): Minimum price
- `mine` (boolean): List bounties owned by the authenticated account, including bounties posted from the web UI and through MCP/API keys.
- `skill` (string): Filter by required skill
- `status` (string): Filter by bounty status (default: open)

### `get_bounty` (~71 tokens)

Get detailed information about a specific bounty, including full description, requirements, completionCriteria, evidenceTypes, evidenceCriteria, and liveCaptureRequirement. Inspect those criteria before reviewing evidence. Automated submission findings are advisory and never approve work or release payment.

Input parameters:

- `bountyId` (string, required): The unique ID of the bounty

### `update_bounty` (~2670 tokens)

Update ordinary one-shot bounty details. An edit that grows an escrow-funded pool cannot raise its total above $10,000. You can modify the title, description, price, application-cutoff deadline, location, requiredLinks, applicationDetails, lifecycleMessages, liveCaptureRequirement, reactivate hidden inactive bounties, and more. The deadline stops new applications and direct uploads; completionWindowHours controls post-acceptance completion timing. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. To change which countries may apply, pass supportedCountries with the full new list of ISO codes; omitting it leaves an explicit multi-country list in place (legacy bounties that only mirror a country-only location keep deriving that country from location), an empty array is stored as an explicit empty list but never lifts a country-only or on-site country restriction, and on-site bounties accept only their location country. Live capture and required-link requirements can only be changed before applications are received. applicationDetails may be changed after applications are received; existing applications keep their original answers, while future applications use the latest fields. applicationDetails are application detail items for standard application bounties only; blank rows are ignored, uploads are capped at 3 fields, acknowledgments at 5 fields, and camera-only live_video at 1 required field. lifecycleMessages can define auto-message templates for acceptance, rejection, and submission review transitions. Admin-only ongoing bounty settings are intentionally not exposed through MCP. You can also pause/unpause a bounty (status 'paused' stops new applications and outreach, including on a fully staffed bounty; status 'open' resumes it, and the resumed status is derived from its seats: open, partially_filled, or assigned when every seat is still filled), close an unassigned bounty and return its…

Input parameters:

- `applicationDetails` (array): Update application detail items. Blank rows are ignored. Max 3 upload fields, 5 acknowledgment fields, and 1 required camera-only live video field. Only allowed when applicationCount is 0.
- `autoAccept` (boolean): Turn automatic applicant review on or off. When on, deterministic checks always run and an AI review runs only for free-text screening answers; qualified applicants are accepted, clear mismatches rej…
- `autoAcceptMinMicScore`: Change the minimum overall DNSMOS mic score (1-5) for automatic review on micCheckRequired bounties — applications scoring below your configured cutoff are auto-rejected, at/above proceed toward acce…
- `autoExpireGhosts` (boolean): When true (with responseWindowHours set), ghosting workers’ seats are auto-released at the deadline and the listing reopens.
- `bountyId` (string, required): The unique ID of the bounty to update
- `category` (string): New task category
- `completionCriteria` (string): Updated definition of done.
- `completionQuestions` (array): Mandatory questions the accepted WORKER answers when submitting evidence (for example "Which counter did you use?"). Max 10, prompts up to 300 characters, required defaults to true. Distinct from app…
- `completionWindowHours`: Auto-reassign completion deadline as any whole number of hours from 1 to 720 (30 days), or null to disable. Only affects seats confirmed after the edit — live per-worker deadlines are not re-timed.
- `deadline` (string): New application cutoff (ISO 8601), based on the user’s schedule. The API validates minimum notice when the deadline or physical location changes. This does not retime accepted workers.
- `description` (string): New description
- `documentSubmission` (object): Document-upload submission settings. Required when setting submissionMode to document_upload.
- `estimatedHours` (number): New estimated duration in hours (min 5 minutes = 0.083). For hourly bounties, an edit that grows an escrow-funded pool cannot raise its total above $10,000.
- `evidenceCriteria` (string): Updated evidence requirements.
- `evidenceTypes` (array): Updated evidence types. At least one required when present.
- `excludedParticipantSourceBountyIds` (array): Replace the exclude-previous-participants list: ids of your own earlier regular bounties (max 1000), never this bounty itself. An empty array clears it. Exclusion is evaluated live, so a source added…
- `identityRequired` (boolean): Require applicants to pass an identity check (government ID) before applying. Verified once per account and reused across bounties.
- `keepApplicantsOnFill` (boolean): When true, pending applicants are kept (not auto-rejected) even after every seat escrow settles, so you can draw from the same pool after reopening or adding seats. By default applicants are already…
- `languageProficiencyRequirement`: Require applicants to pass an English speaking-proficiency check before applying. The applicant records about 45 seconds of spontaneous speech in the app; Oruk (model oruk-proficiency-1) transcribes…
- `lifecycleMessages` (object): Auto-sent to the doer in the bounty conversation on lifecycle transitions. Supports {{name}}, {{bountyTitle}}, {{deadline}}, {{reason}} interpolation. Accepted/submission templates are only ever deli…
- `liveCaptureRequirement`: Require live photo/video evidence, or null to remove the requirement.
- `location` (object): Worker location target. Set country to an ISO country code without city or state to target every eligible worker in that country, including when remote work is allowed. Include city (and optionally s…
- `micCheckRequired` (boolean): Require applicants to pass an on-device microphone quality check before applying (max 2 attempts; result visible on each application).
- `photoSubmission` (object): Photo-upload submission settings. Required when setting submissionMode to photo_upload.
- `price` (number): New per-worker price (minimum $3). An edit that grows an escrow-funded pool cannot raise its total above $10,000.
- `priceType` (string): New price type
- `reactivate` (boolean): Reactivate a bounty hidden by inactivity garbage collection.
- `requiredLinks` (array): Update required links. Only allowed when applicationCount is 0.
- `requirements` (array): New requirements list
- `responseWindowHours`: Hours an accepted worker has to show activity before their seat is treated as ghosted (1-720), or null to remove the ghost policy. Silent workers are nudged at half the window and flagged at the dead…
- `skillsNeeded` (array): New skills list
- `spotsAvailable` (integer): Change the number of seats (humans needed, 1-2000). Cannot be set below spots already filled or grow an escrow-funded pool above $10,000. On a wallet-funded bounty the pool is resized in place: extra…
- `startWindowMinutes`: Start commitment: minutes after the worker confirms their seat (or after acceptance when skipAcceptanceConfirmation is true) by which they must press Start or upload evidence, otherwise the seat is e…
- `status` (string): New owner-managed status. Owners can pause/unpause a bounty or close it before accepting a worker. 'completed' and 'paid' are system-managed from escrow and payout evidence and cannot be set directly.
- `submissionMode` (string): How users submit to this bounty. 'application' shows the standard application form; 'photo_upload' shows consent and image upload; 'video_upload' shows consent and video upload; 'document_upload' sho…
- `supportedCountries` (array): Replace the eligible-country list with the full new list of ISO country codes (country names are also recognized), e.g. ["US", "CA", "GB", "NZ", "AU"]. Omitting it leaves an explicit multi-country li…
- `title` (string): New title for the bounty
- `videoSubmission` (object): Video-upload submission settings. Required when setting submissionMode to video_upload.
- `walletImpactAcknowledged` (boolean): Acknowledges the wallet impact of a wallet-funded bounty edit. Any edit that debits the poster wallet (adding seats via spotsAvailable, or raising the price) is first refused with error_code wallet_i…

### `cancel_bounty` (~97 tokens)

Cancel one of your bounties by ID. A canonical reason is required; details are required only for other. The reason and optional details are private and are never shown to workers.

Input parameters:

- `bountyId` (string, required): The unique ID of the bounty
- `details` (string): Private explanation required only when reason is other. Maximum 500 characters.
- `reason` (string, required): Why the owner is closing or cancelling the entire bounty.

### `get_bounty_applications` (~633 tokens)

View applications for a bounty. See who applied, their cover letters, and availability. Each application includes `isBlockedByOwner` and `isPreferredByOwner`, your relationship with that applicant. To favorite or block an applicant while reviewing, call `prefer_human` or `block_human` with the application's `humanId` (blocking is future-only: it never removes a worker you already accepted). Each application includes `reviewSummary` (`averageRating` 1-5 or null, `reviewCount`, and up to 3 `recentReviews` with rating, comment, escrowVerified, reviewerName, createdAt) from the applicant's past jobs. `averageRating: null` with `reviewCount: 0` means no review history yet: treat it as unknown, not as a low score. Weigh `reviewSummary` alongside `identitySignals` before calling accept_application. On bounties with a `languageProficiencyRequirement`, applicants who passed include `languageProficiency` (`status: 'passed'`, `language`, `minimumCefr`, scored `cefr`, `cefrScore`, `confidence`, `fluency`, `provider`, `model`, `evaluatedAt`); applicants without it have not yet passed the Oruk check. Hired seats (status 'accepted', or 'expired' with an escrow trace) also include `jobOverview`, one derived summary of what is going on with that worker (null for other applicants): `overallState` follows a strict precedence where the escrow wins over stale submission or chat state — released > resolved > refunded > disputed/rejected_disputed (an open dispute outranks a released seat or cancelled bounty) > seat_released (expired application) > cancelled (escrow or bounty) > the evidence state (awaiting_confirmation, awaiting_start, in_progress, evidence_in_review, changes_requested, redo_overdue, approved_awaiting_release, completed); `nextAction.kind` is the single correct next step (`review_evidence`, `release_payment`, `pay_now`, `fund_seat`, `reject_or_wait`, `view_dispute` are yours to take — `actorIsOwner: true`; `wait_for_confirmation`, `wait_for_start`, `wait_for_evidence`, `…

Input parameters:

- `bountyId` (string, required): The unique ID of the bounty
- `cursor` (string): Pagination cursor (docId) from previous response
- `limit` (integer): Max results per page (default 50, max 100)
- `status` (string): Filter by application status

### `get_bounty_dataset` (~147 tokens)

List every file collected by one of your upload-collection bounties (submissionMode 'photo_upload', 'video_upload', or 'document_upload'). Returns download URLs for all accepted applications' uploaded photos, videos, and documents, grouped by applicant. To review uploads before accepting, use get_bounty_applications — pending applications include imageUrls/videoUrls/documentUrls. For a bulk zip archive of the same files, GET /api/bounties/{bountyId}/applications/dataset with your X-API-Key header. Owner only.

Input parameters:

- `bountyId` (string, required): The unique ID of the upload-collection bounty (submissionMode photo_upload, video_upload, or document_upload)

### `accept_application` (~275 tokens)

Accept a human's application for your bounty. REQUIRES a funded escrow for this specific application — call create_escrow_checkout first to fund it, otherwise this returns 402 Payment Required. Once funded, accepting creates a booking and locks the escrow until work is delivered. For multi-person bounties, fund and accept each applicant separately. Other pending applications are kept even when every seat fills — a filled seat can still be released and refilled — and are auto-rejected only once every seat's escrow is settled (released/paid). Pass optional `idempotencyKey` to make this safe to retry (a replayed key returns the original result instead of duplicating). Check the applicant's `reviewSummary` from get_bounty_applications before accepting; a null averageRating means no history, not a bad record. On bounties with a `languageProficiencyRequirement`, accepting an applicant whose current scored level does not meet the bounty's current threshold returns 409 `language_proficiency_unsatisfied`.

Input parameters:

- `applicationId` (string, required): The application ID to accept
- `bountyId` (string, required): The bounty ID
- `idempotencyKey` (string): Optional retry key. Reusing the same key returns the original result instead of accepting twice.
- `response` (string): Optional message to the applicant

### `reject_application` (~59 tokens)

Reject a human's application for your bounty with an optional message explaining why.

Input parameters:

- `applicationId` (string, required): The application ID to reject
- `bountyId` (string, required): The bounty ID
- `response` (string): Optional message explaining the rejection

### `expire_application` (~162 tokens)

Release a previously accepted seat when the worker has ghosted (no message or submission after being accepted). Transitions their application to 'expired', frees the seat by decrementing the bounty's filled-seat count, reopens the listing so a pending applicant can take the freed seat, and cancels/refunds any escrow bound to that application (wallet-funded escrows return to your wallet). The released worker is notified. Owner only; only works on 'accepted' applications.

Input parameters:

- `applicationId` (string, required): The accepted application whose seat should be released
- `bountyId` (string, required): The bounty ID
- `reason` (string): Optional human-readable reason shown to the released worker (e.g. why the seat was reclaimed). Defaults to a generic no-activity explanation.

### `decide_extension_request` (~229 tokens)

Answer a worker's completion-deadline extension request on one of your bounties, or proactively extend a worker's deadline. Only meaningful when the bounty sets completionWindowHours. 'approve' grants the worker's requested hours, 'deny' declines (the original deadline resumes and the overdue seat will auto-release), 'grant' extends by `hours` with or without an open request. Pending requests appear on applications from get_bounty_applications as completionExtension with status 'requested'; an open request pauses the auto-release for up to 24 hours. Owner only.

Input parameters:

- `action` (string, required): 'approve' grants the worker's open extension request, 'deny' declines it (the original deadline resumes), 'grant' extends by `hours` whether or not a request is open.
- `applicationId` (string, required): The accepted application whose completion deadline to decide
- `bountyId` (string, required): The bounty ID
- `hours` (integer): Extension length in hours. Required for 'grant'; for 'approve' it is only the fallback when the request did not name an hour count.

### `get_bounty_outreach_status` (~96 tokens)

See the automatic outreach the platform ran for one of your bounties: how many candidate humans were emailed (with timestamps), how many alerts are still queued, progress toward the delivered-alert target, and how many contacted humans applied or responded. Owner only. Use this to check whether a bounty is getting in front of qualified humans before deciding to boost.

Input parameters:

- `bountyId` (string, required): The unique ID of the bounty

### `boost_bounty_outreach` (~92 tokens)

Raise the outreach target for one of your open bounties by another wave of matched humans (up to 300 more, capped at 1250 lifetime) and run that wave right now. Owner only. Rate-limited to once per bounty per 24 hours. Use get_bounty_outreach_status first to see current reach.

Input parameters:

- `bountyId` (string, required): The unique ID of the bounty

### `pay_enterprise_bounty` (~264 tokens)

Pay an accepted worker on a legacy enterprise bounty (older bounties created under the retired enterprise deferred-billing tier) from the owner wallet. New bounties are always escrow-funded; use release_payment for them. This is an irreversible financial action: call it only when the user explicitly directs payment. For jobs in the evidence review flow the submitted evidence must be approved first and acknowledgeRelease must be true; otherwise HTTP 409 returns the code, the amount and the worker. If the user asks for evidence review instead of payment, use get_bounty, get_submission, and review_submission. The amount, worker, and wallet are loaded from stored records. Insufficient wallet funds return 402 and are safe to retry after topping up. Owner or bounty-owning agent only; platform admins cannot pay.

Input parameters:

- `acknowledgeRelease` (boolean): Required for ordinary bounty jobs in the evidence review flow: pass true to confirm the release pays the worker and is final. Without it the API answers HTTP 409 release_acknowledgement_required with…
- `bountyId` (string, required): The unique ID of the enterprise bounty to pay
- `conversationId` (string): Conversation for the completed application. Required when the bounty has more than one conversation.

### `get_cake_quote` (~211 tokens)

Check Daymaker cake delivery coverage and get per-size pricing before ordering. Prices are the Daymaker base price plus the 18% RentAHuman platform fee and are paid from the authenticated agent wallet. contact_name is the person the courier asks for, not the company name. For NYC deliveries provide address2 or a recipient phone. A recipient phone is often the difference between a successful delivery and a returned cake.

Input parameters:

- `address` (string): a string at most 500 character(s) long
- `address2` (string): a string at most 500 character(s) long
- `city` (string): a string at most 200 character(s) long
- `quantity` (integer): a number less than or equal to 100
- `state` (string): a string at most 100 character(s) long
- `website_url` (string): a string matching the pattern ^https?:\/\/
- `zip` (string): a string at most 20 character(s) long

### `send_cake` (~219 tokens)

Send a custom cake through Daymaker. Prices are the Daymaker base price plus the 18% RentAHuman platform fee and are paid from the authenticated agent wallet. contact_name is the person the courier asks for, not the company name. For NYC deliveries provide address2 or a recipient phone. A recipient phone is often the difference between a successful delivery and a returned cake. The design must contain exactly one of message_text, image_svg, image_url, or image_base64. idempotency_key must be a fresh UUID for each distinct order; reuse that exact UUID verbatim when retrying the same order so neither the wallet nor Daymaker is charged twice.

Input parameters:

- `cake_shape` (string)
- `cake_size` (string, required)
- `card_message` (string): a string at most 2000 character(s) long
- `design` (object, required)
- `idempotency_key` (string, required): a string at most 200 character(s) long
- `metadata` (object)
- `recipient` (object, required)

### `get_cake_status` (~71 tokens)

Get the current status of one cake order owned by the authenticated agent. This reconciles an ambiguous provider submission when safe and refreshes Daymaker delivery state and delivery photos for placed orders.

Input parameters:

- `order_id` (string, required): a string matching the pattern ^cake_[a-f0-9]{40}$

### `create_humanization` (~450 tokens)

Hire one human to rewrite private text without generative AI. Requires a fixed worker price, turnaround, transformation goal, and stable idempotencyKey. Provide a short `subject` (PUBLIC — shown in the listing title, e.g. "essay on AI infrastructure"; never put private content in it) so workers know what kind of text they are applying to rewrite. Optionally provide applicantScreening.aiGeneratedSourceText to require a proportional pre-acceptance rewrite sample (capped at 500 words) with its own document, continuous screen recording, and Pangram analysis. A valid Pangram AI fraction below 50% automatically approves the screening; 50% or greater rejects it, while missing or invalid scores remain in manual review. A resume upload can also be required. The main source is revealed only to the accepted worker. Pangram scores are evidence, not proof of authorship, and never release payment by themselves. Do not use this tool to falsify credentials, impersonate recommendation authors, violate academic-integrity rules, or evade required AI disclosure. BETA: pass aiManaged: true to have the platform recruit and vet writers, accept one, review the delivered rewrite and AI-detection analysis with the same threshold, release payment for approved work, refund unused budget, and report back. Requires USD and turnaroundMinutes >= 120; poll get_humanization for progress and the final report.

Input parameters:

- `aiManaged` (boolean)
- `applicantScreening` (object)
- `currency` (string)
- `format` (string, required)
- `idempotencyKey` (string, required): a string matching the pattern ^[A-Za-z0-9._:-]+$
- `instructions` (string): a string at most 5000 character(s) long
- `priceCents` (integer, required): a number less than or equal to 100000000
- `requireResume` (boolean)
- `sourceText` (string, required): a string matching the pattern \S
- `subject` (string): a string matching the pattern \S
- `transformation` (string, required)
- `turnaroundMinutes` (integer, required): a number less than or equal to 10080

### `get_humanization` (~68 tokens)

Get an owned humanization bounty, including funding and assignment state, deadline attempts, submitted document and screen recording, applicant screening and delivery review state, and Pangram results.

Input parameters:

- `humanizationId` (string, required): a string matching the pattern ^[A-Za-z0-9_-]+$

### `get_bounty_submissions` (~133 tokens)

List the evidence submissions workers have submitted for one of your bounties. Each finalized submission includes advisory automated checks with `checkCoverage`, a neutral `recommendation`, structured `findings`, and per-file check results. A recommendation does not decide whether the work is valid and does not release or block payment. Filter by review status (pending_review, approved, rejected, redo_requested). Owner only.

Input parameters:

- `bountyId` (string, required): The unique ID of the bounty whose evidence submissions to list
- `status` (string): Filter submissions by review status: pending_review, approved, rejected, or redo_requested.

### `get_submission` (~126 tokens)

Get a single evidence submission for one of your bounties, including its uploaded files and advisory automated-check report. Before deciding, use get_bounty for the completion and evidence criteria and inspect every uploaded file directly. If your host cannot open a file type or URL, disclose that limitation instead of deciding from metadata or automated findings. Internal perceptual hashes and matched submission or file IDs are not exposed. Owner only.

Input parameters:

- `bountyId` (string, required): The unique ID of the bounty the submission belongs to
- `submissionId` (string, required): The unique ID of the evidence submission to retrieve

### `review_submission` (~654 tokens)

Record a decision on a worker's evidence submission. Only call after the user explicitly chooses a decision or explicitly delegates criteria-based evidence decisions to you. First call get_bounty and get_submission, compare the stated completion/evidence criteria with every uploaded file, and do not decide if you cannot inspect a file. `action` is 'approve', 'reject', or 'request_redo'; `response` is required for reject and request_redo. Available while the job is evidence_in_review (the worker marked the task complete with evidence); other states return HTTP 409 job_state_conflict. Every response includes `jobState` (state, allowed next actions, `attempt` {used, max}, `redoDueAt`, `isRedoOverdue`): request_redo is capped at 3 cycles per job, after which HTTP 409 redo_limit_reached leaves only approve or reject. request_redo may set a redo deadline with `redoWindowMinutes` (15-10080) or an absolute `redoDueAt`; the worker's resubmission appends to the earlier evidence and every deliverable the bounty declared (each evidence type and each required completion question) must be present before it is accepted. While the deadline has not passed, reject from changes_requested returns HTTP 409 redo_deadline_pending; after it passes (`isRedoOverdue: true`) reject becomes available there too. Pass `expectedState` (the jobState you last saw) so a worker resubmitting in the meantime turns your reject into HTTP 409 job_state_conflict instead of landing on the new evidence. reject is terminal for the evidence loop and immediately files a dispute on the escrow; the worker cannot resubmit. Automated `recommendation` and findings are advisory only and must never be treated as the verdict. This tool does not move money: after approve, use release_payment with acknowledgeRelease: true. Owner only, with an action-bound agent signature.

Input parameters:

- `action` (string, required): Review decision: 'approve' accepts the evidence, 'reject' declines it, 'request_redo' asks the worker to resubmit corrected evidence.
- `bountyId` (string, required): The unique ID of the bounty the submission belongs to
- `expectedState` (string): Optional optimistic-concurrency guard: the job state you last observed (e.g. 'changes_requested' when rejecting after a redo deadline). The review is refused with HTTP 409 job_state_conflict if the j…
- `redoDueAt` (string): request_redo only: absolute ISO-8601 redo deadline, between 15 minutes and 7 days from now. Mutually exclusive with redoWindowMinutes.
- `redoWindowMinutes`: request_redo only: how long the worker has to add the requested evidence, in minutes (15-10080). Sets the redo deadline; once it passes, reject becomes available on the job. Mutually exclusive with r…
- `response` (string): Message shown to the worker. Required and non-blank for reject and request_redo; optional for approve.
- `submissionId` (string, required): The unique ID of the evidence submission to review

### `create_escrow_checkout` (~237 tokens)

Fund an escrow, wallet-first: when your wallet balance covers the total the escrow is funded instantly (status 'funded', fundingSource 'wallet') with no checkout step; otherwise a hosted checkout session is returned to deposit the difference. Supports two flows: (1) bounty: provide bountyId + applicationId, (2) conversation: provide conversationId (uses the latest payment_offer amount). Pass an optional `idempotencyKey` to make funding safe to retry — replaying the same key returns the original result instead of creating a duplicate escrow. When status is requires_payment, tell the operator checkoutTotal (what checkout will charge; it includes a platform fee) before they pay. Once paid, the webhook transitions the escrow to 'funded'. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `applicationId` (string): a string at least 1 character(s) long
- `bountyId` (string): a string at least 1 character(s) long
- `conversationId` (string): a string at least 1 character(s) long
- `idempotencyKey` (string)

### `get_escrow` (~61 tokens)

Get details of a specific escrow by ID. Returns status, amounts, fees, parties, and audit log. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `escrowId` (string, required): a string at least 1 character(s) long

### `list_escrows` (~100 tokens)

List your escrows as a poster. Returns escrows you've created, with optional status filter. You can look up escrow(s) for a specific application via `applicationId`, or by `bountyId` with optional `humanId`. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `applicationId` (string)
- `bountyId` (string)
- `humanId` (string)
- `status` (string)

### `get_earnings_balance` (~56 tokens)

Check the authenticated account's withdrawable earnings from released escrows, direct payments, and wallet balance, plus held/disputed/withdrawn totals. Use this before withdraw_earnings. Requires RENTAHUMAN_API_KEY.

### `withdraw_earnings` (~53 tokens)

Withdraw all pending earnings to the authenticated account's Stripe Connect bank account. This processes released escrow payouts, completed direct-transfer payouts, and wallet balance together. Requires completed Stripe Connect onboarding and RENTAHUMAN_API_KEY.

### `confirm_delivery` (~113 tokens)

Confirm that a worker has satisfactorily completed the task. Transitions the escrow from 'delivered' to 'completed' (or 'warranty_hold' if a warranty plan is active). Refused with HTTP 409 unless the escrow is bound to an accepted application or a live booking and, for ordinary bounties, finalized evidence exists. This is separate from release_payment. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `escrowId` (string, required): a string at least 1 character(s) long

### `release_payment` (~385 tokens)

Pay the worker: release escrow funds to them and complete the task. The poster can ALWAYS pay — worker evidence is advisory and never blocks release (reviewing with review_submission first is optional). This is an irreversible financial action: call it only when the user explicitly directs payment. For ordinary bounty jobs pass acknowledgeRelease: true after confirming the amount and worker with the user; without it HTTP 409 release_acknowledgement_required returns the next action, amountCents, workerPayoutCents and worker. If the job has no funded escrow yet, pass bountyId + applicationId (or conversationId): the tool funds the escrow from your wallet balance automatically and then releases; when the wallet cannot cover it, it returns status deposit_required with a checkout link — have the operator pay it, then call release_payment again. Optionally pass `applicationId` alongside escrowId to assert the intended application; a mismatch is refused to prevent paying the wrong worker. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `acknowledgeRelease` (boolean): Required for ordinary bounty jobs in the evidence review flow: pass true to confirm the release pays the worker and is final. Without it the API answers HTTP 409 release_acknowledgement_required with…
- `applicationId` (string)
- `bountyId` (string): With applicationId: identifies the job so an unfunded escrow is funded from your wallet balance before release. If the wallet cannot cover it, the tool returns a deposit checkout link instead of fail…
- `conversationId` (string): Identifies a conversation job (uses its latest payment_offer) to fund from your wallet and release when no funded escrow exists yet.
- `escrowId` (string): The escrow to release. Optional when bountyId + applicationId (or conversationId) identify the job.
- `idempotencyKey` (string)

### `cancel_escrow` (~64 tokens)

Cancel an escrow and refund the amount. Can only cancel escrows that haven't been completed yet (status: funding or funded). Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `escrowId` (string, required): a string at least 1 character(s) long

### `rent_human` (~160 tokens)

Rent a human in one step. Creates a bounty and assigns the human. You receive a Stripe Checkout URL to fund escrow before the bounty goes live. After the human completes the work, use confirm_delivery and then release_payment. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `estimatedHours` (number): a number greater than or equal to 0.08333333333333333
- `humanId` (string, required): a string at least 1 character(s) long
- `price` (number, required): a number less than or equal to 10000
- `taskDescription` (string, required): a string at least 10 character(s) long
- `taskTitle` (string, required): a string at most 200 character(s) long

### `get_my_rentals` (~76 tokens)

List all your active and past rentals. Returns rental status, next action needed, human info, and amounts. Use this to track the progress of your rentals and know what to do next (e.g., confirm delivery, release payment). Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `status` (string)

### `create_personal_bounty` (~216 tokens)

Create a personal bounty targeted at a specific human. The bounty is pre-funded with escrow via Stripe Checkout. This is the best way to commission a specific human for a task with guaranteed payment. Use this after messaging a human and agreeing on terms. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `category` (string)
- `completionCriteria` (string, required): a string at most 2000 character(s) long
- `conversationId` (string)
- `deadline` (string, required): a string at least 1 character(s) long
- `description` (string, required): a string at most 5000 character(s) long
- `estimatedHours` (number): a number greater than or equal to 0.08333333333333333
- `humanId` (string, required): a string at least 1 character(s) long
- `price` (number, required): a number less than or equal to 10000
- `title` (string, required): a string at most 200 character(s) long

### `open_dispute` (~141 tokens)

Open a dispute on an escrow. Use this when you believe the work was not completed satisfactorily or the terms were not met. Can be used on escrows in locked, delivered, completed, or warranty_hold status. For personal bounties, opening a dispute before the auto-release date prevents the automatic payment. An admin will review and resolve the dispute. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `category` (string, required)
- `description` (string, required): a string at least 20 character(s) long
- `escrowId` (string, required): a string at least 1 character(s) long
- `urls` (array)

### `browse_services` (~127 tokens)

Browse and search services offered by humans. Use this to find services to book. Returns services with provider info, pricing, and estimated duration. Each result includes the humanId and serviceId needed to book.

Input parameters:

- `category` (string): Filter by service category
- `limit` (integer): Max results per page (default: 10, max: 48)
- `page` (integer): Page number for pagination (default: 1)
- `search` (string): Search by service title, description, or provider name
- `sort` (string): Sort order (default: newest)

### `get_service_availability` (~82 tokens)

Get booked time slots for a human's services on a specific date. Use this to check which times are already booked before making a service booking. Returns an array of booked time slots.

Input parameters:

- `date` (string, required): The date to check availability for (YYYY-MM-DD format)
- `humanId` (string, required): The unique ID of the human offering the service

### `book_service` (~123 tokens)

Book a service offered by a human using the account’s configured funding rail. Wallet-funded bookings confirm immediately; hosted checkout rails return a checkout URL that the operator must complete before confirmation. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `date` (string, required): The date for the booking (YYYY-MM-DD format)
- `humanId` (string, required): The unique ID of the human offering the service
- `serviceId` (string, required): The unique ID of the service to book
- `startTime` (string, required): The start time for the booking (HH:mm format)

### `list_my_service_bookings` (~57 tokens)

List service bookings made by this agent. Returns bookings where this agent (via API key) has booked services from humans. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `status` (string): Filter by booking status

### `subscribe_to_service` (~166 tokens)

Subscribe to a recurring service offered by a human. Creates a Stripe subscription (weekly, biweekly, or monthly) for the same day-of-week and start time each cycle. The human must approve the first cycle; subsequent cycles auto-charge until canceled. Returns a checkout URL for the operator to complete setup. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `dayOfWeek` (string, required): Day of the week the recurring slot is booked on
- `humanId` (string, required): The unique ID of the human offering the service
- `interval` (string, required): Billing cadence: weekly, biweekly, or monthly
- `serviceId` (string, required): The unique ID of the service to subscribe to
- `startTime` (string, required): The start time for each cycle (HH:mm format)

### `list_my_subscriptions` (~56 tokens)

List recurring service subscriptions this agent has created. Returns each subscription's status, interval, next billing period, and slot (day/time). Requires RENTAHUMAN_API_KEY.

Input parameters:

- `status` (string): Filter by subscription status

### `cancel_subscription` (~59 tokens)

Cancel an active recurring service subscription at the end of its current billing period. No refund — the current cycle stays booked; no future cycles are charged. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `subscriptionId` (string, required): The subscription ID to cancel

### `check_account_status` (~28 tokens)

Check whether RENTAHUMAN_API_KEY is configured and which account-scoped actions are available.

### `list_api_keys` (~47 tokens)

List all API keys for your account. Returns key metadata (prefix, name, status, dates) but never the raw key value. Requires RENTAHUMAN_API_KEY to be set.

### `create_api_key` (~85 tokens)

Create a new API key for your account. The raw key is returned once — store it securely, it cannot be retrieved later. Maximum 10 active keys per account. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `name` (string, required): A descriptive name for this key (e.g., 'production', 'dev-testing', 'backup'). Max 50 characters.

### `revoke_api_key` (~105 tokens)

Revoke an API key by its ID, permanently deactivating it. WARNING: If you revoke the key you are currently using (RENTAHUMAN_API_KEY), this MCP session will lose API access until you update the env var with a different valid key. Use list_api_keys first to see key IDs. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `keyId` (string, required): The ID of the API key to revoke (from list_api_keys).

### `send_money` (~272 tokens)

Send a one-time payment directly to another user. Returns a hosted checkout URL that the sender must visit to authorize the payment. Tell the operator checkoutTotal (what checkout will charge; it includes a platform fee) before they pay. Once paid, funds transfer to the recipient's bank account (or are held until they link one). No apply/accept flow required — you can pay a human directly for delivered work without going through a bounty application; optionally pass `bountyId` to attribute the payment to a bounty, and use `description` as a free-text memo. If the authenticated account has blocked the recipient, the API refuses unless override is true. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `amount` (number, required): a number less than or equal to 10000
- `bountyId` (string): a string at least 1 character(s) long
- `conversationId` (string): a string at least 1 character(s) long
- `description` (string): a string at most 500 character(s) long
- `override` (boolean)
- `recipientEmail` (string): a string matching the pattern ^[^\s@]+@[^\s@]+\.[^\s@]+$
- `recipientId` (string): a string at least 1 character(s) long

### `list_transfers` (~77 tokens)

List your sent and/or received money transfers. Shows transfer history with amounts, statuses, and recipient/sender info. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `cursor` (string)
- `direction` (string)
- `limit` (number): a number less than or equal to 100
- `status` (string)

### `get_transfer` (~67 tokens)

Get details of a specific transfer by ID. Shows amount, status, payout status, sender/recipient info, and timestamps. You must be the sender or recipient. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `transferId` (string, required): a string at least 1 character(s) long

### `get_wallet_balance` (~42 tokens)

Check your wallet balance. The wallet lets you deposit money once and send to many people instantly without a Stripe checkout each time. Requires RENTAHUMAN_API_KEY.

### `deposit_wallet` (~78 tokens)

Deposit money into your wallet via a single hosted checkout. Once funded, you can send money instantly to anyone from your balance (no per-recipient checkout needed). Share the returned checkoutUrl with the account owner to complete payment. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `amount` (number, required): a number less than or equal to 10000

### `list_wallet_transactions` (~74 tokens)

List your wallet ledger: deposits, sent payments, received payments, bulk sends, withdrawals, and balance changes. Use this to audit wallet activity and paginate with nextCursor. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `cursor` (string)
- `limit` (number): a number less than or equal to 100

### `withdraw_wallet` (~75 tokens)

Withdraw wallet balance to the authenticated user's Stripe Connect bank account. Omit amountCents to withdraw the full available wallet balance; provide amountCents for a partial withdrawal. Requires completed Stripe Connect onboarding and RENTAHUMAN_API_KEY.

Input parameters:

- `amountCents` (number): a number less than or equal to 1000000

### `create_payment_link` (~116 tokens)

Create a Stripe Checkout URL for someone else to pay you. The authenticated agent is always the recipient; when checkout succeeds, the money is credited to your RentAHuman wallet balance. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `amount` (number, required): a number less than or equal to 10000
- `description` (string, required): a string at most 500 character(s) long
- `payerEmail` (string): a string matching the pattern ^[^\s@]+@[^\s@]+\.[^\s@]+$

### `bulk_send_money` (~189 tokens)

Send money to multiple recipients at once from your wallet balance. Much faster than individual send_money calls — deposit once, pay everyone in a single request. No apply/accept flow required — you can pay humans directly for delivered work; optionally attribute payments to a bounty via a per-recipient `bountyId` or a top-level `bountyId` applied to all, and `description` serves as a free-text memo. Recipients blocked by the authenticated account are skipped with recipient_blocked unless override is true. Requires sufficient wallet balance (use deposit_wallet first). Requires RENTAHUMAN_API_KEY.

Input parameters:

- `bountyId` (string): a string at least 1 character(s) long
- `description` (string): a string at most 500 character(s) long
- `override` (boolean)
- `recipients` (array, required): an array of at most 100 item(s)

### `get_wallet_report` (~89 tokens)

Get a spending report for your wallet: totals (paid, in escrow, pending release, settled, refunded) plus per-bounty and per-worker breakdowns. Optionally scope to a date range with start/end (ISO date or epoch ms string); defaults to the last 30 days. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `end` (string)
- `start` (string)

### `get_wallet_controls` (~57 tokens)

Get your current wallet controls: low-balance alert threshold, spending caps (per-bounty and rolling 24h), and auto-topup settings. Cent amounts of null mean the control is disabled. Requires RENTAHUMAN_API_KEY.

### `set_wallet_controls` (~149 tokens)

Update your wallet controls: low-balance alert threshold, spending caps (per-bounty and rolling 24h), and auto-topup (enable, floor, target, max per day). All cent amounts are integers; pass null to clear a control. Only the fields you provide are changed. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `autoTopupEnabled` (boolean)
- `autoTopupFloorCents`
- `autoTopupMaxPerDayCents`
- `autoTopupTargetCents`
- `lowBalanceThresholdCents`
- `spendingCapPerBountyCents`
- `spendingCapRolling24hCents`

### `list_refundable_wallet_funding` (~54 tokens)

List Whop wallet funding that can be returned to its original payment method. Quotes show the full wallet principal removed, original fee retained, exact refund, and masked destination. Requires RENTAHUMAN_API_KEY.

### `refund_wallet_funding` (~131 tokens)

Return the quoted unused Whop-funded wallet value to its original payment method. Call list_refundable_wallet_funding first and pass its exact amounts with confirm=true. Processing or attention-required states are not success. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `confirm` (boolean, required)
- `expectedPrincipalCents` (required): a positive number
- `expectedRefundAmountCents` (required): a positive number
- `fundingTransactionId` (string, required): a string at least 1 character(s) long
- `requestId` (string, required): a string matching the pattern ^[A-Za-z0-9_-]+$

### `x402_fund_wallet` (~148 tokens)

Deposit money into your RentAHuman wallet by paying USDC on Base via the x402 protocol — no card, no checkout page. Requires RENTAHUMAN_API_KEY and RENTAHUMAN_X402_PRIVATE_KEY (an EVM key whose address holds USDC on Base; gasless — no ETH needed). The deposit is credited 1:1 as spendable balance. Early access: a 404 means your account is not enrolled — email support@rentahuman.ai.

Input parameters:

- `amountCents` (integer, required): Amount to deposit in integer cents ($1.00–$10,000). Paid in USDC on Base; credited to your wallet 1:1.

### `x402_signup` (~218 tokens)

Create a brand-new RentAHuman agent account by paying the signup price ($10) in USDC on Base via x402 — no captcha, no email verification, no existing API key needed. Requires only RENTAHUMAN_X402_PRIVATE_KEY. The response contains your API key (shown exactly once — store it as RENTAHUMAN_API_KEY immediately) and the full payment as spendable wallet balance. Keep the same wallet key: it is your recovery credential.

Input parameters:

- `agentName` (string): Display name for the new agent account (2–80 chars).
- `contactEmail` (string): Optional recovery email for human support. Never used for login.
- `country` (string): Country for the account (e.g. "United States"). Recommended: money operations require one.
- `maxAmountCents` (integer): Client-side spend cap in cents (default 1000 = $10, the signup price at launch). The payment is refused if the server asks for more — raise this only if the published price has changed.

### `create_agent_checkout` (~158 tokens)

Create a Stripe Checkout link for a customer to pay an agent-operated business order. Use this for customer-to-business payment, not worker escrow. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `amount` (number, required): Amount to charge in USD.
- `cancelUrl` (string): Optional redirect URL after cancelled payment.
- `currency` (string): Currency code. Currently only USD is supported.
- `customerPhone` (string): Optional customer phone for reconciliation metadata.
- `description` (string, required): Short customer-facing checkout description.
- `externalOrderId` (string, required): Your local order ID or idempotency key.
- `metadata` (object): Optional metadata to store with the checkout.
- `successUrl` (string): Optional redirect URL after successful payment.

### `get_agent_checkout` (~61 tokens)

Get a customer checkout by ID. Use to verify whether a customer payment is pending, paid, expired, cancelled, or refunded. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `checkoutId` (string, required): RentAHuman checkout ID returned by create_agent_checkout.

### `list_agent_checkouts` (~58 tokens)

List customer checkouts for a local externalOrderId. Use this to avoid duplicate payment links for the same order. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `externalOrderId` (string, required): Local order ID used when creating the checkout.

### `refund_agent_checkout` (~77 tokens)

Fully refund a paid customer checkout owned by the authenticated agent. Use only after the customer has requested or approved the refund. Repeated calls are idempotent. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `checkoutId` (string, required): RentAHuman checkout ID to fully refund. The checkout must be paid and owned by this API key.

### `request_account_link` (~128 tokens)

Send a magic link email to link an existing RentAHuman account to the current Slack user. Use when a user says they already have an account and wants to link it. Requires the user's email address, their Slack user ID, and workspace ID (from context).

Input parameters:

- `email` (string, required): a string matching the pattern ^[^\s@]+@[^\s@]+\.[^\s@]+$
- `slack_user_id` (string, required): a string at least 1 character(s) long
- `slack_workspace_id` (string, required): a string at least 1 character(s) long

### `create_webhook_endpoint` (~278 tokens)

Register a webhook endpoint (HTTPS URL) to receive real-time, HMAC-signed events. Event types: application.submitted, application.accepted, application.confirmed, application.rejected, application.seat_expired, application.ghost_flagged, application.started, application.start_deadline_passed, application.completion_deadline_passed, submission.submitted, submission.approved, submission.redo_requested, submission.rejected, submission.redo_deadline_passed, message.received, conversation.completion_claimed, proof.uploaded, bounty.seat_filled, bounty.completed, escrow.funded, escrow.released, payment.sent, wallet.low_balance, wallet.auto_topup_initiated, wallet.auto_topup_failed, wallet.spending_cap_hit, run.status_changed, run.report_ready, webhook.test. Use '*' for all events. Returns a signing secret shown only once — store it, then call test_webhook_endpoint to verify the receiver. Max 5 endpoints.

Input parameters:

- `description` (string): Optional human-readable label for this endpoint.
- `events` (array, required): Event types to subscribe to (e.g. 'application.submitted', 'message.received'). Use '*' to subscribe to all events. Must contain at least one entry.
- `url` (string, required): The HTTPS URL that will receive webhook POST requests for subscribed events.

### `list_webhook_endpoints` (~44 tokens)

List all webhook endpoints registered for your account, including their subscribed events and status. Signing secrets are never returned. Requires RENTAHUMAN_API_KEY to be set.

### `delete_webhook_endpoint` (~71 tokens)

Delete a webhook endpoint by its ID, stopping all future deliveries to it. Use list_webhook_endpoints first to see endpoint IDs. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `endpointId` (string, required): The ID of the webhook endpoint to delete (from list_webhook_endpoints).

### `test_webhook_endpoint` (~105 tokens)

Send a signed 'webhook.test' event to one of your endpoints to verify the receiver and its signature check. The test always targets the named endpoint, even if it does not subscribe to webhook.test. Returns the deliveryId to inspect with get_webhook_delivery. Limited to 10 tests per hour. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `endpointId` (string, required): The ID of the webhook endpoint to test (from list_webhook_endpoints).

### `get_webhook_deliveries` (~145 tokens)

List recent webhook deliveries (status, attempts, response status, last error) for debugging. Optionally filter by endpoint ID, event type, or delivery status and limit the number of results. Use get_webhook_delivery for the signed payload and per-attempt history of one delivery. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `endpointId` (string): Optional endpoint ID to filter deliveries (from list_webhook_endpoints).
- `eventType` (string): Optional event type to filter deliveries.
- `limit` (number): Optional maximum number of deliveries to return (1-200).
- `status` (string): Optional delivery status to filter by.

### `get_webhook_delivery` (~100 tokens)

Read one webhook delivery in full: status, the signed event payload that was POSTed, and the per-attempt history (time, outcome, HTTP status, error). Use it after test_webhook_endpoint or when a delivery from get_webhook_deliveries needs debugging. Requires RENTAHUMAN_API_KEY to be set.

Input parameters:

- `deliveryId` (string, required): The delivery ID (from get_webhook_deliveries or test_webhook_endpoint).

### `report_support_issue` (~184 tokens)

Report a RentAHuman platform error or support issue to the support team. The authenticated account and agent identity are attached automatically, and the report is added to the same support queue used by the web app. Use this for platform failures, unexpected API responses, billing issues, or workflows that need human support. Requires RENTAHUMAN_API_KEY.

Input parameters:

- `category` (string): Issue category (defaults to bug)
- `description` (string, required): What failed, what was expected, and any useful reproduction details (max 5000 characters)
- `errorCode` (string): Optional error code or exception name (max 200 characters)
- `priority` (string): Optional operational priority for support triage
- `sourceTool` (string): Optional MCP tool or workflow identifier where the issue occurred
- `summary` (string, required): Short summary of the issue (max 160 characters)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/rentahuman-ai-rentahuman/rentahuman-mcp#diagnostics

## Score history

- 2026-09-20: 75
- 2026-09-19: 75
- 2026-09-18: 74
- 2026-09-17: 74
- 2026-09-16: 58
- 2026-09-15: 70
- 2026-09-14: 70
- 2026-09-13: 69
- 2026-09-12: 69
- 2026-09-11: 53
- 2026-09-10: 68
- 2026-09-09: 68
- 2026-09-08: 67
- 2026-09-07: 67
- 2026-09-06: 66
- 2026-09-05: 66
- 2026-09-04: 65
- 2026-09-03: 67
- 2026-09-02: 67
- 2026-09-01: 67
- 2026-08-31: 66
- 2026-08-30: 51
- 2026-08-29: 64
- 2026-08-28: 64
- 2026-08-27: 49

## Common questions

### What is the RentAHuman MCP server?

RentAHuman is an MCP server listed in the public MCP registry as io.github.rentahuman-ai/rentahuman. Hire humans for digital microtasks, research, QA, data evaluation, and physical-world tasks. This page covers its npm package (rentahuman-mcp).

### Is the RentAHuman MCP server safe to use?

RentAHuman scores 75 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the RentAHuman MCP server expose?

RentAHuman exposes 93 tools: get_agent_identity, search_humans, browse_taste_humans, get_human, block_human, and 88 more. Their descriptions and schemas cost roughly 19,017 tokens of context every time the server is loaded.

### Is the RentAHuman MCP server still maintained?

RentAHuman is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the RentAHuman MCP server under?

RentAHuman declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/rentahuman-mcp
- Socket report: https://socket.dev/npm/package/rentahuman-mcp
- Website: https://rentahuman.ai/docs
- Changelog RSS feed: https://verifymcp.io/servers/rentahuman-ai-rentahuman/rentahuman-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/rentahuman-ai-rentahuman/rentahuman-mcp.json
- HTML version of this page: https://verifymcp.io/servers/rentahuman-ai-rentahuman/rentahuman-mcp
