MCP 服务器

Velven

io.github.velvenai/velven
开发者工具 游戏 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Publishes and manages hosted browser games, worlds, and tools, including version listing, rollback, and documentation search.

my_spaces
Your spaces
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.
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['handle', 'spaces'], 'properties': {'handle': {'type': 'string'}, 'spaces': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'title', 'status', 'hosted', 'pageUrl', 'createdAt'], 'properties': {'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'hosted': {'type': 'boolean', 'description': 'Velven hosts its files (else it links a live URL).'}, 'status': {'type': 'string', 'description': 'published, processing, held, dead, unframeable.'}, 'pageUrl': {'type': 'string'}, 'createdAt': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
publish
Publish a space
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).
可访问外部资源
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'sdk': {'type': 'boolean', 'description': "Add Velven's SDK script to the entry page. Default true."}, 'spa': {'type': 'boolean', 'description': 'Serve the entry page for any unknown path (a single-page app).'}, 'clip': {'type': 'string', '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."}, 'html': {'type': 'string', 'description': 'A whole page as one HTML string, published as index.html.'}, 'prod': {'type': 'boolean', 'description': "Go live on the space's Velven page instead of making a preview. Signed in only. Default false."}, 'type': {'enum': ['game', 'world', 'tool', 'wonder'], 'type': 'string', 'description': 'What it is. Required for a new space.'}, 'claim': {'type': 'string', 'pattern': '^vlc_[A-Za-z0-9_-]{43}$', 'description': 'The claim token of an unlisted page: publishes its next version, or claims it when signed in.'}, 'entry': {'type': 'string', 'description': 'The page that opens first, if not index.html.'}, 'files': {'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'}, 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'object', 'required': ['base64'], 'properties': {'base64': {'type': 'string'}}}]}}, 'space': {'type': 'string', 'pattern': '^[a-z0-9-]{1,100}$', 'description': 'Publish a new version of this space (yours, signed in).'}, 'title': {'type': 'string', 'maxLength': 80, 'description': "The space's name. Required for a new space."}, 'engine': {'enum': ['three.js', 'r3f', 'babylon.js', 'playcanvas', 'a-frame', 'godot', 'unity', 'phaser', 'p5.js', 'canvas', 'webgl', 'webgpu', 'wasm', 'dom', 'marble', 'spline', 'other'], 'type': 'string', 'description': 'What it draws with, if one of these.'}, 'devices': {'type': 'array', 'items': {'enum': ['desktop', 'mobile', 'vr'], 'type': 'string'}, 'description': 'Where it can be played. Required for a new space.'}, 'how_made': {'type': 'string', 'maxLength': 2000, 'description': "How it was made, in the creator's words."}, 'thumbnail': {'type': 'string', '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."}, 'description': {'type': 'string', 'maxLength': 160, 'description': 'One line under the name.'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space', 'version', 'status', 'pageUrl'], 'properties': {'space': {'type': 'string', 'description': "The space's slug."}, 'terms': {'type': 'string', 'description': 'The Terms line to show the person (no account).'}, 'reason': {'type': 'string', 'description': 'Why it was refused, naming the file when it was one.'}, 'status': {'type': 'string', 'description': "The version's status: preview, publishing (waiting on Velven to publish it), live or refused."}, 'leftOut': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Files not published (velven.json, dotfiles, node_modules), the first 10.'}, 'pageUrl': {'type': 'string', 'description': "The space's page on Velven."}, 'version': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'The version this publish made.'}, 'claimUrl': {'type': 'string', 'description': 'Open signed in to claim the page (no account).'}, 'watchUrl': {'type': 'string', 'description': 'Where to follow the version on Velven.'}, 'expiresAt': {'type': ['string', 'null'], 'description': 'When an unlisted page is deleted unless claimed (no account).'}, 'claimToken': {'type': 'string', 'description': "The unlisted page's claim token, shown once (no account)."}, 'previewUrl': {'type': 'string', 'description': 'The private preview, for 24 hours (a preview only).'}, 'leftOutCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'How many files were left out in all.'}}, 'additionalProperties': False}
rollback
Roll back a space
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.
可能执行破坏性操作 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space', 'version'], 'properties': {'space': {'type': 'string', 'pattern': '^[a-z0-9-]{1,100}$', 'description': "The space's slug, as my_spaces or publish named it, e.g. pixel-racer."}, 'version': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'The version number to make live again.'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['version', 'status', 'pageUrl'], 'properties': {'status': {'type': 'string', 'const': 'live'}, 'pageUrl': {'type': 'string'}, 'version': {'type': 'object', 'required': ['number'], 'properties': {'number': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'additionalProperties': False}
search_docs
Search Velven's docs
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.
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'How many sections to return. Default 5.'}, 'query': {'type': 'string', 'maxLength': 200, 'minLength': 2, 'description': 'What to look up, in a few words.'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query', 'results'], 'properties': {'query': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'url', 'text'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
versions
Versions of a space
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.
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space'], 'properties': {'space': {'type': 'string', 'pattern': '^[a-z0-9-]{1,100}$', 'description': "The space's slug, as my_spaces or publish named it, e.g. pixel-racer."}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space', 'versions'], 'properties': {'space': {'type': 'string'}, 'versions': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'number', 'status', 'createdAt', 'live', 'files', 'size', 'rollback', 'leftBehind'], 'properties': {'id': {'type': 'string'}, 'live': {'type': 'boolean'}, 'size': {'type': 'number', 'description': 'Bytes.'}, 'files': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'liveAt': {'type': 'string'}, 'number': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'reason': {'type': 'string', 'description': 'Why Velven refused it.'}, 'status': {'type': 'string', 'description': 'uploading, preview, publishing, live, refused, unjudged or replaced.'}, 'rollback': {'type': 'boolean', 'description': 'It was live before, so rollback can pick it.'}, 'createdAt': {'type': 'string'}, 'leftBehind': {'type': 'boolean', 'description': 'Made before the space moved off hosting: it can only be looked at.'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
已更改
rollback
2026年10月1日 02:40
已更改
versions
2026年10月1日 02:40
已更改
publish
2026年10月1日 02:40
已添加
search_docs
2026年9月29日 02:40
已添加
rollback
2026年9月29日 02:40
已添加
versions
2026年9月29日 02:40
已添加
my_spaces
2026年9月29日 02:40
已添加
publish
2026年9月29日 02:40