marble-headed-mcp 0.1.7 → 0.1.9
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/dist/index.js +47 -49
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -120,8 +120,8 @@ const TOOLS = [
|
|
|
120
120
|
inputSchema: {
|
|
121
121
|
type: 'object',
|
|
122
122
|
properties: {
|
|
123
|
-
email: { type: 'string' },
|
|
124
|
-
password: { type: 'string' },
|
|
123
|
+
email: { type: 'string', description: 'Email for login (optional).' },
|
|
124
|
+
password: { type: 'string', description: 'Password for login (optional).' },
|
|
125
125
|
},
|
|
126
126
|
additionalProperties: false,
|
|
127
127
|
},
|
|
@@ -132,7 +132,7 @@ const TOOLS = [
|
|
|
132
132
|
inputSchema: {
|
|
133
133
|
type: 'object',
|
|
134
134
|
properties: {
|
|
135
|
-
browserSessionId: { type: 'number' },
|
|
135
|
+
browserSessionId: { type: 'number', description: 'Headed browser session id.' },
|
|
136
136
|
},
|
|
137
137
|
required: ['browserSessionId'],
|
|
138
138
|
additionalProperties: false,
|
|
@@ -144,8 +144,8 @@ const TOOLS = [
|
|
|
144
144
|
inputSchema: {
|
|
145
145
|
type: 'object',
|
|
146
146
|
properties: {
|
|
147
|
-
browserSessionId: { type: 'number' },
|
|
148
|
-
projectId: { type: ['number', 'string'] },
|
|
147
|
+
browserSessionId: { type: 'number', description: 'Headed browser session id.' },
|
|
148
|
+
projectId: { type: ['number', 'string'], description: 'Project id to open at /sims/{projectId}.' },
|
|
149
149
|
},
|
|
150
150
|
required: ['browserSessionId', 'projectId'],
|
|
151
151
|
additionalProperties: false,
|
|
@@ -153,14 +153,15 @@ const TOOLS = [
|
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
155
|
name: 'headed_send_msg',
|
|
156
|
-
description: 'Send a chat message in the headed session and capture screenshots (returns links).',
|
|
156
|
+
description: 'Send a chat message in the headed session and capture screenshots (returns links). Make sure that ONLY one project is running in this session, and that you’ve already called `workflow_end_to_end_project_generation` and `headed_navigate_to_project`. Supports waitForTutorStart.',
|
|
157
157
|
inputSchema: {
|
|
158
158
|
type: 'object',
|
|
159
159
|
properties: {
|
|
160
|
-
browserSessionId: { type: 'number' },
|
|
161
|
-
waitDuration: { type: 'number' },
|
|
162
|
-
screenshotInterval: { type: 'number' },
|
|
163
|
-
|
|
160
|
+
browserSessionId: { type: 'number', description: 'Headed browser session id.' },
|
|
161
|
+
waitDuration: { type: 'number', description: 'How long to capture screenshots after start (ms). This should typically not be longer than 10s, especially if you’re using `waitForTutorStart`.' },
|
|
162
|
+
screenshotInterval: { type: 'number', description: 'Interval between screenshots (ms).' },
|
|
163
|
+
waitForTutorStart: { type: 'boolean', description: 'If true (default), wait up to 30s for streaming to start before capturing.' },
|
|
164
|
+
msg: { type: 'string', description: 'Chat message to send.' },
|
|
164
165
|
},
|
|
165
166
|
required: ['browserSessionId', 'waitDuration', 'screenshotInterval', 'msg'],
|
|
166
167
|
additionalProperties: false,
|
|
@@ -168,13 +169,12 @@ const TOOLS = [
|
|
|
168
169
|
},
|
|
169
170
|
{
|
|
170
171
|
name: 'screenshots_preview',
|
|
171
|
-
description: 'Render screenshots HTML (accepts
|
|
172
|
+
description: 'Render screenshots HTML (accepts screenshotUrls array or full response body).',
|
|
172
173
|
inputSchema: {
|
|
173
174
|
type: 'object',
|
|
174
175
|
properties: {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
response: { type: 'object' },
|
|
176
|
+
screenshotUrls: { type: 'array', items: { type: 'string' }, description: 'Array of screenshot URLs.' },
|
|
177
|
+
response: { type: 'object', description: 'Full response body from headed_send_msg.' },
|
|
178
178
|
},
|
|
179
179
|
additionalProperties: false,
|
|
180
180
|
},
|
|
@@ -185,7 +185,7 @@ const TOOLS = [
|
|
|
185
185
|
inputSchema: {
|
|
186
186
|
type: 'object',
|
|
187
187
|
properties: {
|
|
188
|
-
previewId: { type: 'string' },
|
|
188
|
+
previewId: { type: 'string', description: 'Preview id returned by headed_send_msg.' },
|
|
189
189
|
},
|
|
190
190
|
required: ['previewId'],
|
|
191
191
|
additionalProperties: false,
|
|
@@ -193,29 +193,29 @@ const TOOLS = [
|
|
|
193
193
|
},
|
|
194
194
|
{
|
|
195
195
|
name: 'workflow_end_to_end_project_generation',
|
|
196
|
-
description: 'Run the
|
|
196
|
+
description: 'This action creates a Marble project, its features, and spins up the Google Cloud Run instance — hence the name “end-to-end”. If you are asked to “spin up projects”, this is a first step after starting the session. ',
|
|
197
197
|
inputSchema: {
|
|
198
198
|
type: 'object',
|
|
199
199
|
properties: {
|
|
200
|
-
title: { type: 'string' },
|
|
201
|
-
description: { type: 'string' },
|
|
202
|
-
technologies: { type: 'array', items: { type: 'string' } },
|
|
203
|
-
language: { type: 'string' },
|
|
204
|
-
planId: { type: ['string', 'number'] },
|
|
205
|
-
personalizationNotes: { type: 'string' },
|
|
206
|
-
email: { type: 'string' },
|
|
207
|
-
user_id: { type: 'string' },
|
|
208
|
-
show_scaffold: { type: 'boolean' },
|
|
209
|
-
show_checkpoints: { type: 'boolean' },
|
|
210
|
-
show_walkthrough: { type: 'boolean' },
|
|
211
|
-
onboarding_completed: { type: 'boolean' },
|
|
212
|
-
target_skills: { type: 'array', items: { type: 'string' } },
|
|
213
|
-
project_setup_complete: { type: 'boolean' },
|
|
214
|
-
boilerplate_setup_complete: { type: 'boolean' },
|
|
215
|
-
plan_id: { type: ['string', 'number'] },
|
|
216
|
-
plan_project_id: { type: ['string', 'number'] },
|
|
217
|
-
posthogDistinctId: { type: 'string' },
|
|
218
|
-
workflowRunName: { type: 'string' },
|
|
200
|
+
title: { type: 'string', description: 'Project title.' },
|
|
201
|
+
description: { type: 'string', description: 'Project description prompt.' },
|
|
202
|
+
technologies: { type: 'array', items: { type: 'string' }, description: 'List of technologies to use.' },
|
|
203
|
+
language: { type: 'string', description: 'Primary language (optional).' },
|
|
204
|
+
planId: { type: ['string', 'number'], description: 'Plan id (optional).' },
|
|
205
|
+
personalizationNotes: { type: 'string', description: 'Personalization notes (optional).' },
|
|
206
|
+
email: { type: 'string', description: 'User email (optional).' },
|
|
207
|
+
user_id: { type: 'string', description: 'User id (optional).' },
|
|
208
|
+
show_scaffold: { type: 'boolean', description: 'Whether to generate scaffold.' },
|
|
209
|
+
show_checkpoints: { type: 'boolean', description: 'Whether to generate checkpoints.' },
|
|
210
|
+
show_walkthrough: { type: 'boolean', description: 'Whether to include walkthrough.' },
|
|
211
|
+
onboarding_completed: { type: 'boolean', description: 'Whether onboarding is completed.' },
|
|
212
|
+
target_skills: { type: 'array', items: { type: 'string' }, description: 'Target skills list.' },
|
|
213
|
+
project_setup_complete: { type: 'boolean', description: 'Project setup complete flag.' },
|
|
214
|
+
boilerplate_setup_complete: { type: 'boolean', description: 'Boilerplate setup complete flag.' },
|
|
215
|
+
plan_id: { type: ['string', 'number'], description: 'Plan id (legacy field).' },
|
|
216
|
+
plan_project_id: { type: ['string', 'number'], description: 'Plan project id (legacy field).' },
|
|
217
|
+
posthogDistinctId: { type: 'string', description: 'PostHog distinct id (optional).' },
|
|
218
|
+
workflowRunName: { type: 'string', description: 'Override workflow run name.' },
|
|
219
219
|
},
|
|
220
220
|
required: ['title', 'description', 'technologies'],
|
|
221
221
|
additionalProperties: true,
|
|
@@ -227,7 +227,7 @@ const TOOLS = [
|
|
|
227
227
|
inputSchema: {
|
|
228
228
|
type: 'object',
|
|
229
229
|
properties: {
|
|
230
|
-
projectId: { type: 'number' },
|
|
230
|
+
projectId: { type: 'number', description: 'Project id to complete.' },
|
|
231
231
|
},
|
|
232
232
|
required: ['projectId'],
|
|
233
233
|
additionalProperties: false,
|
|
@@ -239,23 +239,23 @@ const TOOLS = [
|
|
|
239
239
|
inputSchema: {
|
|
240
240
|
type: 'object',
|
|
241
241
|
properties: {
|
|
242
|
-
projectId: { type: 'number' },
|
|
243
|
-
timeStart: { type: 'string' },
|
|
244
|
-
timeEnd: { type: 'string' },
|
|
245
|
-
limit: { type: 'number' },
|
|
242
|
+
projectId: { type: 'number', description: 'Project id to fetch logs for.' },
|
|
243
|
+
timeStart: { type: 'string', description: 'Start timestamp (ISO). Optional.' },
|
|
244
|
+
timeEnd: { type: 'string', description: 'End timestamp (ISO). Optional.' },
|
|
245
|
+
limit: { type: 'number', description: 'Maximum number of log entries to return. A reasonable default is 1000.' },
|
|
246
246
|
},
|
|
247
247
|
required: ['projectId'],
|
|
248
248
|
additionalProperties: false,
|
|
249
249
|
},
|
|
250
250
|
},
|
|
251
251
|
{
|
|
252
|
-
name: '
|
|
252
|
+
name: 'save_image_url',
|
|
253
253
|
description: 'Download an image URL to /tmp and return the file path.',
|
|
254
254
|
inputSchema: {
|
|
255
255
|
type: 'object',
|
|
256
256
|
properties: {
|
|
257
|
-
url: { type: 'string' },
|
|
258
|
-
filename: { type: 'string' },
|
|
257
|
+
url: { type: 'string', description: 'Image URL to download.' },
|
|
258
|
+
filename: { type: 'string', description: 'Optional filename for /tmp output.' },
|
|
259
259
|
},
|
|
260
260
|
required: ['url'],
|
|
261
261
|
additionalProperties: false,
|
|
@@ -292,11 +292,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
292
292
|
return { content: [{ type: 'text', text: JSON.stringify(result.json || { status: result.status, body: result.text }, null, 2) }] };
|
|
293
293
|
}
|
|
294
294
|
case 'screenshots_preview': {
|
|
295
|
-
const payload = args?.
|
|
296
|
-
? {
|
|
297
|
-
: args?.
|
|
298
|
-
? { screenshotUrls: args.screenshotUrls }
|
|
299
|
-
: args?.response || args;
|
|
295
|
+
const payload = args?.screenshotUrls
|
|
296
|
+
? { screenshotUrls: args.screenshotUrls }
|
|
297
|
+
: args?.response || args;
|
|
300
298
|
const result = await postHeadedJson('/preview_screenshots', payload);
|
|
301
299
|
return { content: [{ type: 'text', text: JSON.stringify({ status: result.status, ok: result.ok, html: result.text }, null, 2) }] };
|
|
302
300
|
}
|
|
@@ -369,7 +367,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
369
367
|
],
|
|
370
368
|
};
|
|
371
369
|
}
|
|
372
|
-
case '
|
|
370
|
+
case 'save_image_url': {
|
|
373
371
|
const saveResult = await saveImageFromUrl({
|
|
374
372
|
url: args?.url,
|
|
375
373
|
filename: args?.filename,
|