portals-mcp 1.3.6 → 1.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -11
- package/package.json +17 -6
package/README.md
CHANGED
|
@@ -1,37 +1,90 @@
|
|
|
1
1
|
# portals-mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Prompt → playable 3D multiplayer game in the browser.**
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/portals-mcp)
|
|
6
|
+
[](https://www.npmjs.com/package/portals-mcp)
|
|
7
|
+
[](#license)
|
|
8
|
+
|
|
9
|
+
`portals-mcp` is an [MCP](https://modelcontextprotocol.io) server that turns Claude, Cursor, and any MCP-capable AI assistant into a game developer on [Portals](https://theportal.to). Describe the game you want; the assistant builds the scene, wires the game logic, generates 3D models, textures, music, and sound effects, and hands you a link anyone can play instantly — multiplayer, in the browser, no engine or build step.
|
|
10
|
+
|
|
11
|
+
<!-- DEMO GIF: docs/demo.gif — record with the shot list below, keep it <60s, ~800px wide, looping.
|
|
12
|
+
Shot list (prompt → playable game in under 60 seconds):
|
|
13
|
+
1. 0–5s MCP client (Claude Code or Cursor) with the prompt typed: "Build a neon parkour course with a timer and a win screen" — hit enter.
|
|
14
|
+
2. 5–25s Tools firing in the chat: create_room, apply_operations, text_to_3d_model — fast cuts, no dead air.
|
|
15
|
+
3. 25–40s render_scene screenshot appears in chat; assistant iterates ("raising the far platforms").
|
|
16
|
+
4. 40–55s Cut to the browser: the room URL opens, avatar spawns and plays the course.
|
|
17
|
+
5. 55–60s Second avatar joins (multiplayer beat), room URL overlaid on screen.
|
|
18
|
+
Uncomment the image line below once docs/demo.gif exists:
|
|
19
|
+
-->
|
|
20
|
+
<!--  -->
|
|
4
21
|
|
|
5
22
|
## Quick Start
|
|
6
23
|
|
|
7
|
-
|
|
24
|
+
[](https://cursor.com/en/install-mcp?name=portals&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInBvcnRhbHMtbWNwQGxhdGVzdCJdfQ%3D%3D)
|
|
25
|
+
|
|
26
|
+
Run it directly:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx -y portals-mcp@latest
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Claude Code
|
|
8
33
|
|
|
9
34
|
```bash
|
|
10
|
-
npx portals-mcp@latest
|
|
35
|
+
claude mcp add portals -- npx -y portals-mcp@latest
|
|
11
36
|
```
|
|
12
37
|
|
|
13
|
-
###
|
|
38
|
+
### Claude Desktop
|
|
39
|
+
|
|
40
|
+
Add to `claude_desktop_config.json` (Settings → Developer → Edit Config):
|
|
14
41
|
|
|
15
42
|
```json
|
|
16
43
|
{
|
|
17
44
|
"mcpServers": {
|
|
18
45
|
"portals": {
|
|
19
46
|
"command": "npx",
|
|
20
|
-
"args": ["portals-mcp"]
|
|
47
|
+
"args": ["-y", "portals-mcp@latest"]
|
|
21
48
|
}
|
|
22
49
|
}
|
|
23
50
|
}
|
|
24
51
|
```
|
|
25
52
|
|
|
26
|
-
###
|
|
53
|
+
### Cursor
|
|
27
54
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
55
|
+
Use the button above, or add to `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global):
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"mcpServers": {
|
|
60
|
+
"portals": {
|
|
61
|
+
"command": "npx",
|
|
62
|
+
"args": ["-y", "portals-mcp@latest"]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Environment variables
|
|
69
|
+
|
|
70
|
+
All optional — with no configuration the server opens a browser sign-in on first use.
|
|
71
|
+
|
|
72
|
+
| Variable | Required | Description |
|
|
73
|
+
|----------|----------|-------------|
|
|
74
|
+
| `PORTALS_ACCESS_KEY` | No | Portals access key. Set it (e.g. in a `.env` file next to your project) to skip the browser sign-in prompt. |
|
|
75
|
+
| `PORTALS_ROOM_ID` | No | Default room ID used when a tool call doesn't specify one. |
|
|
76
|
+
| `PORTALS_DISABLE_TELEMETRY` | No | Set to `1` to disable anonymous usage telemetry. |
|
|
77
|
+
|
|
78
|
+
### First session
|
|
79
|
+
|
|
80
|
+
1. Ask your assistant to build something: *"Create a mini golf course with a scoreboard."* It will call `authenticate` (browser sign-in) the first time.
|
|
81
|
+
2. Behind the scenes the assistant calls `get_context` for targeted specs, gotchas, and recipes, and `resolve_gameplay_capability` / `plan_gameplay_mechanic` before making platform claims.
|
|
82
|
+
3. Edits land via `apply_operations` (scoped) or `set_room_data` (full snapshot); `render_scene` screenshots let it check its own work.
|
|
32
83
|
|
|
33
84
|
## Tools
|
|
34
85
|
|
|
86
|
+
51 tools across authentication, marketplace assets, room building, scene design, live-game control, and AI asset generation.
|
|
87
|
+
|
|
35
88
|
### Authentication & Discovery
|
|
36
89
|
|
|
37
90
|
| Tool | Description |
|
|
@@ -44,6 +97,20 @@ npx portals-mcp@latest
|
|
|
44
97
|
| `plan_gameplay_mechanic` | Return a compact implementation contract with required capabilities, objects, variables, triggers, validation, risks, and sources |
|
|
45
98
|
| `search_recipes` | Search recipe manifest by keywords, tags, and patterns |
|
|
46
99
|
|
|
100
|
+
### Marketplace & Inventory
|
|
101
|
+
|
|
102
|
+
| Tool | Description |
|
|
103
|
+
|------|-------------|
|
|
104
|
+
| `search_marketplace` | Search the Portals creator marketplace for assets (3D models, sounds, packs) |
|
|
105
|
+
| `get_pack_items` | List the items contained in a marketplace pack |
|
|
106
|
+
| `list_marketplace_facets` | List marketplace catalogue facets (categories, themes, visual styles, biomes, types) |
|
|
107
|
+
| `get_user_inventory` | List assets the signed-in user has claimed or purchased |
|
|
108
|
+
| `claim_marketplace_item` | Claim a free marketplace item into the user's inventory |
|
|
109
|
+
| `place_marketplace_items` | Claim a batch of marketplace items and compose the ops to place them in the room |
|
|
110
|
+
| `get_room_build_items` | List every item available in the room's in-game build palette |
|
|
111
|
+
| `add_to_room_inventory` | Add marketplace items or packs to a room's build inventory |
|
|
112
|
+
| `wire_locked_door` | Compose the ops to wire a locked-door mechanic between a key item and a door item |
|
|
113
|
+
|
|
47
114
|
### Room Management
|
|
48
115
|
|
|
49
116
|
| Tool | Description |
|
|
@@ -56,6 +123,7 @@ npx portals-mcp@latest
|
|
|
56
123
|
| `simulate_trigger_zone_input` | Audit and simulate Trigger `pressBtn` / `keyCode` press-inside-zone behavior |
|
|
57
124
|
| `query_room` | Query room data for specific items, logic, or structure |
|
|
58
125
|
| `update_room_settings` | Modify name, description, image, privacy, loading screens |
|
|
126
|
+
| `set_room_settings` | Update only scene settings (lighting, skybox, fog, movement, avatars, voice chat) |
|
|
59
127
|
|
|
60
128
|
### Building
|
|
61
129
|
|
|
@@ -90,15 +158,22 @@ npx portals-mcp@latest
|
|
|
90
158
|
| `change_task_state` | Activate, complete, or reset tasks in a live game |
|
|
91
159
|
| `get_runtime_data` | Fetch live runtime variables and JS effector results |
|
|
92
160
|
|
|
93
|
-
### Generated Assets
|
|
161
|
+
### AI-Generated Assets
|
|
94
162
|
|
|
95
163
|
| Tool | Description |
|
|
96
164
|
|------|-------------|
|
|
97
165
|
| `text_to_3d_model` | Generate a 3D model from text |
|
|
98
166
|
| `image_to_3d_model` | Generate a 3D model from an image |
|
|
99
167
|
| `check_3d_model_task` | Poll 3D model generation status |
|
|
168
|
+
| `list_generated_3d_models` | List generated 3D models for the current user |
|
|
169
|
+
| `generate_ai_image` | Generate an image from a text prompt |
|
|
170
|
+
| `list_generated_images` | List generated images for the current user |
|
|
171
|
+
| `generate_ai_texture` | Generate a seamless PBR texture from a text prompt |
|
|
172
|
+
| `list_generated_textures` | List generated textures for the current user |
|
|
100
173
|
| `text_to_speech` | Generate speech audio |
|
|
174
|
+
| `list_voices` | List available text-to-speech voices |
|
|
101
175
|
| `generate_sound_effect` | Generate sound effect audio |
|
|
176
|
+
| `generate_music` | Generate an instrumental or vocal music track from a text prompt |
|
|
102
177
|
| `list_generated_sounds` | List generated sounds for the current user |
|
|
103
178
|
|
|
104
179
|
## Resources
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "portals-mcp",
|
|
3
|
-
"version": "1.3.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.3.7",
|
|
4
|
+
"description": "MCP server that turns AI assistants into game developers — prompt to playable 3D multiplayer browser game on Portals",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -40,19 +40,30 @@
|
|
|
40
40
|
},
|
|
41
41
|
"keywords": [
|
|
42
42
|
"mcp",
|
|
43
|
-
"
|
|
44
|
-
"ai",
|
|
43
|
+
"mcp-server",
|
|
45
44
|
"model-context-protocol",
|
|
45
|
+
"ai",
|
|
46
|
+
"game",
|
|
47
|
+
"game-development",
|
|
48
|
+
"game-builder",
|
|
49
|
+
"gamedev",
|
|
46
50
|
"3d",
|
|
47
|
-
"
|
|
51
|
+
"multiplayer",
|
|
52
|
+
"webgl",
|
|
53
|
+
"portals"
|
|
48
54
|
],
|
|
49
|
-
"author": "",
|
|
55
|
+
"author": "Portals (https://theportal.to)",
|
|
50
56
|
"license": "ISC",
|
|
51
57
|
"repository": {
|
|
52
58
|
"type": "git",
|
|
53
59
|
"url": "git+https://github.com/portals-labs/vibes.git",
|
|
54
60
|
"directory": "portals-mcp-server"
|
|
55
61
|
},
|
|
62
|
+
"homepage": "https://github.com/portals-labs/vibes/tree/master/portals-mcp-server#readme",
|
|
63
|
+
"bugs": {
|
|
64
|
+
"url": "https://github.com/portals-labs/vibes/issues"
|
|
65
|
+
},
|
|
66
|
+
"mcpName": "io.github.portals-labs/portals-mcp",
|
|
56
67
|
"engines": {
|
|
57
68
|
"node": ">=18"
|
|
58
69
|
},
|