Server definition
- Hash
- sha256:65dd6944ba1aa4000ea00ab3efaf72886aaf4346eab331b4e879d39b88402a4e
- What it is
- What a remote MCP server returned when asked what it offers: 5 tools
The blob, as servednamed by its sha256
{
"instructions": "Velven (velven.ai) is where people find and play browser games, worlds, tools and wonders made with AI. This server publishes a space to Velven's hosting and manages it.\n\n- To put something online, call publish with the page (html) or its files. For a new space ask the person for its title, type and devices; never guess them. Without prod it makes a private preview (signed in) or an unlisted page (not signed in). Publish with prod: true only when the person asks to go live; it is live on its Velven page within seconds, or waits on Velven to publish it, usually for less than a minute.\n- Always show the person every link the tool returns. Without an account the answer holds a claim token, shown once: give it to the person with the claim link and tell them to save it; it is the only way to publish that page again (pass it as claim) or keep it past 7 days. Also show the Terms line.\n- my_spaces, versions and rollback need the person's Velven account; calling one without it makes the app ask them to sign in to Velven. Never ask for a password, token or any other secret in chat.\n- search_docs answers questions about Velven: publishing, velven.json, the SDK (sign-in, leaderboards, saves, achievements), claiming, and limits.\n- For a folder bigger than 3 MB, or to publish from a terminal, the CLI does the same: npx @velven/cli publish (add --prod to go live).",
"tools": [
{
"description": "List the spaces of the signed-in Velven account: slug, title, status, whether Velven hosts it, and its page. Needs sign-in; called without it, the app asks the person to sign in to Velven.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "my_spaces",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"handle": {
"type": "string"
},
"spaces": {
"items": {
"additionalProperties": false,
"properties": {
"createdAt": {
"type": "string"
},
"hosted": {
"description": "Velven hosts its files (else it links a live URL).",
"type": "boolean"
},
"pageUrl": {
"type": "string"
},
"slug": {
"type": "string"
},
"status": {
"description": "published, processing, held, dead, unframeable.",
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"slug",
"title",
"status",
"hosted",
"pageUrl",
"createdAt"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"handle",
"spaces"
],
"type": "object"
}
},
{
"description": "Publish a browser game, world, tool or wonder on Velven's hosting, from one HTML page or a small set of files (3 MB in all). Signed in: a private preview by default, or with prod: true the next live version, live on its Velven page within seconds. Not signed in: an unlisted page, live the same way, returned with a claim token that keeps it. A new space needs title, type and devices from the person. To update a space pass space (signed in) or claim (not signed in).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"claim": {
"description": "The claim token of an unlisted page: publishes its next version, or claims it when signed in.",
"pattern": "^vlc_[A-Za-z0-9_-]{43}$",
"type": "string"
},
"clip": {
"description": "The video the tile plays on hover, without sound. Give the path of one of the files sent: an MP4 or WebM, up to 3 MB and 5 to 10 seconds long. Velven then records no clip of its own. Without a thumbnail, the clip's first frame is the picture. It must show the space itself. A clip outside that length is refused. If the file doesn't say its length, Velven measures it once live. It keeps the first 10 seconds of a longer clip, and drops a shorter one. A later version that names neither keeps the space's.",
"type": "string"
},
"description": {
"description": "One line under the name.",
"maxLength": 160,
"type": "string"
},
"devices": {
"description": "Where it can be played. Required for a new space.",
"items": {
"enum": [
"desktop",
"mobile",
"vr"
],
"type": "string"
},
"type": "array"
},
"engine": {
"description": "What it draws with, if one of these.",
"enum": [
"three.js",
"r3f",
"babylon.js",
"playcanvas",
"a-frame",
"godot",
"unity",
"phaser",
"p5.js",
"canvas",
"webgl",
"webgpu",
"wasm",
"dom",
"marble",
"spline",
"other"
],
"type": "string"
},
"entry": {
"description": "The page that opens first, if not index.html.",
"type": "string"
},
"files": {
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"properties": {
"base64": {
"type": "string"
}
},
"required": [
"base64"
],
"type": "object"
}
]
},
"description": "Files by relative path: text as a string, binary as { \"base64\": \"...\" }. Must include the entry page (index.html unless entry says otherwise). A velven.json, a dotfile, a dot-folder or node_modules, in any folder, is left out (never published; the result names the first 10 and counts the rest): send velven.json's settings as this tool's fields.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"how_made": {
"description": "How it was made, in the creator's words.",
"maxLength": 2000,
"type": "string"
},
"html": {
"description": "A whole page as one HTML string, published as index.html.",
"type": "string"
},
"prod": {
"description": "Go live on the space's Velven page instead of making a preview. Signed in only. Default false.",
"type": "boolean"
},
"sdk": {
"description": "Add Velven's SDK script to the entry page. Default true.",
"type": "boolean"
},
"spa": {
"description": "Serve the entry page for any unknown path (a single-page app).",
"type": "boolean"
},
"space": {
"description": "Publish a new version of this space (yours, signed in).",
"pattern": "^[a-z0-9-]{1,100}$",
"type": "string"
},
"thumbnail": {
"description": "The picture on the space's tile. Give the path of one of the files sent: a JPEG, PNG or WebP, up to 2 MB and 4096 pixels on each side. It's used as soon as the version is live, and Velven takes no picture of its own. It must show the space itself.",
"type": "string"
},
"title": {
"description": "The space's name. Required for a new space.",
"maxLength": 80,
"type": "string"
},
"type": {
"description": "What it is. Required for a new space.",
"enum": [
"game",
"world",
"tool",
"wonder"
],
"type": "string"
}
},
"type": "object"
},
"name": "publish",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"claimToken": {
"description": "The unlisted page's claim token, shown once (no account).",
"type": "string"
},
"claimUrl": {
"description": "Open signed in to claim the page (no account).",
"type": "string"
},
"expiresAt": {
"description": "When an unlisted page is deleted unless claimed (no account).",
"type": [
"string",
"null"
]
},
"leftOut": {
"description": "Files not published (velven.json, dotfiles, node_modules), the first 10.",
"items": {
"type": "string"
},
"type": "array"
},
"leftOutCount": {
"description": "How many files were left out in all.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"pageUrl": {
"description": "The space's page on Velven.",
"type": "string"
},
"previewUrl": {
"description": "The private preview, for 24 hours (a preview only).",
"type": "string"
},
"reason": {
"description": "Why it was refused, naming the file when it was one.",
"type": "string"
},
"space": {
"description": "The space's slug.",
"type": "string"
},
"status": {
"description": "The version's status: preview, publishing (waiting on Velven to publish it), live or refused.",
"type": "string"
},
"terms": {
"description": "The Terms line to show the person (no account).",
"type": "string"
},
"version": {
"description": "The version this publish made.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"watchUrl": {
"description": "Where to follow the version on Velven.",
"type": "string"
}
},
"required": [
"space",
"version",
"status",
"pageUrl"
],
"type": "object"
}
},
{
"description": "Make an earlier version of a hosted space live again. Only a version that was live before (rollback: true in versions) can be picked; it goes live at once. Needs sign-in.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"space": {
"description": "The space's slug, as my_spaces or publish named it, e.g. pixel-racer.",
"pattern": "^[a-z0-9-]{1,100}$",
"type": "string"
},
"version": {
"description": "The version number to make live again.",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
}
},
"required": [
"space",
"version"
],
"type": "object"
},
"name": "rollback",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"pageUrl": {
"type": "string"
},
"status": {
"const": "live",
"type": "string"
},
"version": {
"additionalProperties": false,
"properties": {
"number": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"number"
],
"type": "object"
}
},
"required": [
"version",
"status",
"pageUrl"
],
"type": "object"
}
},
{
"description": "Search Velven's documentation: publishing and hosting, velven.json, the CLI, the SDK (sign-in, leaderboards, saves, achievements, rooms), claiming a page, the agent API and limits. Returns the best matching sections with links.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"description": "How many sections to return. Default 5.",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "What to look up, in a few words.",
"maxLength": 200,
"minLength": 2,
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_docs",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"query": {
"type": "string"
},
"results": {
"items": {
"additionalProperties": false,
"properties": {
"text": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"title",
"url",
"text"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"query",
"results"
],
"type": "object"
}
},
{
"description": "List a hosted space's versions, newest first: number, status (uploading, preview, publishing, live, refused, unjudged, replaced), size, and whether rollback can pick it. Refused versions carry the reason. Needs sign-in.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"space": {
"description": "The space's slug, as my_spaces or publish named it, e.g. pixel-racer.",
"pattern": "^[a-z0-9-]{1,100}$",
"type": "string"
}
},
"required": [
"space"
],
"type": "object"
},
"name": "versions",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"space": {
"type": "string"
},
"versions": {
"items": {
"additionalProperties": false,
"properties": {
"createdAt": {
"type": "string"
},
"files": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"id": {
"type": "string"
},
"leftBehind": {
"description": "Made before the space moved off hosting: it can only be looked at.",
"type": "boolean"
},
"live": {
"type": "boolean"
},
"liveAt": {
"type": "string"
},
"number": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"reason": {
"description": "Why Velven refused it.",
"type": "string"
},
"rollback": {
"description": "It was live before, so rollback can pick it.",
"type": "boolean"
},
"size": {
"description": "Bytes.",
"type": "number"
},
"status": {
"description": "uploading, preview, publishing, live, refused, unjudged or replaced.",
"type": "string"
}
},
"required": [
"id",
"number",
"status",
"createdAt",
"live",
"files",
"size",
"rollback",
"leftBehind"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"space",
"versions"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:65dd6944ba1aa4000ea00ab3efaf72886aaf4346eab331b4e879d39b88402a4e | sha256sum