it-tools-mcp 3.2.12 → 3.6.0
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 +60 -67
- package/build/tools/ansible/ansible-inventory-generator/index.js +5 -2
- package/build/tools/ansible/ansible-playbook-validator/index.js +5 -2
- package/build/tools/ansible/ansible-reference/index.js +4 -1
- package/build/tools/ansible/ansible-vault-decrypt/index.js +6 -3
- package/build/tools/ansible/ansible-vault-encrypt/index.js +7 -4
- package/build/tools/color/color-hex-to-rgb/index.js +5 -2
- package/build/tools/color/color-rgb-to-hex/index.js +7 -4
- package/build/tools/crypto/basic-auth-generator/index.js +6 -3
- package/build/tools/crypto/bcrypt-hash/index.js +7 -4
- package/build/tools/crypto/bip39-generate/index.js +5 -2
- package/build/tools/crypto/hash-md5/index.js +5 -2
- package/build/tools/crypto/hash-sha1/index.js +5 -2
- package/build/tools/crypto/hash-sha256/index.js +5 -2
- package/build/tools/crypto/hash-sha512/index.js +5 -2
- package/build/tools/crypto/hmac-generator/index.js +7 -4
- package/build/tools/crypto/jwt-decode/index.js +5 -2
- package/build/tools/crypto/otp-code-generator/index.js +7 -4
- package/build/tools/crypto/password-generate/index.js +9 -6
- package/build/tools/crypto/token-generator/index.js +7 -4
- package/build/tools/dataFormat/html-to-markdown/index.js +5 -2
- package/build/tools/dataFormat/json-diff/index.js +6 -3
- package/build/tools/dataFormat/json-format/index.js +7 -3
- package/build/tools/dataFormat/json-minify/index.js +5 -2
- package/build/tools/dataFormat/json-to-csv/index.js +6 -3
- package/build/tools/dataFormat/json-to-toml/index.js +5 -2
- package/build/tools/dataFormat/markdown-to-html/index.js +5 -2
- package/build/tools/dataFormat/phone-format/index.js +6 -3
- package/build/tools/dataFormat/sql-format/index.js +6 -3
- package/build/tools/dataFormat/toml-to-json/index.js +5 -2
- package/build/tools/dataFormat/xml-format/index.js +6 -3
- package/build/tools/dataFormat/yaml-format/index.js +5 -2
- package/build/tools/development/crontab-generate/index.js +9 -6
- package/build/tools/development/html-prettifier/index.js +6 -3
- package/build/tools/development/javascript-prettifier/index.js +7 -4
- package/build/tools/development/list-converter/index.js +8 -5
- package/build/tools/development/markdown-toc-generator/index.js +7 -4
- package/build/tools/development/regex-tester/index.js +7 -4
- package/build/tools/docker/docker-compose-to-docker-run/index.js +5 -2
- package/build/tools/docker/docker-compose-validator/index.js +5 -2
- package/build/tools/docker/docker-reference/index.js +4 -1
- package/build/tools/docker/docker-run-to-docker-compose/index.js +5 -2
- package/build/tools/docker/traefik-compose-generator/index.js +9 -6
- package/build/tools/encoding/base64-decode/index.js +6 -2
- package/build/tools/encoding/base64-encode/index.js +27 -11
- package/build/tools/encoding/html-decode/index.js +5 -2
- package/build/tools/encoding/html-encode/index.js +5 -2
- package/build/tools/encoding/html-entities-extended/index.js +6 -3
- package/build/tools/encoding/text-to-binary/index.js +6 -3
- package/build/tools/encoding/url-decode/index.js +5 -2
- package/build/tools/encoding/url-encode/index.js +5 -2
- package/build/tools/forensic/file-type-identifier/index.js +6 -3
- package/build/tools/forensic/safelink-decoder/index.js +5 -2
- package/build/tools/forensic/url-fanger/index.js +6 -3
- package/build/tools/idGenerators/qr-generate/index.js +6 -3
- package/build/tools/idGenerators/svg-placeholder-generator/index.js +9 -6
- package/build/tools/idGenerators/ulid-generate/index.js +4 -1
- package/build/tools/idGenerators/uuid-generate/index.js +4 -1
- package/build/tools/math/math-evaluate/index.js +5 -2
- package/build/tools/math/number-base-converter/index.js +7 -4
- package/build/tools/math/percentage-calculator/index.js +7 -4
- package/build/tools/math/roman-numeral-converter/index.js +5 -2
- package/build/tools/math/temperature-converter/index.js +7 -4
- package/build/tools/math/unix-timestamp-converter/index.js +5 -2
- package/build/tools/network/cat/index.js +5 -2
- package/build/tools/network/cidr-to-ip-range/index.js +5 -2
- package/build/tools/network/curl/index.js +11 -6
- package/build/tools/network/dig/index.js +6 -3
- package/build/tools/network/grep/index.js +6 -3
- package/build/tools/network/head/index.js +6 -3
- package/build/tools/network/iban-validate/index.js +5 -2
- package/build/tools/network/ip-range-to-cidr/index.js +6 -3
- package/build/tools/network/ip-subnet-calculator/index.js +6 -3
- package/build/tools/network/ipv4-subnet-calc/index.js +5 -2
- package/build/tools/network/ipv6-subnet-calculator/index.js +6 -3
- package/build/tools/network/ipv6-ula-generator/index.js +5 -2
- package/build/tools/network/mac-address-generate/index.js +6 -3
- package/build/tools/network/nslookup/index.js +5 -2
- package/build/tools/network/ping/index.js +9 -4
- package/build/tools/network/ps/index.js +4 -1
- package/build/tools/network/random-port/index.js +8 -5
- package/build/tools/network/scp/index.js +10 -7
- package/build/tools/network/ssh/index.js +8 -5
- package/build/tools/network/tail/index.js +6 -3
- package/build/tools/network/telnet/index.js +6 -3
- package/build/tools/network/top/index.js +4 -1
- package/build/tools/network/url-parse/index.js +5 -2
- package/build/tools/physics/angle-converter/index.js +11 -8
- package/build/tools/physics/energy-converter/index.js +13 -10
- package/build/tools/physics/power-converter/index.js +13 -10
- package/build/tools/text/ascii-art-text/index.js +6 -3
- package/build/tools/text/distinct-words/index.js +5 -2
- package/build/tools/text/emoji-search/index.js +5 -2
- package/build/tools/text/lorem-ipsum-generator/index.js +6 -3
- package/build/tools/text/numeronym-generator/index.js +5 -2
- package/build/tools/text/slugify-string/index.js +7 -4
- package/build/tools/text/string-obfuscator/index.js +6 -3
- package/build/tools/text/text-camelcase/index.js +5 -2
- package/build/tools/text/text-capitalize/index.js +5 -2
- package/build/tools/text/text-diff/index.js +6 -3
- package/build/tools/text/text-kebabcase/index.js +5 -2
- package/build/tools/text/text-lowercase/index.js +5 -2
- package/build/tools/text/text-pascalcase/index.js +5 -2
- package/build/tools/text/text-snakecase/index.js +5 -2
- package/build/tools/text/text-stats/index.js +5 -2
- package/build/tools/text/text-to-nato-alphabet/index.js +6 -3
- package/build/tools/text/text-to-unicode/index.js +6 -3
- package/build/tools/text/text-to-unicode-names/index.js +5 -2
- package/build/tools/text/text-uppercase/index.js +5 -2
- package/build/tools/utility/css-prettifier/index.js +6 -3
- package/build/tools/utility/device-info/index.js +4 -1
- package/build/tools/utility/email-normalizer/index.js +5 -2
- package/build/tools/utility/http-status-codes/index.js +5 -2
- package/build/tools/utility/mime-types/index.js +6 -3
- package/build/tools/utility/port-numbers/index.js +5 -2
- package/build/tools/utility/rem-px-converter/index.js +8 -4
- package/package.json +1 -1
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerUnixTimestampConverter(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("unix-timestamp-converter", {
|
|
4
|
+
description: "Convert between Unix timestamps and human-readable dates",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
input: z.string().describe("Unix timestamp (seconds) or ISO date string")
|
|
7
|
+
}
|
|
5
8
|
}, async ({ input }) => {
|
|
6
9
|
try {
|
|
7
10
|
// Auto-detect if input is a timestamp or date string
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
export function registerCat(server) {
|
|
4
|
-
server.
|
|
5
|
-
|
|
4
|
+
server.registerTool("cat", {
|
|
5
|
+
description: "Display content of a file",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
file: z.string().describe("File path")
|
|
8
|
+
}
|
|
6
9
|
}, async ({ file }) => {
|
|
7
10
|
try {
|
|
8
11
|
const data = fs.readFileSync(file, "utf8");
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerCidrToIpRange(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("cidr-to-ip-range", {
|
|
4
|
+
description: "Convert CIDR notation to IP address range",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
cidr: z.string().describe("CIDR notation (e.g., 192.168.1.0/24)")
|
|
7
|
+
}
|
|
5
8
|
}, async ({ cidr }) => {
|
|
6
9
|
try {
|
|
7
10
|
const [network, prefixLength] = cidr.split('/');
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerCurl(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
server.registerTool("curl", {
|
|
4
|
+
description: "Make HTTP requests to web endpoints. Example: GET request to an API or POST data to a server",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
url: z.string().describe("URL to request"),
|
|
7
|
+
method: z.enum(["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"]).default("GET").describe("HTTP method"),
|
|
8
|
+
headers: z.record(z.string()).optional().describe("Request headers (object of key-value pairs)"),
|
|
9
|
+
body: z.string().optional().describe("Request body (for POST/PUT/PATCH)")
|
|
10
|
+
}
|
|
8
11
|
}, async ({ url, method, headers, body }) => {
|
|
9
12
|
try {
|
|
10
13
|
const controller = new AbortController();
|
|
@@ -27,7 +30,9 @@ export function registerCurl(server) {
|
|
|
27
30
|
}
|
|
28
31
|
catch (error) {
|
|
29
32
|
if (error.name === 'AbortError') {
|
|
30
|
-
return {
|
|
33
|
+
return {
|
|
34
|
+
isError: true, content: [{ type: "text", text: `curl failed: Request timeout (10s)` }]
|
|
35
|
+
};
|
|
31
36
|
}
|
|
32
37
|
return { content: [{ type: "text", text: `curl failed: ${error.message || error}` }] };
|
|
33
38
|
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import dns from "dns";
|
|
3
3
|
export function registerDig(server) {
|
|
4
|
-
server.
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
server.registerTool("dig", {
|
|
5
|
+
description: "Perform DNS lookup with dig command",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
target: z.string().describe("Hostname or IP address"),
|
|
8
|
+
type: z.string().default("A").describe("DNS record type")
|
|
9
|
+
}
|
|
7
10
|
}, async ({ target, type }) => {
|
|
8
11
|
return new Promise((resolve) => {
|
|
9
12
|
dns.resolve(target, type, (err, addresses) => {
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
export function registerGrep(server) {
|
|
4
|
-
server.
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
server.registerTool("grep", {
|
|
5
|
+
description: "Search for patterns in files",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
pattern: z.string().describe("Pattern to search for"),
|
|
8
|
+
file: z.string().describe("File path")
|
|
9
|
+
}
|
|
7
10
|
}, async ({ pattern, file }) => {
|
|
8
11
|
try {
|
|
9
12
|
const data = fs.readFileSync(file, "utf8");
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
export function registerHead(server) {
|
|
4
|
-
server.
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
server.registerTool("head", {
|
|
5
|
+
description: "Display the beginning of a file",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
file: z.string().describe("File path"),
|
|
8
|
+
lines: z.number().default(10).describe("Number of lines")
|
|
9
|
+
}
|
|
7
10
|
}, async ({ file, lines }) => {
|
|
8
11
|
try {
|
|
9
12
|
const data = fs.readFileSync(file, "utf8");
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerIbanValidate(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("iban-validate", {
|
|
4
|
+
description: "Validate and parse IBAN (International Bank Account Number)",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
iban: z.string().describe("IBAN to validate and parse"),
|
|
7
|
+
}
|
|
5
8
|
}, async ({ iban }) => {
|
|
6
9
|
try {
|
|
7
10
|
const IBAN = (await import("iban")).default;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerIpRangeToCidr(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("ip-range-to-cidr", {
|
|
4
|
+
description: "Convert IP address range to CIDR notation(s)",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
startIP: z.string().describe("Starting IP address"),
|
|
7
|
+
endIP: z.string().describe("Ending IP address")
|
|
8
|
+
}
|
|
6
9
|
}, async ({ startIP, endIP }) => {
|
|
7
10
|
try {
|
|
8
11
|
// Parse IP addresses
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerIpSubnetCalculator(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("ip-subnet-calculator", {
|
|
4
|
+
description: "Calculate subnet information for IPv4",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
ip: z.string().describe("IPv4 address (e.g., 192.168.1.1)"),
|
|
7
|
+
cidr: z.number().describe("CIDR notation (e.g., 24)"),
|
|
8
|
+
}
|
|
6
9
|
}, async ({ ip, cidr }) => {
|
|
7
10
|
try {
|
|
8
11
|
if (cidr < 1 || cidr > 32) {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerIpv4SubnetCalc(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("ipv4-subnet-calc", {
|
|
4
|
+
description: "Calculate IPv4 subnet information",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
cidr: z.string().describe("IPv4 CIDR notation (e.g., 192.168.1.0/24)"),
|
|
7
|
+
}
|
|
5
8
|
}, async ({ cidr }) => {
|
|
6
9
|
try {
|
|
7
10
|
const [ip, prefixLength] = cidr.split('/');
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerIpv6SubnetCalculator(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("ipv6-subnet-calculator", {
|
|
4
|
+
description: "Calculate IPv6 subnet information",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
ipv6: z.string().describe("IPv6 address and prefix (e.g., 2001:db8::/32)"),
|
|
7
|
+
newPrefix: z.number().optional().describe("New prefix length for subnetting")
|
|
8
|
+
}
|
|
6
9
|
}, async ({ ipv6, newPrefix }) => {
|
|
7
10
|
try {
|
|
8
11
|
const [address, prefixStr] = ipv6.split('/');
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerIpv6UlaGenerator(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("ipv6-ula-generator", {
|
|
4
|
+
description: "Generate IPv6 Unique Local Address (ULA) prefix",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
globalId: z.string().optional().describe("Global ID (40 bits in hex, auto-generated if not provided)"),
|
|
7
|
+
}
|
|
5
8
|
}, async ({ globalId }) => {
|
|
6
9
|
try {
|
|
7
10
|
// Generate random 40-bit Global ID if not provided
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerMacAddressGenerate(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("mac-address-generate", {
|
|
4
|
+
description: "Generate random MAC address",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
prefix: z.string().optional().describe("MAC address prefix (e.g., '00:1B:44')"),
|
|
7
|
+
separator: z.enum([":", "-"]).describe("Separator character").optional(),
|
|
8
|
+
}
|
|
6
9
|
}, async ({ prefix, separator = ":" }) => {
|
|
7
10
|
try {
|
|
8
11
|
let macParts = [];
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import dns from "dns";
|
|
3
3
|
export function registerNslookup(server) {
|
|
4
|
-
server.
|
|
5
|
-
|
|
4
|
+
server.registerTool("nslookup", {
|
|
5
|
+
description: "Perform DNS lookup on a hostname or IP address",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
target: z.string().describe("Hostname or IP address")
|
|
8
|
+
}
|
|
6
9
|
}, async ({ target }) => {
|
|
7
10
|
return new Promise((resolve) => {
|
|
8
11
|
dns.lookup(target, (err, address, family) => {
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import ping from "ping";
|
|
3
3
|
export function registerPing(server) {
|
|
4
|
-
server.
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
server.registerTool("ping", {
|
|
5
|
+
description: "Test network connectivity to a host. Example: ping google.com to check if it's reachable",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
target: z.string().describe("Host to ping"),
|
|
8
|
+
count: z.number().default(4).describe("Number of ping attempts")
|
|
9
|
+
}
|
|
7
10
|
}, async ({ target, count }) => {
|
|
8
11
|
try {
|
|
9
12
|
const res = await ping.promise.probe(target, { min_reply: count });
|
|
@@ -14,7 +17,9 @@ export function registerPing(server) {
|
|
|
14
17
|
};
|
|
15
18
|
}
|
|
16
19
|
catch (error) {
|
|
17
|
-
return {
|
|
20
|
+
return {
|
|
21
|
+
isError: true, content: [{ type: "text", text: `Ping failed: ${error instanceof Error ? error.message : error}` }]
|
|
22
|
+
};
|
|
18
23
|
}
|
|
19
24
|
});
|
|
20
25
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import psList from "ps-list";
|
|
2
2
|
export function registerPs(server) {
|
|
3
|
-
server.
|
|
3
|
+
server.registerTool("ps", {
|
|
4
|
+
description: "List running processes",
|
|
5
|
+
inputSchema: {}
|
|
6
|
+
}, async () => {
|
|
4
7
|
try {
|
|
5
8
|
const processes = await psList();
|
|
6
9
|
// Defensive: handle missing properties and filter out bad entries
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerRandomPort(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
server.registerTool("random-port", {
|
|
4
|
+
description: "Generate random port numbers",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
count: z.number().describe("Number of ports to generate").optional(),
|
|
7
|
+
min: z.number().describe("Minimum port number").optional(),
|
|
8
|
+
max: z.number().describe("Maximum port number").optional(),
|
|
9
|
+
exclude: z.array(z.number()).optional().describe("Ports to exclude"),
|
|
10
|
+
}
|
|
8
11
|
}, async ({ count = 1, min = 1024, max = 65535, exclude = [] }) => {
|
|
9
12
|
try {
|
|
10
13
|
const ports = [];
|
|
@@ -37,13 +37,16 @@ function resolvePrivateKey(privateKeyArg) {
|
|
|
37
37
|
return privateKeyArg;
|
|
38
38
|
}
|
|
39
39
|
export function registerScp(server) {
|
|
40
|
-
server.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
server.registerTool("scp", {
|
|
41
|
+
description: "Copy files to or from a remote host using SFTP (SCP-like)",
|
|
42
|
+
inputSchema: {
|
|
43
|
+
target: z.string().describe("Target host"),
|
|
44
|
+
user: z.string().describe("Username"),
|
|
45
|
+
direction: z.enum(["upload", "download"]).describe("Direction: upload (local to remote) or download (remote to local)"),
|
|
46
|
+
localPath: z.string().describe("Local file path (source for upload, destination for download)"),
|
|
47
|
+
remotePath: z.string().describe("Remote file path (destination for upload, source for download)"),
|
|
48
|
+
privateKey: z.string().optional().describe("Private key for authentication (PEM format, optional, or path to key file)")
|
|
49
|
+
}
|
|
47
50
|
}, async ({ target, user, direction, localPath, remotePath, privateKey }) => {
|
|
48
51
|
try {
|
|
49
52
|
const { Client } = await import("ssh2");
|
|
@@ -38,11 +38,14 @@ function resolvePrivateKey(privateKeyArg) {
|
|
|
38
38
|
return privateKeyArg;
|
|
39
39
|
}
|
|
40
40
|
export function registerSsh(server) {
|
|
41
|
-
server.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
server.registerTool("ssh", {
|
|
42
|
+
description: "Connect to a target via SSH",
|
|
43
|
+
inputSchema: {
|
|
44
|
+
target: z.string().describe("Target host"),
|
|
45
|
+
user: z.string().describe("Username"),
|
|
46
|
+
command: z.string().describe("Command to run on remote host"),
|
|
47
|
+
privateKey: z.string().optional().describe("Private key for authentication (PEM format, optional, or path to key file)")
|
|
48
|
+
}
|
|
46
49
|
}, async ({ target, user, command, privateKey }) => {
|
|
47
50
|
return new Promise((resolve) => {
|
|
48
51
|
let resolvedKey;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import readLastLines from "read-last-lines";
|
|
3
3
|
export function registerTail(server) {
|
|
4
|
-
server.
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
server.registerTool("tail", {
|
|
5
|
+
description: "Display the end of a file",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
file: z.string().describe("File path"),
|
|
8
|
+
lines: z.number().default(10).describe("Number of lines")
|
|
9
|
+
}
|
|
7
10
|
}, async ({ file, lines }) => {
|
|
8
11
|
try {
|
|
9
12
|
const out = await readLastLines.read(file, lines);
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerTelnet(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("telnet", {
|
|
4
|
+
description: "Test TCP connectivity to a host and port",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
target: z.string().describe("Host to connect to"),
|
|
7
|
+
port: z.number().describe("Port number")
|
|
8
|
+
}
|
|
6
9
|
}, async ({ target, port }) => {
|
|
7
10
|
return new Promise(async (resolve) => {
|
|
8
11
|
try {
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import psList from "ps-list";
|
|
2
2
|
export function registerTop(server) {
|
|
3
|
-
server.
|
|
3
|
+
server.registerTool("top", {
|
|
4
|
+
description: "Display system processes (snapshot)",
|
|
5
|
+
inputSchema: {}
|
|
6
|
+
}, async () => {
|
|
4
7
|
try {
|
|
5
8
|
const processes = await psList();
|
|
6
9
|
const sorted = processes.sort((a, b) => (b.cpu || 0) - (a.cpu || 0)).slice(0, 10);
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerUrlParse(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("url-parse", {
|
|
4
|
+
description: "Parse URL into components",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
url: z.string().describe("URL to parse"),
|
|
7
|
+
}
|
|
5
8
|
}, async ({ url }) => {
|
|
6
9
|
try {
|
|
7
10
|
const urlObj = new URL(url);
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerAngleConverter(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
|
|
3
|
+
server.registerTool("angle-converter", {
|
|
4
|
+
description: "Convert between different angle units",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
value: z.number().describe("Angle value to convert"),
|
|
7
|
+
fromUnit: z.enum([
|
|
8
|
+
"degree", "radian", "gradian", "turn", "arcminute", "arcsecond"
|
|
9
|
+
]).describe("Source angle unit"),
|
|
10
|
+
toUnit: z.enum([
|
|
11
|
+
"degree", "radian", "gradian", "turn", "arcminute", "arcsecond"
|
|
12
|
+
]).describe("Target angle unit")
|
|
13
|
+
}
|
|
11
14
|
}, async ({ value, fromUnit, toUnit }) => {
|
|
12
15
|
try {
|
|
13
16
|
// Conversion factors to degrees
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerEnergyConverter(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
server.registerTool("energy-converter", {
|
|
4
|
+
description: "Convert between different energy units",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
value: z.number().describe("Energy value to convert"),
|
|
7
|
+
fromUnit: z.enum([
|
|
8
|
+
"joule", "kilojoule", "calorie", "kilocalorie", "btu",
|
|
9
|
+
"watt-hour", "kilowatt-hour", "electronvolt", "foot-pound"
|
|
10
|
+
]).describe("Source energy unit"),
|
|
11
|
+
toUnit: z.enum([
|
|
12
|
+
"joule", "kilojoule", "calorie", "kilocalorie", "btu",
|
|
13
|
+
"watt-hour", "kilowatt-hour", "electronvolt", "foot-pound"
|
|
14
|
+
]).describe("Target energy unit")
|
|
15
|
+
}
|
|
13
16
|
}, async ({ value, fromUnit, toUnit }) => {
|
|
14
17
|
try {
|
|
15
18
|
// Conversion factors to joules
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerPowerConverter(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
server.registerTool("power-converter", {
|
|
4
|
+
description: "Convert between different power units",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
value: z.number().describe("Power value to convert"),
|
|
7
|
+
fromUnit: z.enum([
|
|
8
|
+
"watt", "kilowatt", "megawatt", "horsepower", "metric-horsepower",
|
|
9
|
+
"btu-per-hour", "calorie-per-second", "foot-pound-per-second"
|
|
10
|
+
]).describe("Source power unit"),
|
|
11
|
+
toUnit: z.enum([
|
|
12
|
+
"watt", "kilowatt", "megawatt", "horsepower", "metric-horsepower",
|
|
13
|
+
"btu-per-hour", "calorie-per-second", "foot-pound-per-second"
|
|
14
|
+
]).describe("Target power unit")
|
|
15
|
+
}
|
|
13
16
|
}, async ({ value, fromUnit, toUnit }) => {
|
|
14
17
|
try {
|
|
15
18
|
// Conversion factors to watts
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerAsciiArtText(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("ascii-art-text", {
|
|
4
|
+
description: "Generate ASCII art text",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
text: z.string().describe("Text to convert to ASCII art, or use 'LIST_FONTS' to get all available font names"),
|
|
7
|
+
font: z.string().describe("ASCII art font style. Supports all 295+ figlet fonts. Use 'standard' if unsure.").optional(),
|
|
8
|
+
}
|
|
6
9
|
}, async ({ text, font = "standard" }) => {
|
|
7
10
|
try {
|
|
8
11
|
// Generate ASCII art using figlet
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerDistinctWords(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("distinct-words", {
|
|
4
|
+
description: "Count distinct words in text and show their frequency",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
text: z.string().describe("Text to analyze for distinct words")
|
|
7
|
+
}
|
|
5
8
|
}, async ({ text }) => {
|
|
6
9
|
// Remove punctuation and split into words
|
|
7
10
|
const cleanedText = text.replace(/[^\w\s]/g, ' ').toLowerCase();
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerEmojiSearch(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("emoji-search", {
|
|
4
|
+
description: "Search for emojis by name or category",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
query: z.string().describe("Search term for emoji (name, category, or keyword)"),
|
|
7
|
+
}
|
|
5
8
|
}, async ({ query }) => {
|
|
6
9
|
try {
|
|
7
10
|
// Basic emoji database (simplified)
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerLoremIpsumGenerator(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("lorem-ipsum-generator", {
|
|
4
|
+
description: "Generate Lorem Ipsum placeholder text",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
count: z.number().describe("Number of items to generate").optional(),
|
|
7
|
+
type: z.enum(["words", "sentences", "paragraphs"]).describe("Type of content to generate").optional(),
|
|
8
|
+
}
|
|
6
9
|
}, async ({ count = 5, type = "sentences" }) => {
|
|
7
10
|
try {
|
|
8
11
|
if (count < 1 || count > 100) {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerNumeronymGenerator(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("numeronym-generator", {
|
|
4
|
+
description: "Generate numeronyms (abbreviations with numbers) from text",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
text: z.string().describe("Text to convert to numeronym"),
|
|
7
|
+
}
|
|
5
8
|
}, async ({ text }) => {
|
|
6
9
|
try {
|
|
7
10
|
const words = text.trim().split(/\s+/);
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerSlugifyString(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
server.registerTool("slugify-string", {
|
|
4
|
+
description: "Convert text to URL-friendly slug format",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
text: z.string().describe("Text to convert to slug"),
|
|
7
|
+
separator: z.string().describe("Character to use as separator").optional(),
|
|
8
|
+
lowercase: z.boolean().describe("Convert to lowercase").optional(),
|
|
9
|
+
}
|
|
7
10
|
}, async ({ text, separator = "-", lowercase = true }) => {
|
|
8
11
|
try {
|
|
9
12
|
let slug = text
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerStringObfuscator(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("string-obfuscator", {
|
|
4
|
+
description: "Obfuscate text by replacing characters with their HTML entities or other representations",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
text: z.string().describe("Text to obfuscate"),
|
|
7
|
+
method: z.enum(["html-entities", "unicode", "base64"]).describe("Obfuscation method").optional(),
|
|
8
|
+
}
|
|
6
9
|
}, async ({ text, method = "html-entities" }) => {
|
|
7
10
|
try {
|
|
8
11
|
let result = '';
|