overture-mcp 0.1.0

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.
@@ -0,0 +1,640 @@
1
+ # Overture Integration for Sixth AI
2
+
3
+ You have access to **Overture**, an MCP server that visualizes your execution plans as interactive flowcharts before you write any code.
4
+
5
+ ## Why Overture Exists
6
+
7
+ Every AI coding agent shares the same fundamental problem: the developer types a prompt, you start working, and they have **no visibility** into what you're planning. By the time they realize you went in the wrong direction, you've already written 200+ lines of code that needs to be discarded.
8
+
9
+ **Overture solves this by making your plan visible, editable, and approvable before execution begins.**
10
+
11
+ ---
12
+
13
+ ## Critical: Extended Planning Mode
14
+
15
+ **Your plans must be comprehensive, deeply detailed, and broken down to the atomic level.**
16
+
17
+ Unlike simple 5-10 step outlines, Overture expects you to generate **fully decomposed plans** where every task is broken into its smallest meaningful units. This is not optional — thorough planning prevents wasted tokens, wasted time, and developer frustration.
18
+
19
+ ### Planning Requirements
20
+
21
+ For every task you receive, your plan must include:
22
+
23
+ 1. **Atomic Decomposition**: Break every task into its smallest executable steps
24
+ 2. **Rich Node Details**: Every node needs title, description, complexity, expected output, and risks
25
+ 3. **Decision Points**: Use `decision` nodes whenever multiple valid approaches exist
26
+ 4. **Dynamic Fields**: Declare any inputs needed from the user (API keys, config, preferences)
27
+ 5. **Logical Dependencies**: Edges should reflect true execution order
28
+
29
+ ### Example: Good vs. Bad Planning
30
+
31
+ **Bad Plan** (too vague):
32
+ ```
33
+ 1. Set up project
34
+ 2. Build landing page
35
+ 3. Deploy
36
+ ```
37
+
38
+ **Good Plan** (properly decomposed):
39
+ ```
40
+ 1. Initialize Vite + React project with TypeScript
41
+ 2. Configure Tailwind CSS with custom theme
42
+ 3. Create Header component
43
+ - Logo placement and sizing
44
+ - Navigation items with responsive menu
45
+ - Dark mode toggle
46
+ 4. Create Hero section
47
+ - Headline and subheadline copy
48
+ - CTA button with hover states
49
+ - Background gradient/image
50
+ - Entrance animations
51
+ 5. Create Features section
52
+ - Grid layout (3 columns on desktop, 1 on mobile)
53
+ - Feature card component
54
+ - Icon selection for each feature
55
+ 6. Create Footer component
56
+ - Link groups
57
+ - Newsletter signup form
58
+ - Social media icons
59
+ 7. Add SEO meta tags and Open Graph
60
+ 8. Configure deployment (Vercel/Netlify)
61
+ - Environment variables
62
+ - Build configuration
63
+ ```
64
+
65
+ Each of these becomes a node on the visual canvas.
66
+
67
+ ---
68
+
69
+ ## MCP Tools
70
+
71
+ Use these tools via `use_mcp_tool` with server name `overture`:
72
+
73
+ | Tool | Input | Purpose |
74
+ |------|-------|---------|
75
+ | `submit_plan` | `{ plan_xml, workspace_path?, agent_type? }` | Submit complete XML plan |
76
+ | `stream_plan_chunk` | `{ xml_chunk, workspace_path?, agent_type? }` | Stream XML incrementally |
77
+ | `get_approval` | `{ project_id? }` | Wait for user approval (may return "pending" — call again) |
78
+ | `update_node_status` | `{ node_id, status, output?, project_id? }` | Update execution progress |
79
+ | `plan_completed` | `{ project_id? }` | Mark plan done |
80
+ | `plan_failed` | `{ error, project_id? }` | Mark plan failed |
81
+ | `check_rerun` | `{ timeout_ms?, project_id? }` | Check if user wants to re-run nodes (call after plan_completed) |
82
+ | `check_pause` | `{ wait?, project_id? }` | Check if user paused execution (call before each node) |
83
+ | `get_resume_info` | `{ project_id? }` | Get state info for resuming a paused/failed plan |
84
+ | `request_plan_update` | `{ operations, project_id? }` | Apply incremental updates to the plan (insert, delete, replace) |
85
+ | `create_new_plan` | `{ project_id? }` | Signal you're creating a new unrelated plan (adds alongside existing) |
86
+
87
+ ### Multi-Project Support
88
+
89
+ Overture supports multiple projects running simultaneously. Each project gets its own tab in the UI.
90
+
91
+ - **`workspace_path`**: Pass the absolute path to your project directory when calling `submit_plan` or `stream_plan_chunk`. This enables project isolation and history tracking.
92
+ - **`agent_type`**: Identify yourself (e.g., "sixth") so the UI shows the correct agent name.
93
+ - **`project_id`** / **`expected_project_id`**: **CRITICAL** - These are returned in the response from `submit_plan` and `stream_plan_chunk`. **YOU MUST use this exact value** in ALL subsequent calls (`get_approval`, `update_node_status`, `plan_completed`, etc.). The frontend uses this ID to match your approval request.
94
+
95
+ **Example workflow:**
96
+ ```
97
+ 1. Call submit_plan({ plan_xml, workspace_path: "/path/to/project" })
98
+ 2. Response: { success: true, projectId: "84393059027d", expected_project_id: "84393059027d" }
99
+ 3. Call get_approval({ project_id: "84393059027d" }) ← MUST match!
100
+ 4. Call update_node_status({ node_id: "n1", status: "active", project_id: "84393059027d" })
101
+ ```
102
+
103
+ If you don't pass `workspace_path`, Overture uses a default project which works fine for single-project scenarios.
104
+
105
+ ### Updating an Existing Plan
106
+
107
+ When the user requests changes to an existing plan, use `request_plan_update` with an array of operations:
108
+
109
+ **Supported operations:**
110
+ - `insert_after` - Insert a node after a reference node
111
+ - `insert_before` - Insert a node before a reference node
112
+ - `delete` - Delete a node (edges auto-reconnect)
113
+ - `replace` - Replace a node's content in-place
114
+
115
+ **Example:**
116
+ ```json
117
+ request_plan_update({
118
+ "operations": [
119
+ {
120
+ "op": "insert_after",
121
+ "reference_node_id": "node_api",
122
+ "node": {
123
+ "id": "node_test",
124
+ "type": "task",
125
+ "title": "Run unit tests",
126
+ "description": "Execute test suite"
127
+ }
128
+ },
129
+ { "op": "delete", "node_id": "node_deploy" },
130
+ {
131
+ "op": "replace",
132
+ "node_id": "node_5",
133
+ "node": { "title": "Updated title", "description": "Updated description" }
134
+ }
135
+ ]
136
+ })
137
+ ```
138
+
139
+ After calling `request_plan_update`, call `get_approval()` to confirm changes.
140
+
141
+ ### Creating a New Unrelated Plan
142
+
143
+ If the user asks for something completely unrelated to the current plan (e.g., "forget that, let's build X instead"):
144
+
145
+ 1. **Call `create_new_plan`** — This clears the current plan state
146
+ 2. **Call `submit_plan` or `stream_plan_chunk`** with the new plan XML
147
+ 3. **Call `get_approval`** to wait for user approval
148
+ 4. Proceed with execution once approved
149
+
150
+ **Example workflow:**
151
+ ```
152
+ 1. User: "Actually, let's work on the authentication system instead"
153
+ 2. You call: create_new_plan({ project_id })
154
+ 3. You call: submit_plan({ plan_xml: "<new auth system plan>" })
155
+ 4. You call: get_approval({ project_id })
156
+ 5. Execute nodes as normal
157
+ ```
158
+
159
+ ---
160
+
161
+ ## XML Plan Schema
162
+
163
+ ```xml
164
+ <plan id="plan_id" title="Comprehensive Plan Title" agent="sixth">
165
+ <nodes>
166
+ <!-- Task node with full details -->
167
+ <node id="n1" type="task" status="pending">
168
+ <title>Clear, specific step title</title>
169
+ <description>
170
+ Detailed explanation of what this step accomplishes.
171
+ Include context about why this step is necessary.
172
+ </description>
173
+ <complexity>low|medium|high</complexity>
174
+ <expected_output>
175
+ Specific deliverables: files created, APIs integrated, etc.
176
+ </expected_output>
177
+ <risks>
178
+ What could go wrong? How will you handle edge cases?
179
+ </risks>
180
+
181
+ <!-- Dynamic fields for user input -->
182
+ <dynamic_field
183
+ id="f1"
184
+ name="variable_name"
185
+ type="string|secret|select|boolean|number"
186
+ required="true|false"
187
+ title="Human-readable Label"
188
+ description="Help text explaining what this is for"
189
+ value="default_value"
190
+ options="opt1,opt2,opt3"
191
+ setup_instructions="How to obtain this value (e.g., 'Get from dashboard.stripe.com')"
192
+ />
193
+ </node>
194
+
195
+ <!-- Decision node when multiple approaches are valid -->
196
+ <node id="n2" type="decision" status="pending">
197
+ <title>What decision needs to be made</title>
198
+ <description>Context for why this choice matters</description>
199
+
200
+ <branch id="b1" label="Option 1 Name">
201
+ <description>What this approach entails</description>
202
+ <pros>Advantages of this choice</pros>
203
+ <cons>Disadvantages or tradeoffs</cons>
204
+ </branch>
205
+
206
+ <branch id="b2" label="Option 2 Name">
207
+ <description>What this approach entails</description>
208
+ <pros>Advantages of this choice</pros>
209
+ <cons>Disadvantages or tradeoffs</cons>
210
+ </branch>
211
+ </node>
212
+
213
+ <!-- Task that only runs if a specific branch is chosen -->
214
+ <node id="n3" type="task" status="pending" branch_parent="n2" branch_id="b1">
215
+ <title>Task specific to Option 1</title>
216
+ <description>This only executes if the user selects Option 1</description>
217
+ <complexity>medium</complexity>
218
+ </node>
219
+ </nodes>
220
+
221
+ <edges>
222
+ <edge id="e1" from="n1" to="n2" />
223
+ <!-- Add edges for all dependencies -->
224
+ </edges>
225
+ </plan>
226
+ ```
227
+
228
+ ---
229
+
230
+ ## Dynamic Field Types
231
+
232
+ | Type | Use Case | Example |
233
+ |------|----------|---------|
234
+ | `string` | Text input | Project name, domain name |
235
+ | `secret` | Sensitive data (masked) | API keys, tokens, passwords |
236
+ | `select` | Choice from options | Database type, framework |
237
+ | `boolean` | Yes/No toggle | Enable feature X? |
238
+ | `number` | Numeric input | Port number, timeout |
239
+
240
+ **Always add `setup_instructions`** for fields that require the user to obtain a value from an external source.
241
+
242
+ ---
243
+
244
+ ## CRITICAL: Node-by-Node Execution (DO NOT OVER-IMPLEMENT)
245
+
246
+ **YOU MUST ONLY IMPLEMENT THE CURRENT NODE.** This is non-negotiable.
247
+
248
+ When you receive a node (via `firstNode` from `get_approval` or `nextNode` from `update_node_status`), you must:
249
+
250
+ ### DO:
251
+ - **ONLY** implement what is described in that specific node's `title` and `description`
252
+ - **CONSUME ALL** fields in `fieldValues` — every single one must be used
253
+ - **READ AND USE ALL** files in `attachments` — do not ignore any attached file
254
+ - **FOLLOW EXACTLY** the `metaInstructions` if present — these are user directives
255
+ - **USE THE MCP SERVER** as specified in `mcpServers.formattedInstructions` if present
256
+ - **RESPECT** the node's `complexity`, `expectedOutput`, and `risks`
257
+
258
+ ### DO NOT:
259
+ - Implement tasks from future nodes
260
+ - "Get ahead" by doing work not specified in the current node
261
+ - Skip any field, attachment, or instruction in the current node
262
+ - Assume what comes next — wait for the next node
263
+ - Add features or functionality not explicitly in the node description
264
+
265
+ ### Why This Matters
266
+
267
+ Each node is a contract. The user approved a specific plan with specific nodes. If you over-implement:
268
+ - You break the visual progress tracking (nodes won't match actual work)
269
+ - You may contradict decisions the user will make in future nodes
270
+ - You waste tokens on work that might need to be redone
271
+ - You violate the user's trust in the plan they approved
272
+
273
+ ### Checklist Before Completing a Node
274
+
275
+ Before calling `update_node_status(node_id, "completed", output)`, verify:
276
+ - [ ] **Did I check for `mcpServers` FIRST?** (If present, did I install it if needed?)
277
+ - [ ] **Did I USE the `mcpServers` tools** as specified in `formattedInstructions`? (if present)
278
+ - [ ] Did I implement ONLY what this node's description specified?
279
+ - [ ] Did I use EVERY value in `fieldValues`?
280
+ - [ ] Did I read and incorporate EVERY file in `attachments`?
281
+ - [ ] Did I follow the `metaInstructions` exactly?
282
+ - [ ] Did I NOT do any work belonging to other nodes?
283
+
284
+ ---
285
+
286
+ ## Execution Workflow
287
+
288
+ ```
289
+ 1. Receive task from user
290
+ 2. Generate comprehensive XML plan (see planning requirements above)
291
+ 3. Call submit_plan (or stream_plan_chunk for incremental delivery)
292
+ 4. Call get_approval
293
+ - If status is "pending", wait and call again
294
+ - If status is "approved", you receive firstNode with all its config
295
+ - If status is "cancelled", stop
296
+ 5. FOR EACH NODE (starting with firstNode), execute in this EXACT order:
297
+ a. Call update_node_status(node_id, "active")
298
+
299
+ b. **FIRST: CHECK FOR MCP SERVER** ← THIS IS MANDATORY
300
+ - If node.mcpServers exists:
301
+ 1. Check if MCP server is already installed/configured
302
+ 2. If NOT installed: STOP and install it following mcpServers.readmeContent
303
+ 3. Verify installation by calling one of the MCP server's tools
304
+ 4. Only then proceed to use it for the node's task
305
+
306
+ c. Execute the node's task using:
307
+ - node.fieldValues (use ALL of them)
308
+ - node.attachments (read and use ALL files)
309
+ - node.metaInstructions (follow EXACTLY)
310
+ - node.mcpServers tools (if present, use as specified in formattedInstructions)
311
+
312
+ d. Call update_node_status(node_id, "completed", output)
313
+ e. Check response: if isPaused is true, call check_pause({ wait: true })
314
+ f. Get nextNode from response, or isLastNode: true
315
+
316
+ 6. Repeat step 5 for each nextNode until isLastNode is true
317
+ 7. Call plan_completed
318
+ ```
319
+
320
+ ### ⚠️ MCP SERVER CHECK IS STEP 5b - DO NOT SKIP
321
+
322
+ When you receive ANY node (firstNode or nextNode), your **FIRST ACTION** after marking it active must be:
323
+
324
+ ```
325
+ IF node.mcpServers EXISTS:
326
+ → STOP everything else
327
+ → Try to use one of the MCP server's tools to check if it's installed
328
+ → If you get "No connection found" or similar error:
329
+ ╔══════════════════════════════════════════════════════════════╗
330
+ ║ DO NOT SKIP TO THE NEXT NODE ║
331
+ ║ DO NOT IGNORE THIS ERROR ║
332
+ ║ YOU MUST INSTALL THE MCP SERVER NOW ║
333
+ ╚══════════════════════════════════════════════════════════════╝
334
+ 1. Read mcpServers.readmeContent for installation instructions
335
+ 2. Install the MCP server (uvx, pip, docker, etc.)
336
+ 3. Configure it in the MCP settings file
337
+ 4. Retry the tool call to verify installation
338
+ → Once working, use the MCP server for the node's task
339
+ ```
340
+
341
+ ### 🚨 CRITICAL: "No connection found" Error Handling
342
+
343
+ If you attempt to use an MCP tool and receive an error like:
344
+ ```
345
+ Error executing MCP tool: No connection found for server: [server-name]
346
+ ```
347
+
348
+ **THIS IS NOT A REASON TO SKIP THE NODE OR PROCEED WITHOUT THE MCP SERVER.**
349
+
350
+ You MUST:
351
+ 1. **STOP** - Do not continue with the node's task
352
+ 2. **INSTALL** - Follow the installation instructions in `mcpServers.readmeContent`
353
+ 3. **CONFIGURE** - Add the server to the MCP settings file
354
+ 4. **VERIFY** - Call the tool again to confirm it works
355
+ 5. **THEN CONTINUE** - Only after successful verification, proceed with the node's task
356
+
357
+ **The user attached this MCP server because they NEED it for this node. Skipping it defeats the entire purpose.**
358
+
359
+ ## Response Payloads
360
+
361
+ ### get_approval (when approved)
362
+ ```json
363
+ {
364
+ "status": "approved",
365
+ "firstNode": {
366
+ "id": "n1",
367
+ "title": "Initialize Project",
368
+ "type": "task",
369
+ "description": "Set up the project structure",
370
+ "fieldValues": { "api_key": "sk-..." },
371
+ "attachments": [{ "path": "/path/to/file", "name": "spec.md", "type": "document" }],
372
+ "metaInstructions": "Use TypeScript strict mode",
373
+ "mcpServers": { ... }
374
+ },
375
+ "message": "Plan approved by user. Execute firstNode, then call update_node_status to get the next node."
376
+ }
377
+ ```
378
+
379
+ **Note:** Each node's configuration (fieldValues, attachments, metaInstructions, mcpServers) is included directly in the node object. You receive nodes one at a time — `firstNode` from `get_approval`, then `nextNode` from each `update_node_status` call.
380
+
381
+ ### update_node_status (when completed)
382
+ ```json
383
+ {
384
+ "success": true,
385
+ "message": "Node n1 status updated to completed",
386
+ "nextNode": {
387
+ "id": "n2",
388
+ "title": "Configure Database",
389
+ "type": "task",
390
+ "description": "Set up database connection",
391
+ "fieldValues": { "database_url": "postgres://..." },
392
+ "attachments": [],
393
+ "metaInstructions": "Use connection pooling"
394
+ }
395
+ }
396
+ ```
397
+
398
+ When it's the last node:
399
+ ```json
400
+ {
401
+ "success": true,
402
+ "message": "Node n5 status updated to completed. This was the last node.",
403
+ "isLastNode": true
404
+ }
405
+ ```
406
+
407
+ ### check_rerun (after plan_completed)
408
+ ```json
409
+ {
410
+ "hasRerun": true,
411
+ "nodeId": "n3",
412
+ "mode": "single", // or "to-bottom"
413
+ "nodeInfo": {
414
+ "id": "n3",
415
+ "title": "Alternative Implementation",
416
+ "type": "task",
417
+ "fieldValues": { ... },
418
+ "attachments": [ ... ],
419
+ "metaInstructions": "..."
420
+ },
421
+ "message": "Rerun requested from node n3 (single)"
422
+ }
423
+ ```
424
+
425
+ ## Pause/Resume Workflow
426
+
427
+ Users can pause execution at any time by clicking the pause button or pressing Space. The `isPaused` flag is included in every `update_node_status` response, so you don't need to poll.
428
+
429
+ ```
430
+ After completing a node:
431
+ 1. Call update_node_status(node_id, "completed", output)
432
+ 2. Check response.isPaused:
433
+ - If false → proceed to nextNode
434
+ - If true → call check_pause({ wait: true }) to block until resumed
435
+ 3. Continue execution
436
+ ```
437
+
438
+ ### update_node_status Response (with pause)
439
+ ```json
440
+ {
441
+ "success": true,
442
+ "message": "Node n1 status updated to completed",
443
+ "nextNode": { ... },
444
+ "isPaused": true
445
+ }
446
+ ```
447
+
448
+ ---
449
+
450
+ ## Resume Plan Workflow
451
+
452
+ When a plan was paused, failed, or loaded from history, use `get_resume_info` to understand where execution stopped and continue from there.
453
+
454
+ ### get_resume_info Response
455
+ ```json
456
+ {
457
+ "success": true,
458
+ "resumeInfo": {
459
+ "planId": "plan_123",
460
+ "planTitle": "Build Authentication System",
461
+ "agent": "sixth",
462
+ "status": "paused",
463
+ "projectId": "abc123",
464
+ "workspacePath": "/Users/dev/my-project",
465
+
466
+ "currentNodeId": "n3",
467
+ "currentNodeTitle": "Configure Database",
468
+ "currentNodeStatus": "active",
469
+
470
+ "completedNodes": [
471
+ { "id": "n1", "title": "Initialize Project", "output": "Created package.json..." },
472
+ { "id": "n2", "title": "Install Dependencies", "output": "Installed 15 packages" }
473
+ ],
474
+ "pendingNodes": [
475
+ { "id": "n4", "title": "Create User Model", "description": "Define user schema..." },
476
+ { "id": "n5", "title": "Implement Auth Routes", "description": "Create login/signup..." }
477
+ ],
478
+ "failedNodes": [],
479
+
480
+ "fieldValues": { "n3.database_url": "postgres://..." },
481
+ "selectedBranches": { "n2": "branch_prisma" },
482
+ "nodeConfigs": { ... },
483
+
484
+ "createdAt": "2024-01-15T10:30:00Z",
485
+ "pausedAt": "2024-01-15T11:45:00Z"
486
+ },
487
+ "message": "Resume info retrieved. Plan is at status 'paused'. Current node: Configure Database (active). Completed: 2, Pending: 2, Failed: 0"
488
+ }
489
+ ```
490
+
491
+ ### Resume Workflow
492
+
493
+ ```
494
+ 1. Call get_resume_info to understand the current state
495
+ 2. Identify the current node (resumeInfo.currentNodeId)
496
+ 3. If currentNodeStatus is "active" or "failed":
497
+ - Resume execution from that node
498
+ - Use the fieldValues, selectedBranches, and nodeConfigs
499
+ 4. Call update_node_status to continue the normal execution flow
500
+ 5. Proceed with subsequent nodes until isLastNode is true
501
+ ```
502
+
503
+ ---
504
+
505
+ ## Re-run Workflow
506
+
507
+ After `plan_completed`, users can click nodes to re-run them:
508
+ - **Single node**: Re-run just that node
509
+ - **To bottom**: Re-run from that node to the end
510
+
511
+ ```
512
+ 1. Call plan_completed when done
513
+ 2. Loop: call check_rerun (with short timeout like 5000ms)
514
+ - If hasRerun is false, continue looping or exit after some time
515
+ - If hasRerun is true:
516
+ a. Execute the nodeInfo returned (same as normal execution)
517
+ b. If mode is "to-bottom", continue to subsequent nodes
518
+ c. Call plan_completed again when done
519
+ d. Return to step 2 to check for more reruns
520
+ ```
521
+
522
+ ---
523
+
524
+ ## What the User Can Do in Overture UI
525
+
526
+ Before approving, users can:
527
+ - **View details** of any node by clicking it
528
+ - **Fill in dynamic fields** (API keys, configuration)
529
+ - **Select branches** at decision points
530
+ - **Attach files** that you should reference during that node's execution
531
+ - **Add instructions** specific to each node (meta instructions)
532
+
533
+ All of this context is returned to you when they approve, so you can execute exactly what they want.
534
+
535
+ ---
536
+
537
+ ## MCP Server Integration (CRITICAL)
538
+
539
+ Users can attach **MCP servers** to individual nodes to extend your capabilities. When a node has an MCP server attached, the `nextNode` response will include an `mcpServers` object with a `formattedInstructions` field.
540
+
541
+ ### Example Response with MCP Server
542
+ ```json
543
+ {
544
+ "success": true,
545
+ "nextNode": {
546
+ "id": "n5",
547
+ "title": "Generate product images",
548
+ "fieldValues": { ... },
549
+ "attachments": [],
550
+ "mcpServers": {
551
+ "name": "replicate-mcp",
552
+ "author": "replicate",
553
+ "description": "Generate images using Replicate AI models",
554
+ "githubUrl": "https://github.com/replicate/replicate-mcp",
555
+ "requiresApiKey": true,
556
+ "readmeContent": "# replicate-mcp\n\n## Installation\n...",
557
+ "formattedInstructions": "=== MCP SERVER INTEGRATION ===\n..."
558
+ }
559
+ }
560
+ }
561
+ ```
562
+
563
+ ### MANDATORY Requirements
564
+
565
+ When `mcpServers` is present on a node:
566
+
567
+ 1. **YOU MUST** use the MCP server exactly as described by the user in `formattedInstructions`
568
+ 2. **YOU MUST** follow the user's intended usage precisely — they specified why they attached this MCP
569
+ 3. **IF THE MCP SERVER IS NOT AVAILABLE OR NOT CONFIGURED**, follow the Setup Instructions below
570
+
571
+ ### Setup Instructions (When MCP Server Not Available)
572
+
573
+ The `mcpServers.formattedInstructions` field now includes **provider-specific setup instructions** tailored for Sixth AI. Follow them exactly.
574
+
575
+ **Sixth AI MCP Configuration File Locations:**
576
+ - **macOS:** `~/Library/Application Support/Code/User/globalStorage/sixth.sixth-ai/settings/sixth-mcp-settings.json`
577
+ - **Windows:** `%APPDATA%\Code\User\globalStorage\sixth.sixth-ai\settings\sixth-mcp-settings.json`
578
+ - **Linux:** `~/.config/Code/User/globalStorage/sixth.sixth-ai/settings/sixth-mcp-settings.json`
579
+
580
+ **Setup Steps:**
581
+ 1. **Read the existing MCP settings file** — DO NOT overwrite other servers
582
+ 2. **Add the new server** to the `"mcpServers"` object
583
+ 3. **Save the file**
584
+ 4. **Verify** by calling one of the MCP server's tools
585
+
586
+ **Example Configuration:**
587
+ ```json
588
+ {
589
+ "mcpServers": {
590
+ "server-name": {
591
+ "command": "uvx",
592
+ "args": ["mcp-server-name"],
593
+ "disabled": false
594
+ }
595
+ }
596
+ }
597
+ ```
598
+
599
+ ### Setup Workflow
600
+
601
+ ```
602
+ 1. Try to use the MCP server
603
+ 2. If you get "No connection found" error:
604
+ a. Read mcpServers.formattedInstructions for provider-specific setup
605
+ b. Read mcpServers.readmeContent for installation commands
606
+ c. Read existing MCP settings file (DO NOT OVERWRITE existing servers)
607
+ d. Add the new server configuration
608
+ e. Install dependencies (uvx, pip, etc.)
609
+ f. Retry the MCP tool call to verify installation
610
+ 3. Once working, use the MCP server for the node's task
611
+ ```
612
+
613
+ ### Why This Matters
614
+
615
+ Users attach MCP servers because they want specific capabilities for specific nodes. Ignoring this is equivalent to ignoring their explicit instructions. The `mcpServers` object contains everything you need:
616
+ - `name`, `author`, `description` — Server identification
617
+ - `githubUrl` — Source repository for documentation
618
+ - `readmeContent` — Installation and usage instructions
619
+ - `requiresApiKey` — Whether API key configuration is needed
620
+ - `formattedInstructions` — User's intended usage and critical compliance instructions
621
+
622
+ **Always check for `mcpServers` on every node and honor its instructions.**
623
+
624
+ ---
625
+
626
+ ## Best Practices
627
+
628
+ 1. **Over-plan, don't under-plan**: More nodes = more transparency = happier user
629
+ 2. **Use decision nodes liberally**: Don't assume — let the user choose
630
+ 3. **Add dynamic fields upfront**: Collect all config before starting execution
631
+ 4. **Be specific in descriptions**: Users should understand each step without guessing
632
+ 5. **Include risks**: Show you've thought about edge cases
633
+ 6. **Update status frequently**: Call `update_node_status` so users see progress
634
+ 7. **Handle meta instructions**: When a node has `metaInstructions`, follow them carefully
635
+ 8. **Reference attachments**: When a node has file attachments, read/use those files
636
+ 9. **Honor MCP servers**: When a node has `mcpServers`, follow its `formattedInstructions` precisely
637
+
638
+ ---
639
+
640
+ > "The best time to shape the plan is before the first line of code is written." — Overture by Sixth