{"product":"SpringRoll","summary":"The Control Plane and App Portal for AI-built Applications. Deploy AI-built applications safely, connect them to approved company data, and make them available to the right people.","providerScope":"SpringRoll currently deploys to managed Vercel and Cloudflare.","availableRuntimes":["Vercel","Cloudflare"],"notFor":"Writing, designing, or debugging applications. SpringRoll is what happens after one exists.","mcp":{"name":"springroll","version":"0.2.0","endpoint":"https://springroll.dev/api/mcp","transport":"streamable-http","serverCard":"https://springroll.dev/.well-known/mcp/server-card.json","authorization":{"type":"oauth2","flow":"authorization_code","pkce":"S256","dynamicClientRegistration":"https://springroll.dev/api/oauth/register","authorizationServerMetadata":"https://springroll.dev/.well-known/oauth-authorization-server","protectedResourceMetadata":"https://springroll.dev/.well-known/oauth-protected-resource"},"tools":[{"name":"springroll.context","title":"Get SpringRoll context","description":"Returns the organization, identity, and permissions this agent token acts as, together with the deployment runtimes configured for it. Call this first: it tells you which tenant you are in, what you are allowed to do, and whether a deployment can actually land. It never returns credentials.","readOnly":true},{"name":"springroll.deploy","title":"Deploy a project","description":"Registers the project if it is new, attaches whatever source you give it, and deploys it using the application's Deployment workflow. Direct applications go to Production; Staged applications go to Development. Returns the live URL, or a deployment id to poll if the build is still running.","readOnly":false},{"name":"springroll.deploy.status","title":"Get deployment status","description":"Returns a deployment's current status, refreshing it from the runtime provider when the build is still in progress. Statuses: QUEUED, VALIDATING, BUILDING, DEPLOYING, READY, FAILED, CANCELLED, SUPERSEDED, ROLLED_BACK. Poll this after deploying rather than assuming success.","readOnly":true},{"name":"springroll.deploy.promote","title":"Promote a deployment","description":"Promotes a tested deployment into the next environment (development -> uat, uat -> production). Reuses the already-built artifact rather than rebuilding, so the bytes that were tested are the bytes that ship.","readOnly":false},{"name":"springroll.placement.preview","title":"Preview a placement","description":"Scores where SpringRoll would place this application and what it would cost, without deploying or writing anything. It shares its implementation with springroll.deploy, so the receipt it returns is what a deploy right now would decide: the provider and plan, the estimated monthly cost range, every limit the plan carries, what was inferred rather than declared, and why each other candidate lost.","readOnly":true},{"name":"springroll.app.get","title":"Get an application","description":"Returns an application's registry record: metadata, lifecycle stage, risk score, and whichever of the optional sections you ask for. No secrets are included.","readOnly":true},{"name":"springroll.app.list","title":"List applications","description":"Lists applications in this organization, newest first. Use `search` to find one by name or slug.","readOnly":true},{"name":"springroll.app.update","title":"Update application metadata","description":"Updates App Portal metadata: description, icon, tags, department, support contact, and data classification. Visibility is deliberately not editable here, because widening an audience requires an approval request (sec. 15.4).","readOnly":false},{"name":"springroll.app.presentation.get","title":"Read app presentation draft","description":"Read a private app listing draft and available artwork. Does not publish or expose the app.","readOnly":true},{"name":"springroll.app.presentation.save","title":"Prepare app presentation draft","description":"Save listing copy and selected image IDs to a private draft. Read the revision first. Use factual copy and real, reviewed screenshots. Only the owner or admin can publish in SpringRoll.","readOnly":false},{"name":"springroll.app.presentation.upload","title":"Upload app presentation image","description":"Upload a real screenshot or app icon as base64 PNG, JPEG, or WebP (8 MB maximum). Metadata is stripped. Images remain private until selected in an owner-published snapshot. Never upload confidential screen content.","readOnly":false},{"name":"springroll.app.presentation.generate_icon","title":"Prepare an app icon draft","description":"Queue one premium icon draft from the app's reviewed purpose. Requests are limited and deduplicated. Artwork never blocks deployment or publishes itself.","readOnly":false},{"name":"springroll.approval.submit","title":"Submit an approval request","description":"Submits an approval request of any supported type: UAT_PROMOTION, UAT_SIGN_OFF, PRODUCTION_PROMOTION, VISIBILITY_CHANGE, OWNERSHIP_TRANSFER, RETIREMENT, DOMAIN_CHANGE, or ROLLBACK. **An agent may submit but never decide**: SpringRoll requires a human approver, and an agent token cannot approve its own request.","readOnly":false},{"name":"springroll.approval.get","title":"Get an approval request","description":"Returns an approval request with its assigned reviewers, decisions so far, and the policy snapshot taken at submission. Poll this to find out whether a release has been approved.","readOnly":true},{"name":"springroll.policy.check","title":"Check governance policy","description":"Reports which governance policies an application would pass or fail for an environment.","readOnly":true},{"name":"springroll.connect.data_products","title":"List or describe data products","description":"Without `dataProduct`, lists the governed data products this organization publishes: what each one holds, who owns it, and how sensitive it is.","readOnly":true},{"name":"springroll.connect.request_access","title":"Request data product access","description":"Requests access to a data product for one environment, naming the exact fields the application needs. A data owner must approve, and may narrow the field list or add a row filter before doing so. Nothing is readable until then. You never receive a credential: an approved grant lets the deployed application ask questions through the SpringRoll Connect gateway, which enforces the grant on every request.","readOnly":false},{"name":"springroll.connect.access_status","title":"Get data access status","description":"Returns the status of a data access request: REQUESTED, APPROVED, REJECTED, REVOKED, or EXPIRED, with the fields actually approved. Approved fields are often narrower than requested, and a row filter may restrict which rows the application can see at all.","readOnly":true},{"name":"springroll.app.record_prompts","title":"Record the build transcript","description":"Attaches the conversation that produced this application to its record, as reference for whoever maintains it next and for the reviewer who has to approve it.","readOnly":false}],"resources":[{"name":"example-manifest","uri":"springroll://manifest/example","title":"Example application manifest","description":"A complete, valid SpringRoll manifest to copy from. Read this before writing one, then check yours with springroll.policy.check.","templated":false},{"name":"pending-approvals","uri":"springroll://approvals/pending","title":"Pending approvals assigned to you","description":"Approval requests awaiting a decision that this token's identity is assigned to review. Read this to report outstanding work to the user. An agent token cannot record an approval decision.","templated":false},{"name":"app-provenance","uri":"springroll://apps/{slug}/provenance","title":"Build transcript sessions","description":"The conversations recorded against an application, one summary per session. Read this first to find a sessionKey, then read the session resource for its turns.","templated":true},{"name":"app-provenance-session","uri":"springroll://apps/{slug}/provenance/{sessionKey}","title":"Build transcript turns","description":"The turns of one recorded build conversation. Useful for understanding why an application does what it does before changing it.","templated":true},{"name":"connect-integration-guide","uri":"springroll://apps/{slug}/integration-guide/{dataProduct}/{environment}","title":"Connect integration guide","description":"What an application needs to read an approved data product: the environment variable names SpringRoll injects, the approved schema, and the SDK call to make. Read this to replace mock data with real data. No credential is returned, and none is needed.","templated":true}],"prompts":[{"name":"deploy","title":"Deploy this project to SpringRoll","description":"Register the project and deploy it using the organization's configured workflow, then report the live URL."},{"name":"connect-data","title":"Connect this app to enterprise data","description":"Find a governed data product, request only the fields this application reads, and wire up the SpringRoll SDK once a data owner approves."},{"name":"request-production","title":"Request a staged production release","description":"For a Staged application, submit a tested release for production approval and poll for a decision."}]},"rest":{"openapi":"https://springroll.dev/openapi.json","index":"https://springroll.dev/api/v1","documentation":"https://springroll.dev/docs/api","versioning":{"scheme":"url-path","description":"The major version is the first path segment after /api. A breaking change gets a new segment; within a version, only additive changes are made: new fields, new optional parameters, new endpoints. Treat unknown response fields as forward compatibility, not as an error.","current":"v1","versions":[{"version":"v1","status":"current","basePath":"/api/v1","deprecationDate":null,"sunsetDate":null,"successor":null}],"deprecation":{"noticeDays":365,"description":"A deprecated version keeps answering for at least 365 days after it is announced. From the moment it is deprecated, every response from it carries a Deprecation header (RFC 9745) with the date it was deprecated, a Sunset header (RFC 8594) with the date it stops answering, and a Link header with rel=\"deprecation\" pointing at this policy and rel=\"successor-version\" pointing at what to move to. After the sunset date the version answers 410 Gone with the standard error envelope.","headers":["Deprecation","Sunset","Link"],"policy":"https://springroll.dev/docs/api"},"mcp":{"description":"MCP tool names are versioned by the server version, not by a path. A renamed or removed tool fails on tools/call rather than aliasing silently, because MCP has no deprecation channel for a tool name, and a silent alias would leave an agent using a vocabulary the documentation no longer describes. Read tools/list at the start of a session rather than hard-coding names.","serverCard":"https://springroll.dev/.well-known/mcp/server-card.json"}}},"manifest":{"apiVersion":"springboard.dev/v1alpha1","description":"Every application registered with SpringRoll declares itself with this document: name, owner, support contact, data classification, runtime, and the data products it wants.","exampleMediaType":"application/yaml","example":"apiVersion: springboard.dev/v1alpha1\nkind: Application\nmetadata:\n  name: sales-order-dashboard\n  displayName: Sales Order Dashboard\n  description: Internal dashboard for reviewing sales orders\nspec:\n  owner:\n    team: sales-operations\n  source:\n    type: git\n    repository: https://github.com/example/sales-order-dashboard\n    revision: main\n  build:\n    framework: nextjs\n    installCommand: npm ci\n    buildCommand: npm run build\n  environments:\n    - name: development\n      class: non-production\n    - name: uat\n      class: non-production\n    - name: production\n      class: production\n  access:\n    visibility: restricted\n    groups:\n      - sales\n      - sales-operations\n  data:\n    classification: confidential\n  dataProducts:\n    - name: customer-transactions\n      fields:\n        - transactions.transaction_id\n        - transactions.region\n        - transactions.amount\n"},"agentInstructions":"https://springroll.dev/.well-known/agent-instructions.md"}