it-tools-mcp 3.2.12 → 4.0.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/README.dockerhub.md +1 -1
- package/README.md +105 -104
- package/build/index.js +464 -70
- package/build/tools/ansible/{ansible-vault-decrypt → decrypt_ansible_vault}/index.js +13 -4
- package/build/tools/ansible/{ansible-vault-encrypt → encrypt_ansible_vault}/index.js +14 -5
- package/build/tools/ansible/generate_ansible_inventory/index.js +221 -0
- package/build/tools/ansible/{ansible-inventory-generator → parse_ansible_inventory}/index.js +11 -2
- package/build/tools/ansible/{ansible-reference → show_ansible_reference}/index.js +11 -2
- package/build/tools/ansible/{ansible-playbook-validator → validate_ansible_playbook}/index.js +12 -3
- package/build/tools/color/{color-hex-to-rgb → convert_hex_to_rgb}/index.js +12 -3
- package/build/tools/color/{color-rgb-to-hex → convert_rgb_to_hex}/index.js +14 -5
- package/build/tools/crypto/{jwt-decode → decode_jwt}/index.js +12 -3
- package/build/tools/crypto/{basic-auth-generator → generate_basic_auth}/index.js +13 -4
- package/build/tools/crypto/{bip39-generate → generate_bip39}/index.js +12 -3
- package/build/tools/crypto/{hmac-generator → generate_hmac}/index.js +14 -5
- package/build/tools/crypto/{otp-code-generator → generate_otp}/index.js +14 -5
- package/build/tools/crypto/{password-generate → generate_password}/index.js +16 -7
- package/build/tools/crypto/{token-generator → generate_token}/index.js +14 -5
- package/build/tools/crypto/{bcrypt-hash → hash_bcrypt}/index.js +14 -5
- package/build/tools/crypto/{hash-md5 → hash_md5}/index.js +11 -2
- package/build/tools/crypto/{hash-sha1 → hash_sha1}/index.js +11 -2
- package/build/tools/crypto/{hash-sha256 → hash_sha256}/index.js +11 -2
- package/build/tools/crypto/{hash-sha512 → hash_sha512}/index.js +11 -2
- package/build/tools/{dataFormat/json-diff → data_format/compare_json}/index.js +13 -4
- package/build/tools/{dataFormat/html-to-markdown → data_format/convert_html_to_markdown}/index.js +12 -3
- package/build/tools/{dataFormat/json-to-csv → data_format/convert_json_to_csv}/index.js +13 -4
- package/build/tools/{dataFormat/json-to-toml → data_format/convert_json_to_toml}/index.js +12 -3
- package/build/tools/{dataFormat/markdown-to-html → data_format/convert_markdown_to_html}/index.js +12 -3
- package/build/tools/{dataFormat/toml-to-json → data_format/convert_toml_to_json}/index.js +12 -3
- package/build/tools/{dataFormat/json-format → data_format/format_json}/index.js +14 -4
- package/build/tools/{dataFormat/phone-format → data_format/format_phone}/index.js +13 -4
- package/build/tools/{dataFormat/sql-format → data_format/format_sql}/index.js +13 -4
- package/build/tools/{dataFormat/xml-format → data_format/format_xml}/index.js +13 -4
- package/build/tools/{dataFormat/yaml-format → data_format/format_yaml}/index.js +12 -3
- package/build/tools/{dataFormat/json-minify → data_format/minify_json}/index.js +12 -3
- package/build/tools/development/{list-converter → convert_list}/index.js +15 -6
- package/build/tools/development/{html-prettifier → format_html}/index.js +13 -4
- package/build/tools/development/{javascript-prettifier → format_javascript}/index.js +14 -5
- package/build/tools/development/{crontab-generate → generate_crontab}/index.js +16 -7
- package/build/tools/development/{markdown-toc-generator → generate_markdown_toc}/index.js +14 -5
- package/build/tools/development/{regex-tester → test_regex}/index.js +14 -5
- package/build/tools/docker/{docker-compose-to-docker-run → convert_docker_compose_to_run}/index.js +11 -2
- package/build/tools/docker/{docker-run-to-docker-compose → convert_docker_run_to_compose}/index.js +11 -2
- package/build/tools/docker/{traefik-compose-generator → generate_traefik_compose}/index.js +16 -7
- package/build/tools/docker/{docker-reference → show_docker_reference}/index.js +11 -2
- package/build/tools/docker/{docker-compose-validator → validate_docker_compose}/index.js +12 -3
- package/build/tools/encoding/{text-to-binary → convert_text_to_binary}/index.js +13 -4
- package/build/tools/encoding/{base64-decode → decode_base64}/index.js +13 -3
- package/build/tools/encoding/{html-decode → decode_html}/index.js +12 -3
- package/build/tools/encoding/{url-decode → decode_url}/index.js +12 -3
- package/build/tools/encoding/encode_base64/index.js +38 -0
- package/build/tools/encoding/{html-encode → encode_html}/index.js +12 -3
- package/build/tools/encoding/{html-entities-extended → encode_html_entities}/index.js +13 -4
- package/build/tools/encoding/encode_url/index.js +25 -0
- package/build/tools/forensic/{safelink-decoder → decode_safelink}/index.js +12 -3
- package/build/tools/forensic/{url-fanger → fang_url}/index.js +13 -4
- package/build/tools/forensic/{file-type-identifier → identify_file_type}/index.js +13 -4
- package/build/tools/{idGenerators/qr-generate → id_generators/generate_qr_code}/index.js +13 -4
- package/build/tools/{idGenerators/svg-placeholder-generator → id_generators/generate_svg_placeholder}/index.js +16 -7
- package/build/tools/{idGenerators/ulid-generate → id_generators/generate_ulid}/index.js +11 -2
- package/build/tools/id_generators/generate_uuid/index.js +23 -0
- package/build/tools/math/{percentage-calculator → calculate_percentage}/index.js +14 -5
- package/build/tools/math/{number-base-converter → convert_number_base}/index.js +14 -5
- package/build/tools/math/{roman-numeral-converter → convert_roman_numerals}/index.js +12 -3
- package/build/tools/math/{temperature-converter → convert_temperature}/index.js +14 -5
- package/build/tools/math/{unix-timestamp-converter → convert_unix_timestamp}/index.js +11 -2
- package/build/tools/math/{math-evaluate → evaluate_math}/index.js +12 -3
- package/build/tools/network/{ip-subnet-calculator → calculate_ip_subnet}/index.js +12 -3
- package/build/tools/network/{ipv4-subnet-calc → calculate_ipv4_subnet}/index.js +11 -2
- package/build/tools/network/{ipv6-subnet-calculator → calculate_ipv6_subnet}/index.js +12 -3
- package/build/tools/network/cat/index.js +11 -2
- package/build/tools/network/{cidr-to-ip-range → convert_cidr_to_ip_range}/index.js +11 -2
- package/build/tools/network/{ip-range-to-cidr → convert_ip_range_to_cidr}/index.js +12 -3
- package/build/tools/network/curl/index.js +17 -6
- package/build/tools/network/dig/index.js +12 -3
- package/build/tools/network/{ipv6-ula-generator → generate_ipv6_ula}/index.js +11 -2
- package/build/tools/network/{mac-address-generate → generate_mac_address}/index.js +12 -3
- package/build/tools/network/{random-port → generate_random_port}/index.js +14 -5
- package/build/tools/network/grep/index.js +12 -3
- package/build/tools/network/head/index.js +12 -3
- package/build/tools/network/nslookup/index.js +11 -2
- package/build/tools/network/{url-parse → parse_url}/index.js +11 -2
- package/build/tools/network/ping/index.js +15 -4
- package/build/tools/network/ps/index.js +10 -1
- package/build/tools/network/scp/index.js +16 -7
- package/build/tools/network/ssh/index.js +14 -5
- package/build/tools/network/tail/index.js +12 -3
- package/build/tools/network/telnet/index.js +12 -3
- package/build/tools/network/top/index.js +10 -1
- package/build/tools/network/{iban-validate → validate_iban}/index.js +11 -2
- package/build/tools/physics/{angle-converter → convert_angle}/index.js +17 -8
- package/build/tools/physics/{energy-converter → convert_energy}/index.js +19 -10
- package/build/tools/physics/{power-converter → convert_power}/index.js +19 -10
- package/build/tools/text/{distinct-words → analyze_distinct_words}/index.js +11 -2
- package/build/tools/text/{text-stats → analyze_text_stats}/index.js +11 -2
- package/build/tools/text/capitalize_text/index.js +25 -0
- package/build/tools/text/{text-diff → compare_text}/index.js +12 -3
- package/build/tools/text/convert_text_to_camelcase/index.js +29 -0
- package/build/tools/text/{text-kebabcase → convert_text_to_kebabcase}/index.js +11 -2
- package/build/tools/text/convert_text_to_lowercase/index.js +24 -0
- package/build/tools/text/{text-to-nato-alphabet → convert_text_to_nato}/index.js +12 -3
- package/build/tools/text/{text-pascalcase → convert_text_to_pascalcase}/index.js +11 -2
- package/build/tools/text/{text-to-unicode → convert_text_to_unicode}/index.js +12 -3
- package/build/tools/text/convert_text_to_uppercase/index.js +24 -0
- package/build/tools/text/{ascii-art-text → generate_ascii_art}/index.js +12 -3
- package/build/tools/text/{lorem-ipsum-generator → generate_lorem_ipsum}/index.js +12 -3
- package/build/tools/text/{numeronym-generator → generate_numeronym}/index.js +11 -2
- package/build/tools/text/{string-obfuscator → obfuscate_string}/index.js +12 -3
- package/build/tools/text/{emoji-search → search_emoji}/index.js +11 -2
- package/build/tools/text/{text-to-unicode-names → show_unicode_names}/index.js +11 -2
- package/build/tools/text/{slugify-string → slugify_text}/index.js +13 -4
- package/build/tools/text/text_snakecase/index.js +1 -0
- package/build/tools/utility/{rem-px-converter → convert_rem_px}/index.js +14 -4
- package/build/tools/utility/{css-prettifier → format_css}/index.js +12 -3
- package/build/tools/utility/{http-status-codes → lookup_http_status}/index.js +11 -2
- package/build/tools/utility/{mime-types → lookup_mime_types}/index.js +12 -3
- package/build/tools/utility/{port-numbers → lookup_port_numbers}/index.js +11 -2
- package/build/tools/utility/{email-normalizer → normalize_email}/index.js +11 -2
- package/build/tools/utility/{device-info → show_device_info}/index.js +10 -1
- package/package.json +50 -6
- package/build/tools/encoding/base64-encode/index.js +0 -16
- package/build/tools/encoding/url-encode/index.js +0 -16
- package/build/tools/idGenerators/uuid-generate/index.js +0 -14
- package/build/tools/text/text-camelcase/index.js +0 -20
- package/build/tools/text/text-capitalize/index.js +0 -16
- package/build/tools/text/text-lowercase/index.js +0 -15
- package/build/tools/text/text-snakecase/index.js +0 -20
- package/build/tools/text/text-uppercase/index.js +0 -15
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerTextUppercase(server) {
|
|
3
|
+
server.registerTool("convert_text_to_uppercase", {
|
|
4
|
+
description: "Convert text to uppercase",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
text: z.string().describe("Text to convert to uppercase"),
|
|
7
|
+
},
|
|
8
|
+
// VS Code compliance annotations
|
|
9
|
+
annotations: {
|
|
10
|
+
title: "Convert Text To Uppercase",
|
|
11
|
+
description: "Convert text to uppercase",
|
|
12
|
+
readOnlyHint: false
|
|
13
|
+
}
|
|
14
|
+
}, async ({ text }) => {
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: "text",
|
|
19
|
+
text: `Uppercase: ${text.toUpperCase()}`,
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerAsciiArtText(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("generate_ascii_art", {
|
|
4
|
+
description: "Generate ASCII art text using figlet fonts. Example: 'Hello' → stylized ASCII text art, supports 295+ fonts",
|
|
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
|
+
},
|
|
9
|
+
// VS Code compliance annotations
|
|
10
|
+
annotations: {
|
|
11
|
+
title: "Generate ASCII Art",
|
|
12
|
+
description: "Create ASCII text art using figlet with multiple font options",
|
|
13
|
+
readOnlyHint: false
|
|
14
|
+
}
|
|
6
15
|
}, async ({ text, font = "standard" }) => {
|
|
7
16
|
try {
|
|
8
17
|
// Generate ASCII art using figlet
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerLoremIpsumGenerator(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("generate_lorem_ipsum", {
|
|
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
|
+
},
|
|
9
|
+
// VS Code compliance annotations
|
|
10
|
+
annotations: {
|
|
11
|
+
title: "Generate Lorem Ipsum",
|
|
12
|
+
description: "Generate Lorem Ipsum placeholder text",
|
|
13
|
+
readOnlyHint: false
|
|
14
|
+
}
|
|
6
15
|
}, async ({ count = 5, type = "sentences" }) => {
|
|
7
16
|
try {
|
|
8
17
|
if (count < 1 || count > 100) {
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerNumeronymGenerator(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("generate_numeronym", {
|
|
4
|
+
description: "Generate numeronyms (abbreviations with numbers) from text",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
text: z.string().describe("Text to convert to numeronym"),
|
|
7
|
+
},
|
|
8
|
+
// VS Code compliance annotations
|
|
9
|
+
annotations: {
|
|
10
|
+
title: "Generate Numeronym",
|
|
11
|
+
description: "Generate numeronyms (abbreviations with numbers) from text",
|
|
12
|
+
readOnlyHint: false
|
|
13
|
+
}
|
|
5
14
|
}, async ({ text }) => {
|
|
6
15
|
try {
|
|
7
16
|
const words = text.trim().split(/\s+/);
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerStringObfuscator(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("obfuscate_string", {
|
|
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
|
+
},
|
|
9
|
+
// VS Code compliance annotations
|
|
10
|
+
annotations: {
|
|
11
|
+
title: "Obfuscate String",
|
|
12
|
+
description: "Obfuscate text by replacing characters with their HTML entities or other representations",
|
|
13
|
+
readOnlyHint: false
|
|
14
|
+
}
|
|
6
15
|
}, async ({ text, method = "html-entities" }) => {
|
|
7
16
|
try {
|
|
8
17
|
let result = '';
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerEmojiSearch(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("search_emoji", {
|
|
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
|
+
},
|
|
8
|
+
// VS Code compliance annotations
|
|
9
|
+
annotations: {
|
|
10
|
+
title: "Search Emoji",
|
|
11
|
+
description: "Search for emojis by name or category",
|
|
12
|
+
readOnlyHint: false
|
|
13
|
+
}
|
|
5
14
|
}, async ({ query }) => {
|
|
6
15
|
try {
|
|
7
16
|
// Basic emoji database (simplified)
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerTextToUnicodeNames(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("show_unicode_names", {
|
|
4
|
+
description: "Convert text to Unicode character names",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
text: z.string().describe("Text to convert to Unicode names")
|
|
7
|
+
},
|
|
8
|
+
// VS Code compliance annotations
|
|
9
|
+
annotations: {
|
|
10
|
+
title: "Show Unicode Names",
|
|
11
|
+
description: "Convert text to Unicode character names",
|
|
12
|
+
readOnlyHint: true
|
|
13
|
+
}
|
|
5
14
|
}, async ({ text }) => {
|
|
6
15
|
const unicodeNames = [...text].map(char => {
|
|
7
16
|
const codePoint = char.codePointAt(0);
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerSlugifyString(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
server.registerTool("slugify_text", {
|
|
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
|
+
},
|
|
10
|
+
// VS Code compliance annotations
|
|
11
|
+
annotations: {
|
|
12
|
+
title: "Slugify Text",
|
|
13
|
+
description: "Convert text to URL-friendly slug format",
|
|
14
|
+
readOnlyHint: false
|
|
15
|
+
}
|
|
7
16
|
}, async ({ text, separator = "-", lowercase = true }) => {
|
|
8
17
|
try {
|
|
9
18
|
let slug = text
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerRemPxConverter(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
server.registerTool("convert_rem_px", {
|
|
4
|
+
description: "Convert between REM and PX units for CSS. Example: Convert 1.5rem to pixels, or 24px to rem units.",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
value: z.number().min(0).describe("Value to convert (e.g., 1.5 for 1.5rem or 24 for 24px)"),
|
|
7
|
+
fromUnit: z.enum(["rem", "px"]).describe("Source unit - either 'rem' or 'px'"),
|
|
8
|
+
rootFontSize: z.number().min(1).max(100).default(16).describe("Root font size in pixels (default: 16px - standard browser default)")
|
|
9
|
+
},
|
|
10
|
+
// VS Code compliance annotations
|
|
11
|
+
annotations: {
|
|
12
|
+
title: "Convert Rem Px",
|
|
13
|
+
description: "Convert between REM and PX units for CSS",
|
|
14
|
+
readOnlyHint: false
|
|
15
|
+
}
|
|
7
16
|
}, async ({ value, fromUnit, rootFontSize = 16 }) => {
|
|
8
17
|
try {
|
|
9
18
|
let result;
|
|
@@ -53,6 +62,7 @@ Notes:
|
|
|
53
62
|
}
|
|
54
63
|
catch (error) {
|
|
55
64
|
return {
|
|
65
|
+
isError: true,
|
|
56
66
|
content: [{
|
|
57
67
|
type: "text",
|
|
58
68
|
text: `Error converting REM/PX: ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerCssPrettifier(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
server.registerTool("format_css", {
|
|
4
|
+
description: "Format and prettify CSS code",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
css: z.string().describe("CSS code to format"),
|
|
7
|
+
indentSize: z.number().optional().describe("Number of spaces for indentation (default: 2)")
|
|
8
|
+
},
|
|
9
|
+
// VS Code compliance annotations
|
|
10
|
+
annotations: {
|
|
11
|
+
title: "Format Css",
|
|
12
|
+
description: "Format and prettify CSS code",
|
|
13
|
+
readOnlyHint: false
|
|
14
|
+
}
|
|
6
15
|
}, async ({ css, indentSize = 2 }) => {
|
|
7
16
|
try {
|
|
8
17
|
// Basic CSS prettifier implementation
|
|
@@ -26,8 +26,17 @@ function getUsageHint(code) {
|
|
|
26
26
|
return 'an unknown status';
|
|
27
27
|
}
|
|
28
28
|
export function registerHttpStatusCodes(server) {
|
|
29
|
-
server.
|
|
30
|
-
|
|
29
|
+
server.registerTool("lookup_http_status", {
|
|
30
|
+
description: "Get information about HTTP status codes",
|
|
31
|
+
inputSchema: {
|
|
32
|
+
code: z.number().optional().describe("HTTP status code to look up (optional)"),
|
|
33
|
+
},
|
|
34
|
+
// VS Code compliance annotations
|
|
35
|
+
annotations: {
|
|
36
|
+
title: "Lookup Http Status",
|
|
37
|
+
description: "Get information about HTTP status codes",
|
|
38
|
+
readOnlyHint: true
|
|
39
|
+
}
|
|
31
40
|
}, async ({ code }) => {
|
|
32
41
|
try {
|
|
33
42
|
const statusCodes = {
|
|
@@ -33,9 +33,18 @@ function getMimeDescription(mimeType) {
|
|
|
33
33
|
return descriptions[mimeType] || 'No description available';
|
|
34
34
|
}
|
|
35
35
|
export function registerMimeTypes(server) {
|
|
36
|
-
server.
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
server.registerTool("lookup_mime_types", {
|
|
37
|
+
description: "Look up MIME types for file extensions",
|
|
38
|
+
inputSchema: {
|
|
39
|
+
input: z.string().describe("File extension (e.g., 'txt') or MIME type (e.g., 'text/plain')"),
|
|
40
|
+
lookupType: z.enum(["extension-to-mime", "mime-to-extension"]).describe("Lookup direction").optional(),
|
|
41
|
+
},
|
|
42
|
+
// VS Code compliance annotations
|
|
43
|
+
annotations: {
|
|
44
|
+
title: "Lookup Mime Types",
|
|
45
|
+
description: "Look up MIME types for file extensions",
|
|
46
|
+
readOnlyHint: true
|
|
47
|
+
}
|
|
39
48
|
}, async ({ input, lookupType = "extension-to-mime" }) => {
|
|
40
49
|
try {
|
|
41
50
|
if (lookupType === "extension-to-mime") {
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerPortNumbers(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("lookup_port_numbers", {
|
|
4
|
+
description: "Look up common TCP/UDP port numbers and their services",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
query: z.string().describe("Port number or service name to look up")
|
|
7
|
+
},
|
|
8
|
+
// VS Code compliance annotations
|
|
9
|
+
annotations: {
|
|
10
|
+
title: "Lookup Port Numbers",
|
|
11
|
+
description: "Look up common TCP/UDP port numbers and their services",
|
|
12
|
+
readOnlyHint: true
|
|
13
|
+
}
|
|
5
14
|
}, async ({ query }) => {
|
|
6
15
|
try {
|
|
7
16
|
const ports = {
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerEmailNormalizer(server) {
|
|
3
|
-
server.
|
|
4
|
-
|
|
3
|
+
server.registerTool("normalize_email", {
|
|
4
|
+
description: "Normalize email addresses (remove dots, plus aliases, etc.)",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
email: z.string().describe("Email address to normalize"),
|
|
7
|
+
},
|
|
8
|
+
// VS Code compliance annotations
|
|
9
|
+
annotations: {
|
|
10
|
+
title: "Normalize Email",
|
|
11
|
+
description: "Normalize email addresses (remove dots, plus aliases, etc",
|
|
12
|
+
readOnlyHint: false
|
|
13
|
+
}
|
|
5
14
|
}, async ({ email }) => {
|
|
6
15
|
try {
|
|
7
16
|
// Basic email validation
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
export function registerDeviceInfo(server) {
|
|
2
|
-
server.
|
|
2
|
+
server.registerTool("show_device_info", {
|
|
3
|
+
description: "Get basic device/system information",
|
|
4
|
+
inputSchema: {},
|
|
5
|
+
// VS Code compliance annotations
|
|
6
|
+
annotations: {
|
|
7
|
+
title: "Show Device Info",
|
|
8
|
+
description: "Get basic device/system information",
|
|
9
|
+
readOnlyHint: true
|
|
10
|
+
}
|
|
11
|
+
}, async () => {
|
|
3
12
|
try {
|
|
4
13
|
const info = {
|
|
5
14
|
platform: process.platform,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "it-tools-mcp",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "MCP server providing
|
|
3
|
+
"version": "4.0.0",
|
|
4
|
+
"description": "VS Code MCP-compliant server providing 116+ IT tools and utilities for developers - encoding, crypto, network tools, and more",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./build/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"build": "tsc && chmod +x build/index.js",
|
|
12
12
|
"start": "docker-compose up --build",
|
|
13
13
|
"start:node": "node build/index.js",
|
|
14
|
-
"dev": "tsc && node build/index.js",
|
|
14
|
+
"dev": "NODE_ENV=development MCP_DEV_MODE=true tsc && node build/index.js",
|
|
15
|
+
"dev:build": "NODE_ENV=development tsc",
|
|
15
16
|
"test": "clear;node tests/test-server.mjs",
|
|
16
17
|
"test:all": "clear;node tests/all-tools-test.mjs",
|
|
17
18
|
"docker:build": "docker buildx build --platform linux/amd64,linux/arm64 --provenance=true --sbom=true -t it-tools-mcp .",
|
|
@@ -22,19 +23,31 @@
|
|
|
22
23
|
"deploy:prod": "npm run deploy:build && docker-compose up -d"
|
|
23
24
|
},
|
|
24
25
|
"files": [
|
|
25
|
-
"build"
|
|
26
|
+
"build",
|
|
27
|
+
"README.md",
|
|
28
|
+
"LICENSE"
|
|
26
29
|
],
|
|
27
30
|
"keywords": [
|
|
28
31
|
"mcp",
|
|
29
32
|
"model-context-protocol",
|
|
33
|
+
"vscode",
|
|
34
|
+
"vscode-mcp",
|
|
30
35
|
"it-tools",
|
|
31
36
|
"developer-tools",
|
|
32
37
|
"utilities",
|
|
33
|
-
"docker",
|
|
34
38
|
"encoding",
|
|
39
|
+
"crypto",
|
|
35
40
|
"hashing",
|
|
41
|
+
"network-tools",
|
|
36
42
|
"text-processing",
|
|
37
|
-
"
|
|
43
|
+
"json-tools",
|
|
44
|
+
"base64",
|
|
45
|
+
"uuid",
|
|
46
|
+
"jwt",
|
|
47
|
+
"docker-tools",
|
|
48
|
+
"development-utilities",
|
|
49
|
+
"typescript",
|
|
50
|
+
"cli-tools"
|
|
38
51
|
],
|
|
39
52
|
"author": "wrenchpilot",
|
|
40
53
|
"license": "MIT",
|
|
@@ -46,6 +59,37 @@
|
|
|
46
59
|
"bugs": {
|
|
47
60
|
"url": "https://github.com/wrenchpilot/it-tools-mcp/issues"
|
|
48
61
|
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=18.0.0"
|
|
64
|
+
},
|
|
65
|
+
"mcp": {
|
|
66
|
+
"mcpVersion": "2024-11-05",
|
|
67
|
+
"transport": "stdio",
|
|
68
|
+
"capabilities": [
|
|
69
|
+
"tools",
|
|
70
|
+
"resources",
|
|
71
|
+
"prompts",
|
|
72
|
+
"sampling",
|
|
73
|
+
"roots"
|
|
74
|
+
],
|
|
75
|
+
"toolCount": 116,
|
|
76
|
+
"categories": [
|
|
77
|
+
"ansible",
|
|
78
|
+
"color",
|
|
79
|
+
"crypto",
|
|
80
|
+
"data_format",
|
|
81
|
+
"development",
|
|
82
|
+
"docker",
|
|
83
|
+
"encoding",
|
|
84
|
+
"forensic",
|
|
85
|
+
"id_generators",
|
|
86
|
+
"math",
|
|
87
|
+
"network",
|
|
88
|
+
"physics",
|
|
89
|
+
"text",
|
|
90
|
+
"utility"
|
|
91
|
+
]
|
|
92
|
+
},
|
|
49
93
|
"devDependencies": {
|
|
50
94
|
"@types/bcryptjs": "^2.4.6",
|
|
51
95
|
"@types/figlet": "^1.7.0",
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export function registerBase64Encode(server) {
|
|
3
|
-
server.tool("base64-encode", "Encode text to Base64", {
|
|
4
|
-
text: z.string().describe("Text to encode to Base64"),
|
|
5
|
-
}, async ({ text }) => {
|
|
6
|
-
const encoded = Buffer.from(text, 'utf-8').toString('base64');
|
|
7
|
-
return {
|
|
8
|
-
content: [
|
|
9
|
-
{
|
|
10
|
-
type: "text",
|
|
11
|
-
text: `Base64 encoded: ${encoded}`,
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
};
|
|
15
|
-
});
|
|
16
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export function registerUrlEncode(server) {
|
|
3
|
-
server.tool("url-encode", "URL encode text", {
|
|
4
|
-
text: z.string().describe("Text to URL encode"),
|
|
5
|
-
}, async ({ text }) => {
|
|
6
|
-
const encoded = encodeURIComponent(text);
|
|
7
|
-
return {
|
|
8
|
-
content: [
|
|
9
|
-
{
|
|
10
|
-
type: "text",
|
|
11
|
-
text: `URL encoded: ${encoded}`,
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
};
|
|
15
|
-
});
|
|
16
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "crypto";
|
|
2
|
-
export function registerUuidGenerate(server) {
|
|
3
|
-
server.tool("uuid-generate", "Generate a random UUID v4", {}, async () => {
|
|
4
|
-
const uuid = randomUUID();
|
|
5
|
-
return {
|
|
6
|
-
content: [
|
|
7
|
-
{
|
|
8
|
-
type: "text",
|
|
9
|
-
text: `Generated UUID: ${uuid}`,
|
|
10
|
-
},
|
|
11
|
-
],
|
|
12
|
-
};
|
|
13
|
-
});
|
|
14
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export function registerTextCamelcase(server) {
|
|
3
|
-
server.tool("text-camelcase", "Convert text to camelCase", {
|
|
4
|
-
text: z.string().describe("Text to convert to camelCase"),
|
|
5
|
-
}, async ({ text }) => {
|
|
6
|
-
const camelCase = text
|
|
7
|
-
.replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
|
|
8
|
-
return index === 0 ? word.toLowerCase() : word.toUpperCase();
|
|
9
|
-
})
|
|
10
|
-
.replace(/\s+/g, '');
|
|
11
|
-
return {
|
|
12
|
-
content: [
|
|
13
|
-
{
|
|
14
|
-
type: "text",
|
|
15
|
-
text: `camelCase: ${camelCase}`,
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
};
|
|
19
|
-
});
|
|
20
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export function registerTextCapitalize(server) {
|
|
3
|
-
server.tool("text-capitalize", "Capitalize first letter of each word", {
|
|
4
|
-
text: z.string().describe("Text to capitalize"),
|
|
5
|
-
}, async ({ text }) => {
|
|
6
|
-
const capitalized = text.replace(/\b\w/g, l => l.toUpperCase());
|
|
7
|
-
return {
|
|
8
|
-
content: [
|
|
9
|
-
{
|
|
10
|
-
type: "text",
|
|
11
|
-
text: `Capitalized: ${capitalized}`,
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
};
|
|
15
|
-
});
|
|
16
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export function registerTextLowercase(server) {
|
|
3
|
-
server.tool("text-lowercase", "Convert text to lowercase", {
|
|
4
|
-
text: z.string().describe("Text to convert to lowercase"),
|
|
5
|
-
}, async ({ text }) => {
|
|
6
|
-
return {
|
|
7
|
-
content: [
|
|
8
|
-
{
|
|
9
|
-
type: "text",
|
|
10
|
-
text: `Lowercase: ${text.toLowerCase()}`,
|
|
11
|
-
},
|
|
12
|
-
],
|
|
13
|
-
};
|
|
14
|
-
});
|
|
15
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export function registerTextSnakecase(server) {
|
|
3
|
-
server.tool("text-snakecase", "Convert text to snake_case", {
|
|
4
|
-
text: z.string().describe("Text to convert to snake_case"),
|
|
5
|
-
}, async ({ text }) => {
|
|
6
|
-
const snakeCase = text
|
|
7
|
-
.replace(/([a-z])([A-Z])/g, '$1_$2')
|
|
8
|
-
.replace(/[^a-zA-Z0-9]+/g, '_')
|
|
9
|
-
.toLowerCase()
|
|
10
|
-
.replace(/^_+|_+$/g, '');
|
|
11
|
-
return {
|
|
12
|
-
content: [
|
|
13
|
-
{
|
|
14
|
-
type: "text",
|
|
15
|
-
text: `snake_case: ${snakeCase}`,
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
};
|
|
19
|
-
});
|
|
20
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export function registerTextUppercase(server) {
|
|
3
|
-
server.tool("text-uppercase", "Convert text to uppercase", {
|
|
4
|
-
text: z.string().describe("Text to convert to uppercase"),
|
|
5
|
-
}, async ({ text }) => {
|
|
6
|
-
return {
|
|
7
|
-
content: [
|
|
8
|
-
{
|
|
9
|
-
type: "text",
|
|
10
|
-
text: `Uppercase: ${text.toUpperCase()}`,
|
|
11
|
-
},
|
|
12
|
-
],
|
|
13
|
-
};
|
|
14
|
-
});
|
|
15
|
-
}
|