Design your mobile app UI with AI, then have your coding agent build the real app from it.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Ask a design run to stop, for example when the brief was wrong. Returns the run as it stands right after the request. A queued run comes back 'failed' with error code 'cancelled' and never starts. A running run comes back still 'running' and stops at its next step. A run cut short settles as 'failed' with error code 'cancelled', or 'execution_failed' if saving its changes failed. It keeps any screens and theme changes it saved, listed in data.result.operations, and uses credits only when that list is not empty. A run that finishes before it stops settles as 'completed'. A run that had already settled comes back unchanged. The project stays locked until the run settles, so poll get_design_run before starting another run. A run that stopped responding settles as 'failed' with error code 'execution_timeout' 15 minutes after creation.
Run id from data.runId in a design result.
Project id from an item's id in list_projects, or data.id in create_project.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Ask a design run to stop, for example when the brief was wrong. Returns the run as it stands right after the request. A queued run comes back 'failed' with error code 'cancelled' and never starts. A running run comes back still 'running' and stops at its next step. A run cut short settles as 'failed' with error code 'cancelled', or 'execution_failed' if saving its changes failed. It keeps any screens and theme changes it saved, listed in data.result.operations, and uses credits only when that list is not empty. A run that finishes before it stops settles as 'completed'. A run that had already settled comes back unchanged. The project stays locked until the run settles, so poll get_design_run before starting another run. A run that stopped responding settles as 'failed' with error code 'execution_timeout' 15 minutes after creation.
| Argument | Type | Description |
|---|---|---|
| runId* | string | Run id from data.runId in a design result. |
| projectId* | string | Project id from an item's id in list_projects, or data.id in create_project. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"projectId",
"runId"
],
"properties": {
"runId": {
"type": "string",
"minLength": 1,
"description": "Run id from data.runId in a design result."
},
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project id from an item's id in list_projects, or data.id in create_project."
}
}
}Create an empty project. Returns it in data, plus projectUrl. Pass data.id as projectId to design, then call screenshot. Creating a project is instant and uses no credits. Only design runs do. Share projectUrl so your user can watch and edit the designs.
| Argument | Type | Description |
|---|---|---|
| name* | string | Display name for the new project. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Display name for the new project."
}
}
}Permanently delete a project and all its screens. Designs cannot be recovered. Call only after your user confirms the exact project by name. Never delete projects to tidy up on your own initiative.
| Argument | Type | Description |
|---|---|---|
| confirm* | boolean | Set only after your user confirms this exact project by name. Deletion is irreversible. |
| projectId* | string | Project id from an item's id in list_projects, or data.id in create_project. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"projectId",
"confirm"
],
"properties": {
"confirm": {
"type": "boolean",
"const": true,
"description": "Set only after your user confirms this exact project by name. Deletion is irreversible."
},
"projectId": {
"type": "string",
"description": "Project id from an item's id in list_projects, or data.id in create_project."
}
}
}Run Sleek's design agent to create or edit screens from a plain-language brief. Send the whole request as ONE message, such as 'a food delivery app with onboarding, restaurants, dish detail, cart, tracking, and profile'. The agent plans the screens together, so separate calls produce mismatched screens. A run uses workspace credits only when it completes or saves changes. By default this waits for the run to finish. If it returns 'queued' or 'running', poll get_design_run. Only one run can be active per project. On CONFLICT, poll get_design_run until the run settles, then retry. cancel_design_run stops it sooner. If a failed run has data.error.url, relay data.error.message to your user with that link. They have to act before you retry. On completion, share projectUrl with your user and call screenshot.
| Argument | Type | Description |
|---|---|---|
| wait | boolean | Wait for the run to finish before returning. The wait is capped at 270 seconds, after which you get status 'running' back and poll get_design_run. Set false to return immediately and poll from the start, which is the better choice if your client times tool calls out sooner than that. |
| message* | string | The full design brief, as one message. Name every screen you want in this single request. |
| screenId | string | Edit this existing screen instead of creating new ones. Use the screenId from list_components, or from a previous run's data.result.operations (via design or get_design_run). It is not the component id. |
| imageUrls | array | HTTPS image URLs for visual input, such as screenshots, logos, or style references. |
Fetch a screen's generated HTML. Returns the screen in data, with the HTML at data.versions[].code. versions holds only the version the screen currently shows. Use allVersions for the full history, which can be large. The returned screenId is the value design takes. Use this for a build handoff, not to check whether a design run worked.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project id from an item's id in list_projects, or data.id in create_project. |
| allVersions | boolean | Return every stored version instead of just the active one. Payloads grow quickly; leave it off unless you need the history. |
| componentId* | string | Component id from an item's id in list_components, or a componentId in a run's data.result.operations. Not a screenId. |
| inlineIcons | boolean | Inline icons as SVG so the HTML works without loading Iconify. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"projectId",
"componentId"
],
"properties": {
"projectId": {
"type": "string",
"description": "Project id from an item's id in list_projects, or data.id in create_project."
},
"allVersions": {
"type": "boolean",
"default": false,
"description": "Return every stored version instead of just the active one. Payloads grow quickly; leave it off unless you need the history."
},
"componentId": {
"type": "string",
"description": "Component id from an item's id in list_components, or a componentId in a run's data.result.operations. Not a screenId."
},
"inlineIcons": {
"type": "boolean",
"default": false,
"description": "Inline icons as SVG so the HTML works without loading Iconify."
}
}
}Poll a run that design returned as 'queued' or 'running'. Wait a few seconds between polls. On 'completed', data.result.operations lists the saved screens and theme changes. Share projectUrl and call screenshot. On 'failed', relay data.error.message to your user, with data.error.url if present. A failed run, including a cancelled one, keeps what it saved in that same list and uses credits only when the list is not empty. Check it before resending the brief.
| Argument | Type | Description |
|---|---|---|
| runId* | string | Run id from data.runId in a design result. |
| projectId* | string | Project id from an item's id in list_projects, or data.id in create_project. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"projectId",
"runId"
],
"properties": {
"runId": {
"type": "string",
"minLength": 1,
"description": "Run id from data.runId in a design result."
},
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project id from an item's id in list_projects, or data.id in create_project."
}
}
}Fetch a project and its projectUrl. Use it to confirm the project exists and share the URL with your user. Use list_components to see its screens.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project id from an item's id in list_projects, or data.id in create_project. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"description": "Project id from an item's id in list_projects, or data.id in create_project."
}
}
}List a project's screen names and active version numbers without generated HTML. Pass each item's screenId to design. Pass its id as componentId to get_component or in componentIds to screenshot. Use get_component only when you need a screen's code.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of items to return. |
| offset | integer | Number of items to skip before this page. |
| projectId* | string | Project id from an item's id in list_projects, or data.id in create_project. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"projectId"
],
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Number of items to return."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of items to skip before this page."
},
"projectId": {
"type": "string",
"description": "Project id from an item's id in list_projects, or data.id in create_project."
}
}
}List the workspace's projects, newest first. Each project holds one app's screens, theme, and design chat. Check here before create_project to avoid duplicates.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of items to return. |
| offset | integer | Number of items to skip before this page. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Number of items to return."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of items to skip before this page."
}
}
}List curated app styles and their preview images. When your user asks for a look such as Airbnb, brutalist, or dark fintech, pass the closest reference's id as referenceId to design. Without a reference, the agent picks a style.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of items to return. |
| offset | integer | Number of items to skip before this page. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Number of items to return."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of items to skip before this page."
}
}
}Render up to four project screens side by side as one inline image, after a design run completes. Returns the image, PNG unless format asks for WebP, and a one-line text note. Rendering uses no credits. Send projectUrl with the image so your user can open and edit the designs.
| Argument | Type | Description |
|---|---|---|
| scale | integer | Pixel density. 1 is right for showing a design in chat; raise it only when the user asked for a high-resolution export. |
| format | string | Image encoding for the screenshot. |
| padding | integer | Space in pixels on each side of the row of frames. |
| projectId* | string | Project id from an item's id in list_projects, or data.id in create_project. |
| background | string | CSS background behind the frames, such as "#ffffff" or "transparent". |
| fullHeight | boolean | Expand each frame to the full height of its content before capturing, so scrollable screens are rendered fully extended rather than cut off at the bottom of the frame. Frames are capped at 4x the default frame height. |
| componentIds* | array | Component id from an item's id in list_components, or a componentId in a run's data.result.operations. Not a screenId. Screens render left to right. Render more than 4 in separate calls. |
Find the workspace's projects by name for an @ mention, newest first. Each item is a resource link whose name is the projectId and whose uri is the projectUrl. To browse every project, use list_projects.
| Argument | Type | Description |
|---|---|---|
| query* | string | Text the project name contains, ignoring case. Empty returns the newest projects. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "Text the project name contains, ignoring case. Empty returns the newest projects."
}
}
}| projectId* | string | Project id from an item's id in list_projects, or data.id in create_project. |
| referenceId | string | Design reference to imitate, from list_references. |
| idempotencyKey | string | Pick a unique key for each new design request, such as a UUID. Reuse it for retries to return the original run instead of starting a second one. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"projectId",
"message"
],
"properties": {
"wait": {
"type": "boolean",
"default": true,
"description": "Wait for the run to finish before returning. The wait is capped at 270 seconds, after which you get status 'running' back and poll get_design_run. Set false to return immediately and poll from the start, which is the better choice if your client times tool calls out sooner than that."
},
"message": {
"type": "string",
"minLength": 1,
"description": "The full design brief, as one message. Name every screen you want in this single request."
},
"screenId": {
"type": "string",
"minLength": 1,
"description": "Edit this existing screen instead of creating new ones. Use the screenId from list_components, or from a previous run's data.result.operations (via design or get_design_run). It is not the component id."
},
"imageUrls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"default": [],
"description": "HTTPS image URLs for visual input, such as screenshots, logos, or style references."
},
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project id from an item's id in list_projects, or data.id in create_project."
},
"referenceId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Design reference to imitate, from list_references."
},
"idempotencyKey": {
"type": "string",
"maxLength": 255,
"description": "Pick a unique key for each new design request, such as a UUID. Reuse it for retries to return the original run instead of starting a second one."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"projectId",
"componentIds"
],
"properties": {
"scale": {
"type": "integer",
"default": 1,
"maximum": 3,
"minimum": 1,
"description": "Pixel density. 1 is right for showing a design in chat; raise it only when the user asked for a high-resolution export."
},
"format": {
"enum": [
"png",
"webp"
],
"type": "string",
"default": "png",
"description": "Image encoding for the screenshot."
},
"padding": {
"type": "integer",
"default": 40,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Space in pixels on each side of the row of frames."
},
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project id from an item's id in list_projects, or data.id in create_project."
},
"background": {
"type": "string",
"default": "transparent",
"description": "CSS background behind the frames, such as \"#ffffff\" or \"transparent\"."
},
"fullHeight": {
"type": "boolean",
"default": false,
"description": "Expand each frame to the full height of its content before capturing, so scrollable screens are rendered fully extended rather than cut off at the bottom of the frame. Frames are capped at 4x the default frame height."
},
"componentIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 4,
"minItems": 1,
"description": "Component id from an item's id in list_components, or a componentId in a run's data.result.operations. Not a screenId. Screens render left to right. Render more than 4 in separate calls."
}
}
}