{"schemaVersion":"2026-06-26","apiVersion":"0.1","name":"BoxFetch Connector","description":"BoxFetch Connector provides controlled access to the allowlisted BoxFetch Originals launch catalog. /api/mcp/standard is the primary standard JSON-RPC MCP endpoint with OAuth discovery, dynamic registration, human consent, and PKCE. /api/mcp/external is a secondary registered-bearer integration with the same default seven-tool hosted authority. /api/mcp/public is the unauthenticated five-tool bootstrap.","baseUrl":"https://app.boxfetch.ai","mcpEndpoint":"/api/mcp/standard","protectedMcpEndpoint":"/api/mcp/standard","standardMcpEndpoint":"/api/mcp/standard","publicBootstrapEndpoint":"/api/mcp/public","publicMcpEndpoint":"/api/mcp/public","externalBearerToolApiEndpoint":"/api/mcp/external","manifestUrl":"/api/public/mcp/manifest","openapiUrl":"/api/public/openapi","docsUrl":"https://boxfetch.ai/mcp","guideUrl":"https://boxfetch.ai/mcp/guide","marketplaceUrl":"https://boxfetch.ai/marketplace","signupUrl":"/signup","loginUrl":"/login","llmsTxtUrl":"/llms.txt","runtime":{"id":"boxfetch-runtime","resolverUrlTemplate":"https://boxfetch.ai/r/{exactRuntimeVersion}","trustRootUrl":"https://boxfetch.ai/r/trust-root","notes":"Resolve an EXACT runtime version to a signed release descriptor: artifact URL, SHA-256, size, Node range, cache key and Ed25519 signature. The artifact is immutable and digest-addressed at /r/artifacts/sha256-<digest>/runtime.mjs. Verify the digest and the signature before executing, and cache by digest so the same runtime is downloaded once. No account, no token and no version range: there is no \"latest\". A cached runtime stays usable, but re-ask the resolver at least every 60 seconds before executing it: only the resolver can report a revocation, and a signed descriptor that said \"active\" last month still verifies today.","trustModel":"trustRootUrl is DISCOVERY, not a trust anchor. A public key learned from the same origin that served the signature proves only that the origin agrees with itself. Pin the key id and key bytes through an independently trusted handoff — the same channel that gave you the exact version and digest — and use trustRootUrl to observe rotation and revocation. Once pinned, the signature authorizes the exact descriptor and artifact digest and survives artifact, CDN and cache tampering."},"agentOnboarding":{"capabilityClasses":["public_unauthenticated","human_handoff","agent_authenticated","human_authenticated"],"steps":[{"id":"discover","capability":"public_unauthenticated","method":"GET","path":"/.well-known/boxfetch-mcp","description":"Read this document. No credential required."},{"id":"connect_public_mcp","capability":"public_unauthenticated","method":"POST","path":"/api/mcp/public","description":"MCP Streamable HTTP handshake with no credential. Exposes only the five bootstrap tools."},{"id":"search_public_inventory","capability":"public_unauthenticated","method":"GET","path":"/api/public/agentic/search","description":"Search the allowlisted controlled-beta Original catalog anonymously. Public-safe fields only."},{"id":"read_public_item","capability":"public_unauthenticated","method":"GET","path":"/api/public/agentic/items/{assetId}","description":"Read one allowlisted Original by its stable public asset id. Never returns entitled content."},{"id":"register_provisional_agent","capability":"human_handoff","method":"POST","path":"/api/public/agentic/agents/register","description":"Create a provisional, unowned agent identity and receive an absolute claim URL for your human."},{"id":"human_claims_agent","capability":"human_handoff","method":"BROWSER","path":"/claim/agent","description":"Your human signs in or signs up and explicitly confirms the claim. An agent cannot do this itself."},{"id":"await_human_claim","capability":"human_handoff","method":"POST","path":"/api/public/agentic/agents/claim-status","description":"Poll with the body-only claimPollSecret. Returns claim state only, never a credential."},{"id":"connect_protected_mcp","capability":"agent_authenticated","method":"POST","path":"/api/mcp/standard","description":"Connect with no credential and follow OAuth discovery, PKCE, and human consent for the selected agent and scopes."},{"id":"acquire_original","capability":"agent_authenticated","method":"POST","path":"/api/mcp/standard","description":"Take a durable quote for an allowlisted Original, then call purchase_asset with that quoteId and an idempotency key. An eligible launch acquisition is captured immediately: no approval request is created and there is nothing to poll."},{"id":"retrieve_original_package","capability":"agent_authenticated","method":"POST","path":"/api/mcp/standard","description":"Call get_asset_content with the captured purchaseId to read the acquired Original, or omit purchaseId to use the eligible launch-access path. Container delivery through this tool is deferred."},{"id":"acquire_package_one_step","capability":"agent_authenticated","method":"POST","path":"/api/mcp/standard","description":"Call acquire_boxfetch_package with the exact assetId you selected and an idempotency key. It composes the quote, the acquisition, the entitlement, and the entitled delivery, and returns the package handoff plus the exact runtime handoff needed to verify, cache, and execute it. Approval-required acquisitions return the approval identity and no executable handoff."}],"claimStatusReturnsCredential":false,"credentialIssuedThroughOauthAuthorization":true,"agentMayClaimItself":false,"agentMayApproveOwnPurchase":false,"notes":"An agent may create its own PROVISIONAL identity but may never own itself, accept platform terms for a human, verify a human email, complete provider consent, set its own spending limits, or approve its own purchase. The public claimRequestId is the only claim value in the human URL. The separate claimPollSecret is returned only to the registering agent and must be sent in a request body, never in a URL or human message."},"auth":{"model":"mcp_oauth_2_1_authorization_code_pkce","scheme":"bearer","header":"Authorization","notes":"The protected endpoint challenges an unauthenticated client into standard MCP OAuth discovery, dynamic registration, human consent, and PKCE. The client sends the resulting scoped access token in Authorization. A registered BoxFetch bearer may also use the protected endpoint with the fixed default hosted authority."},"accountModel":{"purchaseRequiresHumanAccount":true,"purchaseRequiresCredits":false,"creditsFundedBy":"not_required_for_launch","approvalControlledByHuman":true,"notes":"Unauthenticated agents can read discovery, search the public Original catalog, read bounded Original detail, and register a provisional identity, but cannot preview, quote, or purchase. Registration at /api/public/agentic/agents/register returns an exact human claim URL containing a public request id plus a separate body-only polling secret; /api/public/agentic/agents/claim-status returns claim state, never a credential. After claim, the client connects to the protected MCP endpoint, follows OAuth discovery, dynamically registers, sends the human to consent, and completes PKCE token exchange. The human owns the agent, sets approval/spend policy, and can revoke the grant or agent. Route a human without an account to /signup. An eligible launch Original is captured automatically with no approval request. Human approval remains required for acquisition outside that path, and no paid acquisition, seller publication, or media tool is available to a hosted connection during the controlled beta."},"launchCatalog":"controlled_beta_originals_only","launchAcquisitionModel":"originals_launch_access","walletFundingRequiredForLaunch":false,"publicSellerPublishingEnabled":false,"creditsAreCash":false,"creditsBuyerRedeemable":false,"sellerExternalPayoutEnabled":false,"officialConnectorListed":false,"publicMediaDiscoveryEnabled":false,"tools":[{"name":"search_assets","idempotencyRequired":false},{"name":"preview_asset","idempotencyRequired":false},{"name":"quote_asset","idempotencyRequired":false},{"name":"purchase_asset","idempotencyRequired":true},{"name":"get_purchase_approval","idempotencyRequired":false},{"name":"submit_usage_feedback","idempotencyRequired":false},{"name":"get_asset_content","idempotencyRequired":false},{"name":"acquire_boxfetch_package","idempotencyRequired":true}],"controlledExecution":{"packageExecutionAvailableFor":"every_launch_original","packageRunner":"boxfetch_original_package_runner","hostedExecutionAvailableFor":["vercel-env-sync"],"hostedExecutionUnavailableIsNotPackageUnusable":true,"requiredScopes":{"prepareAndRead":"boxfetch:runs","requestExecution":"boxfetch:runs.execute","requestTeardown":"boxfetch:runs.teardown"},"runScopesInDefaultGrant":false,"registeredBearerExecutionEnabled":false,"ownerOnlyDecisions":["supply_provider_connection","select_provider_connection","approve_or_decline_plan","approve_or_decline_teardown"],"agentMayApproveOwnPlan":false,"agentMayApproveTeardown":false,"agentMaySupplyProviderCredential":false,"ownerDecisionSurface":"boxfetch_control_center","tools":["prepare_original_run","get_original_run","inspect_original_run","start_original_run","cancel_original_run","prepare_original_run_teardown","start_original_run_teardown"]},"originalExecutionModes":[{"slug":"vercel-env-sync","version":"1.1.1","executionModes":["package_runner","hosted_controlled_run"],"hostedExecutionAvailable":true},{"slug":"neon-postgres-bootstrap","version":"1.0.1","executionModes":["package_runner"],"hostedExecutionAvailable":false},{"slug":"authjs-google-oauth","version":"1.0.1","executionModes":["package_runner"],"hostedExecutionAvailable":false},{"slug":"stripe-signed-webhook","version":"1.0.1","executionModes":["package_runner"],"hostedExecutionAvailable":false},{"slug":"cloudflare-r2-scoped-bucket","version":"1.0.1","executionModes":["package_runner"],"hostedExecutionAvailable":false},{"slug":"github-actions-aws-oidc-role","version":"1.0.1","executionModes":["package_runner"],"hostedExecutionAvailable":false}],"rateLimit":{"policy":"fixed_window","scopes":["per_token","per_agent","per_user","per_user_per_tool"],"retryAfterSeconds":true,"notes":"Durable DB-backed fixed-window rate limits applied per token, per agent, per user across agents, and per user/per tool across agents. Standardized rate-limit errors include retryAfterSeconds."},"idempotency":{"requiredFor":["purchase_asset","acquire_boxfetch_package","prepare_original_run","inspect_original_run","start_original_run","cancel_original_run","prepare_original_run_teardown","start_original_run_teardown"],"acceptedHeader":"Idempotency-Key","acceptedBodyField":"idempotencyKey","notes":"purchase_asset, acquire_boxfetch_package, and every controlled-run mutation require an idempotency key. Replays of the same key with the same body return the original outcome; conflicting bodies are rejected. One key is scoped to one tool: reusing an acquisition key on a different tool is a conflict, not a replay."},"errors":{"shape":"json","fields":["error","reasonCodes","retryAfterSeconds?","details?"],"classes":["missing_authorization","malformed_authorization","malformed_token","invalid_signature","expired_token","token_not_registered","token_revoked","invalid_request","invalid_json","request_body_too_large","unknown_tool","missing_asset_id","missing_agent_id","missing_quoted_price","invalid_quoted_price","missing_idempotency_key","missing_purchase_id","missing_approval_request_id","idempotency_conflict","rate_limited","asset_unavailable","agent_not_found","agent_not_active","preview_not_allowed","purchase_not_allowed","content_not_found","not_entitled","mcp_tool_failed"]},"updatedAt":"2026-06-26"}