Portamora
Discover atmospheric 3D worlds, read controls, and build and publish authorized environments.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (3)
- HIGH
- MEDIUMen list_comments
- INFOen list_comments
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"mcp": {
"url": "https://portamora.app/mcp"
}
}
}Puntos de conexión remotos
https://portamora.app/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (8)
🟢search_worlds(q, sort, days, tag, creator, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"default": ""
},
"sort": {
"type": "string",
"enum": [
"newest",
"liked",
"trending"
],
"default": "newest"
},
"days": {
"type": [
"integer",
"string"
],
"enum": [
1,
7,
30,
"all"
],
"default": 7
},
"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."
},
"creator": {
"type": "string",
"minLength": 3,
"maxLength": 30,
"pattern": "^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])$",
"description": "An existing creator handle; lookup ignores case."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"default": 24
},
"cursor": {
"type": "string",
"maxLength": 1024
}
},
"required": [],
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"data": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 16,
"maxLength": 16,
"pattern": "^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."
},
"title": {
"type": "string"
},
"tagline": {
"type": "string"
},
"description": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 32,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
}
},
"currentVersionId": {
"anyOf": [
{
"type": "string",
"minLength": 18,
"maxLength": 18,
"pattern": "^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."
},
{
"type": "null"
}
]
},
"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"
}
]
},
"playsTotal": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"likesTotal": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"dislikesTotal": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"links": {
"type": "object",
"properties": {
"self": {
"type": "string",
"format": "uri"
},
"details": {
"type": "string",
"format": "uri"
},
"play": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"thumbnail": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
}
},
"required": [
"self",
"details",
"play",
"thumbnail"
],
"additionalProperties": false
},
"creator": {
"type": "object",
"properties": {
"handle": {
"type": "string",
"minLength": 3,
"maxLength": 30,
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"
},
"displayName": {
"type": "string"
},
"links": {
"type": "object",
"properties": {
"profile": {
"type": "string",
"format": "uri"
}
},
"required": [
"profile"
],
"additionalProperties": false
}
},
"required": [
"handle",
"displayName",
"links"
],
"additionalProperties": false
}
},
"required": [
"id",
"title",
"tagline",
"description",
"tags",
"currentVersionId",
"publishedAt",
"playsTotal",
"likesTotal",
"dislikesTotal",
"links",
"creator"
],
"additionalProperties": false
}
},
"nextCursor": {
"type": [
"string",
"null"
]
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false
}
},
"required": [
"status",
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_world(worldId)
Read a public world page. Offline and removed worlds retain a notice; drafts are not exposed.
Esquema de entrada
{
"type": "object",
"properties": {
"worldId": {
"type": "string",
"minLength": 16,
"maxLength": 16,
"pattern": "^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."
}
},
"required": [
"worldId"
],
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 16,
"maxLength": 16,
"pattern": "^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."
},
"title": {
"type": "string"
},
"tagline": {
"type": "string"
},
"description": {
"type": "string"
},
"thumbnailKey": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string",
"enum": [
"published",
"offline",
"removed"
]
},
"currentVersionId": {
"anyOf": [
{
"type": "string",
"minLength": 18,
"maxLength": 18,
"pattern": "^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."
},
{
"type": "null"
}
]
},
"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"
}
]
},
"playsTotal": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"likesTotal": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"dislikesTotal": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"bytesUnpacked": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"tags": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 32,
"pattern": "^[a-z0-9][a-z0-9_-]*$"
}
},
"creator": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 15,
"maxLength": 15,
"pattern": "^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."
},
"handle": {
"type": "string",
"minLength": 3,
"maxLength": 30,
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"
},
"displayName": {
"type": "string"
},
"bio": {
"type": "string"
},
"avatarKey": {
"type": [
"string",
"null"
]
},
"links": {
"type": "object",
"properties": {
"self": {
"type": "string",
"format": "uri"
},
"profile": {
"type": "string",
"format": "uri"
},
"avatar": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
}
},
"required": [
"self",
"profile",
"avatar"
],
"additionalProperties": false
}
},
"required": [
"id",
"handle",
"displayName",
"bio",
"avatarKey",
"links"
],
"additionalProperties": false
},
"links": {
"type": "object",
"properties": {
"self": {
"type": "string",
"format": "uri"
},
"details": {
"type": "string",
"format": "uri"
},
"play": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"thumbnail": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
}
},
"required": [
"self",
"details",
"play",
"thumbnail"
],
"additionalProperties": false
}
},
"required": [
"id",
"title",
"tagline",
"description",
"thumbnailKey",
"status",
"currentVersionId",
"publishedAt",
"playsTotal",
"likesTotal",
"dislikesTotal",
"bytesUnpacked",
"tags",
"creator",
"links"
],
"additionalProperties": false
}
},
"required": [
"status",
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_version(versionId)
Read the current ready version of a published world. Unpublished versions are not exposed.
Esquema de entrada
{
"type": "object",
"properties": {
"versionId": {
"type": "string",
"minLength": 18,
"maxLength": 18,
"pattern": "^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."
}
},
"required": [
"versionId"
],
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 18,
"maxLength": 18,
"pattern": "^version_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive version identifier with 10 safe-alphabet characters after the prefix."
},
"worldId": {
"type": "string",
"minLength": 16,
"maxLength": 16,
"pattern": "^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."
},
"versionNumber": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sdkVersion": {
"type": "number",
"const": 1
},
"bytesUnpacked": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"notes": {
"type": [
"string",
"null"
]
},
"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))$"
},
"packagePath": {
"type": "string"
},
"controls": {
"default": null,
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string",
"pattern": "^(Key[A-Z]|Digit[0-9]|ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Space|ShiftLeft|ShiftRight|Mouse)$"
},
"additionalProperties": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
},
{
"type": "null"
}
]
},
"links": {
"type": "object",
"properties": {
"self": {
"type": "string",
"format": "uri"
},
"world": {
"type": "string",
"format": "uri"
},
"play": {
"type": "string",
"format": "uri"
},
"entry": {
"type": "string",
"format": "uri"
}
},
"required": [
"self",
"world",
"play",
"entry"
],
"additionalProperties": false
}
},
"required": [
"id",
"worldId",
"versionNumber",
"sdkVersion",
"bytesUnpacked",
"notes",
"createdAt",
"packagePath",
"controls",
"links"
],
"additionalProperties": false
}
},
"required": [
"status",
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_creator(handle)
Read an active creator profile. Email addresses, roles and account state are never exposed.
Esquema de entrada
{
"type": "object",
"properties": {
"handle": {
"type": "string",
"minLength": 3,
"maxLength": 30,
"pattern": "^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])$",
"description": "An existing creator handle; lookup ignores case."
}
},
"required": [
"handle"
],
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 15,
"maxLength": 15,
"pattern": "^user_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive user identifier with 10 safe-alphabet characters after the prefix."
},
"handle": {
"type": "string",
"minLength": 3,
"maxLength": 30,
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])$"
},
"displayName": {
"type": "string"
},
"bio": {
"type": "string"
},
"avatarKey": {
"type": [
"string",
"null"
]
},
"links": {
"type": "object",
"properties": {
"self": {
"type": "string",
"format": "uri"
},
"profile": {
"type": "string",
"format": "uri"
},
"avatar": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
}
},
"required": [
"self",
"profile",
"avatar"
],
"additionalProperties": false
}
},
"required": [
"id",
"handle",
"displayName",
"bio",
"avatarKey",
"links"
],
"additionalProperties": false
}
},
"required": [
"status",
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_community
Read server-evaluated community and play-counting flags. Personal state is returned by me.get. Lists use cursor pagination.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟢list_comments(worldId, limit, cursor)
Read plain-text comments, newest first, with deletion placeholders. Viewer controls are private; no-store. Lists use cursor pagination.
Esquema de entrada
{
"type": "object",
"properties": {
"worldId": {
"type": "string",
"minLength": 16,
"maxLength": 16,
"pattern": "^world_[6789BCDFGHJKLMNPQRTWbcdfghjkmnpqrtwz]{10}$",
"description": "Case-sensitive world identifier with 10 safe-alphabet characters after the prefix."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"default": 24
},
"cursor": {
"type": "string",
"maxLength": 1024
}
},
"required": [
"worldId"
],
"additionalProperties": false
}🟢read_guide(guide)
Read an official Portamora guide, policy, agent discovery file, or OpenAPI specification. Start with worlds before building and workflows before uploading.
Esquema de entrada
{
"type": "object",
"properties": {
"guide": {
"type": "string",
"enum": [
"agents",
"worlds",
"api",
"workflows",
"mcp",
"terms",
"privacy",
"discovery",
"openapi"
]
}
},
"required": [
"guide"
],
"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.
Esquema de entrada
{
"type": "object",
"properties": {},
"additionalProperties": false
}Prompts recomendados
search_worldssearch_worldsget_worldget_worldlist_commentsComunidad
Evidencia