@digitalocean/mcp 1.0.12 → 1.0.14

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 CHANGED
@@ -221,15 +221,15 @@ The MCP DigitalOcean Integration supports the following services, allowing users
221
221
 
222
222
  Each service provides a detailed README describing all available tools, resources, arguments, and example queries. See the following files for full documentation:
223
223
 
224
- - [Apps Service](internal/apps/README.md)
225
- - [Droplet Service](internal/droplet/README.md)
226
- - [Account Service](internal/account/README.md)
227
- - [Networking Service](internal/networking/README.md)
228
- - [Databases Service](internal/dbaas/README.md)
229
- - [Insights Service](internal/insights/README.md)
230
- - [Spaces Service](internal/spaces/README.md)
231
- - [Marketplace Service](internal/marketplace/README.md)
232
- - [DOKS Service](internal/doks/README.md)
224
+ - [Apps Service](pkg/registry/apps/README.md)
225
+ - [Droplet Service](pkg/registry/droplet/README.md)
226
+ - [Account Service](pkg/registry/account/README.md)
227
+ - [Networking Service](pkg/registry/networking/README.md)
228
+ - [Databases Service](pkg/registry/dbaas/README.md)
229
+ - [Insights Service](pkg/registry/insights/README.md)
230
+ - [Spaces Service](pkg/registry/spaces/README.md)
231
+ - [Marketplace Service](pkg/registry/marketplace/README.md)
232
+ - [DOKS Service](pkg/registry/doks/README.md)
233
233
 
234
234
  ## Example Tools
235
235
 
@@ -0,0 +1,651 @@
1
+ # Vercel to App Platform Migration Instructions
2
+
3
+ You are assisting with migrating applications from Vercel to DigitalOcean App Platform using MCP servers. Follow these instructions carefully to ensure a smooth migration.
4
+
5
+ ## Initial Setup
6
+
7
+ First, ask the user for the name of the Vercel app they want to migrate.
8
+
9
+ **Note:** You can repeat this migration process for each additional app they want to move over.
10
+
11
+ Then verify:
12
+ - You have access to **Vercel MCP server** and **DigitalOcean MCP server**
13
+ - **Vercel CLI is installed** (`vercel` command available) - **Required for retrieving environment variables**
14
+ - Check if the current directory is a github repository and it is the same as the project that needs to be migrated
15
+ - Clone the repository to local disk if code change is needed
16
+ - User has confirmed they want to proceed with migration
17
+
18
+ **Important:** The Vercel CLI is required because the Vercel MCP server does not provide environment variables. Make sure the user has:
19
+ 1. Installed Vercel CLI: `npm i -g vercel`
20
+ 2. Authenticated: `vercel login`
21
+
22
+ **Note:** These instructions use a hybrid approach:
23
+ - **Vercel CLI:** Required for environment variables and app inspection
24
+ - **Vercel MCP server:** For project information (where available)
25
+ - **DigitalOcean MCP server:** Primary method for App Platform operations
26
+ - **Fallback options:** `doctl` CLI or [DigitalOcean REST API](https://docs.digitalocean.com/reference/api/digitalocean/)
27
+
28
+ ## Relevant App Platform Documentations
29
+
30
+ - [llms.txt](https://docs.digitalocean.com/products/app-platform/llms.txt)
31
+ - [nodejs specific buildpack instructions](https://docs.digitalocean.com/products/app-platform/reference/buildpacks/nodejs/)
32
+ - [App Spec reference](https://docs.digitalocean.com/products/app-platform/reference/app-spec/)
33
+
34
+ ## Migration Process
35
+
36
+ ### Step 1: Get App Information
37
+
38
+ #### 1.1 Prepare Local Environment and Pull Environment Variables
39
+
40
+ 1. **Create a local migration folder:**
41
+ - Pattern: `./vercel-migration/<vercel-app-name>-migration/`
42
+ - Example: `mkdir -p ./vercel-migration/my-app-migration`
43
+ - Navigate to it: `cd ./vercel-migration/<vercel-app-name>-migration/`
44
+
45
+ 2. **Link to Vercel project (if not already linked):**
46
+ - Check if already linked: look for `.vercel` directory
47
+ - If NOT linked, run: `vercel link --project <your-project-name> -y`
48
+ - If already linked, skip this step to avoid double linking
49
+
50
+ 3. **Pull environment variables from Vercel:**
51
+ - Ask the user which environment to pull from: production, development, preview, or other
52
+ - Run: `vercel env pull .env.<environment> --environment=<environment>`
53
+ - Examples:
54
+ - Production: `vercel env pull .env.production --environment=production`
55
+ - Development: `vercel env pull .env.development --environment=development`
56
+ - Preview: `vercel env pull .env.preview --environment=preview`
57
+ - Verify the file was created: `ls -la .env.<environment>`
58
+ - If unable to pull environment variables, leave them blank or empty when creating the App Platform app
59
+
60
+ #### 1.2 Get App Details Using Vercel CLI
61
+
62
+ 1. **Get app information:**
63
+ - Use `vercel inspect <app-name>` or `vercel ls` to find the app
64
+
65
+ 2. **For this app, collect:**
66
+ - App name and ID
67
+ - GitHub/GitLab/BitBucket repository URL. This can also be obtained via Vercel MCP.
68
+ - Current deployment branch
69
+ - Build command
70
+ - Output directory (only for static sites)
71
+ - Root directory / source_dir for monorepos
72
+ - Node.js version or runtime
73
+ - **Custom domains** (list all domains attached to this app, including apex and subdomains)
74
+ - Any serverless function routes (paths under `/api/*`)
75
+ - Cron job configurations
76
+
77
+ 3. **Verify environment variables:**
78
+ - Check that `.env.<environment>` file exists in your migration folder
79
+ - All environment variables should be transferred as it is. Do not change the names.
80
+
81
+ 3. **Show the user** what you found and confirm they want to proceed
82
+ - Include the list of domains that will need DNS updates
83
+ - **Note:** Build and run commands will be validated in the next step by checking the repository
84
+
85
+ 4. If the app fails to deploy, fetch logs
86
+ - [Retrieve Deployment Logs](https://docs.digitalocean.com/reference/api/digitalocean/#tag/Apps/operation/apps_get_logs)
87
+ - Or ask the user to provide build or deploy logs for analysing the error and fix it.
88
+
89
+ ### Step 2: App Migration
90
+
91
+ Follow these steps to migrate the app:
92
+
93
+ #### 2.1 Project settings and Build Configuration
94
+
95
+ **Inspect the repository to understand project structure and let App Platform buildpack auto-detect build/run commands**
96
+
97
+ 1. **Fetch and inspect package.json from the repository:**
98
+ - If monorepo or source_dir is specified: look at `[source_dir]/package.json`. Deploy them as separate components per app.
99
+ - If root level app: look at root `package.json`
100
+ - Identify the framework from dependencies (Next.js, React, Vue, Express, etc.)
101
+ - Note if there's a "build" script and "start" script in the scripts section
102
+ - Check the "engines" field for Node.js version requirements
103
+
104
+ 2. **Check Vercel configuration for custom settings:**
105
+ - Look in `vercel.json` for `buildCommand`, `outputDirectory`, or `framework` settings
106
+ - Check Vercel project settings for any custom build/install commands
107
+ - Note the framework detected by Vercel
108
+ - If Vercel uses custom commands, consider using them; otherwise leave empty for buildpack auto-detection
109
+
110
+ 3. **Validation before migration:**
111
+
112
+ **Project Structure:**
113
+ - Verify package.json exists at the correct location (root or source_dir)
114
+ - Check for package-lock.json or yarn.lock (for dependency consistency)
115
+ - For monorepos: verify source_dir path is correct relative to repository root
116
+ - Supported Node.js version in "engines" field in App Platform, (from https://docs.digitalocean.com/products/app-platform/reference/buildpacks/nodejs/#current-buildpack-version-and-supported-runtimes)
117
+
118
+ **Build/Run Commands - Prefer buildpack auto-detection:**
119
+ - **Default approach:** Leave build and run commands empty to let App Platform buildpack auto-detect based on framework
120
+ - **Only specify custom commands if:**
121
+ - Vercel uses non-standard build commands (check vercel.json)
122
+ - The project has custom scripts that differ from framework defaults
123
+ - You need to override buildpack defaults for specific reasons
124
+ - **Reference:** [App Platform Node.js buildpack documentation](https://docs.digitalocean.com/products/app-platform/reference/buildpacks/nodejs/) for auto-detection behavior
125
+
126
+ **For Static Sites:**
127
+ - Buildpack will auto-detect framework and build command
128
+ - Specify `output_dir` only if different from framework default (e.g., Next.js uses `out` for static export, not `.next`)
129
+ - Common output directories: `build`, `dist`, `out`, `public`, `_site`
130
+
131
+ **For Web Services:**
132
+ - Buildpack will auto-detect framework and start command
133
+ - Ensure app listens on `process.env.PORT` (App Platform injects this variable)
134
+ - Leave run command empty unless using a custom start script
135
+
136
+ **Install Command:**
137
+ - Buildpack auto-detects npm, yarn, or pnpm based on lockfile
138
+ - Only specify custom install command if needed (e.g., monorepo workspaces)
139
+
140
+ **If you need to specify commands:**
141
+ - Verify the script exists in package.json "scripts" section
142
+ - Or verify the framework package is in dependencies/devDependencies
143
+ - Ask the user to confirm if uncertain
144
+
145
+ #### 2.2 Environment Variables
146
+
147
+ 1. **Use the environment variables pulled from Vercel in Step 1.1:**
148
+ - Read the `.env.<environment>` file from the migration folder
149
+ - Parse all variables from this file
150
+ - If no environment variables were pulled, leave blank or empty
151
+
152
+ 2. **Transform system variables:**
153
+ - Note: `VERCEL_URL`, `VERCEL_ENV`, any `VERCEL_GIT_*` and Vercel-specific system variables will NOT be available in App Platform
154
+ - Warn the user if the app depends on these variables
155
+
156
+ 3. **Prepare environment variables for App Platform:**
157
+ - Keep the same variable names (except for Vercel-specific ones)
158
+ - Mark sensitive variables (API keys, secrets, database passwords) as encrypted
159
+ - If unable to retrieve values, leave blank or empty
160
+
161
+ #### 2.3 Component Type Detection
162
+
163
+ Determine the appropriate App Platform component type based on the app's characteristics:
164
+
165
+ **Static Sites:**
166
+ - Pure static HTML/CSS/JS with no server-side logic
167
+ - Static site generators (Gatsby, Hugo, Jekyll, etc.) that build to an output directory
168
+ - React/Vue/Angular SPAs that are fully client-side rendered
169
+ - **Create as Static Site component**
170
+ - **Configuration needed:**
171
+ - `build_command`: Leave empty for buildpack auto-detection (or specify if custom)
172
+ - `output_dir`: Only if different from framework default (e.g., `build`, `dist`, `out`, `public`)
173
+
174
+ **Web Services (Dynamic Sites):**
175
+ - Next.js apps with API routes (files in `/pages/api/*` or `/app/api/*`)
176
+ - Next.js apps using server-side rendering (SSR) or server components
177
+ - Node.js/Express backend applications
178
+ - Any app that needs a running server process
179
+ - Apps with serverless functions in `/api/*` directory
180
+ - **Create as Web Service component**
181
+ - **Configuration needed:**
182
+ - `build_command`: Leave empty for buildpack auto-detection (or specify if custom)
183
+ - `run_command`: Leave empty for buildpack auto-detection (or specify if custom)
184
+ - No `output_dir` - the service runs continuously
185
+
186
+ **How to determine:**
187
+ 1. Check if app has `/api/*` routes or serverless functions → **Web Service**
188
+ 2. Check if Next.js uses `getServerSideProps`, `getInitialProps`, or server components → **Web Service**
189
+ 3. Check if there's a server file (like `server.js`, `index.js` with Express) → **Web Service**
190
+ 4. If purely static output with no server logic → **Static Site**
191
+ 5. When in doubt, check the Vercel deployment type or framework detection
192
+
193
+ **Multiple Components (Advanced):**
194
+ - If the app has both static content AND API routes, you could separate into:
195
+ - Option A: Single web service (simplest - handles both static and API)
196
+ - Option B: Separate static site + web service components (more complex setup)
197
+ - **Recommend Option A** unless user specifically wants separation
198
+
199
+ #### 2.4 Feature Translation
200
+
201
+ **Serverless Functions → Web Services or Functions:**
202
+ - Vercel serverless functions in `/api/*` directory
203
+ - Migrate to App Platform web service with API endpoints
204
+ - OR guide user to use App Platform Functions
205
+ - Note: Edge Functions are NOT directly supported - must refactor to web services
206
+
207
+ **Cron Jobs:**
208
+ - If Vercel has cron jobs invoking API endpoints
209
+ - Create native App Platform cron jobs
210
+ - Map cron expressions directly
211
+ - Update to use App Platform internal URLs instead of `/api/*` HTTP endpoints
212
+
213
+ **Middleware:**
214
+ - Vercel `middleware.ts` is NOT supported in App Platform
215
+ - Inform user they need to implement application-level middleware
216
+ - This requires code changes in the application itself
217
+
218
+ **ISR (Incremental Static Regeneration):**
219
+ - NOT directly supported in App Platform
220
+ - Inform user they have these options:
221
+ - Rebuild static site periodically using cron jobs
222
+ - Convert to server-side rendering (SSR)
223
+ - Use Spaces with cache persistence for future NFS support
224
+
225
+ **Image Optimization:**
226
+ - NOT natively supported in App Platform
227
+ - Recommend these alternatives:
228
+ 1. Cloudflare Images API (fully managed, paid after 5000 transformations)
229
+ 2. Next.js `next/image` with Sharp in the same container
230
+ 3. Dedicated worker or cron job with Sharp/libvips processing to Spaces
231
+ 4. External image CDN service
232
+
233
+ **Headers and Redirects:**
234
+ - Vercel `headers` in `vercel.json` → Configure CORS in app spec or application middleware
235
+ - Vercel `redirects` in `vercel.json` → App Platform routing rules in app spec
236
+ - Vercel `rewrites` in `vercel.json` → Internal routing configuration in app spec
237
+
238
+ **Edge Caching:**
239
+ - Vercel has configurable multi-tier caching
240
+ - App Platform has standard CDN caching (cannot disable or configure extensively)
241
+ - Guide user to adjust cache headers in their application
242
+
243
+ #### 2.5 Create App Platform App
244
+
245
+ **Using DigitalOcean MCP (Primary Method):**
246
+
247
+ 1. **Use DigitalOcean MCP to create the app with configuration based on component type:**
248
+
249
+ **IMPORTANT: Only proceed with app creation after completing validation in step 2.1**
250
+
251
+ **For Static Sites:**
252
+ ```
253
+ - Repository: [GitHub/GitLab URL]
254
+ - Branch: [same as Vercel]
255
+ - Region: Choose closest to user's audience
256
+ - Build Command: [Leave empty for buildpack auto-detection, or use custom command from vercel.json if present]
257
+ - Output Directory: [Only specify if non-standard, e.g., "out" for Next.js static export]
258
+ - Source Directory: [if monorepo, the path to the app, e.g., "apps/frontend"]
259
+ - Environment Variables: [from .env.<environment> file pulled in Step 1.1]
260
+ - Component Type: Static Site
261
+ - Node Version: [from package.json engines field, if specified]
262
+ ```
263
+
264
+ **For Web Services (Dynamic Sites):**
265
+ ```
266
+ - Repository: [GitHub/GitLab URL]
267
+ - Branch: [same as Vercel]
268
+ - Region: Choose closest to user's audience
269
+ - Build Command: [Leave empty for buildpack auto-detection, or use custom command from vercel.json if present]
270
+ - Run Command: [Leave empty for buildpack auto-detection, or use custom command from vercel.json if present]
271
+ - Source Directory: [if monorepo, the path to the app, e.g., "apps/api"]
272
+ - Environment Variables: [from .env.<environment> file pulled in Step 1.1]
273
+ - Component Type: Web Service
274
+ - HTTP Port: [Leave as default, buildpack will detect. App must listen on process.env.PORT]
275
+ - Node Version: [from package.json engines field, if specified]
276
+ ```
277
+
278
+ 2. **Include the git commit hash** to ensure deployment matches Vercel's current state
279
+
280
+ 3. **Save the app spec to local filesystem:**
281
+ - Save the generated app spec as `./vercel-migration/<app-name>-migration/app-spec.yaml`
282
+ - This allows the user to manually create the app if automatic deployment fails
283
+
284
+ **Alternative using CLI:** Use `doctl apps create` with an app spec YAML/JSON file
285
+
286
+ 4. **Set up any required databases:**
287
+ - If app uses Vercel Postgres → Create Managed PostgreSQL
288
+ - If app uses Vercel KV → Create Managed ValKey (Redis fork)
289
+ - Update connection strings in environment variables
290
+
291
+ #### 2.6 Configure Domains
292
+
293
+ **Using DigitalOcean MCP (Primary Method):**
294
+
295
+ 1. **Add custom domains to the App Platform app:**
296
+ - For each domain that was in Vercel, add it to the App Platform app
297
+ - App Platform will provide DNS configuration details
298
+ - Both apex domains (example.com) and subdomains (www.example.com) are supported
299
+ - App Platform will automatically provision SSL certificates
300
+
301
+ 2. **Provide DNS update instructions to the user:**
302
+ - Display these instructions as post deployment instruction.
303
+ - List each domain that needs to be updated
304
+ - Ask if the user wants to manage domains through DigitalOcean or keep it self managed (outside of DigitalOcean)
305
+ - If the user wants to Manage domains through DigitalOcean, then display the following message
306
+
307
+ ```md
308
+ ## Move DNS records to DigitalOcean
309
+
310
+ Update your DNS provider with our nameservers.
311
+
312
+ DigitalOcean Nameservers
313
+ - ns1.digitalocean.com
314
+ - ns2.digitalocean.com
315
+ - ns3.digitalocean.com
316
+ ```
317
+ - If the user wants to keep it self managed
318
+ - Get the default_ingress using `get_app` and replace the value in the following section, then display the following message
319
+ ```md
320
+ Add a new CNAME record using the provided alias to point your domain to your DigitalOcean app.
321
+
322
+ ## CNAME alias
323
+ $default_ingress
324
+
325
+ Check if CNAME flattening is supported for root domains. If your provider doesn't support this method, you can create an A record that points to your root domain.
326
+
327
+ ## A Records
328
+ - 162.159.140.98
329
+ - 172.66.0.96
330
+ ```
331
+ - Note: default ingress is only available after a successful deployment.
332
+
333
+ 3. **Important notes for the user:**
334
+ - DNS propagation can take up to 48 hours
335
+ - Wildcard domains (*.example.com) are also supported if needed
336
+
337
+ **Alternative using CLI:** Use `doctl apps update <app-id>` to add domains
338
+
339
+ #### 2.8 Automatic Deployment Troubleshooting
340
+
341
+ **If deployment fails, follow this automatic recovery process:**
342
+
343
+ 1. **Check deployment status:**
344
+ - Use DigitalOcean MCP to get the deployment status
345
+ - Status will be either: ACTIVE, DEPLOYED (success) or FAILED, ERROR (failure)
346
+
347
+ 2. **Fetch deployment logs immediately:**
348
+ - Use DigitalOcean MCP to get build logs for the failed deployment
349
+ - Use DigitalOcean MCP to get runtime logs if available
350
+ - Use DigitalOcean REST API to get logs if MCP doesn't support retriving logs
351
+ - Ask the user to copy and paste the build and deploy error logs if REST api is not available for use
352
+ - Parse the error messages to identify the failure type
353
+
354
+ 3. **Analyze the error and attempt automatic fix:**
355
+
356
+ **For "command not found" or "script not found" errors:**
357
+ - **Automatic fix - prefer buildpack auto-detection:**
358
+ - **First attempt:** Leave build/run commands empty to let buildpack auto-detect
359
+ - This works for most standard frameworks (Next.js, React, Vue, etc.)
360
+ - If this fails, then try checking package.json for custom scripts:
361
+ - Read package.json from the migration folder at `./vercel-migration/<app-name>-migration/package.json`
362
+ - If Vercel used a custom script (check vercel.json), use that specific script
363
+ - If project has custom scripts that differ from framework defaults, specify those
364
+ - Update the app with corrected configuration and redeploy
365
+
366
+ **For "no start command" or run command errors:**
367
+ - **Automatic fix - prefer buildpack auto-detection:**
368
+ - **First attempt:** Leave run command empty to let buildpack auto-detect
369
+ - Buildpack will use framework defaults or package.json "start" script
370
+ - Only specify custom run command if buildpack auto-detection fails
371
+ - Update run command and redeploy
372
+
373
+ **For "output directory not found" errors:**
374
+ - **Automatic fix:**
375
+ - Check common output directories: `build`, `dist`, `out`, `public`, `.next`
376
+ - **Check .gitignore in migration folder** for build output patterns
377
+ - Look in build logs for "writing output to..." messages
378
+ - Update output_dir and redeploy
379
+
380
+ **For "module not found" or dependency errors:**
381
+ - **Check migration folder for lockfile** (package-lock.json or yarn.lock)
382
+ - **Automatic fix options:**
383
+ - If lockfile is in a subdirectory, update source_dir
384
+ - If using private packages, check if registry auth env vars are needed
385
+ - Add NODE_ENV=production if missing
386
+
387
+ **For port/health check failures (service starts but fails health check):**
388
+ - Fetch runtime logs to see what port the app is listening on
389
+ - **Automatic fix:**
390
+ - Check if app is hardcoded to wrong port
391
+ - Ensure PORT environment variable is set
392
+ - Update HTTP port configuration if needed
393
+
394
+ **For monorepo/source directory errors:**
395
+ - **Automatic fix:**
396
+ - Check Vercel config for rootDirectory
397
+ - **Search migration folder** for package.json in subdirectories
398
+ - Look for workspace configuration files (lerna.json, nx.json, etc.)
399
+ - Update source_dir to correct path and redeploy
400
+ - Deploy the mono repo under 1 app, where each repository service is a `service component` or `static site component` depending on the repository service. Ask the user for confirmation.
401
+
402
+ 4. **Apply the fix and redeploy:**
403
+ - Use DigitalOcean MCP to update the app configuration
404
+ - Trigger a new deployment
405
+ - Wait for deployment to complete and check status again
406
+
407
+ 5. **Retry logic:**
408
+ - If first automatic fix fails, fetch logs again and try alternative fix
409
+ - Maximum 3 automatic retry attempts per app
410
+ - After 3 failed attempts, report to user with detailed error and ask for manual intervention
411
+
412
+ 6. **Report fix applied:**
413
+ - Tell the user what error was found
414
+ - Tell the user what fix was applied
415
+ - Show the updated configuration
416
+
417
+ ### Step 3: Validation and Automatic Recovery
418
+
419
+ After migrating the app:
420
+
421
+ 1. **Verify deployment succeeded** in App Platform (use DigitalOcean MCP to check status)
422
+ - Wait for the deployment to complete (this may take several minutes)
423
+ - Check deployment status: should be "ACTIVE" or "DEPLOYED"
424
+
425
+ 2. **If deployment FAILED, trigger automatic troubleshooting:**
426
+ - Follow the process in section 2.8 "Automatic Deployment Troubleshooting"
427
+ - Fetch logs, analyze errors, apply fixes automatically
428
+ - Retry up to 3 times with different fixes
429
+ - **Continue with validation after:**
430
+ - The app is successfully deployed, OR
431
+ - 3 automatic fix attempts have failed and user intervention is needed
432
+
433
+ 3. **If automatic fixes fail after 3 attempts:**
434
+ - Present detailed error information to the user
435
+ - Show what fixes were attempted
436
+ - Ask user for manual configuration input:
437
+ - Correct build command
438
+ - Correct output directory
439
+ - Missing environment variables
440
+ - Source directory path
441
+ - Apply user's corrections and redeploy
442
+
443
+ 4. **Test the deployed application:**
444
+ - Visit the App Platform URL
445
+ - Test critical functionality
446
+ - Test API endpoints if present
447
+ - Check that environment variables are working
448
+
449
+ 5. **Report status to the user:**
450
+ - Indicate the migration result: Success, Auto-Fixed, or Failed
451
+ - If auto-fixed, show what was corrected
452
+ - If failed, show the errors and fixes that were attempted
453
+
454
+ ### Step 4: Migration Summary
455
+
456
+ After completing the migration, provide:
457
+
458
+ 1. **Summary table** with:
459
+ - Original Vercel app name
460
+ - New App Platform app name
461
+ - Status (Success/Auto-Fixed/Failed)
462
+ - If Auto-Fixed: what error was found and what fix was applied
463
+ - App Platform URL
464
+ - Domains that need DNS updates (with status: pending/completed)
465
+ - Any manual steps required
466
+
467
+ 2. **Auto-fix summary** (if automatic fixes were applied):
468
+ - Detail the errors encountered
469
+ - Show the fixes that were successfully applied
470
+ - Highlight any configuration changes made
471
+
472
+ 3. **Domain migration checklist:**
473
+ - List all domains that need DNS updates
474
+ - Provide the specific DNS changes for each domain
475
+ - Remind user to test first, then update DNS
476
+ - Warn about DNS propagation time (up to 48 hours)
477
+
478
+ 3. **Feature gaps to address:**
479
+ - List any Vercel features that couldn't be directly migrated
480
+ - Provide workarounds or alternative solutions
481
+
482
+ 4. **Next steps:**
483
+ - DNS update instructions (with specific records for each domain)
484
+ - Testing recommendations
485
+ - Optimization suggestions
486
+ - Timeline: Remind user to keep Vercel running until DNS fully propagates
487
+
488
+ ## Special Considerations
489
+
490
+ ### Preview Deployments
491
+ - Vercel automatic PR previews are NOT currently available in App Platform
492
+ - **Workaround:** Create a separate dev app with dev environment
493
+ - Recommend using GitHub Actions for preview deployments
494
+
495
+ ### MCP vs CLI Usage
496
+ This migration uses a **hybrid approach** combining both MCP servers and CLI tools:
497
+
498
+ **Vercel:**
499
+ - **Vercel CLI (Required):** Environment variables retrieval, app inspection
500
+ - **Vercel MCP server (Optional):** Project metadata where available
501
+ - **Note:** The Vercel MCP server does NOT provide environment variables
502
+
503
+ **DigitalOcean:**
504
+ - **DigitalOcean MCP server (Primary):** App creation, deployment management, domain configuration
505
+ - **Fallback:** `doctl` CLI or REST API if MCP is unavailable
506
+
507
+ ### Database Migration
508
+ - Creating new databases is straightforward
509
+ - **Data migration** is complex and requires separate tooling
510
+ - Inform user they need to handle data migration separately
511
+
512
+ ### Webhooks
513
+ - Vercel deployment webhooks exist
514
+ - App Platform webhooks are available but may be limited
515
+ - Check if webhooks are needed and configure accordingly
516
+
517
+ ## Error Handling
518
+
519
+ If migration fails for an app:
520
+
521
+ 1. **Capture the error details** from App Platform (via DigitalOcean MCP or dashboard)
522
+ 2. **Analyze common issues:**
523
+
524
+ ### Build Command Errors
525
+ **Symptom:** Build fails with "command not found" or "script not found"
526
+ **Cause:** Custom build command doesn't exist or buildpack couldn't auto-detect
527
+ **Fix:**
528
+ - **Prefer buildpack auto-detection:** Leave build command empty and let buildpack detect framework
529
+ - **If auto-detection fails:**
530
+ - Check vercel.json for custom buildCommand
531
+ - Read package.json from migration folder at `./vercel-migration/<app-name>-migration/package.json`
532
+ - Verify the framework is in dependencies (e.g., "next", "react", "vue")
533
+ - For monorepos: ensure source_dir is correct
534
+ - **Reference:** [App Platform Node.js buildpack docs](https://docs.digitalocean.com/products/app-platform/reference/buildpacks/nodejs/) for auto-detection behavior
535
+
536
+ ### Output Directory Errors (Static Sites)
537
+ **Symptom:** "Output directory not found" or "No files to deploy"
538
+ **Cause:** The output_dir doesn't match what the build produces
539
+ **Fix:**
540
+ - Check framework documentation to find correct output directory
541
+ - **Look in .gitignore in the migration folder** - often lists build output directories
542
+ - Run the build command locally or check framework docs
543
+ - Common output directories:
544
+ - `build` (Create React App, Vite)
545
+ - `dist` (Vue CLI, Vite, Angular)
546
+ - `out` (Next.js static export)
547
+ - `public` (Gatsby, Hugo)
548
+ - `_site` (Jekyll)
549
+ - **Inspect the migration folder** after build to see where files are output
550
+
551
+ ### Run Command Errors (Web Services)
552
+ **Symptom:** Service crashes immediately or "command not found"
553
+ **Cause:** Custom run command is invalid or buildpack couldn't auto-detect
554
+ **Fix:**
555
+ - **Prefer buildpack auto-detection:** Leave run command empty and let buildpack detect framework
556
+ - **Buildpack will automatically use:**
557
+ - Framework-specific start commands (e.g., `next start` for Next.js)
558
+ - The "start" script from package.json if it exists
559
+ - The "main" field from package.json for plain Node.js apps
560
+ - **If auto-detection fails:**
561
+ - Check vercel.json for custom start command
562
+ - Verify app is built before starting (some frameworks need build step)
563
+ - Ensure app listens on `process.env.PORT`
564
+ - **Reference:** [App Platform Node.js buildpack docs](https://docs.digitalocean.com/products/app-platform/reference/buildpacks/nodejs/) for default run behavior
565
+
566
+ ### Port Configuration Errors
567
+ **Symptom:** Service is "unhealthy" or "failed health check"
568
+ **Cause:** App is not listening on the PORT environment variable
569
+ **Fix:**
570
+ - Ensure the app code listens on `process.env.PORT`
571
+ - Update app code if it's hardcoded to a specific port
572
+ - Default ports to check: 3000, 8080, 5000, 4000
573
+
574
+ ### Monorepo/Source Directory Errors
575
+ **Symptom:** "package.json not found" or "Cannot find module"
576
+ **Cause:** The source_dir is incorrect or not set
577
+ **Fix:**
578
+ - Check Vercel's `rootDirectory` setting
579
+ - **Inspect the migration folder** at `./vercel-migration/<app-name>-migration/`
580
+ - Look for workspace configuration in the repo (lerna.json, nx.json, pnpm-workspace.yaml)
581
+ - Find where package.json exists in the repo structure
582
+ - Set source_dir to the path of the specific app (e.g., `apps/web`, `packages/api`)
583
+ - Ensure package.json exists at that path in the migration folder
584
+
585
+ ### Missing Environment Variables
586
+ **Symptom:** Build succeeds but app crashes at runtime, or shows errors about missing config
587
+ **Cause:** Required environment variables weren't migrated
588
+ **Fix:**
589
+ - **Check .env.example or .env.sample in the migration folder** at `./vercel-migration/<app-name>-migration/`
590
+ - Check the app's documentation (README.md in cloned repo)
591
+ - Look for required variables in the code
592
+ - Add missing variables to App Platform
593
+ - Common missing vars: DATABASE_URL, API_KEY, NEXT_PUBLIC_*, etc.
594
+
595
+ ### Dependency Installation Errors
596
+ **Symptom:** "Cannot find module" or "npm install failed"
597
+ **Cause:** Missing dependencies, lockfile issues, or version conflicts
598
+ **Fix:**
599
+ - **Check migration folder** at `./vercel-migration/<app-name>-migration/` for package-lock.json or yarn.lock
600
+ - Ensure lockfile is in the correct directory (root or source_dir)
601
+ - Check package.json for "engines" requirements
602
+ - Verify Node.js version compatibility (reference App Platform buildpack docs)
603
+ - May need to add environment variables for private npm registries
604
+ - If using workspaces (monorepo), ensure workspace configuration is correct
605
+
606
+ 3. **Suggest fixes** based on error type
607
+ 4. **Ask user** if they want to retry with corrections
608
+ 5. **Update the app configuration** and redeploy
609
+
610
+ ## User Communication
611
+
612
+ Throughout the migration:
613
+ - **Be transparent** about what features can and cannot be migrated
614
+ - **Warn early** about features requiring code changes (middleware, edge functions)
615
+ - **Provide alternatives** for unsupported features
616
+ - **Estimate timeframes** - typical migration should complete in under 30 minutes per app
617
+ - **Explain the process:**
618
+ - Migration folders will be created at `./vercel-migration/<app-name>-migration/` for each app
619
+ - App specs will be saved for each app as backup
620
+ - App Platform buildpack documentation will be referenced for best practices
621
+ - **Explain automatic recovery** - let users know that if deployments fail, you will automatically analyze logs and attempt fixes
622
+ - **Show your work** - when automatic fixes are applied, explain what error was found and how it was fixed
623
+ - **Confirm** before making changes that could affect production
624
+ - **Keep user informed** during automatic retry attempts (e.g., "Deployment failed, analyzing logs and attempting fix 1 of 3...")
625
+
626
+ ## Final Checklist
627
+
628
+ Before marking migration complete:
629
+
630
+ - [ ] The app has been created in App Platform
631
+ - [ ] Deployment is successful (either on first try or after automatic fixes)
632
+ - [ ] Automatic troubleshooting was attempted if deployment failed
633
+ - [ ] User has been informed of any automatic fixes that were applied
634
+ - [ ] Environment variables have been transferred from the .env file pulled in Step 1.1
635
+ - [ ] Build configurations match validated settings from repository inspection
636
+ - [ ] App spec has been saved to `./vercel-migration/<app-name>-migration/app-spec.yaml`
637
+ - [ ] Custom domains have been added to the App Platform app
638
+ - [ ] User has received DNS update instructions for each domain
639
+ - [ ] User understands to test before updating DNS
640
+ - [ ] User has been informed about unsupported features
641
+ - [ ] User has testing instructions
642
+ - [ ] User knows how to rollback if needed
643
+ - [ ] User knows to keep Vercel running until DNS propagates
644
+ - [ ] Summary includes the app's status (Success/Auto-Fixed/Failed) with details
645
+ - [ ] If successful: provide app name, URL (default ingress), and dashboard URL (`https://cloud.digitalocean.com/apps/$app_id`)
646
+ - [ ] If failed: tell the user to create a support ticket and link to DigitalOcean's documentation
647
+ - [ ] Remind user they can repeat this process for additional apps they want to migrate
648
+ ---
649
+
650
+ **Remember:** This is a migration assistant role. Always prioritize user confirmation for critical decisions and be clear about what can and cannot be automatically migrated.
651
+
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitalocean/mcp",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "DigitalOcean MCP Implementation,",
5
5
  "author": "DigitalOcean",
6
6
  "homepage": "https://github.com/digitalocean-labs/mcp-digitalocean?tab=readme-ov-file#mcp-digitalocean-integration",
@@ -11,6 +11,12 @@
11
11
  "model-context-protocol"
12
12
  ],
13
13
  "bin": "./index.js",
14
+ "files": [
15
+ "index.js",
16
+ "dist/",
17
+ "apps/",
18
+ "README.md"
19
+ ],
14
20
  "scripts": {
15
21
  "mcp-golang": "node ./index.js"
16
22
  },