{"$schema":"https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json","version":"1.0","protocolVersion":"2025-03-26","serverInfo":{"name":"xyvenra","title":"Xyvenra","version":"0.1.0"},"description":"Create and list Cloud, Data, Studio, and Mobile projects, read or save Studio source and Mobile drafts, deploy static Cloud HTML with public env values, export Studio and Mobile ZIPs, store env vars, query and batch-write Data records, poll record changes, manage private files, dispatch a customer Expo workflow, and ask once about a next step. Authenticate with OAuth 2.1 or a platform API key. Cloud does not run a server. Private env values and Xyvenra-paid Expo builds are not included.","iconUrl":"https://xyvenra.com/icon.svg","documentationUrl":"https://xyvenra.com/docs/mcp","transport":{"type":"streamable-http","endpoint":"/api/mcp"},"capabilities":{"tools":{"listChanged":false}},"authentication":{"required":true,"schemes":["oauth2","bearer"]},"instructions":"initialize, ping, notifications, tools/list, prompts/list, and resources/list do not require a token. tools/call requires an OAuth 2.1 access token or a xyv_plat_ platform API key and otherwise returns HTTP 401 with WWW-Authenticate. This server has no prompts or resources. Cloud is static HTML and has no server runtime.","tools":[{"name":"create_project","title":"Create project","description":"Create a Cloud site, Data project, Studio browser app, or Mobile Expo starter for this account. Code stays in the browser and has no server-side project. Nothing is deployed or charged.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"product":{"type":"string","enum":["cloud","data","studio","mobile","code"]},"name":{"type":"string","description":"Project or site name."},"slug":{"type":"string","description":"Required for Cloud. Lowercase public address, 1 to 48 characters."}},"required":["product","name"]},"annotations":{"readOnlyHint":false,"destructiveHint":false}},{"name":"list_projects","title":"List projects","description":"List Cloud sites, Data projects, Studio apps, or Mobile starters owned by this account. Code returns the browser-workspace note.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"product":{"type":"string","enum":["cloud","data","studio","mobile","code"]}},"required":["product"]},"annotations":{"readOnlyHint":true,"destructiveHint":false}},{"name":"project","title":"Read or save a project","description":"Read a Cloud page, Studio source, or Mobile Expo draft this account owns. Save replaces Studio source or a Mobile draft and does not publish, start an EAS build, or charge. A Mobile save requires expectedUpdatedAt from the last get or save. Publish Cloud HTML with deploy. Code has no server-side project. Data tables and records use the database tool.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"action":{"type":"string","enum":["get","save"]},"product":{"type":"string","enum":["cloud","studio","mobile","data","code"]},"projectId":{"type":"string"},"name":{"type":"string"},"prompt":{"type":"string","description":"Studio only. Up to 4,000 characters."},"html":{"type":"string","description":"Studio preview. A complete HTML document. Cloud pages are published with deploy."},"files":{"type":"object","description":"Studio source map. index.html is required. Paths end in html, css, js, json, md, or svg.","additionalProperties":{"type":"string"}},"draft":{"type":"object","description":"Full Mobile builder draft, version 1. A save replaces the stored draft."},"expectedUpdatedAt":{"type":"string","description":"Required for a Mobile save. Use updated_at from the last get or save."}},"required":["action","product","projectId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"deploy","title":"Deploy site","description":"Publish self-contained HTML to a Cloud site this account owns. Pass projectId instead of html to send a saved Studio page. Public env vars for that site are written into the static page. Private values are not. Cloud is not a Node host. ZIP uploads stay on POST /api/cloud/v1/{siteId} with a Cloud deploy key.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"siteId":{"type":"string","description":"Cloud site UUID."},"html":{"type":"string","description":"Complete self-contained HTML document, 180 KB or smaller."},"projectId":{"type":"string","description":"Optional Studio project UUID. Sends that saved page instead of html."}},"required":["siteId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false}},{"name":"export","title":"Export project","description":"Export an owned Studio source ZIP, Mobile Expo project ZIP, or Data project JSON. Does not start an EAS build, publish a site, or run a server. Code has no server-side export.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"product":{"type":"string","enum":["studio","mobile","data","code","cloud"]},"projectId":{"type":"string"}},"required":["product","projectId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false}},{"name":"env_vars","title":"Environment variables","description":"List, set, update, or delete owner-scoped env vars for Cloud, Data, Mobile, Studio, or the Code workspace. exposure is secret by default. Cloud publish writes public values into the static page and leaves private values out. There is no server runtime.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"action":{"type":"string","enum":["list","set","update","delete"]},"product":{"type":"string","enum":["cloud","data","mobile","studio","code"]},"projectId":{"type":"string","description":"Required except for the Code workspace."},"name":{"type":"string"},"value":{"type":"string"},"exposure":{"type":"string","enum":["secret","public"],"description":"Default secret. Only public is copied into a Cloud page."}},"required":["product"]},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"database","title":"Database","description":"List or create Data tables, delete a table, and list, query, get, create, batch-create, update, or delete records on a Data project this account owns. list_records accepts the same filter, search, order, and cursor as the project Data API and applies them to the latest 250 rows. list_changes polls records updated after since. Field changes stay in the Data app. This is not a websocket, Supabase Realtime, Auth, or Edge Functions. Private files are the files tool.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"action":{"type":"string","enum":["list_tables","create_table","delete_table","list_records","list_changes","get_record","create_record","update_record","delete_record"]},"since":{"type":"string","description":"ISO-8601 timestamp for list_changes. Returns rows with a later updated_at. This is a poll, not a websocket."},"projectId":{"type":"string"},"name":{"type":"string","description":"Table name for create_table."},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["text","number","boolean","json"]},"required":{"type":"boolean"}}}},"tableName":{"type":"string"},"recordId":{"type":"string"},"data":{"type":"object","description":"One record for create_record, or a field patch for update_record."},"records":{"type":"array","description":"Batch of 1 to 250 records for create_record. Do not also send data.","items":{"type":"object"}},"expectedUpdatedAt":{"type":"string","description":"Optional update_record check. Must match the record updated_at you read."},"limit":{"type":"integer","description":"list_records page size, from 1 to 100. Default 100."},"offset":{"type":"integer","description":"list_records offset, from 0 to 249. Do not combine with cursor."},"cursor":{"type":"string","description":"list_records cursor from next_cursor. Do not combine with offset."},"filter":{"type":"string","description":"list_records field name. Send op and value with it."},"op":{"type":"string","enum":["contains","equals","not-equals","greater-than","less-than","is-empty","is-not-empty"]},"value":{"type":"string","description":"list_records filter value. Booleans are true or false. Empty checks omit value."},"q":{"type":"string","description":"list_records text search across the record id and JSON."},"order":{"type":"string","description":"list_records sort: id, created_at, updated_at, or field:NAME. Default created_at."},"direction":{"type":"string","enum":["asc","desc"],"description":"list_records sort direction. Default asc."}},"required":["action","projectId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"files","title":"Data files","description":"List, upload, download, or delete private files on a Data project this account owns. Uploads are base64, at most 1 MB, within 100 files and 50 MB per account. This is the existing private bucket, not a public Supabase Storage bucket.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"action":{"type":"string","enum":["list","upload","download","delete"]},"projectId":{"type":"string"},"fileId":{"type":"string"},"name":{"type":"string"},"mimeType":{"type":"string"},"contentBase64":{"type":"string","description":"File bytes for upload. Not returned on upload."}},"required":["projectId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"eas_dispatch","title":"Customer Expo workflow","description":"Dispatch an existing workflow on the customer’s Expo project with the Expo token they supply for this call. The token is not stored. The in-app starter is not uploaded. Xyvenra does not pay Expo. Do not call this from guidance.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"token":{"type":"string","description":"Expo access token for the customer’s own account. Forwarded once and not stored."},"appId":{"type":"string","description":"Expo project UUID."},"gitRef":{"type":"string","description":"40-character commit that already exists on that project."},"workflowFile":{"type":"string","description":"Workflow file name in that repository, such as preview.yml."}},"required":["token","appId","gitRef","workflowFile"]},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"guidance","title":"Next step","description":"Ask once, calmly, about real next steps across Cloud, Data, Mobile, Studio, Code, and the MCP plugin. Default is to offer the next step. Decline turns a path off. continue creates only the step you name. It does not deploy or charge. If guidancePending is true on status, call this once with action ask.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"action":{"type":"string","enum":["read","ask","decline","accept","continue","reopen","enable"]},"product":{"type":"string","enum":["cloud","data","mobile","studio","code"]},"projectId":{"type":"string","description":"Omit for the Code workspace."},"path":{"type":"string","description":"mobile-starter, data-project, studio-app, cloud-site, cloud-deploy, or mcp-plugin."},"name":{"type":"string"},"slug":{"type":"string"}},"required":["product"]},"annotations":{"readOnlyHint":false,"destructiveHint":false}},{"name":"status","title":"Status","description":"Show Code, Cloud, Data, Mobile, and Studio for this account. guidancePending means the one-time next-step ask has not been recorded. Do not repeat that ask after guidance says it was already asked.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false}}],"resources":[],"prompts":[]}