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.
Files changed (2) hide show
  1. package/dist/index.js +47 -49
  2. 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
- msg: { type: 'string' },
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 screenshots/screenshotUrls array or full response body).',
172
+ description: 'Render screenshots HTML (accepts screenshotUrls array or full response body).',
172
173
  inputSchema: {
173
174
  type: 'object',
174
175
  properties: {
175
- screenshots: { type: 'array', items: { type: 'string' } },
176
- screenshotUrls: { type: 'array', items: { type: 'string' } },
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 server-side end-to-end project workflow (features provision boilerplate).',
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: 'save_image_base64',
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?.screenshots
296
- ? { screenshots: args.screenshots }
297
- : args?.screenshotUrls
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 'save_image_base64': {
370
+ case 'save_image_url': {
373
371
  const saveResult = await saveImageFromUrl({
374
372
  url: args?.url,
375
373
  filename: args?.filename,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marble-headed-mcp",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "MCP server for Marble headed automation endpoints",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",