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.
Files changed (128) hide show
  1. package/README.dockerhub.md +1 -1
  2. package/README.md +105 -104
  3. package/build/index.js +464 -70
  4. package/build/tools/ansible/{ansible-vault-decrypt → decrypt_ansible_vault}/index.js +13 -4
  5. package/build/tools/ansible/{ansible-vault-encrypt → encrypt_ansible_vault}/index.js +14 -5
  6. package/build/tools/ansible/generate_ansible_inventory/index.js +221 -0
  7. package/build/tools/ansible/{ansible-inventory-generator → parse_ansible_inventory}/index.js +11 -2
  8. package/build/tools/ansible/{ansible-reference → show_ansible_reference}/index.js +11 -2
  9. package/build/tools/ansible/{ansible-playbook-validator → validate_ansible_playbook}/index.js +12 -3
  10. package/build/tools/color/{color-hex-to-rgb → convert_hex_to_rgb}/index.js +12 -3
  11. package/build/tools/color/{color-rgb-to-hex → convert_rgb_to_hex}/index.js +14 -5
  12. package/build/tools/crypto/{jwt-decode → decode_jwt}/index.js +12 -3
  13. package/build/tools/crypto/{basic-auth-generator → generate_basic_auth}/index.js +13 -4
  14. package/build/tools/crypto/{bip39-generate → generate_bip39}/index.js +12 -3
  15. package/build/tools/crypto/{hmac-generator → generate_hmac}/index.js +14 -5
  16. package/build/tools/crypto/{otp-code-generator → generate_otp}/index.js +14 -5
  17. package/build/tools/crypto/{password-generate → generate_password}/index.js +16 -7
  18. package/build/tools/crypto/{token-generator → generate_token}/index.js +14 -5
  19. package/build/tools/crypto/{bcrypt-hash → hash_bcrypt}/index.js +14 -5
  20. package/build/tools/crypto/{hash-md5 → hash_md5}/index.js +11 -2
  21. package/build/tools/crypto/{hash-sha1 → hash_sha1}/index.js +11 -2
  22. package/build/tools/crypto/{hash-sha256 → hash_sha256}/index.js +11 -2
  23. package/build/tools/crypto/{hash-sha512 → hash_sha512}/index.js +11 -2
  24. package/build/tools/{dataFormat/json-diff → data_format/compare_json}/index.js +13 -4
  25. package/build/tools/{dataFormat/html-to-markdown → data_format/convert_html_to_markdown}/index.js +12 -3
  26. package/build/tools/{dataFormat/json-to-csv → data_format/convert_json_to_csv}/index.js +13 -4
  27. package/build/tools/{dataFormat/json-to-toml → data_format/convert_json_to_toml}/index.js +12 -3
  28. package/build/tools/{dataFormat/markdown-to-html → data_format/convert_markdown_to_html}/index.js +12 -3
  29. package/build/tools/{dataFormat/toml-to-json → data_format/convert_toml_to_json}/index.js +12 -3
  30. package/build/tools/{dataFormat/json-format → data_format/format_json}/index.js +14 -4
  31. package/build/tools/{dataFormat/phone-format → data_format/format_phone}/index.js +13 -4
  32. package/build/tools/{dataFormat/sql-format → data_format/format_sql}/index.js +13 -4
  33. package/build/tools/{dataFormat/xml-format → data_format/format_xml}/index.js +13 -4
  34. package/build/tools/{dataFormat/yaml-format → data_format/format_yaml}/index.js +12 -3
  35. package/build/tools/{dataFormat/json-minify → data_format/minify_json}/index.js +12 -3
  36. package/build/tools/development/{list-converter → convert_list}/index.js +15 -6
  37. package/build/tools/development/{html-prettifier → format_html}/index.js +13 -4
  38. package/build/tools/development/{javascript-prettifier → format_javascript}/index.js +14 -5
  39. package/build/tools/development/{crontab-generate → generate_crontab}/index.js +16 -7
  40. package/build/tools/development/{markdown-toc-generator → generate_markdown_toc}/index.js +14 -5
  41. package/build/tools/development/{regex-tester → test_regex}/index.js +14 -5
  42. package/build/tools/docker/{docker-compose-to-docker-run → convert_docker_compose_to_run}/index.js +11 -2
  43. package/build/tools/docker/{docker-run-to-docker-compose → convert_docker_run_to_compose}/index.js +11 -2
  44. package/build/tools/docker/{traefik-compose-generator → generate_traefik_compose}/index.js +16 -7
  45. package/build/tools/docker/{docker-reference → show_docker_reference}/index.js +11 -2
  46. package/build/tools/docker/{docker-compose-validator → validate_docker_compose}/index.js +12 -3
  47. package/build/tools/encoding/{text-to-binary → convert_text_to_binary}/index.js +13 -4
  48. package/build/tools/encoding/{base64-decode → decode_base64}/index.js +13 -3
  49. package/build/tools/encoding/{html-decode → decode_html}/index.js +12 -3
  50. package/build/tools/encoding/{url-decode → decode_url}/index.js +12 -3
  51. package/build/tools/encoding/encode_base64/index.js +38 -0
  52. package/build/tools/encoding/{html-encode → encode_html}/index.js +12 -3
  53. package/build/tools/encoding/{html-entities-extended → encode_html_entities}/index.js +13 -4
  54. package/build/tools/encoding/encode_url/index.js +25 -0
  55. package/build/tools/forensic/{safelink-decoder → decode_safelink}/index.js +12 -3
  56. package/build/tools/forensic/{url-fanger → fang_url}/index.js +13 -4
  57. package/build/tools/forensic/{file-type-identifier → identify_file_type}/index.js +13 -4
  58. package/build/tools/{idGenerators/qr-generate → id_generators/generate_qr_code}/index.js +13 -4
  59. package/build/tools/{idGenerators/svg-placeholder-generator → id_generators/generate_svg_placeholder}/index.js +16 -7
  60. package/build/tools/{idGenerators/ulid-generate → id_generators/generate_ulid}/index.js +11 -2
  61. package/build/tools/id_generators/generate_uuid/index.js +23 -0
  62. package/build/tools/math/{percentage-calculator → calculate_percentage}/index.js +14 -5
  63. package/build/tools/math/{number-base-converter → convert_number_base}/index.js +14 -5
  64. package/build/tools/math/{roman-numeral-converter → convert_roman_numerals}/index.js +12 -3
  65. package/build/tools/math/{temperature-converter → convert_temperature}/index.js +14 -5
  66. package/build/tools/math/{unix-timestamp-converter → convert_unix_timestamp}/index.js +11 -2
  67. package/build/tools/math/{math-evaluate → evaluate_math}/index.js +12 -3
  68. package/build/tools/network/{ip-subnet-calculator → calculate_ip_subnet}/index.js +12 -3
  69. package/build/tools/network/{ipv4-subnet-calc → calculate_ipv4_subnet}/index.js +11 -2
  70. package/build/tools/network/{ipv6-subnet-calculator → calculate_ipv6_subnet}/index.js +12 -3
  71. package/build/tools/network/cat/index.js +11 -2
  72. package/build/tools/network/{cidr-to-ip-range → convert_cidr_to_ip_range}/index.js +11 -2
  73. package/build/tools/network/{ip-range-to-cidr → convert_ip_range_to_cidr}/index.js +12 -3
  74. package/build/tools/network/curl/index.js +17 -6
  75. package/build/tools/network/dig/index.js +12 -3
  76. package/build/tools/network/{ipv6-ula-generator → generate_ipv6_ula}/index.js +11 -2
  77. package/build/tools/network/{mac-address-generate → generate_mac_address}/index.js +12 -3
  78. package/build/tools/network/{random-port → generate_random_port}/index.js +14 -5
  79. package/build/tools/network/grep/index.js +12 -3
  80. package/build/tools/network/head/index.js +12 -3
  81. package/build/tools/network/nslookup/index.js +11 -2
  82. package/build/tools/network/{url-parse → parse_url}/index.js +11 -2
  83. package/build/tools/network/ping/index.js +15 -4
  84. package/build/tools/network/ps/index.js +10 -1
  85. package/build/tools/network/scp/index.js +16 -7
  86. package/build/tools/network/ssh/index.js +14 -5
  87. package/build/tools/network/tail/index.js +12 -3
  88. package/build/tools/network/telnet/index.js +12 -3
  89. package/build/tools/network/top/index.js +10 -1
  90. package/build/tools/network/{iban-validate → validate_iban}/index.js +11 -2
  91. package/build/tools/physics/{angle-converter → convert_angle}/index.js +17 -8
  92. package/build/tools/physics/{energy-converter → convert_energy}/index.js +19 -10
  93. package/build/tools/physics/{power-converter → convert_power}/index.js +19 -10
  94. package/build/tools/text/{distinct-words → analyze_distinct_words}/index.js +11 -2
  95. package/build/tools/text/{text-stats → analyze_text_stats}/index.js +11 -2
  96. package/build/tools/text/capitalize_text/index.js +25 -0
  97. package/build/tools/text/{text-diff → compare_text}/index.js +12 -3
  98. package/build/tools/text/convert_text_to_camelcase/index.js +29 -0
  99. package/build/tools/text/{text-kebabcase → convert_text_to_kebabcase}/index.js +11 -2
  100. package/build/tools/text/convert_text_to_lowercase/index.js +24 -0
  101. package/build/tools/text/{text-to-nato-alphabet → convert_text_to_nato}/index.js +12 -3
  102. package/build/tools/text/{text-pascalcase → convert_text_to_pascalcase}/index.js +11 -2
  103. package/build/tools/text/{text-to-unicode → convert_text_to_unicode}/index.js +12 -3
  104. package/build/tools/text/convert_text_to_uppercase/index.js +24 -0
  105. package/build/tools/text/{ascii-art-text → generate_ascii_art}/index.js +12 -3
  106. package/build/tools/text/{lorem-ipsum-generator → generate_lorem_ipsum}/index.js +12 -3
  107. package/build/tools/text/{numeronym-generator → generate_numeronym}/index.js +11 -2
  108. package/build/tools/text/{string-obfuscator → obfuscate_string}/index.js +12 -3
  109. package/build/tools/text/{emoji-search → search_emoji}/index.js +11 -2
  110. package/build/tools/text/{text-to-unicode-names → show_unicode_names}/index.js +11 -2
  111. package/build/tools/text/{slugify-string → slugify_text}/index.js +13 -4
  112. package/build/tools/text/text_snakecase/index.js +1 -0
  113. package/build/tools/utility/{rem-px-converter → convert_rem_px}/index.js +14 -4
  114. package/build/tools/utility/{css-prettifier → format_css}/index.js +12 -3
  115. package/build/tools/utility/{http-status-codes → lookup_http_status}/index.js +11 -2
  116. package/build/tools/utility/{mime-types → lookup_mime_types}/index.js +12 -3
  117. package/build/tools/utility/{port-numbers → lookup_port_numbers}/index.js +11 -2
  118. package/build/tools/utility/{email-normalizer → normalize_email}/index.js +11 -2
  119. package/build/tools/utility/{device-info → show_device_info}/index.js +10 -1
  120. package/package.json +50 -6
  121. package/build/tools/encoding/base64-encode/index.js +0 -16
  122. package/build/tools/encoding/url-encode/index.js +0 -16
  123. package/build/tools/idGenerators/uuid-generate/index.js +0 -14
  124. package/build/tools/text/text-camelcase/index.js +0 -20
  125. package/build/tools/text/text-capitalize/index.js +0 -16
  126. package/build/tools/text/text-lowercase/index.js +0 -15
  127. package/build/tools/text/text-snakecase/index.js +0 -20
  128. 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.tool("ascii-art-text", "Generate ASCII art text", {
4
- text: z.string().describe("Text to convert to ASCII art, or use 'LIST_FONTS' to get all available font names"),
5
- font: z.string().describe("ASCII art font style. Supports all 295+ figlet fonts. Use 'standard' if unsure.").optional(),
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.tool("lorem-ipsum-generator", "Generate Lorem Ipsum placeholder text", {
4
- count: z.number().describe("Number of items to generate").optional(),
5
- type: z.enum(["words", "sentences", "paragraphs"]).describe("Type of content to generate").optional(),
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.tool("numeronym-generator", "Generate numeronyms (abbreviations with numbers) from text", {
4
- text: z.string().describe("Text to convert to numeronym"),
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.tool("string-obfuscator", "Obfuscate text by replacing characters with their HTML entities or other representations", {
4
- text: z.string().describe("Text to obfuscate"),
5
- method: z.enum(["html-entities", "unicode", "base64"]).describe("Obfuscation method").optional(),
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.tool("emoji-search", "Search for emojis by name or category", {
4
- query: z.string().describe("Search term for emoji (name, category, or keyword)"),
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.tool("text-to-unicode-names", "Convert text to Unicode character names", {
4
- text: z.string().describe("Text to convert to Unicode names")
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.tool("slugify-string", "Convert text to URL-friendly slug format", {
4
- text: z.string().describe("Text to convert to slug"),
5
- separator: z.string().describe("Character to use as separator").optional(),
6
- lowercase: z.boolean().describe("Convert to lowercase").optional(),
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.tool("rem-px-converter", "Convert between REM and PX units for CSS", {
4
- value: z.number().describe("Value to convert"),
5
- fromUnit: z.enum(["rem", "px"]).describe("Source unit"),
6
- rootFontSize: z.number().optional().describe("Root font size in pixels (default: 16)")
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.tool("css-prettifier", "Format and prettify CSS code", {
4
- css: z.string().describe("CSS code to format"),
5
- indentSize: z.number().optional().describe("Number of spaces for indentation (default: 2)")
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.tool("http-status-codes", "Get information about HTTP status codes", {
30
- code: z.number().optional().describe("HTTP status code to look up (optional)"),
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.tool("mime-types", "Look up MIME types for file extensions", {
37
- input: z.string().describe("File extension (e.g., 'txt') or MIME type (e.g., 'text/plain')"),
38
- lookupType: z.enum(["extension-to-mime", "mime-to-extension"]).describe("Lookup direction").optional(),
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.tool("port-numbers", "Look up common TCP/UDP port numbers and their services", {
4
- query: z.string().describe("Port number or service name to look up")
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.tool("email-normalizer", "Normalize email addresses (remove dots, plus aliases, etc.)", {
4
- email: z.string().describe("Email address to normalize"),
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.tool("device-info", "Get basic device/system information", {}, async () => {
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": "3.2.12",
4
- "description": "MCP server providing access to various IT tools and utilities for developers",
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
- "network-tools"
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
- }