MCPサーバー

Portamora

app.portamora/mcp

このMCPでできること

Allows users to discover published atmospheric 3D worlds, inspect world metadata and guides, and obtain starter materials for building environments.

get_community
Get community
Read server-evaluated community and play-counting flags. Personal state is returned by me.get. Lists use cursor pagination.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
get_creator
Get creator
Read an active creator profile. Email addresses, roles and account state are never exposed.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['handle'], 'properties': {'handle': {'type': 'string', 'pattern': '^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])$', 'maxLength': 30, 'minLength': 3, 'description': 'An existing creator handle; lookup ignores case.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['status', 'data'], 'properties': {'data': {'type': 'object', 'required': ['id', 'handle', 'displayName', 'bio', 'avatarKey', 'links'], 'properties': {'id': {'type': 'string', 'pattern': '^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 15, 'minLength': 15, 'description': 'Case-sensitive user identifier with 10 safe-alphabet characters after the prefix.'}, 'bio': {'type': 'string'}, 'links': {'type': 'object', 'required': ['self', 'profile', 'avatar'], 'properties': {'self': {'type': 'string', 'format': 'uri'}, 'avatar': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}, 'profile': {'type': 'string', 'format': 'uri'}}, 'additionalProperties': False}, 'handle': {'type': 'string', 'pattern': '^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$', 'maxLength': 30, 'minLength': 3}, 'avatarKey': {'type': ['string', 'null']}, 'displayName': {'type': 'string'}}, 'additionalProperties': False}, 'status': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
get_starter
Get the editable starter ZIP and the build guide. Download and build it in your own workspace; the MCP server does not execute world code.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_version
Get version
Read the current ready version of a published world. Unpublished versions are not exposed.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['versionId'], 'properties': {'versionId': {'type': 'string', 'pattern': '^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 18, 'minLength': 18, 'description': 'Case-sensitive version identifier with 10 safe-alphabet characters after the prefix.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['status', 'data'], 'properties': {'data': {'type': 'object', 'required': ['id', 'worldId', 'versionNumber', 'sdkVersion', 'bytesUnpacked', 'notes', 'createdAt', 'packagePath', 'controls', 'links'], 'properties': {'id': {'type': 'string', 'pattern': '^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 18, 'minLength': 18, 'description': 'Case-sensitive version identifier with 10 safe-alphabet characters after the prefix.'}, 'links': {'type': 'object', 'required': ['self', 'world', 'play', 'entry'], 'properties': {'play': {'type': 'string', 'format': 'uri'}, 'self': {'type': 'string', 'format': 'uri'}, 'entry': {'type': 'string', 'format': 'uri'}, 'world': {'type': 'string', 'format': 'uri'}}, 'additionalProperties': False}, 'notes': {'type': ['string', 'null']}, 'worldId': {'type': 'string', 'pattern': '^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 16, 'minLength': 16, 'description': 'Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.'}, 'controls': {'anyOf': [{'type': 'object', 'propertyNames': {'type': 'string', 'pattern': '^(Key[A-Z]|Digit[0-9]|ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Space|ShiftLeft|ShiftRight|Mouse)$'}, 'additionalProperties': {'type': 'string', 'maxLength': 160, 'minLength': 1}}, {'type': 'null'}], 'default': None}, 'createdAt': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'sdkVersion': {'type': 'number', 'const': 1}, 'packagePath': {'type': 'string'}, 'bytesUnpacked': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'versionNumber': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}, 'additionalProperties': False}, 'status': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
get_world
Get world
Read a public world page. Offline and removed worlds retain a notice; drafts are not exposed.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['worldId'], 'properties': {'worldId': {'type': 'string', 'pattern': '^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 16, 'minLength': 16, 'description': 'Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['status', 'data'], 'properties': {'data': {'type': 'object', 'required': ['id', 'title', 'tagline', 'description', 'thumbnailKey', 'status', 'currentVersionId', 'publishedAt', 'playsTotal', 'likesTotal', 'dislikesTotal', 'bytesUnpacked', 'tags', 'creator', 'links'], 'properties': {'id': {'type': 'string', 'pattern': '^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 16, 'minLength': 16, 'description': 'Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.'}, 'tags': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9_-]*$', 'maxLength': 32, 'minLength': 1}}, 'links': {'type': 'object', 'required': ['self', 'details', 'play', 'thumbnail'], 'properties': {'play': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}, 'self': {'type': 'string', 'format': 'uri'}, 'details': {'type': 'string', 'format': 'uri'}, 'thumbnail': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'title': {'type': 'string'}, 'status': {'enum': ['published', 'offline', 'removed'], 'type': 'string'}, 'creator': {'type': 'object', 'required': ['id', 'handle', 'displayName', 'bio', 'avatarKey', 'links'], 'properties': {'id': {'type': 'string', 'pattern': '^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 15, 'minLength': 15, 'description': 'Case-sensitive user identifier with 10 safe-alphabet characters after the prefix.'}, 'bio': {'type': 'string'}, 'links': {'type': 'object', 'required': ['self', 'profile', 'avatar'], 'properties': {'self': {'type': 'string', 'format': 'uri'}, 'avatar': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}, 'profile': {'type': 'string', 'format': 'uri'}}, 'additionalProperties': False}, 'handle': {'type': 'string', 'pattern': '^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$', 'maxLength': 30, 'minLength': 3}, 'avatarKey': {'type': ['string', 'null']}, 'displayName': {'type': 'string'}}, 'additionalProperties': False}, 'tagline': {'type': 'string'}, 'likesTotal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'playsTotal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'visibility': {'enum': ['public', 'unlisted'], 'type': 'string'}, 'description': {'type': 'string'}, 'publishedAt': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'thumbnailKey': {'type': ['string', 'null']}, 'bytesUnpacked': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}, 'dislikesTotal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currentVersionId': {'anyOf': [{'type': 'string', 'pattern': '^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 18, 'minLength': 18, 'description': 'Case-sensitive version identifier with 10 safe-alphabet characters after the prefix.'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'status': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
list_comments
List comments
Read plain-text comments, newest first, with deletion placeholders. Viewer controls are private; no-store. Lists use cursor pagination.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['worldId'], 'properties': {'limit': {'type': 'integer', 'default': 24, 'maximum': 60, 'minimum': 1}, 'cursor': {'type': 'string', 'maxLength': 1024}, 'worldId': {'type': 'string', 'pattern': '^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 16, 'minLength': 16, 'description': 'Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.'}}, 'additionalProperties': False}
read_guide
Read an official Portamora guide, policy, agent discovery file, or OpenAPI specification. Start with worlds before building and workflows before uploading.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['guide'], 'properties': {'guide': {'enum': ['agents', 'worlds', 'api', 'workflows', 'mcp', 'terms', 'privacy', 'discovery', 'openapi'], 'type': 'string'}}, 'additionalProperties': False}
search_worlds
Search worlds
Browse and search published worlds. Sort by newest, liked, or trending. The days filter accepts 1, 7 (API default), or 30 UTC calendar days including today, or all for any sort. Newest filters publication date unless days=all or creator is specified. Liked ranks period likes, or lifetime likes when days=all. Trending ranks period activity, or lifetime plays and likes when days=all, with publication-age decay in both cases. Older worlds may appear in activity rankings. The Explore website defaults to liked/all; API defaults remain newest/7. Search text can include exact #tags; custom tags are supported without a fixed vocabulary. Liked and trending require the community flag. Follow nextCursor with unchanged filters until null. Drafts and offline worlds are excluded. Public; no authentication is required.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'q': {'type': 'string', 'default': '', 'maxLength': 200}, 'tag': {'type': 'string', 'pattern': '^\\s*#?[A-Za-z0-9][A-Za-z0-9_-]{0,31}\\s*$', 'description': 'One to 32 tag characters; optional leading #, surrounding whitespace, and uppercase letters are normalized.'}, 'days': {'enum': [1, 7, 30, 'all'], 'type': ['integer', 'string'], 'default': 7}, 'sort': {'enum': ['newest', 'liked', 'trending'], 'type': 'string', 'default': 'newest'}, 'limit': {'type': 'integer', 'default': 24, 'maximum': 60, 'minimum': 1}, 'cursor': {'type': 'string', 'maxLength': 1024}, 'creator': {'type': 'string', 'pattern': '^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])$', 'maxLength': 30, 'minLength': 3, 'description': 'An existing creator handle; lookup ignores case.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['status', 'data'], 'properties': {'data': {'type': 'object', 'required': ['items', 'nextCursor'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'tagline', 'description', 'tags', 'currentVersionId', 'publishedAt', 'playsTotal', 'likesTotal', 'dislikesTotal', 'links', 'creator'], 'properties': {'id': {'type': 'string', 'pattern': '^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 16, 'minLength': 16, 'description': 'Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.'}, 'tags': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9_-]*$', 'maxLength': 32, 'minLength': 1}}, 'links': {'type': 'object', 'required': ['self', 'details', 'play', 'thumbnail'], 'properties': {'play': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}, 'self': {'type': 'string', 'format': 'uri'}, 'details': {'type': 'string', 'format': 'uri'}, 'thumbnail': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'title': {'type': 'string'}, 'creator': {'type': 'object', 'required': ['handle', 'displayName', 'links'], 'properties': {'links': {'type': 'object', 'required': ['profile'], 'properties': {'profile': {'type': 'string', 'format': 'uri'}}, 'additionalProperties': False}, 'handle': {'type': 'string', 'pattern': '^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$', 'maxLength': 30, 'minLength': 3}, 'displayName': {'type': 'string'}}, 'additionalProperties': False}, 'tagline': {'type': 'string'}, 'likesTotal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'playsTotal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'description': {'type': 'string'}, 'publishedAt': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'dislikesTotal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currentVersionId': {'anyOf': [{'type': 'string', 'pattern': '^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$', 'maxLength': 18, 'minLength': 18, 'description': 'Case-sensitive version identifier with 10 safe-alphabet characters after the prefix.'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'nextCursor': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'status': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
変更
get_world
2026年9月25日3:01
追加
get_starter
2026年9月17日7:57
追加
read_guide
2026年9月17日7:57
追加
list_comments
2026年9月17日7:57
追加
get_community
2026年9月17日7:57
追加
get_creator
2026年9月17日7:57
追加
get_version
2026年9月17日7:57
追加
get_world
2026年9月17日7:57
追加
search_worlds
2026年9月17日7:57