{
 "voice": "One card of the book.",
 "agent": {
  "slug": "springroll",
  "name": "SpringRoll",
  "specialty": "coding",
  "description": "Deploy apps built with Claude Code or Codex, get releases approved, share them in an App Portal.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-11-07T23:09:47.958Z",
  "card": "/agent/springroll",
  "url": "https://allagents.app/agent/springroll",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://springroll.dev/api/mcp",
   "site": "https://springroll.dev"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://springroll.dev",
   "hire": null
  },
  "bubble": "closed",
  "score": 59,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-11-08",
   "total": 23,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "springroll.security.audit",
     "description": "Start the company's configured security checks for an immutable release and environment. May send code only to policy-approved audit models within the…"
    },
    {
     "name": "springroll.security.status",
     "description": "Read the current job status, company policy decision, redacted findings and unchecked controls. Never starts or retries a scanner."
    },
    {
     "name": "springroll.feedback.submit",
     "description": "Submit a bug report, idea, or other feedback about SpringRoll on behalf of the authenticated member. Do not include credentials. Reuse the idempotency key…"
    },
    {
     "name": "springroll.feedback.list",
     "description": "List only the authenticated member's SpringRoll feedback in the current organization, newest first. Use nextOffset for the next page."
    },
    {
     "name": "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…"
    },
    {
     "name": "springroll.deploy",
     "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…"
    },
    {
     "name": "springroll.deploy.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…"
    },
    {
     "name": "springroll.deploy.promote",
     "description": "Promotes a tested deployment into the next environment (development -> uat, uat -> production). Reuses the already-built artifact rather than rebuilding, so…"
    },
    {
     "name": "springroll.placement.preview",
     "description": "Scores where SpringRoll would place this application and what it would cost, without deploying or writing anything. It shares its implementation with…"
    },
    {
     "name": "springroll.app.get",
     "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…"
    },
    {
     "name": "springroll.app.list",
     "description": "Lists applications in this organization, newest first. Use `search` to find one by name or slug."
    },
    {
     "name": "springroll.app.update",
     "description": "Updates App Portal metadata: description, icon, tags, department, support contact, and data classification. Visibility is deliberately not editable here…"
    },
    {
     "name": "springroll.app.presentation.get",
     "description": "Read a private app listing draft and available artwork. Does not publish or expose the app."
    },
    {
     "name": "springroll.app.presentation.save",
     "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…"
    },
    {
     "name": "springroll.app.presentation.upload",
     "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…"
    },
    {
     "name": "springroll.app.presentation.generate_icon",
     "description": "Queue one premium icon draft from the app's reviewed purpose. Requests are limited and deduplicated. Artwork never blocks deployment or publishes itself."
    },
    {
     "name": "springroll.approval.submit",
     "description": "Submits an approval request of any supported type: UAT_PROMOTION, UAT_SIGN_OFF, PRODUCTION_PROMOTION, VISIBILITY_CHANGE, OWNERSHIP_TRANSFER, RETIREMENT…"
    },
    {
     "name": "springroll.approval.get",
     "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…"
    },
    {
     "name": "springroll.policy.check",
     "description": "Reports which governance policies an application would pass or fail for an environment. Send `manifest` (YAML or JSON) to validate a document without creating…"
    },
    {
     "name": "springroll.connect.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. With…"
    },
    {
     "name": "springroll.connect.request_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…"
    },
    {
     "name": "springroll.connect.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…"
    },
    {
     "name": "springroll.app.record_prompts",
     "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…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://springroll.dev/api/mcp",
   "answers": true,
   "checked": "2026-11-08T06:05:16.364Z",
   "http": 200,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-11-08T06:47:37.489Z",
     "since": "2026-11-08T06:47:37.489Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-11-08T06:47:37.489Z",
    "since": "2026-11-08T06:47:37.489Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 200,
   "checked": "2026-11-08T06:05:16.364Z",
   "last_answer_at": "2026-11-08T06:05:16.364Z",
   "last_ms": 355,
   "checked_at": "2026-11-08T06:05:16.364Z"
  }
 }
}