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.
- package/build/index.js +200 -4
- package/build/tools/ansible/decrypt_ansible_vault/index.js +1 -0
- package/build/tools/ansible/encrypt_ansible_vault/index.js +1 -0
- package/build/tools/ansible/generate_ansible_inventory/index.js +1 -0
- package/build/tools/ansible/parse_ansible_inventory/index.js +1 -0
- package/build/tools/ansible/show_ansible_reference/index.js +1 -0
- package/build/tools/ansible/validate_ansible_playbook/index.js +1 -0
- package/build/tools/color/convert_hex_to_rgb/index.js +1 -0
- package/build/tools/color/convert_rgb_to_hex/index.js +1 -0
- package/build/tools/crypto/decode_jwt/index.js +1 -0
- package/build/tools/crypto/generate_basic_auth/index.js +1 -0
- package/build/tools/crypto/generate_bip39/index.js +1 -0
- package/build/tools/crypto/generate_hmac/index.js +1 -0
- package/build/tools/crypto/generate_otp/index.js +1 -0
- package/build/tools/crypto/generate_password/index.js +1 -0
- package/build/tools/crypto/generate_token/index.js +1 -0
- package/build/tools/crypto/hash_bcrypt/index.js +1 -0
- package/build/tools/crypto/hash_md5/index.js +1 -0
- package/build/tools/crypto/hash_sha1/index.js +1 -0
- package/build/tools/crypto/hash_sha256/index.js +1 -0
- package/build/tools/crypto/hash_sha512/index.js +1 -0
- package/build/tools/data_format/compare_json/index.js +1 -0
- package/build/tools/data_format/convert_html_to_markdown/index.js +1 -0
- package/build/tools/data_format/convert_json_to_csv/index.js +1 -0
- package/build/tools/data_format/convert_json_to_toml/index.js +1 -0
- package/build/tools/data_format/convert_markdown_to_html/index.js +1 -0
- package/build/tools/data_format/convert_toml_to_json/index.js +1 -0
- package/build/tools/data_format/format_json/index.js +1 -0
- package/build/tools/data_format/format_phone/index.js +1 -0
- package/build/tools/data_format/format_sql/index.js +1 -0
- package/build/tools/data_format/format_xml/index.js +1 -0
- package/build/tools/data_format/format_yaml/index.js +1 -0
- package/build/tools/data_format/minify_json/index.js +1 -0
- package/build/tools/development/convert_list/index.js +1 -0
- package/build/tools/development/format_html/index.js +1 -0
- package/build/tools/development/format_javascript/index.js +1 -0
- package/build/tools/development/generate_crontab/index.js +1 -0
- package/build/tools/development/generate_markdown_toc/index.js +1 -0
- package/build/tools/development/test_regex/index.js +1 -0
- package/build/tools/docker/convert_docker_compose_to_run/index.js +1 -0
- package/build/tools/docker/convert_docker_run_to_compose/index.js +1 -0
- package/build/tools/docker/generate_traefik_compose/index.js +1 -0
- package/build/tools/docker/show_docker_reference/index.js +1 -0
- package/build/tools/docker/validate_docker_compose/index.js +1 -0
- package/build/tools/encoding/convert_text_to_binary/index.js +1 -0
- package/build/tools/encoding/decode_base64/index.js +1 -0
- package/build/tools/encoding/decode_html/index.js +1 -0
- package/build/tools/encoding/decode_url/index.js +1 -0
- package/build/tools/encoding/encode_base64/index.js +1 -0
- package/build/tools/encoding/encode_html/index.js +1 -0
- package/build/tools/encoding/encode_html_entities/index.js +1 -0
- package/build/tools/encoding/encode_url/index.js +1 -0
- package/build/tools/forensic/decode_safelink/index.js +1 -0
- package/build/tools/forensic/fang_url/index.js +1 -0
- package/build/tools/forensic/identify_file_type/index.js +1 -0
- package/build/tools/id_generators/generate_qr_code/index.js +1 -0
- package/build/tools/id_generators/generate_svg_placeholder/index.js +1 -0
- package/build/tools/id_generators/generate_ulid/index.js +1 -0
- package/build/tools/id_generators/generate_uuid/index.js +1 -0
- package/build/tools/math/calculate_percentage/index.js +1 -0
- package/build/tools/math/convert_number_base/index.js +1 -0
- package/build/tools/math/convert_roman_numerals/index.js +1 -0
- package/build/tools/math/convert_temperature/index.js +1 -0
- package/build/tools/math/convert_unix_timestamp/index.js +1 -0
- package/build/tools/math/evaluate_math/index.js +1 -0
- package/build/tools/network/calculate_ip_subnet/index.js +1 -0
- package/build/tools/network/calculate_ipv4_subnet/index.js +1 -0
- package/build/tools/network/calculate_ipv6_subnet/index.js +1 -0
- package/build/tools/network/cat/index.js +1 -0
- package/build/tools/network/convert_cidr_to_ip_range/index.js +1 -0
- package/build/tools/network/convert_ip_range_to_cidr/index.js +1 -0
- package/build/tools/network/curl/index.js +1 -0
- package/build/tools/network/dig/index.js +1 -0
- package/build/tools/network/generate_ipv6_ula/index.js +1 -0
- package/build/tools/network/generate_mac_address/index.js +1 -0
- package/build/tools/network/generate_random_port/index.js +1 -0
- package/build/tools/network/grep/index.js +1 -0
- package/build/tools/network/head/index.js +1 -0
- package/build/tools/network/nslookup/index.js +1 -0
- package/build/tools/network/parse_url/index.js +1 -0
- package/build/tools/network/ping/index.js +1 -0
- package/build/tools/network/ps/index.js +1 -0
- package/build/tools/network/scp/index.js +1 -0
- package/build/tools/network/ssh/index.js +1 -0
- package/build/tools/network/tail/index.js +1 -0
- package/build/tools/network/telnet/index.js +1 -0
- package/build/tools/network/top/index.js +1 -0
- package/build/tools/network/validate_iban/index.js +1 -0
- package/build/tools/physics/convert_angle/index.js +1 -0
- package/build/tools/physics/convert_energy/index.js +1 -0
- package/build/tools/physics/convert_power/index.js +1 -0
- package/build/tools/text/analyze_distinct_words/index.js +1 -0
- package/build/tools/text/analyze_text_stats/index.js +1 -0
- package/build/tools/text/capitalize_text/index.js +1 -0
- package/build/tools/text/compare_text/index.js +1 -0
- package/build/tools/text/convert_text_to_camelcase/index.js +1 -0
- package/build/tools/text/convert_text_to_kebabcase/index.js +1 -0
- package/build/tools/text/convert_text_to_lowercase/index.js +1 -0
- package/build/tools/text/convert_text_to_nato/index.js +1 -0
- package/build/tools/text/convert_text_to_pascalcase/index.js +1 -0
- package/build/tools/text/convert_text_to_unicode/index.js +1 -0
- package/build/tools/text/convert_text_to_uppercase/index.js +1 -0
- package/build/tools/text/generate_ascii_art/index.js +1 -0
- package/build/tools/text/generate_lorem_ipsum/index.js +1 -0
- package/build/tools/text/generate_numeronym/index.js +1 -0
- package/build/tools/text/obfuscate_string/index.js +1 -0
- package/build/tools/text/search_emoji/index.js +1 -0
- package/build/tools/text/show_unicode_names/index.js +1 -0
- package/build/tools/text/slugify_text/index.js +1 -0
- package/build/tools/text/text_snakecase/index.js +1 -0
- package/build/tools/utility/convert_rem_px/index.js +1 -0
- package/build/tools/utility/format_css/index.js +1 -0
- package/build/tools/utility/lookup_http_status/index.js +1 -0
- package/build/tools/utility/lookup_mime_types/index.js +1 -0
- package/build/tools/utility/lookup_port_numbers/index.js +1 -0
- package/build/tools/utility/normalize_email/index.js +1 -0
- package/build/tools/utility/show_device_info/index.js +1 -0
- 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
|
-
//
|
|
1290
|
-
|
|
1291
|
-
|
|
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,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 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 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
|
},
|
|
@@ -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 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 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 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 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)"),
|
|
@@ -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
|
},
|