Generated from the operation catalog:
src/lib/ops/public-catalog.json in publicsummerengine at 0d85f61e2b and the summer-engine npm package 4.0.0 for engine and local operations. If something here is wrong, the operation’s definition is wrong.| Operation | What it does | Asks you first |
|---|---|---|
studio.map | The map of Summer Studio: every page (destination id, title, what it is for, path), and with guide the product guide the Studio assistant answers from. | Never |
studio.open | Move the person’s open Summer Studio tab to a page (target: a destination id from studio.map, or a /studio or /create path). | Not by default |
studio.page | Read the person’s open Summer Studio tab: its path, the fields an agent may fill (id, label, kind, value, limits, choices) and its buttons (confirm ones are the person’s). | Never |
studio.read_form | Every Studio form, declared once: without form, the list; with form, its fields as JSON Schema, its buttons (critical ones are the person’s) and, for a form that saves with no tab, the person’s values. | Never |
studio.submit_form | Fill a Studio form and save it or press one of its buttons, checked against the form. | Not by default |
studio.use_page | Fill fields and press one button on the person’s open Studio tab, as the Studio assistant does; values are checked against the page. | Not by default |
map
studio.map: Read the Studio map
The map of Summer Studio: every page (destination id, title, what it is for, path), and with guide the product guide the Studio assistant answers from. No open tab needed. Next: studio.open with a destination.
| MCP | summer_call with "op": "studio.map" |
| CLI | summer studio map |
| Runs | On Summer’s servers: the hosted MCP, or the npm MCP after summer login. Needs your Summer sign-in. |
| Effect | Reads only. Changes nothing. |
| Asks you first | No. It changes nothing. |
| 3.x names | summer_studio_map |
| Input | Type | Required | Description |
|---|---|---|---|
guide | boolean | No | Also return the full product guide text. Default false. |
Input JSON schema
Input JSON schema
{
"type": "object",
"properties": {
"guide": {
"description": "Also return the full product guide text.",
"default": false,
"type": "boolean"
}
}
}
Result JSON schema
Result JSON schema
{
"type": "object",
"properties": {
"destinations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"summary": {
"type": "string"
},
"path": {
"type": "string"
}
},
"required": [
"id",
"title",
"summary",
"path"
],
"additionalProperties": false
}
},
"guide": {
"type": "string"
},
"studioUrl": {
"type": "string"
}
},
"required": [
"destinations",
"studioUrl"
],
"additionalProperties": false
}
{
"name": "summer_call",
"arguments": {
"op": "studio.map",
"input": {}
}
}
summer studio map
open
studio.open: Open a Studio page
Move the person’s open Summer Studio tab to a page (target: a destination id from studio.map, or a /studio or /create path). They see a notice that their agent opened it. Returns the page’s fields and buttons. Next: studio.page.
| MCP | summer_call with "op": "studio.open" |
| CLI | summer studio open |
| Runs | On Summer’s servers: the hosted MCP, or the npm MCP after summer login. The npm MCP also runs it on your computer. Needs your Summer sign-in. |
| Effect | Changes your own drafts, files or settings. Nobody else sees it yet. |
| Asks you first | No: Make and build is on by default in Agent permissions. When it is off, your agent asks you first. |
| 3.x names | summer_studio_open |
| Input | Type | Required | Description |
|---|---|---|---|
target | string | No | A destination id from studio.map, or a path starting with /studio or /create. Required here. Length 1 to 500. |
params | object | No | Values for the path’s :slots, e.g. {“gameId”: “g_123”} for /studio/store/:gameId. |
surface | ”auto” | “web” | “editor” | No | web or auto here; editor surfaces open with the local Summer MCP. |
open | boolean | No | false: only resolve the page and return its url; nothing moves. |
tabId | string | No | One Studio tab (from an earlier answer); default the tab the person is looking at. |
dryRun | boolean | No | Check and describe the call without doing it: nothing changes, nothing is spent. |
idempotencyKey | string | No | Retry key. Reuse it only to retry the identical request, so it never happens twice. Length 1 to 128. |
Input JSON schema
Input JSON schema
{
"type": "object",
"properties": {
"target": {
"description": "A destination id from studio.map, or a path starting with /studio or /create. Required here.",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"params": {
"description": "Values for the path's :slots, e.g. {\"gameId\": \"g_123\"} for /studio/store/:gameId.",
"type": "object",
"additionalProperties": {
"type": "string",
"maxLength": 200
}
},
"surface": {
"description": "web or auto here; editor surfaces open with the local Summer MCP.",
"type": "string",
"enum": [
"auto",
"web",
"editor"
]
},
"open": {
"description": "false: only resolve the page and return its url; nothing moves.",
"type": "boolean"
},
"tabId": {
"description": "One Studio tab (from an earlier answer); default the tab the person is looking at.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{8,64}$"
},
"dryRun": {
"description": "Check and describe the call without doing it: nothing changes, nothing is spent.",
"type": "boolean"
},
"idempotencyKey": {
"description": "Retry key. Reuse it only to retry the identical request, so it never happens twice.",
"type": "string",
"minLength": 1,
"maxLength": 128
}
}
}
Result JSON schema
Result JSON schema
{
"type": "object",
"properties": {
"tabId": {
"type": "string"
},
"page": {
"description": "The open page: its fields (id, label, kind, value, limits, choices) and buttons (confirm ones are the person's to press).",
"type": "object",
"properties": {
"path": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
},
"actions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"path",
"fields",
"actions"
],
"additionalProperties": false
},
"filled": {
"type": "array",
"items": {
"type": "string"
}
},
"skipped": {
"type": "array",
"items": {
"type": "string"
}
},
"pressed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"pressReceipt": {
"description": "Whether the button handler returned, failed or timed out; not proof a save persisted.",
"type": "object",
"additionalProperties": {}
},
"personConfirms": {
"description": "The person presses this button; tell them. Nothing was pressed for them.",
"type": "object",
"properties": {
"critical": {
"description": "pay, delete, publish, upload, cancel, invite, send, agree or sign-out.",
"type": "string"
},
"label": {
"type": "string"
},
"link": {
"description": "The page, for the person when no Studio tab answered.",
"type": "string"
},
"highlighted": {
"description": "Their open tab shows the button.",
"type": "boolean"
},
"message": {
"type": "string"
}
},
"required": [
"highlighted",
"message"
],
"additionalProperties": false
},
"url": {
"description": "The page, when open is false.",
"type": "string"
}
},
"additionalProperties": false
}
{
"name": "summer_call",
"arguments": {
"op": "studio.open",
"input": {
"target": "settings"
}
}
}
summer studio open --target settings
page
studio.page: Read the open Studio page
Read the person’s open Summer Studio tab: its path, the fields an agent may fill (id, label, kind, value, limits, choices) and its buttons (confirm ones are the person’s). Next: studio.use_page.
| MCP | summer_call with "op": "studio.page" |
| CLI | summer studio page |
| Runs | On Summer’s servers: the hosted MCP, or the npm MCP after summer login. Needs your Summer sign-in. |
| Effect | Reads only. Changes nothing. |
| Asks you first | No. It changes nothing. |
| 3.x names | summer_studio_page |
| Input | Type | Required | Description |
|---|---|---|---|
tabId | string | No | One Studio tab (from an earlier answer); default the tab the person is looking at. |
Input JSON schema
Input JSON schema
{
"type": "object",
"properties": {
"tabId": {
"description": "One Studio tab (from an earlier answer); default the tab the person is looking at.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{8,64}$"
}
}
}
Result JSON schema
Result JSON schema
{
"type": "object",
"properties": {
"tabId": {
"type": "string"
},
"page": {
"description": "The open page: its fields (id, label, kind, value, limits, choices) and buttons (confirm ones are the person's to press).",
"type": "object",
"properties": {
"path": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
},
"actions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"path",
"fields",
"actions"
],
"additionalProperties": false
},
"filled": {
"type": "array",
"items": {
"type": "string"
}
},
"skipped": {
"type": "array",
"items": {
"type": "string"
}
},
"pressed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"pressReceipt": {
"description": "Whether the button handler returned, failed or timed out; not proof a save persisted.",
"type": "object",
"additionalProperties": {}
},
"personConfirms": {
"description": "The person presses this button; tell them. Nothing was pressed for them.",
"type": "object",
"properties": {
"critical": {
"description": "pay, delete, publish, upload, cancel, invite, send, agree or sign-out.",
"type": "string"
},
"label": {
"type": "string"
},
"link": {
"description": "The page, for the person when no Studio tab answered.",
"type": "string"
},
"highlighted": {
"description": "Their open tab shows the button.",
"type": "boolean"
},
"message": {
"type": "string"
}
},
"required": [
"highlighted",
"message"
],
"additionalProperties": false
}
},
"additionalProperties": false
}
{
"name": "summer_call",
"arguments": {
"op": "studio.page",
"input": {}
}
}
summer studio page
read_form
studio.read_form: Read a Studio form
Every Studio form, declared once: without form, the list; with form, its fields as JSON Schema, its buttons (critical ones are the person’s) and, for a form that saves with no tab, the person’s values. No open tab needed. Next: studio.submit_form.
| MCP | summer_call with "op": "studio.read_form" |
| CLI | summer studio read-form |
| Runs | On Summer’s servers: the hosted MCP, or the npm MCP after summer login. Needs your Summer sign-in. |
| Effect | Reads only. Changes nothing. |
| Asks you first | No. It changes nothing. |
| 3.x names | summer_studio_read_form |
| Input | Type | Required | Description |
|---|---|---|---|
form | string | No | A form id from the list (e.g. profile, settings). Length 0 to 64. |
id | string | No | For a page of one of their things (a path with :id): that thing’s id. Length 0 to 128. |
live | boolean | No | Also read their open Studio tab: the items each per-item button can take. Default false. |
Input JSON schema
Input JSON schema
{
"type": "object",
"properties": {
"form": {
"description": "A form id from the list (e.g. profile, settings).",
"type": "string",
"maxLength": 64
},
"id": {
"description": "For a page of one of their things (a path with :id): that thing's id.",
"type": "string",
"maxLength": 128
},
"live": {
"description": "Also read their open Studio tab: the items each per-item button can take.",
"default": false,
"type": "boolean"
}
}
}
Result JSON schema
Result JSON schema
{
"type": "object",
"properties": {
"forms": {
"description": "Without form: every form (id, title, summary, path, how it saves, its critical buttons).",
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
},
"form": {
"type": "string"
},
"title": {
"type": "string"
},
"summary": {
"type": "string"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"needs": {
"type": "string"
},
"saves": {
"description": "server: saves with no tab; generate: runs a generation; tab: filled in the open tab.",
"type": "string"
},
"tabOnly": {
"type": "string"
},
"schema": {
"type": "object",
"additionalProperties": {}
},
"actions": {
"description": "Its buttons; one with an op runs through that op (call it, not the form); ui only changes the page; person is the person's alone.",
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
},
"values": {
"type": "object",
"additionalProperties": {}
},
"items": {
"type": "object",
"additionalProperties": {}
},
"studioUrl": {
"type": "string"
}
},
"additionalProperties": false
}
{
"name": "summer_call",
"arguments": {
"op": "studio.read_form",
"input": {
"form": "profile"
}
}
}
summer studio read-form --form profile
submit_form
studio.submit_form: Submit a Studio form
Fill a Studio form and save it or press one of its buttons, checked against the form. A button that is an operation answers moved: call that op. Critical buttons open the page for the person to press. Next: studio.read_form.
| MCP | summer_call with "op": "studio.submit_form" |
| CLI | summer studio submit-form |
| Runs | On Summer’s servers: the hosted MCP, or the npm MCP after summer login. Needs your Summer sign-in. |
| Effect | Spends your credits. |
| Asks you first | No: Spend credits is on by default in Agent permissions. When it is off, your agent asks you first. |
| 3.x names | summer_studio_submit_form |
| Input | Type | Required | Description |
|---|---|---|---|
form | string | Yes | A form id from studio.read_form. Length 0 to 64. |
values | object | No | Field name to value, e.g. {“bio”: ”…”}. |
action | string | No | A button of the form. Default: its server save. Length 0 to 64. |
id | string | No | For a page of one of their things (a path with :id). Length 0 to 128. |
show | boolean | No | Also open the page in their Studio tab and fill it. Default false. |
tabId | string | No | One Studio tab (from an earlier answer); default the tab the person is looking at. |
dryRun | boolean | No | Check and describe the call without doing it: nothing changes, nothing is spent. |
idempotencyKey | string | No | Retry key. Reuse it only to retry the identical request, so it never happens twice. Length 1 to 128. |
Input JSON schema
Input JSON schema
{
"type": "object",
"properties": {
"form": {
"description": "A form id from studio.read_form.",
"type": "string",
"maxLength": 64
},
"values": {
"description": "Field name to value, e.g. {\"bio\": \"...\"}.",
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 4000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"action": {
"description": "A button of the form. Default: its server save.",
"type": "string",
"maxLength": 64
},
"id": {
"description": "For a page of one of their things (a path with :id).",
"type": "string",
"maxLength": 128
},
"show": {
"description": "Also open the page in their Studio tab and fill it.",
"default": false,
"type": "boolean"
},
"tabId": {
"description": "One Studio tab (from an earlier answer); default the tab the person is looking at.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{8,64}$"
},
"dryRun": {
"description": "Check and describe the call without doing it: nothing changes, nothing is spent.",
"type": "boolean"
},
"idempotencyKey": {
"description": "Retry key. Reuse it only to retry the identical request, so it never happens twice.",
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"required": [
"form"
]
}
Result JSON schema
Result JSON schema
{
"type": "object",
"properties": {
"tabId": {
"type": "string"
},
"page": {
"description": "The open page: its fields (id, label, kind, value, limits, choices) and buttons (confirm ones are the person's to press).",
"type": "object",
"properties": {
"path": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
},
"actions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"path",
"fields",
"actions"
],
"additionalProperties": false
},
"filled": {
"type": "array",
"items": {
"type": "string"
}
},
"skipped": {
"type": "array",
"items": {
"type": "string"
}
},
"pressed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"pressReceipt": {
"description": "Whether the button handler returned, failed or timed out; not proof a save persisted.",
"type": "object",
"additionalProperties": {}
},
"personConfirms": {
"description": "The person presses this button; tell them. Nothing was pressed for them.",
"type": "object",
"properties": {
"critical": {
"description": "pay, delete, publish, upload, cancel, invite, send, agree or sign-out.",
"type": "string"
},
"label": {
"type": "string"
},
"link": {
"description": "The page, for the person when no Studio tab answered.",
"type": "string"
},
"highlighted": {
"description": "Their open tab shows the button.",
"type": "boolean"
},
"message": {
"type": "string"
}
},
"required": [
"highlighted",
"message"
],
"additionalProperties": false
},
"form": {
"type": "string"
},
"url": {
"type": "string"
},
"saved": {
"type": "array",
"items": {
"type": "string"
}
},
"message": {
"type": "string"
},
"data": {},
"shown": {
"type": "boolean"
}
},
"required": [
"form"
],
"additionalProperties": false
}
{
"name": "summer_call",
"arguments": {
"op": "studio.submit_form",
"input": {
"form": "profile",
"values": {
"bio": "I make cozy games."
}
}
}
}
summer studio submit-form --form profile --input '{"values":{"bio":"I make cozy games."}}'
use_page
studio.use_page: Fill the open Studio page
Fill fields and press one button on the person’s open Studio tab, as the Studio assistant does; values are checked against the page. A button that is an operation answers moved: call that op. Critical buttons are the person’s. Next: studio.page.
| MCP | summer_call with "op": "studio.use_page" |
| CLI | summer studio use-page |
| Runs | On Summer’s servers: the hosted MCP, or the npm MCP after summer login. Needs your Summer sign-in. |
| Effect | Spends your credits. |
| Asks you first | No: Spend credits is on by default in Agent permissions. When it is off, your agent asks you first. |
| 3.x names | summer_studio_use_page |
| Input | Type | Required | Description |
|---|---|---|---|
fill | object[] | No | Items 0 to 20. |
fill[].field | string | Yes | Length 0 to 64. |
fill[].value | string | number | boolean | Yes | |
press | string | No | A button id from studio.page. Length 0 to 64. |
tabId | string | No | One Studio tab (from an earlier answer); default the tab the person is looking at. |
dryRun | boolean | No | Check and describe the call without doing it: nothing changes, nothing is spent. |
idempotencyKey | string | No | Retry key. Reuse it only to retry the identical request, so it never happens twice. Length 1 to 128. |
Input JSON schema
Input JSON schema
{
"type": "object",
"properties": {
"fill": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"maxLength": 64
},
"value": {
"anyOf": [
{
"type": "string",
"maxLength": 4000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"required": [
"field",
"value"
],
"additionalProperties": false
}
},
"press": {
"description": "A button id from studio.page.",
"type": "string",
"maxLength": 64
},
"tabId": {
"description": "One Studio tab (from an earlier answer); default the tab the person is looking at.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{8,64}$"
},
"dryRun": {
"description": "Check and describe the call without doing it: nothing changes, nothing is spent.",
"type": "boolean"
},
"idempotencyKey": {
"description": "Retry key. Reuse it only to retry the identical request, so it never happens twice.",
"type": "string",
"minLength": 1,
"maxLength": 128
}
}
}
Result JSON schema
Result JSON schema
{
"type": "object",
"properties": {
"tabId": {
"type": "string"
},
"page": {
"description": "The open page: its fields (id, label, kind, value, limits, choices) and buttons (confirm ones are the person's to press).",
"type": "object",
"properties": {
"path": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
},
"actions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"required": [
"path",
"fields",
"actions"
],
"additionalProperties": false
},
"filled": {
"type": "array",
"items": {
"type": "string"
}
},
"skipped": {
"type": "array",
"items": {
"type": "string"
}
},
"pressed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"pressReceipt": {
"description": "Whether the button handler returned, failed or timed out; not proof a save persisted.",
"type": "object",
"additionalProperties": {}
},
"personConfirms": {
"description": "The person presses this button; tell them. Nothing was pressed for them.",
"type": "object",
"properties": {
"critical": {
"description": "pay, delete, publish, upload, cancel, invite, send, agree or sign-out.",
"type": "string"
},
"label": {
"type": "string"
},
"link": {
"description": "The page, for the person when no Studio tab answered.",
"type": "string"
},
"highlighted": {
"description": "Their open tab shows the button.",
"type": "boolean"
},
"message": {
"type": "string"
}
},
"required": [
"highlighted",
"message"
],
"additionalProperties": false
},
"checked": {
"type": "object",
"additionalProperties": {}
}
},
"additionalProperties": false
}
{
"name": "summer_call",
"arguments": {
"op": "studio.use_page",
"input": {
"fill": [
{
"field": "profile.bio",
"value": "I make cozy games."
}
]
}
}
}
summer studio use-page --input '{"fill":[{"field":"profile.bio","value":"I make cozy games."}]}'

