delimit-cli 3.11.7 → 3.11.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # `</>` Delimit
2
2
 
3
- One workspace for every AI coding assistant. Switch models, not context.
3
+ Unify Claude Code, Codex, Cursor, and Gemini CLI with persistent context, governance, and multi-model debate.
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/delimit-cli)](https://www.npmjs.com/package/delimit-cli)
6
6
  [![GitHub Action](https://img.shields.io/badge/GitHub%20Action-v1.6.0-blue)](https://github.com/marketplace/actions/delimit-api-governance)
@@ -68,26 +68,40 @@ npx delimit-cli setup
68
68
 
69
69
  No API keys. No account. Installs in 10 seconds.
70
70
 
71
- ### CLI commands
71
+ ### CLI commands (all free)
72
72
 
73
73
  ```bash
74
- npx delimit-cli lint api/openapi.yaml # Check for breaking changes
74
+ npx delimit-cli setup # Install into all AI assistants
75
+ npx delimit-cli setup --dry-run # Preview changes first
76
+ npx delimit-cli lint api/openapi.yaml # Check for breaking changes
75
77
  npx delimit-cli diff old.yaml new.yaml # Compare two specs
76
78
  npx delimit-cli explain old.yaml new.yaml # Generate migration guide
77
79
  npx delimit-cli init --preset strict # Initialize policies
78
80
  npx delimit-cli doctor # Check setup health
81
+ npx delimit-cli uninstall --dry-run # Preview removal
79
82
  ```
80
83
 
81
84
  ### What the MCP toolkit adds
82
85
 
83
- When installed into your AI coding assistant, Delimit provides:
86
+ When installed into your AI coding assistant, Delimit provides tools across two tiers:
87
+
88
+ #### Free (no account needed)
84
89
 
85
90
  - **API governance** -- lint, diff, policy enforcement, semver classification
86
- - **Test verification** -- confirms tests actually ran, measures coverage
87
- - **Security audit** -- scans dependencies, detects secrets and anti-patterns
88
- - **Persistent ledger** -- tracks tasks across sessions, auto-creates items from governance
89
- - **Multi-model consensus** -- Grok, Gemini, and Codex debate until they agree
91
+ - **Persistent ledger** -- track tasks across sessions, shared between all AI assistants
90
92
  - **Zero-spec extraction** -- generate OpenAPI specs from FastAPI, Express, or NestJS source
93
+ - **Project scan** -- auto-detect specs, frameworks, security issues, and tests
94
+ - **Quickstart** -- guided first-run that proves value in 60 seconds
95
+
96
+ #### Pro
97
+
98
+ - **Multi-model deliberation** -- Grok, Gemini, and Codex debate until they agree
99
+ - **Security audit** -- dependency scanning, secret detection, SAST analysis
100
+ - **Test verification** -- confirms tests ran, measures coverage, generates new tests
101
+ - **Memory & vault** -- persistent context and encrypted secrets across sessions
102
+ - **Evidence collection** -- governance audit trail for compliance
103
+ - **Deploy pipeline** -- governed build, publish, and rollback
104
+ - **OS layer** -- agent identity, execution plans, approval gates
91
105
 
92
106
  ---
93
107
 
@@ -149,7 +163,7 @@ rules:
149
163
  - [delimit.ai](https://delimit.ai) -- homepage
150
164
  - [Docs](https://delimit.ai/docs) -- full documentation
151
165
  - [GitHub Action](https://github.com/marketplace/actions/delimit-api-governance) -- Marketplace listing
152
- - [Quickstart](https://github.com/delimit-ai/delimit-quickstart) -- try it in 2 minutes
166
+ - [Quickstart](https://github.com/delimit-ai/delimit-mcp-server) -- try it in 2 minutes
153
167
  - [npm](https://www.npmjs.com/package/delimit-cli) -- CLI package
154
168
  - [Pricing](https://delimit.ai/pricing) -- free tier + Pro
155
169
 
@@ -443,77 +443,181 @@ program
443
443
  // Uninstall command
444
444
  program
445
445
  .command('uninstall')
446
- .description('Remove Delimit governance')
446
+ .description('Remove Delimit governance from all AI assistants')
447
+ .option('--dry-run', 'Preview what would be removed without making changes')
448
+ .action(async (options) => {
449
+ const dryRun = options.dryRun;
450
+ const HOME = process.env.HOME;
451
+ const backupDir = path.join(HOME, '.delimit', 'backups', `uninstall-${Date.now()}`);
452
+ const changes = [];
447
453
 
448
- .action(async () => {
449
- const { confirm } = await inquirer.prompt([{
450
- type: 'confirm',
451
- name: 'confirm',
452
- message: 'This will remove all Delimit governance. Continue?',
453
- default: false
454
- }]);
455
-
456
- if (!confirm) return;
457
-
458
- // Remove Git hooks
454
+ if (dryRun) {
455
+ console.log(chalk.yellow.bold('\nDRY RUN No changes will be made\n'));
456
+ }
457
+
458
+ // Collect all changes first
459
+ // 1. Git hooks
459
460
  try {
460
- execSync('git config --global --unset core.hooksPath');
461
- console.log(chalk.green('✓ Removed Git hooks'));
461
+ const hooksPath = execSync('git config --global --get core.hooksPath 2>/dev/null', { encoding: 'utf8' }).trim();
462
+ if (hooksPath && hooksPath.includes('delimit')) {
463
+ changes.push({ target: 'Git global hooks', action: 'unset core.hooksPath', current: hooksPath });
464
+ }
462
465
  } catch (e) {}
463
-
464
- // Remove from PATH
466
+
467
+ // 2. Shell profiles
465
468
  const profiles = ['.bashrc', '.zshrc', '.profile'];
466
469
  profiles.forEach(profile => {
467
- const profilePath = path.join(process.env.HOME, profile);
470
+ const profilePath = path.join(HOME, profile);
468
471
  if (fs.existsSync(profilePath)) {
469
- let content = fs.readFileSync(profilePath, 'utf8');
470
- content = content.replace(/# Delimit Governance Layer[\s\S]*?fi\n/g, '');
471
- fs.writeFileSync(profilePath, content);
472
+ const content = fs.readFileSync(profilePath, 'utf8');
473
+ if (content.includes('# Delimit Governance Layer')) {
474
+ changes.push({ target: `~/${profile}`, action: 'Remove Delimit PATH block' });
475
+ }
472
476
  }
473
477
  });
474
- console.log(chalk.green('✓ Removed PATH modifications'));
475
478
 
476
- // Remove MCP config from Claude Code
477
- const mcpPath = path.join(process.env.HOME, '.mcp.json');
479
+ // 3. Claude Code MCP
480
+ const mcpPath = path.join(HOME, '.mcp.json');
478
481
  if (fs.existsSync(mcpPath)) {
479
482
  try {
480
483
  const mcp = JSON.parse(fs.readFileSync(mcpPath, 'utf8'));
481
484
  if (mcp.mcpServers && mcp.mcpServers.delimit) {
482
- delete mcp.mcpServers.delimit;
483
- fs.writeFileSync(mcpPath, JSON.stringify(mcp, null, 2));
484
- console.log(chalk.green('✓ Removed from Claude Code MCP config'));
485
+ changes.push({ target: '~/.mcp.json', action: 'Remove delimit MCP entry' });
485
486
  }
486
487
  } catch (e) {}
487
488
  }
488
489
 
489
- // Remove from Codex config
490
- const codexConfig = path.join(process.env.HOME, '.codex', 'config.json');
490
+ // 4. Codex config
491
+ const codexConfig = path.join(HOME, '.codex', 'config.json');
492
+ const codexToml = path.join(HOME, '.codex', 'config.toml');
491
493
  if (fs.existsSync(codexConfig)) {
492
494
  try {
493
495
  const cfg = JSON.parse(fs.readFileSync(codexConfig, 'utf8'));
494
496
  if (cfg.mcpServers && cfg.mcpServers.delimit) {
495
- delete cfg.mcpServers.delimit;
496
- fs.writeFileSync(codexConfig, JSON.stringify(cfg, null, 2));
497
- console.log(chalk.green('✓ Removed from Codex MCP config'));
497
+ changes.push({ target: '~/.codex/config.json', action: 'Remove delimit MCP entry' });
498
+ }
499
+ } catch (e) {}
500
+ }
501
+ if (fs.existsSync(codexToml)) {
502
+ try {
503
+ const toml = fs.readFileSync(codexToml, 'utf8');
504
+ if (toml.includes('[mcp_servers.delimit]')) {
505
+ changes.push({ target: '~/.codex/config.toml', action: 'Remove [mcp_servers.delimit] block' });
498
506
  }
499
507
  } catch (e) {}
500
508
  }
501
509
 
502
- // Remove from Gemini CLI config
503
- const geminiConfig = path.join(process.env.HOME, '.gemini', 'settings.json');
510
+ // 5. Cursor config
511
+ const cursorConfig = path.join(HOME, '.cursor', 'mcp.json');
512
+ if (fs.existsSync(cursorConfig)) {
513
+ try {
514
+ const cfg = JSON.parse(fs.readFileSync(cursorConfig, 'utf8'));
515
+ if (cfg.mcpServers && cfg.mcpServers.delimit) {
516
+ changes.push({ target: '~/.cursor/mcp.json', action: 'Remove delimit MCP entry' });
517
+ }
518
+ } catch (e) {}
519
+ }
520
+
521
+ // 6. Gemini CLI config
522
+ const geminiConfig = path.join(HOME, '.gemini', 'settings.json');
504
523
  if (fs.existsSync(geminiConfig)) {
505
524
  try {
506
525
  const cfg = JSON.parse(fs.readFileSync(geminiConfig, 'utf8'));
507
526
  if (cfg.mcpServers && cfg.mcpServers.delimit) {
527
+ changes.push({ target: '~/.gemini/settings.json', action: 'Remove delimit MCP entry' });
528
+ }
529
+ } catch (e) {}
530
+ }
531
+
532
+ // 7. Shims
533
+ const shimsDir = path.join(HOME, '.delimit', 'shims');
534
+ if (fs.existsSync(shimsDir)) {
535
+ changes.push({ target: '~/.delimit/shims/', action: 'Remove CLI shims directory' });
536
+ }
537
+
538
+ if (changes.length === 0) {
539
+ console.log(chalk.green('\nNo Delimit integrations found. Nothing to remove.\n'));
540
+ return;
541
+ }
542
+
543
+ // Show what will be changed
544
+ console.log(chalk.bold('\nThe following changes will be made:\n'));
545
+ changes.forEach((c, i) => {
546
+ console.log(` ${i + 1}. ${chalk.cyan(c.target)} — ${c.action}`);
547
+ });
548
+ console.log('');
549
+
550
+ if (dryRun) {
551
+ console.log(chalk.yellow('Run without --dry-run to apply these changes.\n'));
552
+ return;
553
+ }
554
+
555
+ const { confirm } = await inquirer.prompt([{
556
+ type: 'confirm',
557
+ name: 'confirm',
558
+ message: `Apply ${changes.length} changes? Backups will be saved to ~/.delimit/backups/`,
559
+ default: false
560
+ }]);
561
+
562
+ if (!confirm) return;
563
+
564
+ // Create backup directory
565
+ fs.mkdirSync(backupDir, { recursive: true });
566
+
567
+ // Execute changes with backups
568
+ // Git hooks
569
+ try {
570
+ execSync('git config --global --unset core.hooksPath 2>/dev/null');
571
+ console.log(chalk.green('✓ Removed Git hooks'));
572
+ } catch (e) {}
573
+
574
+ // Shell profiles
575
+ profiles.forEach(profile => {
576
+ const profilePath = path.join(HOME, profile);
577
+ if (fs.existsSync(profilePath)) {
578
+ let content = fs.readFileSync(profilePath, 'utf8');
579
+ if (content.includes('# Delimit Governance Layer')) {
580
+ fs.copyFileSync(profilePath, path.join(backupDir, profile));
581
+ content = content.replace(/# Delimit Governance Layer[\s\S]*?fi\n/g, '');
582
+ fs.writeFileSync(profilePath, content);
583
+ }
584
+ }
585
+ });
586
+ console.log(chalk.green('✓ Removed PATH modifications'));
587
+
588
+ // Helper to remove delimit from JSON config
589
+ function removeFromJsonConfig(configPath, label) {
590
+ if (!fs.existsSync(configPath)) return;
591
+ try {
592
+ const cfg = JSON.parse(fs.readFileSync(configPath, 'utf8'));
593
+ if (cfg.mcpServers && cfg.mcpServers.delimit) {
594
+ fs.copyFileSync(configPath, path.join(backupDir, path.basename(configPath) + '.' + label));
508
595
  delete cfg.mcpServers.delimit;
509
- fs.writeFileSync(geminiConfig, JSON.stringify(cfg, null, 2));
510
- console.log(chalk.green('✓ Removed from Gemini CLI MCP config'));
596
+ fs.writeFileSync(configPath, JSON.stringify(cfg, null, 2));
597
+ console.log(chalk.green(`✓ Removed from ${label}`));
598
+ }
599
+ } catch (e) {}
600
+ }
601
+
602
+ removeFromJsonConfig(mcpPath, 'claude-code');
603
+ removeFromJsonConfig(codexConfig, 'codex');
604
+ removeFromJsonConfig(cursorConfig, 'cursor');
605
+ removeFromJsonConfig(geminiConfig, 'gemini');
606
+
607
+ // Handle Codex TOML config
608
+ if (fs.existsSync(codexToml)) {
609
+ try {
610
+ let toml = fs.readFileSync(codexToml, 'utf8');
611
+ if (toml.includes('[mcp_servers.delimit]')) {
612
+ fs.copyFileSync(codexToml, path.join(backupDir, 'config.toml.codex'));
613
+ toml = toml.replace(/\n\[mcp_servers\.delimit\][\s\S]*?(?=\n\[|$)/, '');
614
+ fs.writeFileSync(codexToml, toml);
615
+ console.log(chalk.green('✓ Removed from Codex TOML config'));
511
616
  }
512
617
  } catch (e) {}
513
618
  }
514
619
 
515
620
  // Remove shims
516
- const shimsDir = path.join(process.env.HOME, '.delimit', 'shims');
517
621
  if (fs.existsSync(shimsDir)) {
518
622
  try {
519
623
  fs.rmSync(shimsDir, { recursive: true });
@@ -522,6 +626,7 @@ program
522
626
  }
523
627
 
524
628
  console.log(chalk.green('\n Delimit has been completely removed.'));
629
+ console.log(chalk.gray(` Backups saved to: ${backupDir}`));
525
630
  console.log(chalk.gray(' Your data in ~/.delimit/ has been preserved.'));
526
631
  console.log(chalk.gray(' Delete it manually if you want: rm -rf ~/.delimit\n'));
527
632
  });
@@ -1239,8 +1344,54 @@ program
1239
1344
  // Setup command — install MCP governance tools into Claude Code
1240
1345
  program
1241
1346
  .command('setup')
1242
- .description('Install Delimit MCP governance tools into Claude Code')
1243
- .action(() => {
1347
+ .description('Install Delimit MCP governance tools into all AI assistants')
1348
+ .option('--dry-run', 'Preview config changes without writing anything')
1349
+ .action((options) => {
1350
+ if (options.dryRun) {
1351
+ const os = require('os');
1352
+ const HOME = os.homedir();
1353
+ console.log(chalk.yellow.bold('\nDRY RUN — Previewing setup changes\n'));
1354
+
1355
+ const configs = [
1356
+ { name: 'Claude Code', path: path.join(HOME, '.mcp.json'), key: 'mcpServers.delimit' },
1357
+ { name: 'Codex', path: path.join(HOME, '.codex', 'config.toml'), key: '[mcp_servers.delimit]' },
1358
+ { name: 'Cursor', path: path.join(HOME, '.cursor', 'mcp.json'), key: 'mcpServers.delimit' },
1359
+ { name: 'Gemini CLI', path: path.join(HOME, '.gemini', 'settings.json'), key: 'mcpServers.delimit' },
1360
+ ];
1361
+
1362
+ console.log(chalk.bold('Files that will be created or modified:\n'));
1363
+ console.log(` ${chalk.cyan('~/.delimit/')} — Delimit home directory (server, ledger, config)`);
1364
+
1365
+ configs.forEach(cfg => {
1366
+ const exists = fs.existsSync(cfg.path);
1367
+ let hasDelimit = false;
1368
+ if (exists) {
1369
+ try {
1370
+ const content = fs.readFileSync(cfg.path, 'utf8');
1371
+ hasDelimit = content.includes('delimit');
1372
+ } catch {}
1373
+ }
1374
+ const relPath = cfg.path.replace(HOME, '~');
1375
+ if (hasDelimit) {
1376
+ console.log(` ${chalk.green('✓')} ${relPath} — ${cfg.name} already configured`);
1377
+ } else if (exists) {
1378
+ console.log(` ${chalk.yellow('+')} ${relPath} — Will add delimit entry to ${cfg.name}`);
1379
+ } else {
1380
+ const dirExists = fs.existsSync(path.dirname(cfg.path));
1381
+ if (dirExists || cfg.name === 'Claude Code') {
1382
+ console.log(` ${chalk.yellow('+')} ${relPath} — Will create for ${cfg.name}`);
1383
+ } else {
1384
+ console.log(` ${chalk.dim('—')} ${relPath} — ${cfg.name} not installed, skipping`);
1385
+ }
1386
+ }
1387
+ });
1388
+
1389
+ console.log(`\n ${chalk.cyan('~/.delimit/venv/')} — Isolated Python virtual environment`);
1390
+ console.log(` ${chalk.cyan('~/.delimit/ledger/')} — Persistent task ledger`);
1391
+
1392
+ console.log(chalk.yellow('\nRun without --dry-run to apply these changes.\n'));
1393
+ return;
1394
+ }
1244
1395
  require('./delimit-setup.js');
1245
1396
  });
1246
1397
 
@@ -570,8 +570,97 @@ echo "[Delimit] ${toolName} not found" >&2; exit 127
570
570
  }
571
571
  log('');
572
572
 
573
- // Step 8: Done
574
- step(8, 'Done!');
573
+ // Step 8: Post-install config validation (LED-098)
574
+ step(8, 'Validating config integrity...');
575
+
576
+ let validationIssues = 0;
577
+ const configFiles = [
578
+ { path: MCP_CONFIG, name: 'Claude Code', format: 'json' },
579
+ { path: CODEX_CONFIG, name: 'Codex', format: 'toml' },
580
+ { path: CURSOR_CONFIG, name: 'Cursor', format: 'json' },
581
+ { path: GEMINI_CONFIG, name: 'Gemini CLI', format: 'json' },
582
+ ];
583
+
584
+ for (const cfg of configFiles) {
585
+ if (!fs.existsSync(cfg.path)) continue;
586
+ try {
587
+ const content = fs.readFileSync(cfg.path, 'utf-8');
588
+ if (cfg.format === 'json') {
589
+ const parsed = JSON.parse(content);
590
+ const servers = parsed.mcpServers || {};
591
+ const delimitEntry = servers.delimit;
592
+ if (delimitEntry) {
593
+ // Validate the delimit entry points to our server
594
+ const cmd = delimitEntry.command || '';
595
+ const args = delimitEntry.args || [];
596
+ const serverArg = args[0] || '';
597
+
598
+ // Check command is python (not arbitrary binary)
599
+ if (!cmd.includes('python') && !cmd.includes('venv')) {
600
+ log(` ${yellow('⚠')} ${cfg.name}: delimit command is not python: ${cmd}`);
601
+ validationIssues++;
602
+ }
603
+ // Check server arg points to our server file
604
+ if (serverArg && !serverArg.includes('delimit') && !serverArg.includes('server.py')) {
605
+ log(` ${yellow('⚠')} ${cfg.name}: server path looks unexpected: ${serverArg}`);
606
+ validationIssues++;
607
+ }
608
+ // Check no unexpected MCP servers were added
609
+ const knownServers = new Set(['delimit', 'codex', 'gemini', 'gemini-vertexai', 'filesystem', 'brave-search', 'fetch', 'memory', 'puppeteer', 'github', 'slack', 'datadog']);
610
+ for (const serverName of Object.keys(servers)) {
611
+ if (!knownServers.has(serverName) && !serverName.includes('delimit')) {
612
+ // Not necessarily bad, just note it
613
+ }
614
+ }
615
+ }
616
+ } else if (cfg.format === 'toml') {
617
+ // Basic TOML check — ensure delimit entry has correct structure
618
+ if (content.includes('[mcp_servers.delimit]')) {
619
+ if (!content.match(/command\s*=\s*"[^"]*python[^"]*"/)) {
620
+ log(` ${yellow('⚠')} ${cfg.name}: delimit command may not be python`);
621
+ validationIssues++;
622
+ }
623
+ }
624
+ }
625
+ log(` ${green('✓')} ${cfg.name} config valid`);
626
+ } catch (e) {
627
+ log(` ${yellow('⚠')} ${cfg.name}: could not validate — ${e.message}`);
628
+ validationIssues++;
629
+ }
630
+ }
631
+
632
+ // Verify server file exists and is our code
633
+ if (fs.existsSync(actualServer)) {
634
+ const serverContent = fs.readFileSync(actualServer, 'utf-8').substring(0, 500);
635
+ if (serverContent.includes('delimit') || serverContent.includes('Delimit')) {
636
+ log(` ${green('✓')} Server file verified`);
637
+ } else {
638
+ log(` ${yellow('⚠')} Server file at ${actualServer} does not appear to be Delimit`);
639
+ validationIssues++;
640
+ }
641
+ }
642
+
643
+ // Check directory permissions
644
+ try {
645
+ const stat = fs.statSync(DELIMIT_HOME);
646
+ const mode = (stat.mode & 0o777).toString(8);
647
+ if (mode.endsWith('7') || mode.endsWith('6')) {
648
+ log(` ${yellow('⚠')} ~/.delimit/ is world-readable/writable (${mode}) — consider: chmod 700 ~/.delimit`);
649
+ validationIssues++;
650
+ } else {
651
+ log(` ${green('✓')} Directory permissions OK`);
652
+ }
653
+ } catch {}
654
+
655
+ if (validationIssues === 0) {
656
+ log(` ${green('✓')} All config validations passed`);
657
+ } else {
658
+ log(` ${yellow(`⚠ ${validationIssues} issue(s) found — review above`)}`);
659
+ }
660
+ log('');
661
+
662
+ // Step 9: Done
663
+ step(9, 'Done!');
575
664
  log('');
576
665
  log(` ${green('Delimit is installed.')} Your AI now has persistent memory and governance.`);
577
666
  log('');
@@ -598,7 +687,7 @@ echo "[Delimit] ${toolName} not found" >&2; exit 127
598
687
  log(` ${dim('Agents:')} ${AGENTS_DIR}`);
599
688
  log('');
600
689
  log(` ${dim('Docs:')} https://delimit.ai/docs`);
601
- log(` ${dim('GitHub:')} https://github.com/delimit-ai/delimit`);
690
+ log(` ${dim('GitHub:')} https://github.com/delimit-ai/delimit-mcp-server`);
602
691
  log('');
603
692
  }
604
693
 
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "delimit-cli",
3
- "mcpName": "io.github.delimit-ai/delimit",
4
- "version": "3.11.7",
5
- "description": "One workspace for every AI coding assistant. Tasks, memory, and governance carry between Claude Code, Codex, and Gemini CLI.",
3
+ "mcpName": "io.github.delimit-ai/delimit-mcp-server",
4
+ "version": "3.11.9",
5
+ "description": "Unify Claude Code, Codex, Cursor, and Gemini CLI with persistent context, governance, and multi-model debate.",
6
6
  "main": "index.js",
7
7
  "files": [
8
8
  "bin/",
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "scripts": {
21
21
  "postinstall": "echo '\\nRun: npx delimit-cli setup\\n'",
22
- "test": "node --test tests/setup-onboarding.test.js"
22
+ "test": "node --test tests/setup-onboarding.test.js tests/setup-matrix.test.js"
23
23
  },
24
24
  "keywords": [
25
25
  "openapi",
@@ -57,7 +57,7 @@
57
57
  "homepage": "https://delimit.ai",
58
58
  "repository": {
59
59
  "type": "git",
60
- "url": "https://github.com/delimit-ai/delimit.git"
60
+ "url": "https://github.com/delimit-ai/delimit-mcp-server.git"
61
61
  },
62
62
  "dependencies": {
63
63
  "axios": "^1.0.0",
package/server.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
- "name": "io.github.delimit-ai/delimit",
4
- "title": "Delimit",
5
- "description": "One workspace for every AI coding assistant. Shared tasks, memory, and governance.",
3
+ "name": "io.github.delimit-ai/delimit-mcp-server",
4
+ "title": "Delimit MCP Server",
5
+ "description": "Unify Claude Code, Codex, Cursor, and Gemini CLI with persistent context, governance, and multi-model debate.",
6
6
  "repository": {
7
- "url": "https://github.com/delimit-ai/delimit",
7
+ "url": "https://github.com/delimit-ai/delimit-mcp-server",
8
8
  "source": "github"
9
9
  },
10
- "version": "3.11.7",
10
+ "version": "3.11.8",
11
11
  "websiteUrl": "https://delimit.ai",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "delimit-cli",
16
- "version": "3.11.7",
16
+ "version": "3.11.8",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  }