{
 "slug": "render",
 "name": "Render",
 "url": "https://render.com",
 "domain": "render.com",
 "category": "hosting",
 "category_name": "Hosting and deploys",
 "tested_at": "2026-10-12",
 "run": "20261012T094114Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T033330Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261012T094114Z",
   "date": "2026-10-12",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 3,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "obey"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "agent_rail"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "agent_rail",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": null,
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 2,
    "value": "3.0.2"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "reported",
 "driver": {
  "version": 3,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "076cd4c65a1a",
  "kb_version": "3+overlay-1353601952",
  "identity": "e8a92f24a9a8"
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 3,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "obey"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "hCaptcha",
  "visible": true,
  "type": "challenge",
  "human": null,
  "how": "Check the Web Bot Auth signature on the sign-up request (the agent's key directory is public) and skip hCaptcha for signed agents; or offer a documented sign-up API with email verification.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "captcha"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "captcha",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt (text/markdown) routes agents to agents.md, tasks.md and every docs page as Markdown (.md URL and Accept: text/markdown); REST OpenAPI 3.0.2 with 140 paths at api-docs.render.com; public docs-search API."
  },
  "signup": {
   "status": "human",
   "note": "Email sign-up at dashboard.render.com/register shows an hCaptcha picture puzzle after Create Account. No documented headless sign-up (no API/CLI sign-up, no auth.md); Stripe Projects lists render/static-site but needs a Stripe account we do not have."
  },
  "verify": {
   "status": "",
   "note": "Not reached: no account. dashboard.render.com/robots.txt disallows every path except /, /register and /login.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Not reached. API keys are created only in the dashboard Account Settings (robots.txt-disallowed). MCP OAuth needs a client ID pre-registered with Render (no DCR, no CIMD per the server card) and its authorization server api.render.com is robots.txt-disallowed.",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "MCP answers 401 without a Bearer token. api.render.com/robots.txt is 'User-agent: * / Disallow: /', so the documented REST API is closed to our agent even with a key.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Not reached: no account or credential.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P3",
   "rails": [
    "Stripe Projects (render/static-site only)",
    "card via Stripe on the dashboard Billing page"
   ],
   "rail_ids": [
    "stripe-projects",
    "card"
   ],
   "first_party": true,
   "rail_scope": "partial",
   "trial_path": "free tier",
   "note": "No 402 challenge on Render's own hosts; no MPP or x402 Bazaar listing. Stripe Projects catalog lists only render/static-site. We paid nothing. Paid plans otherwise via a card on the dashboard Billing page; free instances need no card.",
   "detected_grade": "P4",
   "exercised": false,
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "not reached: no account or plan was created (sign-up stopped at hCaptcha), so no plan exists to cancel. Docs: plan is changed on the dashboard Billing page; no billing API in the REST OpenAPI.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created, so nothing to delete. No account-deletion page found in the docs (docs-search, /docs/account-deletion.md 404) and no account delete in the REST OpenAPI.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-12",
  "source": "probe",
  "options": [
   {
    "id": "stripe-projects",
    "name": "Stripe Projects",
    "kind": "agent-rail",
    "first_party": true,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [
   "stripe-projects"
  ],
  "paid": null,
  "exercised": false,
  "detected_grade": "P4",
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST, 140 paths, base https://api.render.com/v1 (robots.txt disallows the whole host)",
  "openapi": "3.0.2 at api-docs.render.com; render.com/openapi.json is a separate 3.1.0 'AI Discovery API' (14 paths)",
  "mcp": "official hosted, OAuth (pre-registered clients) or API key",
  "llms_txt": "598 lines, agent routing to agents.md and tasks.md"
 },
 "can_do": [
  "Read every docs page as Markdown and search the docs through a public API",
  "Discover the MCP server and its auth requirements"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "hCaptcha picture puzzle on the email sign-up form; no headless sign-up"
  },
  {
   "what": "Get an API key or OAuth token",
   "why": "keys only in the dashboard; MCP OAuth needs a pre-registered client and its AS host is robots.txt-disallowed"
  },
  {
   "what": "Call the REST API",
   "why": "api.render.com robots.txt disallows all paths for every user agent"
  },
  {
   "what": "Deploy services, databases, cron jobs or anything else",
   "why": "no account or credential"
  }
 ],
 "blockers": [
  "hCaptcha puzzle on sign-up",
  "API keys only in the dashboard",
  "robots.txt disallows api.render.com and the dashboard"
 ],
 "tips_for_owner": [
  "Let signed agents sign up without a puzzle",
  "Allow agents on api.render.com in robots.txt",
  "Let agents get a key without the dashboard",
  "Accept CIMD clients on the MCP OAuth server",
  "Sell all plans through Stripe Projects or MPP",
  "Add a billing and account-delete API"
 ],
 "tips_for_agents": [
  "Start at https://render.com/llms.txt; every docs page is available as Markdown (.md or Accept: text/markdown)",
  "Use the hosted MCP server https://mcp.render.com/mcp with a human-created API key as Bearer; OAuth works only for pre-registered clients (Claude Code, Cursor, Codex and others)",
  "api.render.com's robots.txt disallows all paths: an agent that honours robots.txt cannot use the REST API or the Render CLI",
  "Sign-up needs a human: an hCaptcha puzzle guards the email form"
 ],
 "selfhost": null,
 "summary": "Render's agent docs are excellent: llms.txt, Markdown for every page, a docs-search API and a hosted MCP server. But an agent cannot get in: the email sign-up shows an hCaptcha puzzle, API keys are made only in the dashboard, MCP OAuth needs a pre-registered client, and robots.txt disallows the whole API host and the dashboard. No capability could be driven.",
 "wall": "hCaptcha puzzle on the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Render is a cloud hosting platform for web apps and databases. Its documentation is excellent for AI agents, but an agent cannot even create an account because the sign-up form shows a picture-puzzle check.",
  "can_do": [
   "Read all of Render's documentation and search it automatically",
   "Find out what the automated assistant (MCP) connection needs"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "a picture-puzzle check blocks the sign-up form"
   },
   {
    "what": "Get a key to use the service automatically",
    "why": "keys are only made inside the account dashboard, which needs sign-up first"
   },
   {
    "what": "Use the programming interface directly",
    "why": "the website's own rules block automated access to that address"
   },
   {
    "what": "Set up any server, database, or scheduled job",
    "why": "none of this is reachable without an account"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Services",
   "capability": "Deploy a web service from a Git repo or Docker image",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/services",
    "mcp": "create_web_service",
    "cli": "render services create",
    "ui": "Dashboard > New > Web Service"
   },
   "check": "GET /v1/services/{id} shows type web_service with status build/deploy succeeded",
   "source": "https://render.com/docs/web-services; https://render.com/docs/api"
  },
  {
   "id": "cap-03",
   "group": "Services",
   "capability": "Deploy a static site with CDN hosting",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/services",
    "mcp": "create_static_site",
    "cli": "render services create",
    "ui": "Dashboard > New > Static Site"
   },
   "check": "GET /v1/services/{id} shows type static_site; site reachable at onrender.com subdomain",
   "source": "https://render.com/pricing; https://render.com/docs/api"
  },
  {
   "id": "cap-04",
   "group": "Services",
   "capability": "Run background workers",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/services",
    "mcp": "create_background_worker",
    "cli": "render services create",
    "ui": "Dashboard > New > Background Worker"
   },
   "check": "GET /v1/services/{id} shows type background_worker running",
   "source": "https://render.com/pricing; https://render.com/"
  },
  {
   "id": "cap-05",
   "group": "Databases",
   "capability": "Provision a managed Postgres database",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/postgres",
    "mcp": "create_postgres",
    "cli": "render services create / render psql",
    "ui": "Dashboard > New > PostgreSQL"
   },
   "check": "GET /v1/postgres/{id} shows status available; psql connects",
   "source": "https://render.com/docs/postgresql.md; https://render.com/docs/api"
  },
  {
   "id": "cap-06",
   "group": "Databases",
   "capability": "Provision a Redis-compatible Key Value store",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/key-value",
    "mcp": "create_key_value",
    "cli": "render services create",
    "ui": "Dashboard > New > Key Value"
   },
   "check": "GET /v1/key-value/{id} shows status available",
   "source": "https://render.com/docs/key-value.md; https://render.com/pricing"
  },
  {
   "id": "cap-07",
   "group": "Deploys",
   "capability": "Trigger and monitor a deploy",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/services/{id}/deploys",
    "mcp": "trigger deploy / redeploy tool",
    "cli": "render deploys create",
    "ui": "Service > Manual Deploy"
   },
   "check": "GET /v1/services/{id}/deploys/{deployId} shows status live",
   "source": "https://render.com/docs/deploys.md; https://render.com/docs/cli"
  },
  {
   "id": "cap-08",
   "group": "Deploys",
   "capability": "Roll back to a prior deploy",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Service > Deploys > Rollback"
   },
   "check": "Service's active deploy ID matches the selected prior build after rollback",
   "source": "https://render.com/docs/web-services (Instant rollbacks); https://render.com/pricing"
  },
  {
   "id": "cap-09",
   "group": "Automation",
   "capability": "Run scheduled cron jobs",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/cronjobs",
    "mcp": "create_cron_job",
    "cli": "render services create",
    "ui": "Dashboard > New > Cron Job"
   },
   "check": "GET /v1/cronjobs/{id}/runs shows a completed run at the scheduled cron expression time",
   "source": "https://render.com/docs/api; https://render.com/pricing"
  },
  {
   "id": "cap-10",
   "group": "Automation",
   "capability": "Run one-off jobs and durable workflows/tasks",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/services/{id}/jobs",
    "mcp": "run_job",
    "cli": "render deploys create (one-off job)",
    "ui": "Service > Jobs"
   },
   "check": "GET /v1/services/{id}/jobs/{jobId} shows status succeeded",
   "source": "https://render.com/docs/workflows.md; https://render.com/docs/api"
  },
  {
   "id": "cap-11",
   "group": "Scaling",
   "capability": "Scale a service vertically or horizontally (incl. autoscaling)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "PATCH /v1/services/{id}/scale",
    "mcp": "update_service (scaling)",
    "cli": null,
    "ui": "Service > Settings > Scaling"
   },
   "check": "GET /v1/services/{id} shows updated numInstances or autoscaling config and plan",
   "source": "https://render.com/docs/scaling; https://render.com/pricing (Horizontal autoscaling)"
  },
  {
   "id": "cap-02",
   "group": "Services",
   "capability": "Deploy a private service",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/services",
    "mcp": "create_private_service",
    "cli": "render services create",
    "ui": "Dashboard > New > Private Service"
   },
   "check": "GET /v1/services/{id} shows type private_service, no public onrender.com URL serving",
   "source": "https://render.com/docs/private-services; https://render.com/docs/api"
  },
  {
   "id": "cap-12",
   "group": "Networking",
   "capability": "Attach a custom domain with managed TLS",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/services/{id}/custom-domains",
    "mcp": null,
    "cli": null,
    "ui": "Service > Settings > Custom Domains"
   },
   "check": "GET /v1/services/{id}/custom-domains shows domain with verified/TLS issued status",
   "source": "https://render.com/docs/custom-domains; https://render.com/docs/api"
  },
  {
   "id": "cap-13",
   "group": "Networking",
   "capability": "Use private networking between services in a region",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Automatic; service .internal hostname"
   },
   "check": "Service reaches another service's internal hostname without public internet egress",
   "source": "https://render.com/docs/private-network.md; https://render.com/pricing"
  },
  {
   "id": "cap-14",
   "group": "Config",
   "capability": "Set environment variables and secret files",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /v1/services/{id}/env-vars",
    "mcp": "update_environment_variables",
    "cli": "render env",
    "ui": "Service > Environment"
   },
   "check": "GET /v1/services/{id}/env-vars shows the set key/value",
   "source": "https://render.com/docs/configure-environment-variables.md; https://render.com/docs/api"
  },
  {
   "id": "cap-15",
   "group": "Config",
   "capability": "Share config via environment groups",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/env-groups",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Env Groups"
   },
   "check": "GET /v1/env-groups/{id} lists linked services",
   "source": "https://render.com/docs/api (environment group glossary)"
  },
  {
   "id": "cap-16",
   "group": "Config",
   "capability": "Define infrastructure as code with Blueprints (render.yaml)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "render blueprints validate",
    "ui": "Dashboard > New > Blueprint"
   },
   "check": "render.yaml sync creates/updates services matching the file; render blueprints validate exits 0",
   "source": "https://render.com/docs/infrastructure-as-code.md; https://render.com/docs/cli"
  },
  {
   "id": "cap-17",
   "group": "Storage",
   "capability": "Attach a persistent disk to a service",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v1/services/{id}/disk",
    "mcp": null,
    "cli": null,
    "ui": "Service > Disks"
   },
   "check": "GET /v1/services/{id}/disk shows mounted disk with sizeGB; files persist across deploy",
   "source": "https://render.com/docs/disks.md; https://render.com/pricing"
  },
  {
   "id": "cap-18",
   "group": "Previews",
   "capability": "Preview a pull request (single-service or full-stack)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Automatic on PR open, via GitHub check link"
   },
   "check": "PR shows a preview environment URL serving the branch's build",
   "source": "https://render.com/docs/preview-environments; https://render.com/pricing (Full-stack preview environments)"
  },
  {
   "id": "cap-19",
   "group": "Projects",
   "capability": "Organize services into projects and environments",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/projects",
    "mcp": "list_services (filter by env)",
    "cli": null,
    "ui": "Dashboard > Projects"
   },
   "check": "GET /v1/projects/{id}/environments lists created environments with assigned services",
   "source": "https://render.com/docs/api; https://render.com/pricing (Environments)"
  },
  {
   "id": "cap-20",
   "group": "Monitoring",
   "capability": "View live logs and configure log streaming",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/logs",
    "mcp": "get_logs",
    "cli": "render logs",
    "ui": "Service > Logs"
   },
   "check": "GET /v1/logs returns recent log lines for the service; log stream destination receives events",
   "source": "https://render.com/docs/logging; https://render.com/docs/api"
  },
  {
   "id": "cap-21",
   "group": "Monitoring",
   "capability": "View service metrics (CPU, memory, bandwidth, autoscaling)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/metrics",
    "mcp": "get_metrics",
    "cli": null,
    "ui": "Service > Metrics"
   },
   "check": "GET /v1/metrics returns a time series matching the dashboard chart",
   "source": "https://render.com/docs/api; https://render.com/docs/mcp-server (Service metrics prompts)"
  },
  {
   "id": "cap-22",
   "group": "Monitoring",
   "capability": "Configure health checks",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /v1/services/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Service > Settings > Health Check Path"
   },
   "check": "GET /v1/services/{id} shows configured healthCheckPath; failing path triggers restart",
   "source": "https://render.com/docs/health-checks; https://render.com/pricing"
  },
  {
   "id": "cap-23",
   "group": "Monitoring",
   "capability": "Receive deploy/service notifications",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Account/Workspace > Notifications"
   },
   "check": "Configured notification channel (email/Slack) receives a deploy failure/success alert",
   "source": "https://render.com/pricing (Notifications)"
  },
  {
   "id": "cap-24",
   "group": "Access",
   "capability": "Open an SSH session into a running service instance",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "render ssh",
    "ui": "Service > Shell"
   },
   "check": "render ssh opens an interactive shell on the instance; commands execute",
   "source": "https://render.com/docs/cli; https://render.com/pricing (SSH access)"
  },
  {
   "id": "cap-25",
   "group": "Access",
   "capability": "Run SQL queries against a Postgres database",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "query_postgres",
    "cli": "render psql",
    "ui": null
   },
   "check": "render psql -c 'SELECT ...' returns rows matching database state",
   "source": "https://render.com/docs/cli; https://render.com/docs/mcp-server (Data analysis prompts)"
  },
  {
   "id": "cap-26",
   "group": "Deploys",
   "capability": "Restart a service instance",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/services/{id}/restart",
    "mcp": "restart_service",
    "cli": "render restart (via services menu)",
    "ui": "Service > Manual Restart"
   },
   "check": "GET /v1/services/{id} shows a new instance start time after restart",
   "source": "https://render.com/docs/cli (restart via services); https://render.com/docs/api"
  },
  {
   "id": "cap-27",
   "group": "Deploys",
   "capability": "Enable maintenance mode for a web service",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Service > Settings > Maintenance Mode"
   },
   "check": "Public URL returns the maintenance page instead of the app after enabling",
   "source": "https://render.com/docs/web-services (Additional features: Maintenance mode)"
  },
  {
   "id": "cap-28",
   "group": "Security",
   "capability": "Restrict inbound access with firewall / IP allow rules",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Service/Datastore > Settings > Access Control"
   },
   "check": "Request from a non-allowlisted IP is rejected after rule is added",
   "source": "https://render.com/pricing (Inbound IP rules, Firewall)"
  },
  {
   "id": "cap-29",
   "group": "Security",
   "capability": "Isolate non-production environments from production",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project > Environment Settings > Isolation"
   },
   "check": "Service in isolated environment cannot reach production-tagged service over private network",
   "source": "https://render.com/ (Isolated environments); https://render.com/pricing (Network-isolated environments)"
  },
  {
   "id": "cap-30",
   "group": "AI tooling",
   "capability": "Install Render agent skills for AI coding tools",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "render skills install",
    "ui": null
   },
   "check": "render skills list shows installed skill for the target coding agent",
   "source": "https://render.com/docs/cli (skills command)"
  },
  {
   "id": "cap-31",
   "group": "Account",
   "capability": "Manage API keys",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account Settings > API Keys"
   },
   "check": "Newly created key authenticates an API request; revoked key returns 401",
   "source": "https://render.com/docs/api (Create an API key)"
  },
  {
   "id": "cap-32",
   "group": "Account",
   "capability": "Manage team members and workspaces",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "list_workspaces / set_workspace",
    "cli": "render workspace set",
    "ui": "Dashboard > Workspace Settings > Members"
   },
   "check": "render workspaces lists the workspace; invited member appears in workspace member list",
   "source": "https://render.com/docs/cli; https://render.com/docs/mcp-server (Workspaces tools)"
  },
  {
   "id": "cap-33",
   "group": "Account",
   "capability": "View audit logs for workspace/platform events",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /v1/audit-logs",
    "mcp": null,
    "cli": null,
    "ui": "Workspace Settings > Audit Log"
   },
   "check": "GET /v1/audit-logs returns an entry matching a recent admin action",
   "source": "https://render.com/docs/api; https://render.com/pricing (Workspace audit logs)"
  },
  {
   "id": "cap-34",
   "group": "Account",
   "capability": "Configure SSO/SCIM and RBAC roles",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Workspace Settings > SSO/SCIM/Roles"
   },
   "check": "Member provisioned via SCIM appears in workspace with assigned RBAC role",
   "source": "https://render.com/pricing (SAML SSO & SCIM, Advanced RBAC roles)"
  },
  {
   "id": "cap-35",
   "group": "Account",
   "capability": "Deploy from a pre-built template",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "render.com/templates"
   },
   "check": "Selecting a template creates the described service pre-configured from its repo",
   "source": "https://render.com/ (View Templates); https://render.com/templates"
  }
 ],
 "attempts": [
  {
   "t": "01:15",
   "cap": "discovery",
   "capability": "robots.txt",
   "task": "Read robots.txt on product hosts",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "render.com/robots.txt: User-Agent * Allow / (disallows /contact-sales,/newsletters/,/lp/), 'Content-Signal: ai-train=yes, search=yes, ai-input=yes'. api.render.com/robots.txt: 'User-agent: * / Disallow: /'. dashboard.render.com/robots.txt: Allow /$, /register$, /login$, Disallow: /. mcp.render.com/robots.txt 404 (no rules).",
   "notes": "The whole REST API host (api.render.com), also the OAuth authorization server, is disallowed to every user agent; the dashboard is disallowed except /, /register and /login."
  },
  {
   "t": "01:15",
   "cap": "discovery",
   "capability": "MCP server/discover",
   "task": "POST server/discover on https://mcp.render.com/mcp",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "401, WWW-Authenticate: Bearer realm=\"https://mcp.render.com/mcp\", resource_metadata=\"https://mcp.render.com/.well-known/oauth-protected-resource/mcp\". PRM 200 application/json {resource: https://mcp.render.com/mcp, authorization_servers:[https://api.render.com]}. AS metadata at api.render.com: robots.txt disallows.",
   "notes": "auth-required; needs Bearer (OAuth with pre-registered client ID, no DCR per server card, or API key)."
  },
  {
   "t": "01:15",
   "cap": "discovery",
   "capability": "MCP server card / agent cards",
   "task": "Fetch server-card, ai-catalog, agent-card",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://mcp.render.com/mcp/server-card 404; /.well-known/ai-catalog.json 404 html; /.well-known/mcp/server-card.json 200 application/json (protocolVersion 2025-06-18, render-mcp-server 0.3.0, says OAuth needs pre-registered client ID, no DCR; or Bearer API key); /.well-known/agent-card.json and agent.json 404; /.well-known/ucp 404; /auth.md 404; /SKILL.md 404."
  },
  {
   "t": "01:15",
   "cap": "discovery",
   "capability": "llms.txt, OpenAPI, markdown docs",
   "task": "Fetch llms.txt, openapi, markdown",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "/llms.txt 200 text/markdown, 598 lines, routes agents to agents.md, tasks.md, docs/{slug}.md, docs search API, MCP. Accept: text/markdown on /docs/web-services -> content-type text/markdown, vary: Accept. /docs/web-services.md 200 text/markdown. render.com/openapi.json = 'Render AI Discovery API' openapi 3.1.0 (14 paths); REST API spec at api-docs.render.com/openapi/render-public-api-1.json. agents.md: 'Authentication and UI-only setup actions require a human'; API key at https://dashboard.render.com/u/settings#api-keys.",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "02:12",
   "cap": "docs",
   "capability": "Find docs",
   "task": "Find API, MCP, agent setup docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "llms.txt, agents.md, agents/tasks.md, docs/api.md, docs/{slug}.md as text/markdown, REST OpenAPI 3.0.2 (140 paths) at api-docs.render.com",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://render.com/llms.txt"
   }
  },
  {
   "t": "02:13",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Create account with email+password at dashboard.render.com/register",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Filled email the agent's inbox and password, clicked Create Account: hCaptcha image puzzle appeared ('Please click on the icon that is different'), visible_challenge true; screenshot browser/shots/002.png.",
   "notes": "No documented headless sign-up (no API/CLI sign-up, no auth.md). Only other options are GitHub/GitLab/Bitbucket/Google OAuth, which we have no accounts for. Wall: hCaptcha puzzle.",
   "quality": {
    "error_legibility": "n/a",
    "recoverable": "no"
   }
  },
  {
   "t": "02:13",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Open verification mail link",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not reached: sign-up stopped at hCaptcha. Note dashboard.render.com/robots.txt disallows every path except /, /register and /login, so a verify link on the dashboard would also be closed to our agent."
  },
  {
   "t": "02:13",
   "cap": "credentials",
   "capability": "Get API credentials",
   "task": "Create API key or OAuth token",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "key": "create",
   "evidence": "Not reached (no account). Docs: API keys only in dashboard Account Settings (docs/api.md 'You create and manage API keys from your Account Settings page'); no API/CLI route to mint a key. MCP OAuth: server card says 'requires a client ID pre-registered with Render because dynamic client registration is not available'; AS metadata at api.render.com is robots.txt-disallowed. Dashboard settings page disallowed by dashboard robots.txt."
  },
  {
   "t": "02:13",
   "cap": "first_call",
   "capability": "First API/MCP call",
   "task": "list_workspaces via MCP / GET /v1/services",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "MCP POST server/discover -> 401 (needs Bearer). GET https://api.render.com/v1/services refused: api.render.com/robots.txt 'User-agent: * Disallow: /'. No credential."
  },
  {
   "t": "02:13",
   "cap": "first_action",
   "capability": "First real action",
   "task": "Create a service",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not reached: no account or credential. REST API host is disallowed by robots.txt for all agents even with a key."
  },
  {
   "t": "03:19",
   "cap": "pay",
   "capability": "Pay step public probes",
   "task": "402 challenges, registries, checkout, trial card",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pay_probe.json: no 402 challenge on render.com, api.render.com (robots.txt), x402./mpp. (no such host); no MPP or Bazaar listing; Stripe Projects catalog lists Render. projects.dev/index.html.md: 'Render, render/static-site'. pay_tx.json: refused, 'no 402 on the product's own domain asks for USDC on a network we hold a wallet for'. MCP endpoint answers 401 not 402. docs-search for x402 / stripe projects / payment method: no results. Pricing FAQ: 'We accept all major credit and debit cards. Your payment info is stored securely by Stripe'; $1 card check. docs/render-dashboard.md: billing page in dashboard 'View and update your plan, Update your payment method'. docs/free.md: free instances without a card; no payment method -> free services suspended when included usage runs out.",
   "notes": "Agent rail: Stripe Projects offers only render/static-site (partial). Not paid: no 402 rail, and Stripe Projects needs a Stripe account we do not have. Otherwise card on file via dashboard (Stripe)."
  },
  {
   "t": "03:19",
   "cap": "signup",
   "capability": "Sign up via Stripe Projects",
   "task": "Check Stripe Projects as a headless account-creation route",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "projects.dev catalog lists render/static-site; Stripe Projects CLI creates the provider account but needs a logged-in Stripe account (human) which our agent does not have. Not tried."
  },
  {
   "t": "03:19",
   "cap": "cancel",
   "capability": "Cancel plan",
   "task": "Cancel/downgrade",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "not tested: no plan or trial was started. docs/render-dashboard.md: plan changed on the dashboard Billing page ('View and update your plan'); no billing API in the REST OpenAPI paths."
  },
  {
   "t": "03:19",
   "cap": "delete",
   "capability": "Delete account",
   "task": "Delete account and data",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account was created (sign-up stopped at hCaptcha), so nothing to delete. docs-search 'delete account' returned no account-deletion page; /docs/account-deletion.md 404. The REST OpenAPI has no user/account delete path."
  }
 ],
 "stale": false,
 "icon": "/logos/render.png",
 "monitored": false,
 "verdict": "Needs a person to get in: L1 · Needs a person. Our agent stopped first at signup, where the email form showed an hCaptcha picture puzzle after Create Account, with no headless path around it. Docs and the MCP server are built for agents: llms.txt, Markdown pages, a docs-search API and a full REST catalog. But robots.txt disallows the API host and leaves only the home, register and login pages open on the dashboard. Once blocked at signup, no key, call or work was ever reached. Paying and cancelling both stay on the dashboard Billing page behind that same wall.",
 "page": "https://agentdrives.com/tools/render?via=api"
}