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,656 @@
1
+ # Overture Integration for Cursor
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: Proper Decomposition
30
+
31
+ If a user asks for "a landing page," your plan should NOT just say "build a landing page." It should include:
32
+
33
+ - Project initialization (framework selection, folder structure, dependency installation)
34
+ - Header component (logo placement, navigation items, mobile responsiveness, dark mode toggle)
35
+ - Hero section (headline copy, subheadline, CTA button, background image/gradient, animations)
36
+ - Features section (grid layout, icon selection, copy for each feature card)
37
+ - Social proof / testimonials section
38
+ - Pricing section (tier structure, toggle for monthly/annual)
39
+ - Footer (links, newsletter signup, social icons)
40
+ - SEO setup (meta tags, Open Graph, sitemap)
41
+ - Performance optimization (image compression, lazy loading)
42
+ - Deployment configuration (CI/CD, environment variables, domain setup)
43
+
44
+ Each of these becomes a node on the visual canvas with full details.
45
+
46
+ ---
47
+
48
+ ## MCP Tools
49
+
50
+ | Tool | Input | Purpose |
51
+ |------|-------|---------|
52
+ | `submit_plan` | `{ plan_xml, workspace_path?, agent_type? }` | Submit complete XML plan |
53
+ | `stream_plan_chunk` | `{ xml_chunk, workspace_path?, agent_type? }` | Stream XML incrementally |
54
+ | `get_approval` | `{ project_id? }` | Wait for user approval (may return "pending" — call again) |
55
+ | `update_node_status` | `{ node_id, status, output?, project_id? }` | Update execution progress |
56
+ | `plan_completed` | `{ project_id? }` | Mark plan done |
57
+ | `plan_failed` | `{ error, project_id? }` | Mark plan failed |
58
+ | `check_rerun` | `{ timeout_ms?, project_id? }` | Check if user wants to re-run nodes (call after plan_completed) |
59
+ | `check_pause` | `{ wait?, project_id? }` | Check if user paused execution (call before each node) |
60
+ | `get_resume_info` | `{ project_id? }` | Get state info for resuming a paused/failed plan |
61
+ | `request_plan_update` | `{ operations, project_id? }` | Apply incremental updates to the plan (insert, delete, replace) |
62
+ | `create_new_plan` | `{ project_id? }` | Signal you're creating a new unrelated plan (adds alongside existing) |
63
+
64
+ ### Multi-Project Support
65
+
66
+ Overture supports multiple projects running simultaneously. Each project gets its own tab in the UI.
67
+
68
+ - **`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.
69
+ - **`agent_type`**: Identify yourself (e.g., "cursor") so the UI shows the correct agent name.
70
+ - **`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.
71
+
72
+ **Example workflow:**
73
+ ```
74
+ 1. Call submit_plan({ plan_xml, workspace_path: "/path/to/project" })
75
+ 2. Response: { success: true, projectId: "84393059027d", expected_project_id: "84393059027d" }
76
+ 3. Call get_approval({ project_id: "84393059027d" }) ← MUST match!
77
+ 4. Call update_node_status({ node_id: "n1", status: "active", project_id: "84393059027d" })
78
+ ```
79
+
80
+ If you don't pass `workspace_path`, Overture uses a default project which works fine for single-project scenarios.
81
+
82
+ ### Updating an Existing Plan
83
+
84
+ When the user requests changes to an existing plan, use `request_plan_update` with an array of operations:
85
+
86
+ **Supported operations:**
87
+ - `insert_after` - Insert a node after a reference node
88
+ - `insert_before` - Insert a node before a reference node
89
+ - `delete` - Delete a node (edges auto-reconnect)
90
+ - `replace` - Replace a node's content in-place
91
+
92
+ **Example:**
93
+ ```json
94
+ request_plan_update({
95
+ "operations": [
96
+ {
97
+ "op": "insert_after",
98
+ "reference_node_id": "node_api",
99
+ "node": {
100
+ "id": "node_test",
101
+ "type": "task",
102
+ "title": "Run unit tests",
103
+ "description": "Execute test suite"
104
+ }
105
+ },
106
+ { "op": "delete", "node_id": "node_deploy" },
107
+ {
108
+ "op": "replace",
109
+ "node_id": "node_5",
110
+ "node": { "title": "Updated title", "description": "Updated description" }
111
+ }
112
+ ]
113
+ })
114
+ ```
115
+
116
+ After calling `request_plan_update`, call `get_approval()` to confirm changes.
117
+
118
+ ### Creating a New Unrelated Plan
119
+
120
+ If the user asks for something completely unrelated to the current plan (e.g., "forget that, let's build X instead"):
121
+
122
+ 1. **Call `create_new_plan`** — This clears the current plan state
123
+ 2. **Call `submit_plan` or `stream_plan_chunk`** with the new plan XML
124
+ 3. **Call `get_approval`** to wait for user approval
125
+ 4. Proceed with execution once approved
126
+
127
+ **Example workflow:**
128
+ ```
129
+ 1. User: "Actually, let's work on the authentication system instead"
130
+ 2. You call: create_new_plan({ project_id })
131
+ 3. You call: submit_plan({ plan_xml: "<new auth system plan>" })
132
+ 4. You call: get_approval({ project_id })
133
+ 5. Execute nodes as normal
134
+ ```
135
+
136
+ ---
137
+
138
+ ## XML Plan Schema
139
+
140
+ ```xml
141
+ <plan id="plan_001" title="Comprehensive Plan Title" agent="cursor">
142
+ <nodes>
143
+ <!-- Task node with full details -->
144
+ <node id="n1" type="task" status="pending">
145
+ <title>Clear, specific step title</title>
146
+ <description>
147
+ Detailed explanation of what this step accomplishes.
148
+ Include context about why this step is necessary.
149
+ Explain the approach you'll take.
150
+ </description>
151
+ <complexity>low|medium|high</complexity>
152
+ <expected_output>
153
+ Specific deliverables: files created, functions implemented, APIs integrated, etc.
154
+ </expected_output>
155
+ <risks>
156
+ What could go wrong? Edge cases? How will you handle them?
157
+ </risks>
158
+
159
+ <!-- Dynamic fields for user input -->
160
+ <dynamic_field
161
+ id="f1"
162
+ name="project_name"
163
+ type="string"
164
+ required="true"
165
+ title="Project Name"
166
+ description="Name for the project directory"
167
+ value="my-project"
168
+ />
169
+
170
+ <dynamic_field
171
+ id="f2"
172
+ name="api_key"
173
+ type="secret"
174
+ required="true"
175
+ title="Stripe API Key"
176
+ description="Your Stripe secret key for payment processing"
177
+ setup_instructions="Get from dashboard.stripe.com/apikeys"
178
+ />
179
+ </node>
180
+
181
+ <!-- Decision node when multiple approaches are valid -->
182
+ <node id="n2" type="decision" status="pending">
183
+ <title>Select Database</title>
184
+ <description>Choose the database technology for this project</description>
185
+
186
+ <branch id="b1" label="PostgreSQL">
187
+ <description>Full-featured relational database</description>
188
+ <pros>ACID compliance, complex queries, strong ecosystem</pros>
189
+ <cons>Requires server setup, more complex scaling</cons>
190
+ </branch>
191
+
192
+ <branch id="b2" label="SQLite">
193
+ <description>File-based embedded database</description>
194
+ <pros>Zero setup, portable, fast for read-heavy workloads</pros>
195
+ <cons>Not suitable for high concurrency or large datasets</cons>
196
+ </branch>
197
+
198
+ <branch id="b3" label="MongoDB">
199
+ <description>Document-oriented NoSQL database</description>
200
+ <pros>Flexible schema, horizontal scaling, JSON-native</pros>
201
+ <cons>No ACID transactions across documents, eventual consistency</cons>
202
+ </branch>
203
+ </node>
204
+
205
+ <!-- Task linked to a specific branch -->
206
+ <node id="n3" type="task" status="pending" branch_parent="n2" branch_id="b1">
207
+ <title>Configure PostgreSQL Connection</title>
208
+ <description>Set up database connection with Prisma ORM</description>
209
+ <complexity>medium</complexity>
210
+ <expected_output>Prisma schema and database client configured</expected_output>
211
+
212
+ <dynamic_field
213
+ id="f3"
214
+ name="database_url"
215
+ type="secret"
216
+ required="true"
217
+ title="Database URL"
218
+ description="PostgreSQL connection string"
219
+ setup_instructions="Format: postgres://user:pass@host:5432/database"
220
+ />
221
+ </node>
222
+ </nodes>
223
+
224
+ <edges>
225
+ <edge id="e1" from="n1" to="n2" />
226
+ <edge id="e2" from="n2" to="n3" />
227
+ </edges>
228
+ </plan>
229
+ ```
230
+
231
+ ---
232
+
233
+ ## Dynamic Field Types
234
+
235
+ | Type | Use Case | Example |
236
+ |------|----------|---------|
237
+ | `string` | Text input | Project name, domain, usernames |
238
+ | `secret` | Sensitive data (masked input) | API keys, tokens, passwords |
239
+ | `select` | Choice from options (use `options="a,b,c"`) | Framework choice, environment |
240
+ | `boolean` | Yes/No toggle | Enable TypeScript? Use strict mode? |
241
+ | `number` | Numeric input | Port number, timeout value |
242
+
243
+ **Always include `setup_instructions`** for fields requiring external values (API keys, credentials).
244
+
245
+ ---
246
+
247
+ ## CRITICAL: Node-by-Node Execution (DO NOT OVER-IMPLEMENT)
248
+
249
+ **YOU MUST ONLY IMPLEMENT THE CURRENT NODE.** This is non-negotiable.
250
+
251
+ When you receive a node (via `firstNode` from `get_approval` or `nextNode` from `update_node_status`), you must:
252
+
253
+ ### DO:
254
+ - **ONLY** implement what is described in that specific node's `title` and `description`
255
+ - **CONSUME ALL** fields in `fieldValues` — every single one must be used
256
+ - **READ AND USE ALL** files in `attachments` — do not ignore any attached file
257
+ - **FOLLOW EXACTLY** the `metaInstructions` if present — these are user directives
258
+ - **USE THE MCP SERVER** as specified in `mcpServers.formattedInstructions` if present
259
+ - **RESPECT** the node's `complexity`, `expectedOutput`, and `risks`
260
+
261
+ ### DO NOT:
262
+ - Implement tasks from future nodes
263
+ - "Get ahead" by doing work not specified in the current node
264
+ - Skip any field, attachment, or instruction in the current node
265
+ - Assume what comes next — wait for the next node
266
+ - Add features or functionality not explicitly in the node description
267
+
268
+ ### Why This Matters
269
+
270
+ Each node is a contract. The user approved a specific plan with specific nodes. If you over-implement:
271
+ - You break the visual progress tracking (nodes won't match actual work)
272
+ - You may contradict decisions the user will make in future nodes
273
+ - You waste tokens on work that might need to be redone
274
+ - You violate the user's trust in the plan they approved
275
+
276
+ ### Checklist Before Completing a Node
277
+
278
+ Before calling `update_node_status(node_id, "completed", output)`, verify:
279
+ - [ ] **Did I check for `mcpServers` FIRST?** (If present, did I install it if needed?)
280
+ - [ ] **Did I USE the `mcpServers` tools** as specified in `formattedInstructions`? (if present)
281
+ - [ ] Did I implement ONLY what this node's description specified?
282
+ - [ ] Did I use EVERY value in `fieldValues`?
283
+ - [ ] Did I read and incorporate EVERY file in `attachments`?
284
+ - [ ] Did I follow the `metaInstructions` exactly?
285
+ - [ ] Did I NOT do any work belonging to other nodes?
286
+
287
+ ---
288
+
289
+ ## Execution Workflow
290
+
291
+ ```
292
+ 1. Receive task from user
293
+ 2. Generate comprehensive XML plan (see planning requirements above)
294
+ 3. Call submit_plan (or stream_plan_chunk for real-time streaming)
295
+ 4. Call get_approval
296
+ - If status is "pending", call get_approval again (user is still reviewing)
297
+ - If status is "approved", you receive firstNode with all its config
298
+ - If status is "cancelled", stop and inform user
299
+ 5. FOR EACH NODE (starting with firstNode), execute in this EXACT order:
300
+ a. Call update_node_status(node_id, "active")
301
+
302
+ b. **FIRST: CHECK FOR MCP SERVER** ← THIS IS MANDATORY
303
+ - If node.mcpServers exists:
304
+ 1. Check if MCP server is already installed/configured
305
+ 2. If NOT installed: STOP and install it following mcpServers.readmeContent
306
+ 3. Verify installation by calling one of the MCP server's tools
307
+ 4. Only then proceed to use it for the node's task
308
+
309
+ c. Execute the node's task using:
310
+ - node.fieldValues (use ALL of them)
311
+ - node.attachments (read and use ALL files)
312
+ - node.metaInstructions (follow EXACTLY)
313
+ - node.mcpServers tools (if present, use as specified in formattedInstructions)
314
+
315
+ d. Call update_node_status(node_id, "completed", output)
316
+ e. Check response: if isPaused is true, call check_pause({ wait: true })
317
+ f. Get nextNode from response, or isLastNode: true
318
+
319
+ 6. Repeat step 5 for each nextNode until isLastNode is true
320
+ 7. Call plan_completed
321
+ ```
322
+
323
+ ### ⚠️ MCP SERVER CHECK IS STEP 5b - DO NOT SKIP
324
+
325
+ When you receive ANY node (firstNode or nextNode), your **FIRST ACTION** after marking it active must be:
326
+
327
+ ```
328
+ IF node.mcpServers EXISTS:
329
+ → STOP everything else
330
+ → Try to use one of the MCP server's tools to check if it's installed
331
+ → If you get "No connection found" or similar error:
332
+ ╔══════════════════════════════════════════════════════════════╗
333
+ ║ DO NOT SKIP TO THE NEXT NODE ║
334
+ ║ DO NOT IGNORE THIS ERROR ║
335
+ ║ YOU MUST INSTALL THE MCP SERVER NOW ║
336
+ ╚══════════════════════════════════════════════════════════════╝
337
+ 1. Read mcpServers.readmeContent for installation instructions
338
+ 2. Install the MCP server (uvx, pip, docker, etc.)
339
+ 3. Configure it in the MCP settings file
340
+ 4. Retry the tool call to verify installation
341
+ → Once working, use the MCP server for the node's task
342
+ ```
343
+
344
+ ### 🚨 CRITICAL: "No connection found" Error Handling
345
+
346
+ If you attempt to use an MCP tool and receive an error like:
347
+ ```
348
+ Error executing MCP tool: No connection found for server: [server-name]
349
+ ```
350
+
351
+ **THIS IS NOT A REASON TO SKIP THE NODE OR PROCEED WITHOUT THE MCP SERVER.**
352
+
353
+ You MUST:
354
+ 1. **STOP** - Do not continue with the node's task
355
+ 2. **INSTALL** - Follow the installation instructions in `mcpServers.readmeContent`
356
+ 3. **CONFIGURE** - Add the server to the MCP settings file
357
+ 4. **VERIFY** - Call the tool again to confirm it works
358
+ 5. **THEN CONTINUE** - Only after successful verification, proceed with the node's task
359
+
360
+ **The user attached this MCP server because they NEED it for this node. Skipping it defeats the entire purpose.**
361
+
362
+ ## Response Payloads
363
+
364
+ ### get_approval (when approved)
365
+ ```json
366
+ {
367
+ "status": "approved",
368
+ "firstNode": {
369
+ "id": "n1",
370
+ "title": "Initialize Project",
371
+ "type": "task",
372
+ "description": "Set up the project structure",
373
+ "fieldValues": { "api_key": "sk-..." },
374
+ "attachments": [{ "path": "/path/to/file", "name": "spec.md", "type": "document" }],
375
+ "metaInstructions": "Use TypeScript strict mode",
376
+ "mcpServers": { ... }
377
+ },
378
+ "message": "Plan approved by user. Execute firstNode, then call update_node_status to get the next node."
379
+ }
380
+ ```
381
+
382
+ **Note:** Each node's configuration 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.
383
+
384
+ ### update_node_status (when completed)
385
+ ```json
386
+ {
387
+ "success": true,
388
+ "message": "Node n1 status updated to completed",
389
+ "nextNode": {
390
+ "id": "n2",
391
+ "title": "Configure Database",
392
+ "type": "task",
393
+ "description": "Set up database connection",
394
+ "fieldValues": { "database_url": "postgres://..." },
395
+ "attachments": [],
396
+ "metaInstructions": "Use connection pooling"
397
+ }
398
+ }
399
+ ```
400
+
401
+ When it's the last node:
402
+ ```json
403
+ {
404
+ "success": true,
405
+ "message": "Node n5 status updated to completed. This was the last node.",
406
+ "isLastNode": true
407
+ }
408
+ ```
409
+
410
+ ### check_rerun (after plan_completed)
411
+ ```json
412
+ {
413
+ "hasRerun": true,
414
+ "nodeId": "n3",
415
+ "mode": "single", // or "to-bottom"
416
+ "nodeInfo": { ... },
417
+ "message": "Rerun requested from node n3 (single)"
418
+ }
419
+ ```
420
+
421
+ ## Pause/Resume Workflow
422
+
423
+ 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.
424
+
425
+ ```
426
+ After completing a node:
427
+ 1. Call update_node_status(node_id, "completed", output)
428
+ 2. Check response.isPaused:
429
+ - If false → proceed to nextNode
430
+ - If true → call check_pause({ wait: true }) to block until resumed
431
+ 3. Continue execution
432
+ ```
433
+
434
+ ### update_node_status Response (with pause)
435
+ ```json
436
+ {
437
+ "success": true,
438
+ "message": "Node n1 status updated to completed",
439
+ "nextNode": { ... },
440
+ "isPaused": true
441
+ }
442
+ ```
443
+
444
+ ---
445
+
446
+ ## Resume Plan Workflow
447
+
448
+ When a plan was paused, failed, or loaded from history, use `get_resume_info` to understand where execution stopped and continue from there.
449
+
450
+ ### get_resume_info Response
451
+ ```json
452
+ {
453
+ "success": true,
454
+ "resumeInfo": {
455
+ "planId": "plan_123",
456
+ "planTitle": "Build Authentication System",
457
+ "agent": "cursor",
458
+ "status": "paused",
459
+ "projectId": "abc123",
460
+ "workspacePath": "/Users/dev/my-project",
461
+
462
+ "currentNodeId": "n3",
463
+ "currentNodeTitle": "Configure Database",
464
+ "currentNodeStatus": "active",
465
+
466
+ "completedNodes": [
467
+ { "id": "n1", "title": "Initialize Project", "output": "Created package.json..." },
468
+ { "id": "n2", "title": "Install Dependencies", "output": "Installed 15 packages" }
469
+ ],
470
+ "pendingNodes": [
471
+ { "id": "n4", "title": "Create User Model", "description": "Define user schema..." },
472
+ { "id": "n5", "title": "Implement Auth Routes", "description": "Create login/signup..." }
473
+ ],
474
+ "failedNodes": [],
475
+
476
+ "fieldValues": { "n3.database_url": "postgres://..." },
477
+ "selectedBranches": { "n2": "branch_prisma" },
478
+ "nodeConfigs": { ... },
479
+
480
+ "createdAt": "2024-01-15T10:30:00Z",
481
+ "pausedAt": "2024-01-15T11:45:00Z"
482
+ },
483
+ "message": "Resume info retrieved. Plan is at status 'paused'. Current node: Configure Database (active). Completed: 2, Pending: 2, Failed: 0"
484
+ }
485
+ ```
486
+
487
+ ### Resume Workflow
488
+
489
+ ```
490
+ 1. Call get_resume_info to understand the current state
491
+ 2. Identify the current node (resumeInfo.currentNodeId)
492
+ 3. If currentNodeStatus is "active" or "failed":
493
+ - Resume execution from that node
494
+ - Use the fieldValues, selectedBranches, and nodeConfigs
495
+ 4. Call update_node_status to continue the normal execution flow
496
+ 5. Proceed with subsequent nodes until isLastNode is true
497
+ 6. Call plan_completed when done
498
+ ```
499
+
500
+ ### When to Use get_resume_info
501
+
502
+ - After a plan was **paused** by the user and you need to resume
503
+ - After a plan **failed** and you want to retry from the failed node
504
+ - When loading a plan from **history** to continue where it left off
505
+ - When you lose context and need to understand the current execution state
506
+
507
+ ---
508
+
509
+ ## Re-run Workflow
510
+
511
+ After `plan_completed`, users can click nodes to re-run them:
512
+ - **Single node** (play icon): Re-run just that node
513
+ - **To bottom** (play + arrow): Re-run from that node to the end
514
+
515
+ Loop on `check_rerun` after completion to handle user rerun requests.
516
+
517
+ ---
518
+
519
+ ## What Users Can Do in Overture
520
+
521
+ Before approving, users can:
522
+ - **Click nodes** to see full details (description, risks, expected output)
523
+ - **Fill dynamic fields** with their API keys, configuration values
524
+ - **Select branches** at decision nodes to choose their preferred approach
525
+ - **Attach files** to nodes — you'll receive the file paths to reference
526
+ - **Add meta instructions** — specific guidance for how to execute that node
527
+
528
+ All user modifications are returned to you when they approve.
529
+
530
+ ---
531
+
532
+ ## MCP Server Integration (CRITICAL)
533
+
534
+ 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.
535
+
536
+ ### Example Response with MCP Server
537
+ ```json
538
+ {
539
+ "success": true,
540
+ "nextNode": {
541
+ "id": "n5",
542
+ "title": "Generate product images",
543
+ "fieldValues": { ... },
544
+ "attachments": [],
545
+ "mcpServers": {
546
+ "name": "replicate-mcp",
547
+ "author": "replicate",
548
+ "description": "Generate images using Replicate AI models",
549
+ "githubUrl": "https://github.com/replicate/replicate-mcp",
550
+ "requiresApiKey": true,
551
+ "readmeContent": "# replicate-mcp\n\n## Installation\n...",
552
+ "formattedInstructions": "=== MCP SERVER INTEGRATION ===\n..."
553
+ }
554
+ }
555
+ }
556
+ ```
557
+
558
+ ### MANDATORY Requirements
559
+
560
+ When `mcpServers` is present on a node:
561
+
562
+ 1. **YOU MUST** use the MCP server exactly as described by the user in `formattedInstructions`
563
+ 2. **YOU MUST** follow the user's intended usage precisely — they specified why they attached this MCP
564
+ 3. **IF THE MCP SERVER IS NOT AVAILABLE OR NOT CONFIGURED**, follow the Setup Instructions below
565
+
566
+ ### Setup Instructions (When MCP Server Not Available)
567
+
568
+ The `mcpServers.formattedInstructions` field now includes **provider-specific setup instructions** tailored for Cursor. Follow them exactly.
569
+
570
+ **Cursor MCP Configuration File Locations:**
571
+ - **Project-level:** `.cursor/mcp.json` (in project root)
572
+ - **Global:** `~/.cursor/mcp.json` (user home directory)
573
+
574
+ **Setup Steps:**
575
+ 1. **Create or open** the `mcp.json` file at one of the locations above
576
+ 2. **Read existing config** if it exists — DO NOT overwrite other servers
577
+ 3. **Add the new server** to the `"mcpServers"` object
578
+ 4. **Save the file**
579
+ 5. **Restart Cursor** or reload the window
580
+ 6. **Verify** by calling one of the MCP server's tools
581
+
582
+ **Example Configuration:**
583
+ ```json
584
+ {
585
+ "mcpServers": {
586
+ "server-name": {
587
+ "command": "uvx",
588
+ "args": ["mcp-server-name"]
589
+ }
590
+ }
591
+ }
592
+ ```
593
+
594
+ **Tip:** Use project-level config for project-specific tools, global for tools you want everywhere.
595
+
596
+ ### Setup Workflow
597
+
598
+ ```
599
+ 1. Try to use the MCP server
600
+ 2. If you get "No connection found" error:
601
+ a. Read mcpServers.formattedInstructions for provider-specific setup
602
+ b. Read mcpServers.readmeContent for installation commands
603
+ c. Read existing MCP settings file (DO NOT OVERWRITE existing servers)
604
+ d. Add the new server configuration
605
+ e. Install dependencies (uvx, pip, etc.)
606
+ f. Restart Cursor / reload window
607
+ g. Retry the MCP tool call to verify installation
608
+ 3. Once working, use the MCP server for the node's task
609
+ ```
610
+
611
+ ### Why This Matters
612
+
613
+ 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:
614
+ - `name`, `author`, `description` — Server identification
615
+ - `githubUrl` — Source repository for documentation
616
+ - `readmeContent` — Installation and usage instructions
617
+ - `requiresApiKey` — Whether API key configuration is needed
618
+ - `formattedInstructions` — User's intended usage and critical compliance instructions
619
+
620
+ **Always check for `mcpServers` on every node and honor its instructions.**
621
+
622
+ ---
623
+
624
+ ## Best Practices
625
+
626
+ 1. **Decompose thoroughly**: Each action should be its own node
627
+ 2. **Use decision nodes**: Don't assume the user's preference — let them choose
628
+ 3. **Declare all inputs**: Any config needed at runtime should be a dynamic field
629
+ 4. **Be specific**: Descriptions should leave no ambiguity about what the step does
630
+ 5. **Document risks**: Show you've considered what could go wrong
631
+ 6. **Update frequently**: Call `update_node_status` so users see real-time progress
632
+ 7. **Honor meta instructions**: If a node has `metaInstructions`, follow them precisely
633
+ 8. **Use attachments**: If a node has file attachments, read and incorporate those files
634
+ 9. **Honor MCP servers**: When a node has `mcpServers`, follow its `formattedInstructions` precisely
635
+
636
+ ---
637
+
638
+ ## Why This Matters
639
+
640
+ Without Overture:
641
+ - User prompts you with a task
642
+ - You immediately start coding
643
+ - User realizes halfway through you misunderstood
644
+ - 200+ lines of code discarded
645
+ - Tokens wasted, time wasted, trust eroded
646
+
647
+ With Overture:
648
+ - User prompts you with a task
649
+ - You generate a detailed plan
650
+ - User reviews, adjusts, approves
651
+ - You execute exactly what they want
652
+ - Zero wasted effort
653
+
654
+ ---
655
+
656
+ > "The best time to shape the plan is before the first line of code is written." — Overture by Sixth