MCP

Add Runhuman to your AI coding agent via MCP.

Recommended: For most users, Agent Skills is the simplest way to get started. Use MCP if your agent doesn’t support skills or you prefer MCP configuration.


Installation

One command adds Runhuman to your agent:


Available Tools

Runhuman exposes 21 MCP tools for orchestrating human QA testing:

list_organizations

List all organizations the authenticated user belongs to. Use this to discover your workspace before creating jobs.

No parameters required. Returns organization name, ID, project count, and member count.

list_projects

List projects accessible to the authenticated user, optionally filtered by organization.

ParameterRequiredDescription
organizationIdNoFilter projects by organization ID. If omitted, returns all accessible projects

Returns project name, ID, GitHub repo, and default URL.

list_organization_members

List members of an organization with their role, status (active / suspended), owner flag, and join date. Useful before inviting or removing members.

ParameterRequiredDescription
organizationIdYesOrganization ID to list members for

invite_organization_member

Invite someone to an organization by email. Sends a Clerk-backed invitation; the recipient must accept to become a member. Requires the caller to have admin permission in the organization.

ParameterRequiredDescription
organizationIdYesOrganization to invite the user to
emailYesEmail address of the person to invite
roleNoOne of "admin", "contributor", or "viewer" (default: "contributor")

Roles:

  • admin — full access including billing, member management, and project creation
  • contributor — can edit projects and run jobs, but cannot manage billing or members
  • viewer — read-only access to all organization resources

create_job

Creates a custom QA test and returns immediately with a job ID. You must follow up with wait to get results.

ParameterRequiredDescription
projectIdYes*Project ID for the test job
organizationIdNoOrganization ID for billing context, or to auto-create a project with githubRepos
urlNoURL to test (publicly accessible)
descriptionNoInstructions for the human tester
templateNoTemplate name to use as base configuration
templateContentNoRaw template content (markdown with YAML frontmatter) as alternative to saved template
outputSchemaNoJSON Schema for structured result extraction. If omitted, only success/explanation returned
resultsTemplateNoMDForm template for free-form text reports (alternative to outputSchema)
targetDurationMinutesNoTime limit in minutes (default: 30, range: 1–60)
maxExtensionMinutesNoTotal extension time in minutes (default: 15). Set to 0 to disable extensions
maxExtensionCountNoNumber of extensions (default: 3). Set to 0 to disable extensions
additionalValidationInstructionsNoCustom instructions for AI validation
deviceClassNo"desktop", "mobile", or "both" (default: "both")
githubReposNoGitHub repos (["owner/repo"]) for AI context
githubTokenNoGitHub token for operations without GitHub App installation
prNumbersNoPR numbers to test — triggers AI test plan generation from PR changes (requires githubRepos)
issueNumbersNoIssue numbers to test — triggers AI test plan generation from issues (requires githubRepos)
checkTestabilityNoReject job early if AI determines it’s not testable (default: true when prNumbers/issueNumbers provided)
autoCreateGithubIssuesNoAutomatically create GitHub issues from AI-extracted test findings after job completion. Requires githubRepos to be set.
emailOnCompletionNoPer-job email-on-completion override: "inherit" (default — defers to project, then account-level Job updates pref), "always", or "never"

*projectId is required unless organizationId + githubRepos are provided for auto-creation.

Either url+description, template, or prNumbers/issueNumbers is needed to define what to test.

run_template

Create a job from a pre-configured template. Templates let you reuse test configurations without writing full descriptions every time.

ParameterRequiredDescription
projectIdYesProject ID for the test job
templateYesTemplate name (get from list_templates)
urlNoOverride template’s default URL
descriptionNoAdditional instructions (appended to template)
outputSchemaNoOverride template’s output schema
targetDurationMinutesNoOverride template’s duration (range: 1-60)
deviceClassNoOverride template’s device class
githubReposNoOverride template’s GitHub repos (array of "owner/repo")
githubRepoNoSingle GitHub repo ("owner/repo"). Use githubRepos for multiple
additionalValidationInstructionsNoExtra validation rules (appended to template)

Use list_templates to see available templates, then reference them by name.

wait

Idiomatic polling — waits for a job to complete and returns results automatically. Polls every 10 seconds until completion, timeout, or failure.

ParameterRequiredDescription
jobIdYesJob ID from create_job or run_template
timeoutSecondsNoMaximum wait time (default: 600, min: 10, max: 3600)

No manual polling needed! Just call wait once and it automatically polls until the job finishes.

Returns: When complete, includes:

  • result: Structured test results matching your schema
  • testerAlias: Tester identification
  • testerResponse: Raw feedback from the human tester
  • costUsd: Exact cost in USD
  • testDurationSeconds: Time spent by tester
  • jobUrl: Link to view results in the dashboard

get_job

Quick status check without waiting. Get current job status instantly without polling.

ParameterRequiredDescription
jobIdYesJob ID to check

Returns different detail levels based on status:

  • Active (pending, preparing, waiting, working): Current state description and next steps
  • Completed: Full results, tester info, cost, and duration
  • Failed (incomplete, expired, rejected, error): Failure reason and details

Use this for manual polling control or checking multiple jobs in parallel.

get_test_artifacts

Fetch rich session artifacts for a completed job — voice transcript, console logs, network requests, user-interaction events, AI ↔ tester conversation, and AI-identified key moments. Use after get_job or wait when you need to investigate why a test passed or failed.

ParameterRequiredDescription
jobIdYesJob ID to fetch artifacts for
artifactsNoArray of artifact types to retrieve. Defaults to all available types.

Artifact types: structured-output, transcript, console-logs, network-requests, conversation, events, key-moments.

All artifact types except structured-output are paid-tier gated server-side; ungated callers receive a clean “subscription required” error.

list_templates

List available templates for a project.

ParameterRequiredDescription
projectIdYesProject ID to list templates for
limitNoMax templates to return (default: 50)

Returns template names, default URLs, and descriptions.

create_template

Create a reusable test template with default configuration.

ParameterRequiredDescription
projectIdYesProject ID
nameYesTemplate name (must be unique within project)
testDescriptionNoDefault test instructions for testers
urlNoDefault URL to test
outputSchemaNoJSON schema for structured result extraction
resultsTemplateNoMDForm template for free-form text reports
targetDurationMinutesNoExpected duration in minutes (1–60)
deviceClassNo"desktop", "mobile", or "both" (default: "both")
githubReposNoGitHub repos for context (array of "owner/repo")
githubRepoNoSingle GitHub repo ("owner/repo"). Use githubRepos for multiple
autoCreateGithubIssuesNoAuto-create GitHub issues from findings

After creating, use the template with run_template or create_schedule.

update_template

Update an existing template’s configuration. Any field can be changed independently.

ParameterRequiredDescription
projectIdYesProject ID
templateIdYesTemplate ID (get from list_templates)
nameNoNew name
testDescriptionNoNew test instructions
urlNoNew default URL
outputSchemaNoNew output schema
resultsTemplateNoNew MDForm template
targetDurationMinutesNoNew duration (1–60)
deviceClassNoNew device class
githubReposNoNew GitHub repos (array of "owner/repo")
githubRepoNoSingle GitHub repo ("owner/repo"). Use githubRepos for multiple
autoCreateGithubIssuesNoAuto-create GitHub issues

delete_template

Permanently delete a template. Existing schedules using the template will fail on their next execution.

ParameterRequiredDescription
projectIdYesProject ID
templateIdYesTemplate ID to delete

list_schedules

List recurring test schedules for a project.

ParameterRequiredDescription
projectIdYesProject ID to list schedules for
limitNoMax schedules to return (default: 50)

Returns schedule name, frequency, time, timezone, status, and next execution time.

create_schedule

Create a recurring test schedule that automatically runs a template.

ParameterRequiredDescription
projectIdYesProject ID
nameYesSchedule name
templateIdYesTemplate ID to run (get from list_templates)
scheduledHourYesHour of day (0–23)
scheduledMinuteYesMinute (0, 15, 30, or 45)
timezoneYesIANA timezone (e.g., “America/New_York”)
frequencyNodaily, weekly, biweekly, monthly, or once (default: weekly)
weekdaysNoDays of week for weekly/biweekly (0=Sun..6=Sat)
dayOfMonthNoDay of month for monthly (1–28, 0=last)
scheduledDateNoDate for one-time (YYYY-MM-DD)
urlOverrideNoOverride the template’s default URL
autoCreateGithubIssuesOverrideNoAuto-create GitHub issues from results

update_schedule

Update a schedule’s settings. Use this to pause/resume, change timing, or swap templates.

ParameterRequiredDescription
projectIdYesProject ID
scheduleIdYesSchedule ID (get from list_schedules)
statusNo"active" or "paused"
nameNoNew name
templateIdNoNew template ID
frequencyNoNew frequency
scheduledHourNoNew hour (0–23)
scheduledMinuteNoNew minute (0, 15, 30, 45)
timezoneNoNew timezone
weekdaysNoNew weekdays
dayOfMonthNoNew day of month

delete_schedule

Permanently delete a schedule. To temporarily stop without deleting, use update_schedule with status: "paused".

ParameterRequiredDescription
projectIdYesProject ID
scheduleIdYesSchedule ID to delete

list_tester_notes

List tester knowledge-base notes (credentials, environment details, procedures) visible to the caller. Use this to discover note IDs before editing or deleting.

ParameterRequiredDescription
organizationIdNoRestrict to one organization
projectIdNoRestrict to one project (org-wide notes are also returned)
searchNoFull-text search across title and body
tagsNoFilter by tag (credentials, environment, setup, procedures, known-issues, contacts, general)
limitNoMax notes to return
offsetNoSkip this many notes (pagination)

create_tester_note

Create a tester knowledge-base note scoped to an organization, optionally narrowed to a single project.

ParameterRequiredDescription
titleYesNote title
bodyYesNote body (plain text or Markdown)
organizationIdYesOrganization the note belongs to
projectIdNoProject to scope the note to. Omit for org-wide
tagsNoTags (see list_tester_notes for allowed values)
isInternalNoMark internal-only (Volter staff only)

Returns the new note’s ID for chaining into update_tester_note or delete_tester_note.

update_tester_note

Edit an existing note by ID. Pass any combination of editable fields — at least one is required.

ParameterRequiredDescription
noteIdYesNote ID to update
titleNoNew title
bodyNoNew body
organizationIdNoMove the note to a different organization
projectIdNoRe-scope to a project, or pass null to clear (move to org-wide)
tagsNoReplace tags
isInternalNoToggle internal-only visibility (Volter staff only)

delete_tester_note

Soft-delete (archive) a tester note by ID. Hidden from list_tester_notes but the row is retained for audit.

ParameterRequiredDescription
noteIdYesNote ID to delete

Example Prompts

These prompts work well with any AI agent that has Runhuman installed:

Simple page check:

Use Runhuman to verify that example.com loads correctly and shows the main heading.

Login testing:

Use Runhuman to test the login flow on staging.myapp.com. Try email test@example.com with password demo123, then try a wrong password and verify the error message.

Checkout flow:

Use Runhuman to test the checkout on myapp.com. Add a product to cart, fill shipping info, and verify the order total is correct. Give the tester 10 minutes.

Visual issues:

Use Runhuman to check the product page at myapp.com/products/123 for visual issues. Look for broken images, layout problems, or unreadable text.

Mobile testing:

Use Runhuman to test the navigation menu on myapp.com on mobile. Check if it opens and closes correctly and all links work.

Recurring schedule:

Set up a daily smoke test at 9 AM Eastern using the “Smoke Test” template. Run it every weekday.


What Happens Behind the Scenes

When you ask your agent to use Runhuman:

  1. Agent discovers your workspace with list_organizations and list_projects
  2. Agent checks available templates with list_templates (if applicable)
  3. Agent calls create_job or run_template with your URL/instructions and an output schema it generates
  4. Agent receives a job ID and status message
  5. Agent calls wait with that job ID — this automatically polls until complete!
  6. When complete, agent receives structured results and the tester’s raw response
  7. Agent summarizes the findings for you

The wait tool handles all the polling logic automatically. You just describe what you want tested.

For recurring tests, the agent can use create_schedule to set up automated runs — no manual polling needed at all.


Duration Control

Tell the agent how much time to give the tester:

Use Runhuman to test the signup flow. Allow 10 minutes since this involves email verification.

Use Runhuman to check the homepage. This should be quick, give the tester 3 minutes.

The default is 30 minutes. For simple checks, you can request less time (e.g., 5 minutes).


Writing Good Prompts

Good prompts are specific about what to test:

Instead ofWrite
”Test the app""Test the login flow on myapp.com. Try valid credentials, then invalid password. Verify error messages."
"Check the UI""Check the product page for visual issues. Look for broken images, layout problems, text overflow."
"Test checkout""Test checkout on staging.myapp.com. Add product to cart, fill shipping, verify total before submitting.”

Include:

  1. The URL to test
  2. Specific actions to perform
  3. What success looks like
  4. Time needed for complex flows

Complete Example

Here’s what an agent does when you ask it to test a login page:

You say:

Use Runhuman to test login on myapp.com with email test@example.com and password demo123. Then try wrong password and check the error.

Agent calls create_job:

{
  "projectId": "proj-abc123",
  "url": "https://myapp.com/login",
  "description": "Test login with test@example.com / demo123, then try wrong password",
  "outputSchema": {
    "loginWorks": { "type": "boolean", "description": "Login works with valid credentials" },
    "errorShown": { "type": "boolean", "description": "Error shown for wrong password" },
    "errorMessage": { "type": "string", "description": "Error message text" }
  }
}

Agent calls wait:

{
  "jobId": "job-abc123"
}

The wait tool automatically polls every 10 seconds until complete. No manual polling needed!

After 2-3 minutes, wait returns:

Test Completed

Job ID: job-abc123
Status: completed
Duration: 120s
Cost: $0.216
Tester: Alex

Results:
  loginWorks: true
  errorShown: true
  errorMessage: Invalid username or password

Raw Response:
I tested login with the provided credentials. Login works correctly with test@example.com.
When I tried a wrong password, the error message 'Invalid username or password' appeared.

View in dashboard: https://runhuman.com/dashboard/...

Agent tells you:

Login test complete! Login works with valid credentials. Error message “Invalid username or password” shown for wrong password. Test took 2 minutes, cost $0.22.


Next Steps

TopicLink
Full technical specificationReference
Practical recipesCookbook
Direct API integrationREST API