Vinyasa MCP: URLs, Client Setup, Tools, and Troubleshooting
Connect VS Code, Claude Code, and other MCP clients to the hosted Vinyasa server, with exact URLs, tool arguments and document handoff examples.
Current deployment URLs and supported scope
These URLs are generated from the domain serving this documentation. Client examples, copied article Markdown and Studio's downloaded reference use that same deployment; no hostname needs to be edited manually.
| Purpose | URL |
|---|---|
| Website | / |
| Studio | /editor |
| Documentation | /docs/vinyasa/overview/ |
| Streamable HTTP MCP | /mcp |
| This guide | /docs/vinyasa/guides/mcp-server/ |
Use the exact MCP URL, not the website root, editor route, /sse, or documentation URL. The public endpoint requires no API key, account, Authorization header, or OAuth. This is separate from the provider credentials used by built-in AI Copilot.
MCP processes supplied documents. It cannot inspect open Studio, retrieve browser IndexedDB projects, operate the UI, render PNG, or save a file on your computer. An external AI client decides what to send and may forward tool results to its own model provider. Review returned YAML before applying it in Studio.
Connect GitHub Copilot in VS Code
Open MCP: Add Server in the Command Palette, choose HTTP, and enter /mcp. Name the server vinyasa. Alternatively put this configuration in your workspace's .vscode/mcp.json:
{
"servers": {
"vinyasa": {
"type": "http",
"url": "/mcp"
}
}
}
Start the server through VS Code's MCP controls and review the trust prompt. In agent chat, enable its tools, then ask: "Use Vinyasa list_elements, inspect the button and frame schemas, and read vinyasa://reference." Expect five tools. If your client cannot read resources, Help > Download Syntax Ref in Studio provides the same generated reference.
VS Code uses servers, not another client's mcpServers configuration. See VS Code MCP documentation for client management and approval controls.
Claude Code and other remote clients
For Claude Code, register the endpoint from a terminal:
claude mcp add --transport http vinyasa /mcp
claude mcp list
Open Claude Code's MCP controls to inspect connection status and approve tools. See Claude Code MCP setup.
For a client using mcpServers and url, such as Cursor's remote MCP configuration:
{
"mcpServers": {
"vinyasa": {
"url": "/mcp"
}
}
}
This JSON is not universal: use your client's documented Streamable HTTP schema. If a hosted assistant offers a connector form, enter the endpoint as its server URL and select no authentication only when supported. Clients requiring OAuth or legacy SSE are not compatible with this public POST-only endpoint; use a compatible Streamable HTTP client. Do not invent a bearer token.
Vinyasa is a hosted application. Do not install a Vinyasa checkout, run npm, configure a local process, or use stdio to connect to the public service. All client configurations in this guide point to /mcp.
Tool contracts and response handling
All tools return content with type text. Read content[0].text. Schema tools encode JSON text; document tools encode YAML text. Do not save an entire JSON-RPC response as a .rvv file.
| Tool | Exact arguments | Result text |
|---|---|---|
| list_elements | {} | JSON array of registered element types |
| get_element_schema | {"type":"button"} | JSON containing type and properties metadata |
| validate_document | {"source":"elements: []"} | Validated normalized document YAML |
| edit_document | source string and edits object shown below | Complete validated document YAML |
| export_project | {"source":"elements: []","name":"My prototype"} | Complete .rvv envelope YAML |
source is a YAML STRING, not a parsed object, file path, URL, or .rvv envelope. For a saved .rvv file, extract state and serialize that object as YAML before passing source. export_project name must contain 1-200 characters after trimming.
Read resources/list and resources/read for the Markdown resource vinyasa://reference. It includes common fields, complete document/project examples, coordinate rules, limits and generated property tables. It is an MCP resource identifier, not HTTPS. user-group is a structural type described in the reference, not a catalog entry returned by get_element_schema.
HTTP success does not imply tool success: if result.isError is true, show the error text and correct the input. Invalid tools/arguments can also return a JSON-RPC error. Never apply partial results. Validation enforces supported fields, dimensions, IDs, page ownership, links, nesting, and generated-object budgets.
Required document and coordinate structure
Paste bare document YAML into Studio's YAML tab. A complete example:
schemaVersion: 1
elements:
- type: frame
id: sign-in-form
pageId: sign-in
left: 74
top: 74
originX: left
originY: top
width: 342
height: 200
layout: column
padding: 16
gap: 16
children:
- type: button
id: continue-button
left: 16
top: 16
width: 160
height: 44
text: Continue
pages:
- id: sign-in
name: Sign in
left: 50
top: 50
width: 390
height: 844
bgColor: '#ffffff'
settings:
workspaceBgType: transparent
workspaceBgColor: '#ffffff'
showRulers: false
showConnections: true
showPageLabels: true
Top-level left/top are workspace coordinates. pageId associates content with a page; it does not add the page's left/top. Children use container-local coordinates; row/column frames compute child positions. Only frame and user-group support children; cards/windows do not. Groups must be nonempty; an empty frame is valid. Use originX/originY for explicit top-left placement.
Compact input may omit schemaVersion, pages, settings, IDs and coordinates, but elements is required. Validation supplies defaults; retain its normalized output so IDs/default pages remain stable. Supplied settings must include all its fields. Explicit pages require every page field above. Page IDs and element IDs share one uniqueness namespace.
Atomic add, update and remove
Pass the latest normalized YAML as source. This is an example edits value, not a whole tool call:
{
"operations": [
{
"op": "update",
"id": "continue-button",
"properties": {
"text": "Sign in"
}
},
{
"op": "add",
"parentId": "sign-in-form",
"element": {
"type": "button",
"id": "cancel-button",
"left": 0,
"top": 0,
"text": "Cancel"
}
},
{
"op": "remove",
"id": "cancel-button"
}
]
}
The tool arguments are {"source":"","edits":{"operations":[...]}}. Operations run in order and the entire batch fails atomically on invalid input. A batch has 1-200 operations. Update merges properties without changing untouched values; id, type, children and prototype keys cannot be updated. Remove targets an element ID. Add omits parentId for a root element or names an existing frame/user-group for a child. Descendants inherit page ownership. Do not remove the last group child unless you also remove that group in the batch.
For page metadata, settings, identity/type or replacing a children tree, edit full document YAML and validate_document. edit_document is not a page-operation or reparenting API.
End-to-end handoff and file import
- Read the reference, list_elements, and get_element_schema for required types.
- Provide source YAML explicitly, or build a complete document with synthetic content and stable IDs.
- Call validate_document and retain its normalized YAML.
- Call edit_document using that source, not a stale initial draft.
- Inspect result.isError and review the returned document.
- Open /editor, then YAML and AI > YAML; paste bare YAML, validate and Apply to canvas.
- For file import instead, call export_project with validated source and a name. Save only its returned YAML text as a .rvv file and use File > Import File.
The .rvv envelope has id, name, lastModified, state (the document) and viewState (scrollLeft, scrollTop, zoom). Bare document YAML is not a .rvv envelope. Help > Download Syntax Ref contains complete examples of both formats. After applying in Studio, File > Export As > PNG exports full document bounds including pages, not only the active viewport. MCP itself does not render images.
Example request: "Use Vinyasa MCP. Read the reference and inspect frame/button/input schemas. Create a 390 by 844 sign-in page with a vertical form, explicit IDs and 16-pixel gaps. Validate it. Return normalized bare YAML and a separate export_project .rvv result. Do not claim to have applied anything to my browser."
HTTP protocol and reproducible health check
This is stateless Streamable HTTP with JSON responses. Requests use POST, Content-Type: application/json and Accept: application/json, text/event-stream. An MCP SDK performs initialize and notifications/initialized before discovery/calls; no persistent session ID is issued. An address bar performs GET, so 405 there is expected. No legacy /sse stream is implemented.
This PowerShell request checks discovery without sending project data:
Invoke-RestMethod -Uri '/mcp' -Method Post -ContentType 'application/json' -Headers @{ Accept = 'application/json, text/event-stream' } -Body '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Expect a JSON-RPC result with five tools. This probe does not replace the initialize handshake in a real client. JSON request bodies are capped at 2500000 bytes including JSON escaping; YAML source is separately limited to 2000000 characters. Document limits include 5000 elements, 100 pages, depth 24 and a 50000 generated-object budget. A payload under the byte limit can still exceed rendering complexity.
Cross-origin browser requests are rejected; there is no CORS proxy. Built-in Copilot does not call MCP; it talks directly to its AI provider. Use native MCP client transport rather than a web page fetching this URL.
Diagnose connection and tool failures
| Symptom | Check and action |
|---|---|
| 404 or HTML response | Verify the hosted /mcp address and HTTP transport. If the problem persists, report the endpoint and response status without including private document data. |
| 405 on GET | Expected for an address-bar visit or legacy SSE client; select Streamable HTTP. |
| 403 Origin not allowed | A browser client sent a different Origin; use a compatible native client connected to the hosted HTTP endpoint. |
| 403 challenge page / 429 | Pause requests and retry later. Use a compatible native MCP client; do not bypass service security controls. |
| 406 / unsupported media | Send both JSON and text/event-stream in Accept. |
| 413 | Reduce encoded JSON body size, including inline image data. |
| Connected but no tools | Enable/trust the server, refresh discovery and inspect the client's MCP log. |
| isError: true / unsupported property | Read content text and inspect the schema/common fields. |
| Unknown element ID | Use IDs and source from the latest normalized output. |
| Frame child addition rejected | Read the frame schema and verify parentId and child properties against the latest normalized document. Report a persistent failure with a minimal synthetic example. |
| Import rejects output | Import export_project's YAML envelope, not bare YAML or JSON-RPC wrappers. |
| Client asks for a local executable | Select HTTP/remote server configuration and enter the hosted /mcp URL instead. |
Do not resolve errors by disabling validation, inventing properties, or silently changing transports/providers. Canvas content stays unchanged until an explicit apply/import.
Hosted processing and safe document sharing
Connect your MCP client to /mcp. No Vinyasa installation or server setup is required.
Documents supplied to MCP tools are processed by the hosted service. Your MCP client and any connected AI provider may also receive or retain content according to their settings and policies. Send only the content needed for the task, preferably using synthetic data. Never include provider API keys, passwords, access tokens or confidential customer records inside document source.
Review tool results before importing a project or applying YAML. MCP does not remotely control your open canvas, and a successful response does not automatically change your browser project. Keep an editable backup before replacing an existing document.
Read the privacy guidance before sharing document content with a service or assistant.