@comfanion/workflow 4.36.29 → 4.36.31
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/bin/cli.js +276 -20
- package/package.json +1 -1
- package/src/build-info.json +2 -2
- package/src/opencode/mcp/catalog.yaml +55 -90
package/bin/cli.js
CHANGED
|
@@ -259,14 +259,14 @@ program
|
|
|
259
259
|
{
|
|
260
260
|
type: 'checkbox',
|
|
261
261
|
name: 'mcp_servers',
|
|
262
|
-
message: 'Select MCP servers to enable:',
|
|
262
|
+
message: 'Select MCP servers to enable (writes to opencode.json):',
|
|
263
263
|
choices: [
|
|
264
264
|
{ name: 'context7 - Library docs for npm, Go, Python (recommended)', value: 'context7', checked: true },
|
|
265
|
+
{ name: 'grep - Search code examples from GitHub', value: 'grep', checked: false },
|
|
265
266
|
{ name: 'sequential-thinking - Enhanced reasoning for complex tasks', value: 'sequential-thinking', checked: false },
|
|
266
267
|
{ name: 'playwright - Browser automation and testing', value: 'playwright', checked: false },
|
|
267
|
-
{ name: '
|
|
268
|
-
{ name: '
|
|
269
|
-
{ name: 'github - GitHub repos, issues, PRs', value: 'github', checked: false },
|
|
268
|
+
{ name: 'github - GitHub repos, issues, PRs (needs GITHUB_TOKEN)', value: 'github', checked: false },
|
|
269
|
+
{ name: 'sentry - Query Sentry issues and errors (OAuth)', value: 'sentry', checked: false },
|
|
270
270
|
{ name: 'postgres - PostgreSQL database queries', value: 'postgres', checked: false }
|
|
271
271
|
]
|
|
272
272
|
}
|
|
@@ -504,26 +504,40 @@ program
|
|
|
504
504
|
}
|
|
505
505
|
}
|
|
506
506
|
|
|
507
|
-
// Save MCP server selections
|
|
507
|
+
// Save MCP server selections to opencode.json
|
|
508
508
|
if (config.mcp_servers && config.mcp_servers.length > 0) {
|
|
509
|
-
spinner.text = 'Configuring MCP servers...';
|
|
510
|
-
const
|
|
509
|
+
spinner.text = 'Configuring MCP servers in opencode.json...';
|
|
510
|
+
const opencodeJsonPath = path.join(process.cwd(), 'opencode.json');
|
|
511
511
|
|
|
512
|
-
//
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
512
|
+
// MCP catalog with server configs
|
|
513
|
+
const mcpCatalog = {
|
|
514
|
+
'context7': { type: 'remote', url: 'https://mcp.context7.com/mcp' },
|
|
515
|
+
'grep': { type: 'remote', url: 'https://mcp.grep.app' },
|
|
516
|
+
'sentry': { type: 'remote', url: 'https://mcp.sentry.dev/mcp', oauth: {} },
|
|
517
|
+
'sequential-thinking': { type: 'local', command: ['npx', '-y', '@anthropic/mcp-sequential-thinking'] },
|
|
518
|
+
'playwright': { type: 'local', command: ['npx', '-y', '@anthropic/mcp-playwright'] },
|
|
519
|
+
'github': { type: 'local', command: ['npx', '-y', '@anthropic/mcp-github'] },
|
|
520
|
+
'postgres': { type: 'local', command: ['npx', '-y', '@anthropic/mcp-postgres'] }
|
|
521
|
+
};
|
|
522
|
+
|
|
523
|
+
// Read existing opencode.json or create new
|
|
524
|
+
let opencodeConfig = { "$schema": "https://opencode.ai/config.json" };
|
|
525
|
+
try {
|
|
526
|
+
if (await fs.pathExists(opencodeJsonPath)) {
|
|
527
|
+
opencodeConfig = JSON.parse(await fs.readFile(opencodeJsonPath, 'utf8'));
|
|
528
|
+
}
|
|
529
|
+
} catch {}
|
|
530
|
+
|
|
531
|
+
// Add MCP servers
|
|
532
|
+
if (!opencodeConfig.mcp) opencodeConfig.mcp = {};
|
|
533
|
+
for (const serverId of config.mcp_servers) {
|
|
534
|
+
if (mcpCatalog[serverId]) {
|
|
535
|
+
opencodeConfig.mcp[serverId] = { ...mcpCatalog[serverId], enabled: true };
|
|
524
536
|
}
|
|
525
|
-
await fs.writeFile(mcpEnabledPath, mcpContent);
|
|
526
537
|
}
|
|
538
|
+
|
|
539
|
+
await fs.writeFile(opencodeJsonPath, JSON.stringify(opencodeConfig, null, 2) + '\n');
|
|
540
|
+
console.log(chalk.green(`✅ MCP servers added to opencode.json`));
|
|
527
541
|
}
|
|
528
542
|
|
|
529
543
|
// Install plugin dependencies
|
|
@@ -1235,4 +1249,246 @@ program
|
|
|
1235
1249
|
}
|
|
1236
1250
|
});
|
|
1237
1251
|
|
|
1252
|
+
// =============================================================================
|
|
1253
|
+
// MCP COMMANDS
|
|
1254
|
+
// =============================================================================
|
|
1255
|
+
|
|
1256
|
+
// MCP catalog with server configs
|
|
1257
|
+
const MCP_CATALOG = {
|
|
1258
|
+
'context7': {
|
|
1259
|
+
name: 'Context7',
|
|
1260
|
+
description: 'Library docs for npm, Go, Python',
|
|
1261
|
+
type: 'remote',
|
|
1262
|
+
url: 'https://mcp.context7.com/mcp',
|
|
1263
|
+
recommended: true
|
|
1264
|
+
},
|
|
1265
|
+
'grep': {
|
|
1266
|
+
name: 'Grep by Vercel',
|
|
1267
|
+
description: 'Search code examples from GitHub',
|
|
1268
|
+
type: 'remote',
|
|
1269
|
+
url: 'https://mcp.grep.app',
|
|
1270
|
+
recommended: false
|
|
1271
|
+
},
|
|
1272
|
+
'sentry': {
|
|
1273
|
+
name: 'Sentry',
|
|
1274
|
+
description: 'Query Sentry issues and errors',
|
|
1275
|
+
type: 'remote',
|
|
1276
|
+
url: 'https://mcp.sentry.dev/mcp',
|
|
1277
|
+
oauth: {},
|
|
1278
|
+
recommended: false
|
|
1279
|
+
},
|
|
1280
|
+
'sequential-thinking': {
|
|
1281
|
+
name: 'Sequential Thinking',
|
|
1282
|
+
description: 'Enhanced reasoning for complex tasks',
|
|
1283
|
+
type: 'local',
|
|
1284
|
+
command: ['npx', '-y', '@anthropic/mcp-sequential-thinking'],
|
|
1285
|
+
recommended: true
|
|
1286
|
+
},
|
|
1287
|
+
'playwright': {
|
|
1288
|
+
name: 'Playwright',
|
|
1289
|
+
description: 'Browser automation and testing',
|
|
1290
|
+
type: 'local',
|
|
1291
|
+
command: ['npx', '-y', '@anthropic/mcp-playwright'],
|
|
1292
|
+
recommended: false
|
|
1293
|
+
},
|
|
1294
|
+
'chrome-devtools': {
|
|
1295
|
+
name: 'Chrome DevTools',
|
|
1296
|
+
description: 'Chrome debugging, DOM, network, console',
|
|
1297
|
+
type: 'local',
|
|
1298
|
+
command: ['npx', '-y', 'chrome-devtools-mcp@latest'],
|
|
1299
|
+
recommended: false
|
|
1300
|
+
},
|
|
1301
|
+
'github': {
|
|
1302
|
+
name: 'GitHub',
|
|
1303
|
+
description: 'GitHub repos, issues, PRs',
|
|
1304
|
+
type: 'local',
|
|
1305
|
+
command: ['npx', '-y', '@anthropic/mcp-github'],
|
|
1306
|
+
requires_env: ['GITHUB_TOKEN'],
|
|
1307
|
+
recommended: false
|
|
1308
|
+
},
|
|
1309
|
+
'gitlab': {
|
|
1310
|
+
name: 'GitLab',
|
|
1311
|
+
description: 'GitLab repos, issues, MRs',
|
|
1312
|
+
type: 'local',
|
|
1313
|
+
command: ['npx', '-y', '@anthropic/mcp-gitlab'],
|
|
1314
|
+
requires_env: ['GITLAB_TOKEN'],
|
|
1315
|
+
recommended: false
|
|
1316
|
+
},
|
|
1317
|
+
'postgres': {
|
|
1318
|
+
name: 'PostgreSQL',
|
|
1319
|
+
description: 'Query PostgreSQL databases',
|
|
1320
|
+
type: 'local',
|
|
1321
|
+
command: ['npx', '-y', '@anthropic/mcp-postgres'],
|
|
1322
|
+
requires_env: ['POSTGRES_CONNECTION_STRING'],
|
|
1323
|
+
recommended: false
|
|
1324
|
+
},
|
|
1325
|
+
'slack': {
|
|
1326
|
+
name: 'Slack',
|
|
1327
|
+
description: 'Slack messages and channels',
|
|
1328
|
+
type: 'local',
|
|
1329
|
+
command: ['npx', '-y', '@anthropic/mcp-slack'],
|
|
1330
|
+
requires_env: ['SLACK_TOKEN'],
|
|
1331
|
+
recommended: false
|
|
1332
|
+
}
|
|
1333
|
+
};
|
|
1334
|
+
|
|
1335
|
+
program
|
|
1336
|
+
.command('mcp')
|
|
1337
|
+
.description('Manage MCP servers in opencode.json')
|
|
1338
|
+
.argument('<action>', 'list | add <id> | remove <id> | install')
|
|
1339
|
+
.argument('[server]', 'Server ID for add/remove')
|
|
1340
|
+
.action(async (action, server) => {
|
|
1341
|
+
const opencodeJsonPath = path.join(process.cwd(), 'opencode.json');
|
|
1342
|
+
|
|
1343
|
+
if (action === 'list') {
|
|
1344
|
+
console.log(chalk.blue.bold('\n🔌 Available MCP Servers\n'));
|
|
1345
|
+
|
|
1346
|
+
// Show installed
|
|
1347
|
+
let installed = {};
|
|
1348
|
+
try {
|
|
1349
|
+
if (await fs.pathExists(opencodeJsonPath)) {
|
|
1350
|
+
const config = JSON.parse(await fs.readFile(opencodeJsonPath, 'utf8'));
|
|
1351
|
+
installed = config.mcp || {};
|
|
1352
|
+
}
|
|
1353
|
+
} catch {}
|
|
1354
|
+
|
|
1355
|
+
for (const [id, info] of Object.entries(MCP_CATALOG)) {
|
|
1356
|
+
const isInstalled = installed[id];
|
|
1357
|
+
const status = isInstalled ? chalk.green('✓') : chalk.gray('○');
|
|
1358
|
+
const rec = info.recommended ? chalk.yellow(' ⭐') : '';
|
|
1359
|
+
const type = info.type === 'remote' ? chalk.cyan('[remote]') : chalk.gray('[local]');
|
|
1360
|
+
console.log(` ${status} ${chalk.white(id)}${rec} ${type}`);
|
|
1361
|
+
console.log(chalk.gray(` ${info.description}`));
|
|
1362
|
+
if (info.requires_env) {
|
|
1363
|
+
console.log(chalk.yellow(` Requires: ${info.requires_env.join(', ')}`));
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
console.log(chalk.gray('\nUsage:'));
|
|
1368
|
+
console.log(chalk.cyan(' npx @comfanion/workflow mcp add context7'));
|
|
1369
|
+
console.log(chalk.cyan(' npx @comfanion/workflow mcp remove github'));
|
|
1370
|
+
console.log('');
|
|
1371
|
+
|
|
1372
|
+
} else if (action === 'add') {
|
|
1373
|
+
if (!server) {
|
|
1374
|
+
console.log(chalk.red('Usage: mcp add <server-id>'));
|
|
1375
|
+
console.log(chalk.gray('Run `mcp list` to see available servers'));
|
|
1376
|
+
process.exit(1);
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
if (!MCP_CATALOG[server]) {
|
|
1380
|
+
console.log(chalk.red(`Unknown server: ${server}`));
|
|
1381
|
+
console.log(chalk.gray('Run `mcp list` to see available servers'));
|
|
1382
|
+
process.exit(1);
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
const spinner = ora(`Adding ${server}...`).start();
|
|
1386
|
+
|
|
1387
|
+
// Read or create opencode.json
|
|
1388
|
+
let config = { "$schema": "https://opencode.ai/config.json" };
|
|
1389
|
+
try {
|
|
1390
|
+
if (await fs.pathExists(opencodeJsonPath)) {
|
|
1391
|
+
config = JSON.parse(await fs.readFile(opencodeJsonPath, 'utf8'));
|
|
1392
|
+
}
|
|
1393
|
+
} catch {}
|
|
1394
|
+
|
|
1395
|
+
if (!config.mcp) config.mcp = {};
|
|
1396
|
+
|
|
1397
|
+
const serverConfig = MCP_CATALOG[server];
|
|
1398
|
+
config.mcp[server] = {
|
|
1399
|
+
type: serverConfig.type,
|
|
1400
|
+
...(serverConfig.type === 'remote'
|
|
1401
|
+
? { url: serverConfig.url, ...(serverConfig.oauth ? { oauth: serverConfig.oauth } : {}) }
|
|
1402
|
+
: { command: serverConfig.command }),
|
|
1403
|
+
enabled: true
|
|
1404
|
+
};
|
|
1405
|
+
|
|
1406
|
+
await fs.writeFile(opencodeJsonPath, JSON.stringify(config, null, 2) + '\n');
|
|
1407
|
+
spinner.succeed(chalk.green(`Added ${server} to opencode.json`));
|
|
1408
|
+
|
|
1409
|
+
if (serverConfig.requires_env) {
|
|
1410
|
+
console.log(chalk.yellow(`\n⚠️ Set environment variables:`));
|
|
1411
|
+
for (const env of serverConfig.requires_env) {
|
|
1412
|
+
console.log(chalk.cyan(` export ${env}="..."`));
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
if (serverConfig.oauth) {
|
|
1416
|
+
console.log(chalk.yellow(`\n⚠️ OAuth required. Run:`));
|
|
1417
|
+
console.log(chalk.cyan(` opencode mcp auth ${server}`));
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
} else if (action === 'remove') {
|
|
1421
|
+
if (!server) {
|
|
1422
|
+
console.log(chalk.red('Usage: mcp remove <server-id>'));
|
|
1423
|
+
process.exit(1);
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
if (!await fs.pathExists(opencodeJsonPath)) {
|
|
1427
|
+
console.log(chalk.yellow('No opencode.json found'));
|
|
1428
|
+
return;
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1431
|
+
const spinner = ora(`Removing ${server}...`).start();
|
|
1432
|
+
|
|
1433
|
+
const config = JSON.parse(await fs.readFile(opencodeJsonPath, 'utf8'));
|
|
1434
|
+
if (config.mcp && config.mcp[server]) {
|
|
1435
|
+
delete config.mcp[server];
|
|
1436
|
+
await fs.writeFile(opencodeJsonPath, JSON.stringify(config, null, 2) + '\n');
|
|
1437
|
+
spinner.succeed(chalk.green(`Removed ${server} from opencode.json`));
|
|
1438
|
+
} else {
|
|
1439
|
+
spinner.info(chalk.yellow(`${server} not found in opencode.json`));
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
} else if (action === 'install') {
|
|
1443
|
+
// Interactive selection
|
|
1444
|
+
const installed = {};
|
|
1445
|
+
try {
|
|
1446
|
+
if (await fs.pathExists(opencodeJsonPath)) {
|
|
1447
|
+
const config = JSON.parse(await fs.readFile(opencodeJsonPath, 'utf8'));
|
|
1448
|
+
Object.assign(installed, config.mcp || {});
|
|
1449
|
+
}
|
|
1450
|
+
} catch {}
|
|
1451
|
+
|
|
1452
|
+
const choices = Object.entries(MCP_CATALOG).map(([id, info]) => ({
|
|
1453
|
+
name: `${id} - ${info.description}${info.recommended ? ' (recommended)' : ''}`,
|
|
1454
|
+
value: id,
|
|
1455
|
+
checked: installed[id] || info.recommended
|
|
1456
|
+
}));
|
|
1457
|
+
|
|
1458
|
+
const { servers } = await inquirer.prompt([{
|
|
1459
|
+
type: 'checkbox',
|
|
1460
|
+
name: 'servers',
|
|
1461
|
+
message: 'Select MCP servers:',
|
|
1462
|
+
choices
|
|
1463
|
+
}]);
|
|
1464
|
+
|
|
1465
|
+
// Read or create opencode.json
|
|
1466
|
+
let config = { "$schema": "https://opencode.ai/config.json" };
|
|
1467
|
+
try {
|
|
1468
|
+
if (await fs.pathExists(opencodeJsonPath)) {
|
|
1469
|
+
config = JSON.parse(await fs.readFile(opencodeJsonPath, 'utf8'));
|
|
1470
|
+
}
|
|
1471
|
+
} catch {}
|
|
1472
|
+
|
|
1473
|
+
config.mcp = {};
|
|
1474
|
+
for (const id of servers) {
|
|
1475
|
+
const serverConfig = MCP_CATALOG[id];
|
|
1476
|
+
config.mcp[id] = {
|
|
1477
|
+
type: serverConfig.type,
|
|
1478
|
+
...(serverConfig.type === 'remote'
|
|
1479
|
+
? { url: serverConfig.url, ...(serverConfig.oauth ? { oauth: serverConfig.oauth } : {}) }
|
|
1480
|
+
: { command: serverConfig.command }),
|
|
1481
|
+
enabled: true
|
|
1482
|
+
};
|
|
1483
|
+
}
|
|
1484
|
+
|
|
1485
|
+
await fs.writeFile(opencodeJsonPath, JSON.stringify(config, null, 2) + '\n');
|
|
1486
|
+
console.log(chalk.green(`\n✅ Updated opencode.json with ${servers.length} MCP servers`));
|
|
1487
|
+
|
|
1488
|
+
} else {
|
|
1489
|
+
console.log(chalk.red(`Unknown action: ${action}`));
|
|
1490
|
+
console.log('Available: list, add <id>, remove <id>, install');
|
|
1491
|
+
}
|
|
1492
|
+
});
|
|
1493
|
+
|
|
1238
1494
|
program.parse();
|
package/package.json
CHANGED
package/src/build-info.json
CHANGED
|
@@ -6,15 +6,14 @@
|
|
|
6
6
|
#
|
|
7
7
|
# Usage:
|
|
8
8
|
# npx @comfanion/workflow mcp list # Show available MCP servers
|
|
9
|
-
# npx @comfanion/workflow mcp
|
|
10
|
-
# npx @comfanion/workflow mcp add <id> # Add specific MCP
|
|
9
|
+
# npx @comfanion/workflow mcp install # Install selected to opencode.json
|
|
11
10
|
#
|
|
12
|
-
# Version: 1.
|
|
11
|
+
# Version: 1.1.0
|
|
13
12
|
# Last updated: 2026-01-24
|
|
14
13
|
|
|
15
14
|
servers:
|
|
16
15
|
# ==========================================================================
|
|
17
|
-
# DOCUMENTATION & RESEARCH
|
|
16
|
+
# DOCUMENTATION & RESEARCH (Remote MCP)
|
|
18
17
|
# ==========================================================================
|
|
19
18
|
|
|
20
19
|
context7:
|
|
@@ -22,13 +21,35 @@ servers:
|
|
|
22
21
|
description: "Library documentation for npm, Go, Python packages"
|
|
23
22
|
category: documentation
|
|
24
23
|
recommended: true
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
args: ["-y", "@anthropic/mcp-context7"]
|
|
24
|
+
type: remote
|
|
25
|
+
url: "https://mcp.context7.com/mcp"
|
|
28
26
|
tags: [docs, npm, go, python, research]
|
|
29
27
|
|
|
28
|
+
grep:
|
|
29
|
+
name: "Grep by Vercel"
|
|
30
|
+
description: "Search code examples from GitHub"
|
|
31
|
+
category: documentation
|
|
32
|
+
recommended: false
|
|
33
|
+
type: remote
|
|
34
|
+
url: "https://mcp.grep.app"
|
|
35
|
+
tags: [github, code-search, examples]
|
|
36
|
+
|
|
37
|
+
# ==========================================================================
|
|
38
|
+
# INTEGRATIONS (Remote MCP with OAuth)
|
|
39
|
+
# ==========================================================================
|
|
40
|
+
|
|
41
|
+
sentry:
|
|
42
|
+
name: "Sentry"
|
|
43
|
+
description: "Query Sentry issues, projects, and error data"
|
|
44
|
+
category: integrations
|
|
45
|
+
recommended: false
|
|
46
|
+
type: remote
|
|
47
|
+
url: "https://mcp.sentry.dev/mcp"
|
|
48
|
+
oauth: true
|
|
49
|
+
tags: [errors, monitoring, debugging]
|
|
50
|
+
|
|
30
51
|
# ==========================================================================
|
|
31
|
-
#
|
|
52
|
+
# LOCAL MCP SERVERS
|
|
32
53
|
# ==========================================================================
|
|
33
54
|
|
|
34
55
|
sequential-thinking:
|
|
@@ -36,73 +57,46 @@ servers:
|
|
|
36
57
|
description: "Enhanced reasoning for complex multi-step problems"
|
|
37
58
|
category: thinking
|
|
38
59
|
recommended: true
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
args: ["-y", "@anthropic/mcp-sequential-thinking"]
|
|
60
|
+
type: local
|
|
61
|
+
command: ["npx", "-y", "@anthropic/mcp-sequential-thinking"]
|
|
42
62
|
tags: [reasoning, planning, complex-tasks]
|
|
43
63
|
|
|
44
|
-
# ==========================================================================
|
|
45
|
-
# BROWSER & UI
|
|
46
|
-
# ==========================================================================
|
|
47
|
-
|
|
48
64
|
playwright:
|
|
49
65
|
name: "Playwright"
|
|
50
66
|
description: "Browser automation, testing, and web scraping"
|
|
51
67
|
category: browser
|
|
52
68
|
recommended: false
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
args: ["-y", "@anthropic/mcp-playwright"]
|
|
69
|
+
type: local
|
|
70
|
+
command: ["npx", "-y", "@anthropic/mcp-playwright"]
|
|
56
71
|
tags: [browser, testing, automation, scraping]
|
|
57
72
|
|
|
58
73
|
chrome-devtools:
|
|
59
74
|
name: "Chrome DevTools"
|
|
60
|
-
description: "Chrome debugging,
|
|
75
|
+
description: "Chrome debugging, DOM inspection, network, console"
|
|
61
76
|
category: browser
|
|
62
77
|
recommended: false
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
tags: [chrome, debugging, devtools]
|
|
78
|
+
type: local
|
|
79
|
+
command: ["npx", "-y", "chrome-devtools-mcp@latest"]
|
|
80
|
+
tags: [chrome, debugging, devtools, dom]
|
|
67
81
|
|
|
68
82
|
puppeteer:
|
|
69
83
|
name: "Puppeteer"
|
|
70
84
|
description: "Headless Chrome automation"
|
|
71
85
|
category: browser
|
|
72
86
|
recommended: false
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
args: ["-y", "@anthropic/mcp-puppeteer"]
|
|
87
|
+
type: local
|
|
88
|
+
command: ["npx", "-y", "@anthropic/mcp-puppeteer"]
|
|
76
89
|
tags: [chrome, headless, automation]
|
|
77
90
|
|
|
78
|
-
# ==========================================================================
|
|
79
|
-
# INTEGRATIONS
|
|
80
|
-
# ==========================================================================
|
|
81
|
-
|
|
82
|
-
atlassian:
|
|
83
|
-
name: "Atlassian (Jira/Confluence)"
|
|
84
|
-
description: "Jira issues, Confluence pages integration"
|
|
85
|
-
category: integrations
|
|
86
|
-
recommended: false
|
|
87
|
-
requires_env:
|
|
88
|
-
- ATLASSIAN_EMAIL
|
|
89
|
-
- ATLASSIAN_API_TOKEN
|
|
90
|
-
- ATLASSIAN_URL
|
|
91
|
-
config:
|
|
92
|
-
command: npx
|
|
93
|
-
args: ["-y", "@anthropic/mcp-atlassian"]
|
|
94
|
-
tags: [jira, confluence, tickets, docs]
|
|
95
|
-
|
|
96
91
|
github:
|
|
97
92
|
name: "GitHub"
|
|
98
93
|
description: "GitHub repos, issues, PRs, actions"
|
|
99
94
|
category: integrations
|
|
100
95
|
recommended: false
|
|
96
|
+
type: local
|
|
97
|
+
command: ["npx", "-y", "@anthropic/mcp-github"]
|
|
101
98
|
requires_env:
|
|
102
99
|
- GITHUB_TOKEN
|
|
103
|
-
config:
|
|
104
|
-
command: npx
|
|
105
|
-
args: ["-y", "@anthropic/mcp-github"]
|
|
106
100
|
tags: [github, git, issues, prs]
|
|
107
101
|
|
|
108
102
|
gitlab:
|
|
@@ -110,11 +104,10 @@ servers:
|
|
|
110
104
|
description: "GitLab repos, issues, MRs, pipelines"
|
|
111
105
|
category: integrations
|
|
112
106
|
recommended: false
|
|
107
|
+
type: local
|
|
108
|
+
command: ["npx", "-y", "@anthropic/mcp-gitlab"]
|
|
113
109
|
requires_env:
|
|
114
110
|
- GITLAB_TOKEN
|
|
115
|
-
config:
|
|
116
|
-
command: npx
|
|
117
|
-
args: ["-y", "@anthropic/mcp-gitlab"]
|
|
118
111
|
tags: [gitlab, git, issues, mrs]
|
|
119
112
|
|
|
120
113
|
slack:
|
|
@@ -122,27 +115,21 @@ servers:
|
|
|
122
115
|
description: "Slack messages, channels, search"
|
|
123
116
|
category: integrations
|
|
124
117
|
recommended: false
|
|
118
|
+
type: local
|
|
119
|
+
command: ["npx", "-y", "@anthropic/mcp-slack"]
|
|
125
120
|
requires_env:
|
|
126
121
|
- SLACK_TOKEN
|
|
127
|
-
config:
|
|
128
|
-
command: npx
|
|
129
|
-
args: ["-y", "@anthropic/mcp-slack"]
|
|
130
122
|
tags: [slack, messaging, communication]
|
|
131
123
|
|
|
132
|
-
# ==========================================================================
|
|
133
|
-
# DATA & STORAGE
|
|
134
|
-
# ==========================================================================
|
|
135
|
-
|
|
136
124
|
postgres:
|
|
137
125
|
name: "PostgreSQL"
|
|
138
126
|
description: "Query PostgreSQL databases"
|
|
139
127
|
category: database
|
|
140
128
|
recommended: false
|
|
129
|
+
type: local
|
|
130
|
+
command: ["npx", "-y", "@anthropic/mcp-postgres"]
|
|
141
131
|
requires_env:
|
|
142
132
|
- POSTGRES_CONNECTION_STRING
|
|
143
|
-
config:
|
|
144
|
-
command: npx
|
|
145
|
-
args: ["-y", "@anthropic/mcp-postgres"]
|
|
146
133
|
tags: [database, sql, postgres]
|
|
147
134
|
|
|
148
135
|
sqlite:
|
|
@@ -150,9 +137,8 @@ servers:
|
|
|
150
137
|
description: "Query SQLite databases"
|
|
151
138
|
category: database
|
|
152
139
|
recommended: false
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
args: ["-y", "@anthropic/mcp-sqlite"]
|
|
140
|
+
type: local
|
|
141
|
+
command: ["npx", "-y", "@anthropic/mcp-sqlite"]
|
|
156
142
|
tags: [database, sql, sqlite]
|
|
157
143
|
|
|
158
144
|
redis:
|
|
@@ -160,51 +146,30 @@ servers:
|
|
|
160
146
|
description: "Redis key-value operations"
|
|
161
147
|
category: database
|
|
162
148
|
recommended: false
|
|
149
|
+
type: local
|
|
150
|
+
command: ["npx", "-y", "@anthropic/mcp-redis"]
|
|
163
151
|
requires_env:
|
|
164
152
|
- REDIS_URL
|
|
165
|
-
config:
|
|
166
|
-
command: npx
|
|
167
|
-
args: ["-y", "@anthropic/mcp-redis"]
|
|
168
153
|
tags: [database, cache, redis]
|
|
169
154
|
|
|
170
|
-
# ==========================================================================
|
|
171
|
-
# FILE & SYSTEM
|
|
172
|
-
# ==========================================================================
|
|
173
|
-
|
|
174
155
|
filesystem:
|
|
175
156
|
name: "Filesystem"
|
|
176
157
|
description: "Advanced file operations (usually built-in)"
|
|
177
158
|
category: system
|
|
178
159
|
recommended: false
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
args: ["-y", "@anthropic/mcp-filesystem"]
|
|
160
|
+
type: local
|
|
161
|
+
command: ["npx", "-y", "@anthropic/mcp-filesystem"]
|
|
182
162
|
tags: [files, filesystem]
|
|
183
163
|
|
|
184
|
-
# ==========================================================================
|
|
185
|
-
# API & WEB
|
|
186
|
-
# ==========================================================================
|
|
187
|
-
|
|
188
164
|
fetch:
|
|
189
165
|
name: "Fetch"
|
|
190
166
|
description: "HTTP requests to external APIs (usually built-in)"
|
|
191
167
|
category: api
|
|
192
168
|
recommended: false
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
args: ["-y", "@anthropic/mcp-fetch"]
|
|
169
|
+
type: local
|
|
170
|
+
command: ["npx", "-y", "@anthropic/mcp-fetch"]
|
|
196
171
|
tags: [http, api, fetch]
|
|
197
172
|
|
|
198
|
-
openapi:
|
|
199
|
-
name: "OpenAPI"
|
|
200
|
-
description: "Interact with APIs via OpenAPI specs"
|
|
201
|
-
category: api
|
|
202
|
-
recommended: false
|
|
203
|
-
config:
|
|
204
|
-
command: npx
|
|
205
|
-
args: ["-y", "@anthropic/mcp-openapi"]
|
|
206
|
-
tags: [api, openapi, swagger]
|
|
207
|
-
|
|
208
173
|
# Categories for UI grouping
|
|
209
174
|
categories:
|
|
210
175
|
documentation:
|