{
  "name": "Launchfiles",
  "domain": "launchfiles.app",
  "description": "The operating file for AI-native startups.",
  "object": "launchfile",
  "version": "0.1.0",
  "status": "beta",
  "publicSurfaces": {
    "llms": "/llms.txt",
    "agents": "/agents",
    "pricing": "/pricing",
    "waitlist": "/waitlist",
    "openapi": "/openapi.json",
    "wellKnown": "/.well-known/launchfiles.json",
    "wellKnownAgent": "/.well-known/launchfiles-agent.json",
    "mcp": "/.well-known/mcp.json",
    "quickstart": "/quickstart"
  },
  "authenticatedSurfaces": {
    "challengeManifest": "/api/founder/prod-challenge-manifest",
    "challengeTokenIssuance": "/api/founder/prod-challenge-token",
    "hostedMcp": "/api/mcp",
    "localMcpStdio": "repo-local stdio MCP (authenticated)"
  },
  "accessBoundaries": {
    "doctrine": "docs/LAUNCHFILES_ACCESS_BOUNDARY_MODEL_V0.md",
    "publicDiscoverySurfaces": [
      "/llms.txt",
      "/agents",
      "/pricing",
      "/openapi.json",
      "/.well-known/launchfiles.json",
      "/.well-known/launchfiles-agent.json"
    ],
    "externalAgentReadonly": [
      "launchfiles://context/current",
      "launchfiles://schemas/{schemaName}",
      "launchfiles://routes",
      "launchfiles://routes/{routeId}",
      "launchfiles://capabilities/orchestrator"
    ],
    "customerWorkspaceReadonly": [
      "launchfiles://missions/{missionId}",
      "launchfiles://work-orders/{workOrderId}",
      "launchfiles://receipts/{receiptId}",
      "launchfiles://readouts/{readoutId}"
    ],
    "customerWorkspaceProposed": [
      "POST /api/v0/missions/plan",
      "POST /api/v0/agent-actions/propose",
      "POST /api/v0/agent-actions/request-approval"
    ],
    "internalOrchestratorOnly": [
      "route scoring weights",
      "blocker rule internals",
      "readiness mapping inputs",
      "candidate scoring internals"
    ],
    "internalRuntimePrivate": [
      "secrets",
      "env vars",
      "provider tokens",
      "private credentials"
    ],
    "futureExternalPlanned": [
      "OAuth/RAR-bound reads",
      "POST /api/v0/receipts"
    ],
    "blocked": [
      "mutation handles",
      "execute tools",
      "publish tools",
      "payment tools",
      "worker secret access",
      "atomic tool access",
      "unrestricted agent execution"
    ],
    "rules": {
      "publicDiscoveryIsNotAuthority": true,
      "readOnlyIsNotExecution": true,
      "proposalIsNotApproval": true,
      "routeVisibilityIsNotExecution": true,
      "futureExternalRequiresAuth": true,
      "publicOpenApiIsNotExecutionAuthority": true,
      "externalAgentsShouldNotInspectRepo": true
    }
  },
  "challengeExecution": {
    "status": "authenticated_scoped_challenge_manifest_live",
    "manifest": "/api/founder/prod-challenge-manifest",
    "auth": "Authorization: Bearer <SCOPED_CHALLENGE_TOKEN> or founder session",
    "allowedProductPrefix": "prod_program_suite_",
    "allowedScopes": [
      "product:create",
      "product:read",
      "product:delete",
      "mission:run",
      "mission:retrieve"
    ],
    "forbidden": [
      "publish",
      "deploy",
      "send",
      "spend",
      "billing",
      "real_product_access",
      "worker_secret_access",
      "atomic_tool_access"
    ],
    "publicOpenApiIsExecutionAuthority": false,
    "repoAccessRequired": false,
    "localFilesRequired": false
  },
  "agentQuickstart": [
    "Read /llms.txt and /agents for public boundaries.",
    "Get a scoped challenge token from the founder.",
    "Call GET /api/health.",
    "Call GET /api/founder/prod-challenge-manifest with Authorization: Bearer <SCOPED_CHALLENGE_TOKEN>.",
    "Create a temporary prod_program_suite_* challenge product.",
    "Run a mission, then use the returned poll_url or the manifest poll endpoint.",
    "Inspect progress, workOrders, DecisionTarget, artifacts, receipts, and handoff.",
    "Delete the temporary challenge product.",
    "Report receipt truth without claiming publish, deploy, send, spend, billing, or real-product mutation."
  ],
  "mcpIntegration": {
    "status": "hosted_readonly_and_local_stdio_authenticated",
    "transport": [
      "streamable-http",
      "stdio"
    ],
    "publicRemoteServer": true,
    "freeAccess": false,
    "auth": {
      "required": true,
      "methods": [
        "scoped_challenge_token",
        "hosted_mcp_bearer_token",
        "founder_internal_admin_mode"
      ],
      "tokenEnvVars": [
        "LAUNCHFILE_MCP_AUTH_TOKEN",
        "SCOPED_CHALLENGE_TOKEN"
      ],
      "tokenIssuance": "/api/founder/prod-challenge-token",
      "founderSessionRequiredForTokenIssuance": true
    },
    "servers": [
      {
        "id": "launchfiles-hosted-product-discovery",
        "endpoint": "/api/mcp",
        "transport": "streamable-http",
        "capabilities": [
          "resources/list",
          "resources/read",
          "tools/list",
          "tools/call"
        ],
        "tools": [
          "launchfiles_propose_mission",
          "launchfiles_get_mission_session",
          "launchfiles_list_objects"
        ],
        "requires": [
          "Authorization: Bearer <SCOPED_CHALLENGE_TOKEN or HOSTED_MCP_TOKEN>"
        ],
        "mutationBoundary": "Mission proposal only; no approval, publish, deploy, send, spend, billing mutation, or bypass tool"
      },
      {
        "id": "launchfiles-readonly",
        "package": "@launchfiles/mcp-stdio",
        "npmScript": "mcp:stdio",
        "capabilities": [
          "resources"
        ],
        "requires": [
          "LAUNCHFILE_MCP_AUTH_TOKEN or SCOPED_CHALLENGE_TOKEN or LAUNCHFILE_INTERNAL_ADMIN_MODE=1"
        ]
      },
      {
        "id": "launchfiles-agent",
        "package": "@launchfiles/mcp-agent",
        "npmScript": "mcp:agent",
        "capabilities": [
          "tools"
        ],
        "tools": [
          "launchfiles_propose_mission",
          "launchfiles_get_mission_session",
          "launchfiles_list_objects"
        ],
        "requires": [
          "LAUNCHFILE_MCP_AUTH_TOKEN or SCOPED_CHALLENGE_TOKEN or LAUNCHFILE_INTERNAL_ADMIN_MODE=1",
          "LAUNCHFILE_AGENT_MODE=1",
          "DATABASE_URL"
        ]
      }
    ],
    "cursorConfig": {
      "mcpServers": {
        "launchfiles-agent": {
          "command": "bash",
          "args": [
            "scripts/mcp/run_agent_mcp.sh"
          ],
          "env": {
            "LAUNCHFILE_MCP_AUTH_TOKEN": "<SCOPED_CHALLENGE_TOKEN>"
          }
        },
        "launchfiles-readonly": {
          "command": "bash",
          "args": [
            "scripts/mcp/run_readonly_mcp.sh"
          ],
          "env": {
            "LAUNCHFILE_MCP_AUTH_TOKEN": "<SCOPED_CHALLENGE_TOKEN>"
          }
        }
      }
    },
    "setupSteps": [
      "Get a scoped challenge token from the founder (founder session: POST /api/founder/prod-challenge-token) or use LAUNCHFILE_INTERNAL_ADMIN_MODE=1 for local founder admin only.",
      "Set LAUNCHFILE_MCP_AUTH_TOKEN in apps/web/.env.local or in your IDE MCP server env block. Do not commit tokens.",
      "For launchfiles-agent tools, also set LAUNCHFILE_AGENT_MODE=1 and DATABASE_URL in apps/web/.env.local.",
      "From the Launchfiles repo root, configure Cursor MCP using scripts/mcp/run_agent_mcp.sh and scripts/mcp/run_readonly_mcp.sh (see .cursor/mcp.json).",
      "Hosted MCP: connect to https://launchfiles.app/api/mcp with a bearer token. No free or anonymous resource access."
    ]
  },
  "mcpQuickstart": [
    "Read /agents for authenticated MCP setup. Public discovery does not grant MCP access.",
    "Issue or receive a scoped challenge token (lfpc.*) via founder session at /api/founder/prod-challenge-token.",
    "Hosted resources: POST https://launchfiles.app/api/mcp with Authorization: Bearer <SCOPED_CHALLENGE_TOKEN>.",
    "Export LAUNCHFILE_MCP_AUTH_TOKEN=<SCOPED_CHALLENGE_TOKEN> in apps/web/.env.local or IDE MCP env.",
    "Optional founder-local bypass: LAUNCHFILE_INTERNAL_ADMIN_MODE=1 (repo admin only; not for external agents).",
    "Read-only resources: npm run mcp:stdio (resources/list + resources/read).",
    "Orchestrator tools: npm run mcp:agent with LAUNCHFILE_AGENT_MODE=1 and DATABASE_URL.",
    "Tools: launchfiles_propose_mission, launchfiles_get_mission_session, launchfiles_list_objects.",
    "Hosted MCP exposes product resources and bounded agent tools. No anonymous access; no approval, publish, deploy, send, spend, billing mutation, or bypass tools."
  ],
  "capabilities": [
    "read_context",
    "propose_work",
    "request_approval",
    "record_receipt",
    "plan_website_mission",
    "plan_search_expansion_mission"
  ],
  "unsupported": [
    "autonomous_publishing",
    "unapproved_production_mutation",
    "unrestricted_agent_execution",
    "public_execution_api",
    "unscoped_production_api",
    "real_product_mutation",
    "agent_payments"
  ],
  "contact": {
    "website": "https://launchfiles.app"
  },
  "schemaRegistryStatus": "planned_not_public",
  "apiStatus": "public_openapi_discovery_only_challenge_manifest_authenticated",
  "documentation": {
    "doctrine": "https://github.com/launchfiles/launchfiles/blob/main/docs/LAUNCHFILES_AGENTIC_ECONOMY_INTEROPERABILITY_V0.md",
    "agentContract": "/agents",
    "agentQuickstart": "/agents",
    "authenticatedChallengeManifest": "/api/founder/prod-challenge-manifest",
    "mcpSetup": "/agents#mcp-setup",
    "accessBoundaryModel": "https://github.com/launchfiles/launchfiles/blob/main/docs/LAUNCHFILES_ACCESS_BOUNDARY_MODEL_V0.md"
  }
}
