Skip to content

MCP Overview

POST https://api.instahuman.com/api/mcp

The server uses the Streamable HTTP transport with MCP sessions. Authentication is via Bearer token.

Authorization: Bearer ih_your_api_key_here

InstaHuman’s MCP server is stateless per-request (runs on Cloudflare Workers). Each request creates a fresh server instance.

  • Initialize with POST /api/mcp
  • Keep the returned mcp-session-id header on subsequent requests
  • Supports GET, POST, and DELETE methods
  • Accepts application/json and returns text/event-stream or application/json
Terminal window
curl https://api.instahuman.com/api/mcp \
-X POST \
-H "Authorization: Bearer ih_your_api_key_here" \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/list",
"params": {}
}'
ToolDescription
create_jobCreate a new job and return immediately
wait_jobBlock until job reaches terminal state
get_jobInspect job progress and feedback
list_jobsList owner’s recent jobs
pause_jobPause an active job
resume_jobResume a paused job
stop_jobGraceful shutdown, existing testers finish
cancel_jobCancel an active or paused job
close_jobClose job and begin settlement
resize_jobChange number of tester slots
approve_jobApprove a pending settlement
submit_disputeDispute a pending settlement
get_settlement_statusCheck settlement details
ToolDescription
create_projectCreate a new project
update_projectUpdate project name/description
delete_projectDelete a project
get_projectGet project details
list_projectsList owner’s projects
archive_projectArchive a project
unarchive_projectUnarchive a project
assign_job_to_projectLink/unlink a job to a project
add_project_testerManually add a tester
list_project_testersList testers in a project
update_project_testerUpdate tester flags
remove_project_testerRemove a tester

The server exposes one prompt:

  • job_tool_usage — Agent-facing instructions for choosing between create_job, wait_job, and follow-up status tools.

Tool errors return isError: true with a JSON { error: "message" } body. The wait_job tool includes additional context on timeout:

{
"error": "Timeout waiting for job",
"job_id": "uuid",
"status": "active",
"next_action": "Call wait_job(job_id) again to resume waiting, or use get_job(job_id) to inspect progress."
}