it-tools-mcp 5.8.5 → 5.8.7

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.
Files changed (118) hide show
  1. package/build/index.js +200 -4
  2. package/build/tools/ansible/decrypt_ansible_vault/index.js +1 -0
  3. package/build/tools/ansible/encrypt_ansible_vault/index.js +1 -0
  4. package/build/tools/ansible/generate_ansible_inventory/index.js +1 -0
  5. package/build/tools/ansible/parse_ansible_inventory/index.js +1 -0
  6. package/build/tools/ansible/show_ansible_reference/index.js +1 -0
  7. package/build/tools/ansible/validate_ansible_playbook/index.js +1 -0
  8. package/build/tools/color/convert_hex_to_rgb/index.js +1 -0
  9. package/build/tools/color/convert_rgb_to_hex/index.js +1 -0
  10. package/build/tools/crypto/decode_jwt/index.js +1 -0
  11. package/build/tools/crypto/generate_basic_auth/index.js +1 -0
  12. package/build/tools/crypto/generate_bip39/index.js +1 -0
  13. package/build/tools/crypto/generate_hmac/index.js +1 -0
  14. package/build/tools/crypto/generate_otp/index.js +1 -0
  15. package/build/tools/crypto/generate_password/index.js +1 -0
  16. package/build/tools/crypto/generate_token/index.js +1 -0
  17. package/build/tools/crypto/hash_bcrypt/index.js +1 -0
  18. package/build/tools/crypto/hash_md5/index.js +1 -0
  19. package/build/tools/crypto/hash_sha1/index.js +1 -0
  20. package/build/tools/crypto/hash_sha256/index.js +1 -0
  21. package/build/tools/crypto/hash_sha512/index.js +1 -0
  22. package/build/tools/data_format/compare_json/index.js +1 -0
  23. package/build/tools/data_format/convert_html_to_markdown/index.js +1 -0
  24. package/build/tools/data_format/convert_json_to_csv/index.js +1 -0
  25. package/build/tools/data_format/convert_json_to_toml/index.js +1 -0
  26. package/build/tools/data_format/convert_markdown_to_html/index.js +1 -0
  27. package/build/tools/data_format/convert_toml_to_json/index.js +1 -0
  28. package/build/tools/data_format/format_json/index.js +1 -0
  29. package/build/tools/data_format/format_phone/index.js +1 -0
  30. package/build/tools/data_format/format_sql/index.js +1 -0
  31. package/build/tools/data_format/format_xml/index.js +1 -0
  32. package/build/tools/data_format/format_yaml/index.js +1 -0
  33. package/build/tools/data_format/minify_json/index.js +1 -0
  34. package/build/tools/development/convert_list/index.js +1 -0
  35. package/build/tools/development/format_html/index.js +1 -0
  36. package/build/tools/development/format_javascript/index.js +1 -0
  37. package/build/tools/development/generate_crontab/index.js +1 -0
  38. package/build/tools/development/generate_markdown_toc/index.js +1 -0
  39. package/build/tools/development/test_regex/index.js +1 -0
  40. package/build/tools/docker/convert_docker_compose_to_run/index.js +1 -0
  41. package/build/tools/docker/convert_docker_run_to_compose/index.js +1 -0
  42. package/build/tools/docker/generate_traefik_compose/index.js +1 -0
  43. package/build/tools/docker/show_docker_reference/index.js +1 -0
  44. package/build/tools/docker/validate_docker_compose/index.js +1 -0
  45. package/build/tools/encoding/convert_text_to_binary/index.js +1 -0
  46. package/build/tools/encoding/decode_base64/index.js +1 -0
  47. package/build/tools/encoding/decode_html/index.js +1 -0
  48. package/build/tools/encoding/decode_url/index.js +1 -0
  49. package/build/tools/encoding/encode_base64/index.js +1 -0
  50. package/build/tools/encoding/encode_html/index.js +1 -0
  51. package/build/tools/encoding/encode_html_entities/index.js +1 -0
  52. package/build/tools/encoding/encode_url/index.js +1 -0
  53. package/build/tools/forensic/decode_safelink/index.js +1 -0
  54. package/build/tools/forensic/fang_url/index.js +1 -0
  55. package/build/tools/forensic/identify_file_type/index.js +1 -0
  56. package/build/tools/id_generators/generate_qr_code/index.js +1 -0
  57. package/build/tools/id_generators/generate_svg_placeholder/index.js +1 -0
  58. package/build/tools/id_generators/generate_ulid/index.js +1 -0
  59. package/build/tools/id_generators/generate_uuid/index.js +1 -0
  60. package/build/tools/math/calculate_percentage/index.js +1 -0
  61. package/build/tools/math/convert_number_base/index.js +1 -0
  62. package/build/tools/math/convert_roman_numerals/index.js +1 -0
  63. package/build/tools/math/convert_temperature/index.js +1 -0
  64. package/build/tools/math/convert_unix_timestamp/index.js +1 -0
  65. package/build/tools/math/evaluate_math/index.js +1 -0
  66. package/build/tools/network/calculate_ip_subnet/index.js +1 -0
  67. package/build/tools/network/calculate_ipv4_subnet/index.js +1 -0
  68. package/build/tools/network/calculate_ipv6_subnet/index.js +1 -0
  69. package/build/tools/network/cat/index.js +1 -0
  70. package/build/tools/network/convert_cidr_to_ip_range/index.js +1 -0
  71. package/build/tools/network/convert_ip_range_to_cidr/index.js +1 -0
  72. package/build/tools/network/curl/index.js +1 -0
  73. package/build/tools/network/dig/index.js +1 -0
  74. package/build/tools/network/generate_ipv6_ula/index.js +1 -0
  75. package/build/tools/network/generate_mac_address/index.js +1 -0
  76. package/build/tools/network/generate_random_port/index.js +1 -0
  77. package/build/tools/network/grep/index.js +1 -0
  78. package/build/tools/network/head/index.js +1 -0
  79. package/build/tools/network/nslookup/index.js +1 -0
  80. package/build/tools/network/parse_url/index.js +1 -0
  81. package/build/tools/network/ping/index.js +1 -0
  82. package/build/tools/network/ps/index.js +1 -0
  83. package/build/tools/network/scp/index.js +1 -0
  84. package/build/tools/network/ssh/index.js +1 -0
  85. package/build/tools/network/tail/index.js +1 -0
  86. package/build/tools/network/telnet/index.js +1 -0
  87. package/build/tools/network/top/index.js +1 -0
  88. package/build/tools/network/validate_iban/index.js +1 -0
  89. package/build/tools/physics/convert_angle/index.js +1 -0
  90. package/build/tools/physics/convert_energy/index.js +1 -0
  91. package/build/tools/physics/convert_power/index.js +1 -0
  92. package/build/tools/text/analyze_distinct_words/index.js +1 -0
  93. package/build/tools/text/analyze_text_stats/index.js +1 -0
  94. package/build/tools/text/capitalize_text/index.js +1 -0
  95. package/build/tools/text/compare_text/index.js +1 -0
  96. package/build/tools/text/convert_text_to_camelcase/index.js +1 -0
  97. package/build/tools/text/convert_text_to_kebabcase/index.js +1 -0
  98. package/build/tools/text/convert_text_to_lowercase/index.js +1 -0
  99. package/build/tools/text/convert_text_to_nato/index.js +1 -0
  100. package/build/tools/text/convert_text_to_pascalcase/index.js +1 -0
  101. package/build/tools/text/convert_text_to_unicode/index.js +1 -0
  102. package/build/tools/text/convert_text_to_uppercase/index.js +1 -0
  103. package/build/tools/text/generate_ascii_art/index.js +1 -0
  104. package/build/tools/text/generate_lorem_ipsum/index.js +1 -0
  105. package/build/tools/text/generate_numeronym/index.js +1 -0
  106. package/build/tools/text/obfuscate_string/index.js +1 -0
  107. package/build/tools/text/search_emoji/index.js +1 -0
  108. package/build/tools/text/show_unicode_names/index.js +1 -0
  109. package/build/tools/text/slugify_text/index.js +1 -0
  110. package/build/tools/text/text_snakecase/index.js +1 -0
  111. package/build/tools/utility/convert_rem_px/index.js +1 -0
  112. package/build/tools/utility/format_css/index.js +1 -0
  113. package/build/tools/utility/lookup_http_status/index.js +1 -0
  114. package/build/tools/utility/lookup_mime_types/index.js +1 -0
  115. package/build/tools/utility/lookup_port_numbers/index.js +1 -0
  116. package/build/tools/utility/normalize_email/index.js +1 -0
  117. package/build/tools/utility/show_device_info/index.js +1 -0
  118. package/package.json +1 -1
package/build/index.js CHANGED
@@ -216,7 +216,8 @@ function getPackageMetadata() {
216
216
  author: pkg.author,
217
217
  repository: pkg.repository,
218
218
  homepage: pkg.homepage,
219
- license: pkg.license
219
+ license: pkg.license,
220
+ mcpName: pkg.mcpName
220
221
  };
221
222
  }
222
223
  // Create server instance with enhanced metadata and VS Code compliance features
@@ -1286,8 +1287,203 @@ function extractReadmeSection(content, heading) {
1286
1287
  : lines.slice(startIndex, endIndex);
1287
1288
  return sectionLines.join('\n');
1288
1289
  }
1289
- // Start the server
1290
- main().catch((error) => {
1291
- console.error("Fatal error in main():", error);
1290
+ // CLI argument parsing
1291
+ function parseArgs(args) {
1292
+ const flags = new Set();
1293
+ let command = null;
1294
+ for (const arg of args.slice(2)) {
1295
+ if (arg.startsWith('--')) {
1296
+ flags.add(arg.substring(2));
1297
+ }
1298
+ else if (arg.startsWith('-')) {
1299
+ // Single char flags
1300
+ for (const char of arg.substring(1)) {
1301
+ flags.add(char);
1302
+ }
1303
+ }
1304
+ else if (!command) {
1305
+ command = arg;
1306
+ }
1307
+ }
1308
+ return { command, flags };
1309
+ }
1310
+ // CLI Commands
1311
+ async function printVersion() {
1312
+ console.log(`${packageInfo.name} v${packageInfo.version}`);
1313
+ process.exit(0);
1314
+ }
1315
+ async function printHelp() {
1316
+ const helpText = `
1317
+ ${packageInfo.name} v${packageInfo.version}
1318
+ ${packageInfo.description}
1319
+
1320
+ USAGE:
1321
+ ${packageInfo.name} Start the MCP server
1322
+ ${packageInfo.name} --version Display version information
1323
+ ${packageInfo.name} --help Display this help message
1324
+ ${packageInfo.name} --test Run server validation tests
1325
+
1326
+ OPTIONS:
1327
+ --version, -v Show version number
1328
+ --help, -h Show help information
1329
+ --test, -t Run validation tests and exit
1330
+
1331
+ ENVIRONMENT VARIABLES:
1332
+ NODE_ENV Set to 'development' for verbose logging
1333
+ MCP_DEV_MODE Enable development mode features
1334
+
1335
+ EXAMPLES:
1336
+ # Start the MCP server (normal operation)
1337
+ $ ${packageInfo.name}
1338
+
1339
+ # Check version
1340
+ $ ${packageInfo.name} --version
1341
+
1342
+ # Run tests (used by Homebrew)
1343
+ $ ${packageInfo.name} --test
1344
+
1345
+ For more information, visit: ${packageInfo.homepage || 'https://github.com/wrenchpilot/it-tools-mcp'}
1346
+ `;
1347
+ console.log(helpText);
1348
+ process.exit(0);
1349
+ }
1350
+ async function runTests() {
1351
+ console.log(`Running validation tests for ${packageInfo.name} v${packageInfo.version}...\n`);
1352
+ let allTestsPassed = true;
1353
+ const results = [];
1354
+ // Test 1: Package info validation
1355
+ try {
1356
+ if (!packageInfo.name || !packageInfo.version) {
1357
+ throw new Error('Package info incomplete');
1358
+ }
1359
+ results.push({ test: 'Package Info', passed: true });
1360
+ }
1361
+ catch (error) {
1362
+ results.push({
1363
+ test: 'Package Info',
1364
+ passed: false,
1365
+ message: error instanceof Error ? error.message : 'Unknown error'
1366
+ });
1367
+ allTestsPassed = false;
1368
+ }
1369
+ // Test 2: Tool discovery
1370
+ try {
1371
+ const { totalToolCount, toolCategories } = await discoverTools();
1372
+ if (totalToolCount === 0) {
1373
+ throw new Error('No tools discovered');
1374
+ }
1375
+ if (Object.keys(toolCategories).length === 0) {
1376
+ throw new Error('No tool categories found');
1377
+ }
1378
+ results.push({
1379
+ test: 'Tool Discovery',
1380
+ passed: true,
1381
+ message: `Found ${totalToolCount} tools in ${Object.keys(toolCategories).length} categories`
1382
+ });
1383
+ }
1384
+ catch (error) {
1385
+ results.push({
1386
+ test: 'Tool Discovery',
1387
+ passed: false,
1388
+ message: error instanceof Error ? error.message : 'Unknown error'
1389
+ });
1390
+ allTestsPassed = false;
1391
+ }
1392
+ // Test 3: Server initialization (dry run)
1393
+ try {
1394
+ const server = new McpServer({
1395
+ name: packageInfo.mcpName || packageInfo.name,
1396
+ version: packageInfo.version
1397
+ });
1398
+ if (!server) {
1399
+ throw new Error('Failed to create server instance');
1400
+ }
1401
+ results.push({ test: 'Server Initialization', passed: true });
1402
+ }
1403
+ catch (error) {
1404
+ results.push({
1405
+ test: 'Server Initialization',
1406
+ passed: false,
1407
+ message: error instanceof Error ? error.message : 'Unknown error'
1408
+ });
1409
+ allTestsPassed = false;
1410
+ }
1411
+ // Test 4: Resource usage check
1412
+ try {
1413
+ const usage = getResourceUsage();
1414
+ if (usage.memory.heapUsedBytes <= 0) {
1415
+ throw new Error('Invalid memory usage reported');
1416
+ }
1417
+ results.push({
1418
+ test: 'Resource Monitoring',
1419
+ passed: true,
1420
+ message: `Memory: ${(usage.memory.heapUsedBytes / 1024 / 1024).toFixed(2)}MB`
1421
+ });
1422
+ }
1423
+ catch (error) {
1424
+ results.push({
1425
+ test: 'Resource Monitoring',
1426
+ passed: false,
1427
+ message: error instanceof Error ? error.message : 'Unknown error'
1428
+ });
1429
+ allTestsPassed = false;
1430
+ }
1431
+ // Test 5: README resource availability
1432
+ try {
1433
+ const readmePath = path.resolve(__dirname, '../README.md');
1434
+ if (!fs.existsSync(readmePath)) {
1435
+ throw new Error('README.md not found');
1436
+ }
1437
+ const readmeContent = await getReadmeContent('full');
1438
+ if (!readmeContent || readmeContent.length === 0) {
1439
+ throw new Error('README content is empty');
1440
+ }
1441
+ results.push({ test: 'Documentation', passed: true });
1442
+ }
1443
+ catch (error) {
1444
+ results.push({
1445
+ test: 'Documentation',
1446
+ passed: false,
1447
+ message: error instanceof Error ? error.message : 'Unknown error'
1448
+ });
1449
+ allTestsPassed = false;
1450
+ }
1451
+ // Print results
1452
+ console.log('Test Results:');
1453
+ console.log('='.repeat(60));
1454
+ for (const result of results) {
1455
+ const status = result.passed ? '✓ PASS' : '✗ FAIL';
1456
+ const color = result.passed ? '\x1b[32m' : '\x1b[31m';
1457
+ const reset = '\x1b[0m';
1458
+ console.log(`${color}${status}${reset} ${result.test}`);
1459
+ if (result.message) {
1460
+ console.log(` ${result.message}`);
1461
+ }
1462
+ }
1463
+ console.log('='.repeat(60));
1464
+ console.log(allTestsPassed
1465
+ ? '\x1b[32m✓ All tests passed!\x1b[0m'
1466
+ : '\x1b[31m✗ Some tests failed.\x1b[0m');
1467
+ process.exit(allTestsPassed ? 0 : 1);
1468
+ }
1469
+ // Main CLI entry point
1470
+ async function cli() {
1471
+ const { flags } = parseArgs(process.argv);
1472
+ // Handle CLI flags
1473
+ if (flags.has('version') || flags.has('v')) {
1474
+ await printVersion();
1475
+ }
1476
+ if (flags.has('help') || flags.has('h')) {
1477
+ await printHelp();
1478
+ }
1479
+ if (flags.has('test') || flags.has('t')) {
1480
+ await runTests();
1481
+ }
1482
+ // No flags provided - start the server normally
1483
+ await main();
1484
+ }
1485
+ // Start the CLI
1486
+ cli().catch((error) => {
1487
+ console.error("Fatal error in CLI:", error);
1292
1488
  process.exit(1);
1293
1489
  });
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { pbkdf2Sync } from "crypto";
3
3
  export function registerDecryptAnsibleVault(server) {
4
4
  server.registerTool("decrypt_ansible_vault", {
5
+ description: "Decrypt Ansible Vault encrypted text",
5
6
  inputSchema: {
6
7
  encryptedText: z.string().describe("Ansible Vault encrypted text to decrypt"),
7
8
  password: z.string().describe("Password for decryption"),
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { pbkdf2Sync, randomBytes } from "crypto";
3
3
  export function registerEncryptAnsibleVault(server) {
4
4
  server.registerTool("encrypt_ansible_vault", {
5
+ description: "Encrypt text using Ansible Vault format",
5
6
  inputSchema: {
6
7
  text: z.string().describe("Text to encrypt"),
7
8
  password: z.string().describe("Password for encryption"),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerAnsibleInventoryParser(server) {
3
3
  server.registerTool("generate_ansible_inventory", {
4
+ description: "Parse and validate Ansible inventory files",
4
5
  inputSchema: {
5
6
  inventory: z.string().describe("Ansible inventory content (INI or YAML format)"),
6
7
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerAnsibleInventoryParser(server) {
3
3
  server.registerTool("parse_ansible_inventory", {
4
+ description: "Parse and validate Ansible inventory files",
4
5
  inputSchema: {
5
6
  inventory: z.string().describe("Ansible inventory content (INI or YAML format)"),
6
7
  },
@@ -1,5 +1,6 @@
1
1
  export function registerReferenceAnsible(server) {
2
2
  server.registerTool("show_ansible_reference", {
3
+ description: "Get Ansible commands reference and cheatsheet",
3
4
  inputSchema: {},
4
5
  // VS Code compliance annotations
5
6
  annotations: {
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerValidateAnsiblePlaybook(server) {
3
3
  server.registerTool("validate_ansible_playbook", {
4
+ description: "Validate Ansible playbook syntax and structure",
4
5
  inputSchema: {
5
6
  playbook: z.string().describe("Ansible playbook YAML content"),
6
7
  },
@@ -2,6 +2,7 @@ import Color from "color";
2
2
  import { z } from "zod";
3
3
  export function registerConvertHexRgb(server) {
4
4
  server.registerTool("convert_hex_to_rgb", {
5
+ description: "Convert HEX color to RGB",
5
6
  inputSchema: {
6
7
  hex: z.string().describe("HEX color code (e.g., #FF5733 or FF5733)"),
7
8
  },
@@ -2,6 +2,7 @@ import Color from "color";
2
2
  import { z } from "zod";
3
3
  export function registerConvertRgbHex(server) {
4
4
  server.registerTool("convert_rgb_to_hex", {
5
+ description: "Convert RGB color to HEX",
5
6
  inputSchema: {
6
7
  r: z.number().describe("Red value (0-255)"),
7
8
  g: z.number().describe("Green value (0-255)"),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerDecodeJwt(server) {
3
3
  server.registerTool("decode_jwt", {
4
+ description: "Decode JWT token (header and payload only)",
4
5
  inputSchema: {
5
6
  token: z.string().describe("JWT token to decode"),
6
7
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerGenerateAuth(server) {
3
3
  server.registerTool("generate_basic_auth", {
4
+ description: "Generate HTTP Basic Authentication header",
4
5
  inputSchema: {
5
6
  username: z.string().describe("Username"),
6
7
  password: z.string().describe("Password"),
@@ -2,6 +2,7 @@ import * as bip39 from "bip39";
2
2
  import { z } from "zod";
3
3
  export function registerGenerateBip39(server) {
4
4
  server.registerTool("generate_bip39", {
5
+ description: "Generate BIP39 mnemonic phrases",
5
6
  inputSchema: {
6
7
  wordCount: z.enum(["12", "15", "18", "21", "24"]).describe("Number of words in the mnemonic").optional(),
7
8
  },
@@ -2,6 +2,7 @@ import { createHmac } from "crypto";
2
2
  import { z } from "zod";
3
3
  export function registerGenerateHmac(server) {
4
4
  server.registerTool("generate_hmac", {
5
+ description: "Generate HMAC (Hash-based Message Authentication Code)",
5
6
  inputSchema: {
6
7
  message: z.string().describe("Message to authenticate"),
7
8
  key: z.string().describe("Secret key for HMAC"),
@@ -2,6 +2,7 @@ import speakeasy from "speakeasy";
2
2
  import { z } from "zod";
3
3
  export function registerGenerateOtp(server) {
4
4
  server.registerTool("generate_otp", {
5
+ description: "Generate Time-based One-Time Password (TOTP) codes",
5
6
  inputSchema: {
6
7
  secret: z.string().describe("Base32 encoded secret key"),
7
8
  digits: z.number().describe("Number of digits in the code").optional(),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerGeneratePassword(server) {
3
3
  server.registerTool("generate_password", {
4
+ description: "Generate a secure password",
4
5
  inputSchema: {
5
6
  length: z.number().describe("Password length").optional(),
6
7
  includeUppercase: z.boolean().describe("Include uppercase letters").optional(),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerGenerateToken(server) {
3
3
  server.registerTool("generate_token", {
4
+ description: "Generate secure random tokens",
4
5
  inputSchema: {
5
6
  length: z.number().describe("Token length").optional(),
6
7
  charset: z.enum(["alphanumeric", "hex", "base64", "custom"]).describe("Character set to use").optional(),
@@ -2,6 +2,7 @@ import bcryptjs from "bcryptjs";
2
2
  import { z } from "zod";
3
3
  export function registerHashBcrypt(server) {
4
4
  server.registerTool("hash_bcrypt", {
5
+ description: "Generate bcrypt hash or verify password against hash",
5
6
  inputSchema: {
6
7
  password: z.string().describe("Password to hash or verify"),
7
8
  rounds: z.number().describe("Number of salt rounds (4-12, default 10)").optional(),
@@ -2,6 +2,7 @@ import { createHash } from "crypto";
2
2
  import { z } from "zod";
3
3
  export function registerHashMd5(server) {
4
4
  server.registerTool("hash_md5", {
5
+ description: "Generate MD5 hash",
5
6
  inputSchema: {
6
7
  text: z.string().describe("Text to hash with MD5"),
7
8
  },
@@ -2,6 +2,7 @@ import { createHash } from "crypto";
2
2
  import { z } from "zod";
3
3
  export function registerHashSha1(server) {
4
4
  server.registerTool("hash_sha1", {
5
+ description: "Generate SHA1 hash",
5
6
  inputSchema: {
6
7
  text: z.string().describe("Text to hash with SHA1"),
7
8
  },
@@ -2,6 +2,7 @@ import { createHash } from "crypto";
2
2
  import { z } from "zod";
3
3
  export function registerHashSha256(server) {
4
4
  server.registerTool("hash_sha256", {
5
+ description: 'Generate SHA256 hash of input text. Example: "hello" → "2cf24dba4f21d..."',
5
6
  inputSchema: {
6
7
  text: z.string().describe("Text to hash with SHA256"),
7
8
  },
@@ -2,6 +2,7 @@ import { createHash } from "crypto";
2
2
  import { z } from "zod";
3
3
  export function registerHashSha512(server) {
4
4
  server.registerTool("hash_sha512", {
5
+ description: "Generate SHA512 hash",
5
6
  inputSchema: {
6
7
  text: z.string().describe("Text to hash with SHA512"),
7
8
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerDiffJson(server) {
3
3
  server.registerTool("compare_json", {
4
+ description: "Compare two JSON objects and show differences",
4
5
  inputSchema: {
5
6
  json1: z.string().describe("First JSON object"),
6
7
  json2: z.string().describe("Second JSON object"),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerConvertHtmlMarkdown(server) {
3
3
  server.registerTool("convert_html_to_markdown", {
4
+ description: "Convert HTML to Markdown",
4
5
  inputSchema: {
5
6
  html: z.string().describe("HTML content to convert to Markdown"),
6
7
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerConvertJsonCsv(server) {
3
3
  server.registerTool("convert_json_to_csv", {
4
+ description: "Convert JSON to CSV format",
4
5
  inputSchema: {
5
6
  json: z.string().describe("JSON string to convert to CSV"),
6
7
  delimiter: z.string().describe("CSV delimiter").optional(),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerConvertJsonToml(server) {
3
3
  server.registerTool("convert_json_to_toml", {
4
+ description: "Convert JSON to TOML format",
4
5
  inputSchema: {
5
6
  json: z.string().describe("JSON string to convert"),
6
7
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerConvertMarkdownHtml(server) {
3
3
  server.registerTool("convert_markdown_to_html", {
4
+ description: "Convert Markdown to HTML",
4
5
  inputSchema: {
5
6
  markdown: z.string().describe("Markdown content to convert to HTML"),
6
7
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerConvertTomlJson(server) {
3
3
  server.registerTool("convert_toml_to_json", {
4
+ description: "Convert TOML to JSON format",
4
5
  inputSchema: {
5
6
  toml: z.string().describe("TOML string to convert"),
6
7
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerFormatJson(server) {
3
3
  server.registerTool("format_json", {
4
+ description: 'Format and prettify JSON with proper indentation. Example: {"a":1,"b":2} → formatted JSON with customizable spacing',
4
5
  inputSchema: {
5
6
  json: z.string().describe("JSON string to format"),
6
7
  indent: z.number().describe("Number of spaces for indentation").optional(),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerFormatPhone(server) {
3
3
  server.registerTool("format_phone", {
4
+ description: "Parse and format phone numbers",
4
5
  inputSchema: {
5
6
  phoneNumber: z.string().describe("Phone number to parse and format"),
6
7
  countryCode: z.string().optional().describe("Country code (e.g., 'US', 'GB', 'FR')"),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerFormatSql(server) {
3
3
  server.registerTool("format_sql", {
4
+ description: "Format and prettify SQL queries",
4
5
  inputSchema: {
5
6
  sql: z.string().describe("SQL query to format"),
6
7
  dialect: z.string().optional().describe("SQL dialect to use for formatting (e.g., 'sql', 'mysql', 'postgresql', 'sqlite', 'mariadb', 'db2', 'plsql', 'n1ql', 'redshift', 'spark', 'tsql', 'trino', 'bigquery'). Default is 'sql'."),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerFormatXml(server) {
3
3
  server.registerTool("format_xml", {
4
+ description: "Format and prettify XML",
4
5
  inputSchema: {
5
6
  xml: z.string().describe("XML string to format"),
6
7
  indent: z.number().describe("Number of spaces for indentation").optional(),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerFormatYaml(server) {
3
3
  server.registerTool("format_yaml", {
4
+ description: "Format and prettify YAML",
4
5
  inputSchema: {
5
6
  yaml: z.string().describe("YAML string to format"),
6
7
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerMinifyJson(server) {
3
3
  server.registerTool("minify_json", {
4
+ description: "Minify JSON by removing whitespace and unnecessary characters. Example: formatted JSON → compact single-line JSON",
4
5
  inputSchema: {
5
6
  json: z.string().describe("JSON string to minify"),
6
7
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerConvertList(server) {
3
3
  server.registerTool("convert_list", {
4
+ description: "Convert between different list formats (comma-separated, line-separated, etc.)",
4
5
  inputSchema: {
5
6
  list: z.string().describe("Input list to convert"),
6
7
  inputFormat: z.enum(["comma", "semicolon", "newline", "space", "pipe"]).describe("Input format"),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerPrettifyHtml(server) {
3
3
  server.registerTool("format_html", {
4
+ description: "Format and beautify HTML code",
4
5
  inputSchema: {
5
6
  html: z.string().describe("HTML code to prettify"),
6
7
  indentSize: z.number().optional().default(2).describe("Number of spaces for indentation")
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerPrettifyJavascript(server) {
3
3
  server.registerTool("format_javascript", {
4
+ description: "Format and beautify JavaScript/CSS code",
4
5
  inputSchema: {
5
6
  code: z.string().describe("JavaScript or CSS code to prettify"),
6
7
  type: z.enum(["javascript", "css"]).describe("Type of code to format"),
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { CronExpressionParser } from 'cron-parser';
3
3
  export function registerGenerateCrontab(server) {
4
4
  server.registerTool("generate_crontab", {
5
+ description: "Generate crontab expressions",
5
6
  inputSchema: {
6
7
  minute: z.string().describe("Minute (0-59, *, */n, n-m)").optional(),
7
8
  hour: z.string().describe("Hour (0-23, *, */n, n-m)").optional(),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerGenerateMarkdownToc(server) {
3
3
  server.registerTool("generate_markdown_toc", {
4
+ description: "Generate a table of contents from Markdown headers",
4
5
  inputSchema: {
5
6
  markdown: z.string().describe("Markdown content to generate TOC from"),
6
7
  maxLevel: z.number().optional().default(6).describe("Maximum header level to include (1-6)"),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerTestRegex(server) {
3
3
  server.registerTool("test_regex", {
4
+ description: "Test regular expressions against text",
4
5
  inputSchema: {
5
6
  pattern: z.string().describe("Regular expression pattern"),
6
7
  text: z.string().describe("Text to test against the regex"),
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import yaml from "js-yaml";
3
3
  export function registerDockerComposeToRun(server) {
4
4
  server.registerTool("convert_docker_compose_to_run", {
5
+ description: "Convert Docker Compose files to docker run commands",
5
6
  inputSchema: {
6
7
  content: z.string().describe("Docker Compose file content to convert"),
7
8
  },
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import yaml from "js-yaml";
3
3
  export function registerDockerRunToCompose(server) {
4
4
  server.registerTool("convert_docker_run_to_compose", {
5
+ description: "Convert docker run commands to Docker Compose format",
5
6
  inputSchema: {
6
7
  commands: z.string().describe("Docker run commands to convert (one per line)"),
7
8
  },
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import yaml from "js-yaml";
3
3
  export function registerGenerateTraefik(server) {
4
4
  server.registerTool("generate_traefik_compose", {
5
+ description: "Generate Traefik Docker Compose configuration",
5
6
  inputSchema: {
6
7
  domain: z.string().optional().describe("Domain for Traefik services (default: example.com)"),
7
8
  email: z.string().optional().describe("Email for Let's Encrypt (default: admin@example.com)"),
@@ -1,5 +1,6 @@
1
1
  export function registerReferenceDocker(server) {
2
2
  server.registerTool("show_docker_reference", {
3
+ description: "Get Docker commands reference and cheatsheet",
3
4
  inputSchema: {},
4
5
  // VS Code compliance annotations
5
6
  annotations: {
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import yaml from "js-yaml";
3
3
  export function registerValidateCompose(server) {
4
4
  server.registerTool("validate_docker_compose", {
5
+ description: "Validate Docker Compose files for syntax errors, compatibility issues, and best practices. Example: check YAML syntax, service configuration, network setup",
5
6
  inputSchema: {
6
7
  content: z.string().describe("Docker Compose file content to validate"),
7
8
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerConvertTextBinary(server) {
3
3
  server.registerTool("convert_text_to_binary", {
4
+ description: "Convert text to binary and vice versa",
4
5
  inputSchema: {
5
6
  input: z.string().describe("Text to convert to binary, or binary to convert to text"),
6
7
  operation: z.enum(["encode", "decode"]).describe("Operation: encode text to binary or decode binary to text"),
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerDecodeBase64(server) {
3
3
  server.registerTool("decode_base64", {
4
+ description: 'Decode Base64 text back to original text. Example: "SGVsbG8gV29ybGQ=" → "Hello World"',
4
5
  inputSchema: {
5
6
  text: z.string().min(1).regex(/^[A-Za-z0-9+/]*={0,2}$/, "Invalid Base64 format").describe("Base64 text to decode"),
6
7
  },
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  export function registerDecodeHtml(server) {
3
3
  server.registerTool("decode_html", {
4
+ description: "Decode HTML entities",
4
5
  inputSchema: {
5
6
  text: z.string().describe("HTML encoded text to decode"),
6
7
  },