it-tools-mcp 3.2.10 → 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.
Files changed (119) hide show
  1. package/README.dockerhub.md +2 -2
  2. package/README.md +14 -7
  3. package/build/index.js +223 -53
  4. package/build/tools/ansible/ansible-inventory-generator/index.js +5 -2
  5. package/build/tools/ansible/ansible-playbook-validator/index.js +5 -2
  6. package/build/tools/ansible/ansible-reference/index.js +4 -1
  7. package/build/tools/ansible/ansible-vault-decrypt/index.js +6 -3
  8. package/build/tools/ansible/ansible-vault-encrypt/index.js +7 -4
  9. package/build/tools/color/color-hex-to-rgb/index.js +5 -2
  10. package/build/tools/color/color-rgb-to-hex/index.js +7 -4
  11. package/build/tools/crypto/basic-auth-generator/index.js +6 -3
  12. package/build/tools/crypto/bcrypt-hash/index.js +7 -4
  13. package/build/tools/crypto/bip39-generate/index.js +5 -2
  14. package/build/tools/crypto/hash-md5/index.js +5 -2
  15. package/build/tools/crypto/hash-sha1/index.js +5 -2
  16. package/build/tools/crypto/hash-sha256/index.js +5 -2
  17. package/build/tools/crypto/hash-sha512/index.js +5 -2
  18. package/build/tools/crypto/hmac-generator/index.js +7 -4
  19. package/build/tools/crypto/jwt-decode/index.js +5 -2
  20. package/build/tools/crypto/otp-code-generator/index.js +7 -4
  21. package/build/tools/crypto/password-generate/index.js +9 -6
  22. package/build/tools/crypto/token-generator/index.js +7 -4
  23. package/build/tools/dataFormat/html-to-markdown/index.js +5 -2
  24. package/build/tools/dataFormat/json-diff/index.js +6 -3
  25. package/build/tools/dataFormat/json-format/index.js +7 -3
  26. package/build/tools/dataFormat/json-minify/index.js +5 -2
  27. package/build/tools/dataFormat/json-to-csv/index.js +6 -3
  28. package/build/tools/dataFormat/json-to-toml/index.js +5 -2
  29. package/build/tools/dataFormat/markdown-to-html/index.js +5 -2
  30. package/build/tools/dataFormat/phone-format/index.js +6 -3
  31. package/build/tools/dataFormat/sql-format/index.js +6 -3
  32. package/build/tools/dataFormat/toml-to-json/index.js +5 -2
  33. package/build/tools/dataFormat/xml-format/index.js +6 -3
  34. package/build/tools/dataFormat/yaml-format/index.js +5 -2
  35. package/build/tools/development/crontab-generate/index.js +9 -6
  36. package/build/tools/development/html-prettifier/index.js +6 -3
  37. package/build/tools/development/javascript-prettifier/index.js +7 -4
  38. package/build/tools/development/list-converter/index.js +8 -5
  39. package/build/tools/development/markdown-toc-generator/index.js +7 -4
  40. package/build/tools/development/regex-tester/index.js +7 -4
  41. package/build/tools/docker/docker-compose-to-docker-run/index.js +5 -2
  42. package/build/tools/docker/docker-compose-validator/index.js +5 -2
  43. package/build/tools/docker/docker-reference/index.js +4 -1
  44. package/build/tools/docker/docker-run-to-docker-compose/index.js +5 -2
  45. package/build/tools/docker/traefik-compose-generator/index.js +9 -6
  46. package/build/tools/encoding/base64-decode/index.js +6 -2
  47. package/build/tools/encoding/base64-encode/index.js +27 -11
  48. package/build/tools/encoding/html-decode/index.js +5 -2
  49. package/build/tools/encoding/html-encode/index.js +5 -2
  50. package/build/tools/encoding/html-entities-extended/index.js +6 -3
  51. package/build/tools/encoding/text-to-binary/index.js +6 -3
  52. package/build/tools/encoding/url-decode/index.js +5 -2
  53. package/build/tools/encoding/url-encode/index.js +5 -2
  54. package/build/tools/forensic/file-type-identifier/index.js +6 -3
  55. package/build/tools/forensic/safelink-decoder/index.js +5 -2
  56. package/build/tools/forensic/url-fanger/index.js +6 -3
  57. package/build/tools/idGenerators/qr-generate/index.js +6 -3
  58. package/build/tools/idGenerators/svg-placeholder-generator/index.js +9 -6
  59. package/build/tools/idGenerators/ulid-generate/index.js +4 -1
  60. package/build/tools/idGenerators/uuid-generate/index.js +4 -1
  61. package/build/tools/math/math-evaluate/index.js +5 -2
  62. package/build/tools/math/number-base-converter/index.js +7 -4
  63. package/build/tools/math/percentage-calculator/index.js +7 -4
  64. package/build/tools/math/roman-numeral-converter/index.js +5 -2
  65. package/build/tools/math/temperature-converter/index.js +7 -4
  66. package/build/tools/math/unix-timestamp-converter/index.js +5 -2
  67. package/build/tools/network/cat/index.js +5 -2
  68. package/build/tools/network/cidr-to-ip-range/index.js +5 -2
  69. package/build/tools/network/curl/index.js +11 -6
  70. package/build/tools/network/dig/index.js +6 -3
  71. package/build/tools/network/grep/index.js +6 -3
  72. package/build/tools/network/head/index.js +6 -3
  73. package/build/tools/network/iban-validate/index.js +5 -2
  74. package/build/tools/network/ip-range-to-cidr/index.js +6 -3
  75. package/build/tools/network/ip-subnet-calculator/index.js +6 -3
  76. package/build/tools/network/ipv4-subnet-calc/index.js +5 -2
  77. package/build/tools/network/ipv6-subnet-calculator/index.js +6 -3
  78. package/build/tools/network/ipv6-ula-generator/index.js +5 -2
  79. package/build/tools/network/mac-address-generate/index.js +6 -3
  80. package/build/tools/network/nslookup/index.js +5 -2
  81. package/build/tools/network/ping/index.js +9 -4
  82. package/build/tools/network/ps/index.js +4 -1
  83. package/build/tools/network/random-port/index.js +8 -5
  84. package/build/tools/network/scp/index.js +10 -7
  85. package/build/tools/network/ssh/index.js +8 -5
  86. package/build/tools/network/tail/index.js +6 -3
  87. package/build/tools/network/telnet/index.js +6 -3
  88. package/build/tools/network/top/index.js +4 -1
  89. package/build/tools/network/url-parse/index.js +5 -2
  90. package/build/tools/physics/angle-converter/index.js +11 -8
  91. package/build/tools/physics/energy-converter/index.js +13 -10
  92. package/build/tools/physics/power-converter/index.js +13 -10
  93. package/build/tools/text/ascii-art-text/index.js +6 -3
  94. package/build/tools/text/distinct-words/index.js +5 -2
  95. package/build/tools/text/emoji-search/index.js +5 -2
  96. package/build/tools/text/lorem-ipsum-generator/index.js +6 -3
  97. package/build/tools/text/numeronym-generator/index.js +5 -2
  98. package/build/tools/text/slugify-string/index.js +7 -4
  99. package/build/tools/text/string-obfuscator/index.js +6 -3
  100. package/build/tools/text/text-camelcase/index.js +5 -2
  101. package/build/tools/text/text-capitalize/index.js +5 -2
  102. package/build/tools/text/text-diff/index.js +6 -3
  103. package/build/tools/text/text-kebabcase/index.js +5 -2
  104. package/build/tools/text/text-lowercase/index.js +5 -2
  105. package/build/tools/text/text-pascalcase/index.js +5 -2
  106. package/build/tools/text/text-snakecase/index.js +5 -2
  107. package/build/tools/text/text-stats/index.js +5 -2
  108. package/build/tools/text/text-to-nato-alphabet/index.js +6 -3
  109. package/build/tools/text/text-to-unicode/index.js +6 -3
  110. package/build/tools/text/text-to-unicode-names/index.js +5 -2
  111. package/build/tools/text/text-uppercase/index.js +5 -2
  112. package/build/tools/utility/css-prettifier/index.js +6 -3
  113. package/build/tools/utility/device-info/index.js +4 -1
  114. package/build/tools/utility/email-normalizer/index.js +5 -2
  115. package/build/tools/utility/http-status-codes/index.js +5 -2
  116. package/build/tools/utility/mime-types/index.js +6 -3
  117. package/build/tools/utility/port-numbers/index.js +5 -2
  118. package/build/tools/utility/rem-px-converter/index.js +8 -4
  119. package/package.json +1 -1
@@ -1,13 +1,16 @@
1
1
  import { z } from "zod";
2
2
  export function registerAngleConverter(server) {
3
- server.tool("angle-converter", "Convert between different angle units", {
4
- value: z.number().describe("Angle value to convert"),
5
- fromUnit: z.enum([
6
- "degree", "radian", "gradian", "turn", "arcminute", "arcsecond"
7
- ]).describe("Source angle unit"),
8
- toUnit: z.enum([
9
- "degree", "radian", "gradian", "turn", "arcminute", "arcsecond"
10
- ]).describe("Target angle unit")
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.tool("energy-converter", "Convert between different energy units", {
4
- value: z.number().describe("Energy value to convert"),
5
- fromUnit: z.enum([
6
- "joule", "kilojoule", "calorie", "kilocalorie", "btu",
7
- "watt-hour", "kilowatt-hour", "electronvolt", "foot-pound"
8
- ]).describe("Source energy unit"),
9
- toUnit: z.enum([
10
- "joule", "kilojoule", "calorie", "kilocalorie", "btu",
11
- "watt-hour", "kilowatt-hour", "electronvolt", "foot-pound"
12
- ]).describe("Target energy unit")
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.tool("power-converter", "Convert between different power units", {
4
- value: z.number().describe("Power value to convert"),
5
- fromUnit: z.enum([
6
- "watt", "kilowatt", "megawatt", "horsepower", "metric-horsepower",
7
- "btu-per-hour", "calorie-per-second", "foot-pound-per-second"
8
- ]).describe("Source power unit"),
9
- toUnit: z.enum([
10
- "watt", "kilowatt", "megawatt", "horsepower", "metric-horsepower",
11
- "btu-per-hour", "calorie-per-second", "foot-pound-per-second"
12
- ]).describe("Target power unit")
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.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("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.tool("distinct-words", "Count distinct words in text and show their frequency", {
4
- text: z.string().describe("Text to analyze for distinct words")
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.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("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.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("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.tool("numeronym-generator", "Generate numeronyms (abbreviations with numbers) from text", {
4
- text: z.string().describe("Text to convert to numeronym"),
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.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-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.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("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 = '';
@@ -1,7 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextCamelcase(server) {
3
- server.tool("text-camelcase", "Convert text to camelCase", {
4
- text: z.string().describe("Text to convert to camelCase"),
3
+ server.registerTool("text-camelcase", {
4
+ description: "Convert text to camelCase",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to convert to camelCase"),
7
+ }
5
8
  }, async ({ text }) => {
6
9
  const camelCase = text
7
10
  .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
@@ -1,7 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextCapitalize(server) {
3
- server.tool("text-capitalize", "Capitalize first letter of each word", {
4
- text: z.string().describe("Text to capitalize"),
3
+ server.registerTool("text-capitalize", {
4
+ description: "Capitalize first letter of each word",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to capitalize"),
7
+ }
5
8
  }, async ({ text }) => {
6
9
  const capitalized = text.replace(/\b\w/g, l => l.toUpperCase());
7
10
  return {
@@ -1,8 +1,11 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextDiff(server) {
3
- server.tool("text-diff", "Compare two texts and show differences", {
4
- text1: z.string().describe("First text to compare"),
5
- text2: z.string().describe("Second text to compare"),
3
+ server.registerTool("text-diff", {
4
+ description: "Compare two texts and show differences",
5
+ inputSchema: {
6
+ text1: z.string().describe("First text to compare"),
7
+ text2: z.string().describe("Second text to compare"),
8
+ }
6
9
  }, async ({ text1, text2 }) => {
7
10
  try {
8
11
  // Simple diff implementation
@@ -1,7 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextKebabcase(server) {
3
- server.tool("text-kebabcase", "Convert text to kebab-case", {
4
- text: z.string().describe("Text to convert to kebab-case"),
3
+ server.registerTool("text-kebabcase", {
4
+ description: "Convert text to kebab-case",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to convert to kebab-case"),
7
+ }
5
8
  }, async ({ text }) => {
6
9
  const kebabCase = text
7
10
  .replace(/([a-z])([A-Z])/g, '$1-$2')
@@ -1,7 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextLowercase(server) {
3
- server.tool("text-lowercase", "Convert text to lowercase", {
4
- text: z.string().describe("Text to convert to lowercase"),
3
+ server.registerTool("text-lowercase", {
4
+ description: "Convert text to lowercase",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to convert to lowercase"),
7
+ }
5
8
  }, async ({ text }) => {
6
9
  return {
7
10
  content: [
@@ -1,7 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextPascalcase(server) {
3
- server.tool("text-pascalcase", "Convert text to PascalCase", {
4
- text: z.string().describe("Text to convert to PascalCase"),
3
+ server.registerTool("text-pascalcase", {
4
+ description: "Convert text to PascalCase",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to convert to PascalCase"),
7
+ }
5
8
  }, async ({ text }) => {
6
9
  const pascalCase = text
7
10
  .replace(/(?:^\w|[A-Z]|\b\w)/g, word => word.toUpperCase())
@@ -1,7 +1,10 @@
1
1
  import { z } from "zod";
2
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"),
3
+ server.registerTool("text-snakecase", {
4
+ description: "Convert text to snake_case",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to convert to snake_case"),
7
+ }
5
8
  }, async ({ text }) => {
6
9
  const snakeCase = text
7
10
  .replace(/([a-z])([A-Z])/g, '$1_$2')
@@ -1,7 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextStats(server) {
3
- server.tool("text-stats", "Get statistics about text (character count, word count, etc.)", {
4
- text: z.string().describe("Text to analyze"),
3
+ server.registerTool("text-stats", {
4
+ description: "Get statistics about text (character count, word count, etc.)",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to analyze"),
7
+ }
5
8
  }, async ({ text }) => {
6
9
  const lines = text.split('\n');
7
10
  const words = text.trim().split(/\s+/).filter(word => word.length > 0);
@@ -1,8 +1,11 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextToNatoAlphabet(server) {
3
- server.tool("text-to-nato-alphabet", "Convert text to NATO phonetic alphabet", {
4
- text: z.string().describe("Text to convert to NATO phonetic alphabet"),
5
- language: z.string().optional().default("International").describe("Language/country variant (International, France, Germany, etc.)")
3
+ server.registerTool("text-to-nato-alphabet", {
4
+ description: "Convert text to NATO phonetic alphabet",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to convert to NATO phonetic alphabet"),
7
+ language: z.string().optional().default("International").describe("Language/country variant (International, France, Germany, etc.)")
8
+ }
6
9
  }, async ({ text, language }) => {
7
10
  // NATO phonetic alphabet mappings
8
11
  const natoAlphabets = {
@@ -1,8 +1,11 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextToUnicode(server) {
3
- server.tool("text-to-unicode", "Convert text to Unicode code points and vice versa", {
4
- input: z.string().describe("Text to convert to Unicode or Unicode to convert to text"),
5
- operation: z.enum(["encode", "decode"]).describe("Operation: encode text to Unicode or decode Unicode to text"),
3
+ server.registerTool("text-to-unicode", {
4
+ description: "Convert text to Unicode code points and vice versa",
5
+ inputSchema: {
6
+ input: z.string().describe("Text to convert to Unicode or Unicode to convert to text"),
7
+ operation: z.enum(["encode", "decode"]).describe("Operation: encode text to Unicode or decode Unicode to text"),
8
+ }
6
9
  }, async ({ input, operation }) => {
7
10
  try {
8
11
  if (operation === "encode") {
@@ -1,7 +1,10 @@
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("text-to-unicode-names", {
4
+ description: "Convert text to Unicode character names",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to convert to Unicode names")
7
+ }
5
8
  }, async ({ text }) => {
6
9
  const unicodeNames = [...text].map(char => {
7
10
  const codePoint = char.codePointAt(0);
@@ -1,7 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export function registerTextUppercase(server) {
3
- server.tool("text-uppercase", "Convert text to uppercase", {
4
- text: z.string().describe("Text to convert to uppercase"),
3
+ server.registerTool("text-uppercase", {
4
+ description: "Convert text to uppercase",
5
+ inputSchema: {
6
+ text: z.string().describe("Text to convert to uppercase"),
7
+ }
5
8
  }, async ({ text }) => {
6
9
  return {
7
10
  content: [
@@ -1,8 +1,11 @@
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("css-prettifier", {
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
+ }
6
9
  }, async ({ css, indentSize = 2 }) => {
7
10
  try {
8
11
  // Basic CSS prettifier implementation
@@ -1,5 +1,8 @@
1
1
  export function registerDeviceInfo(server) {
2
- server.tool("device-info", "Get basic device/system information", {}, async () => {
2
+ server.registerTool("device-info", {
3
+ description: "Get basic device/system information",
4
+ inputSchema: {}
5
+ }, async () => {
3
6
  try {
4
7
  const info = {
5
8
  platform: process.platform,
@@ -1,7 +1,10 @@
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("email-normalizer", {
4
+ description: "Normalize email addresses (remove dots, plus aliases, etc.)",
5
+ inputSchema: {
6
+ email: z.string().describe("Email address to normalize"),
7
+ }
5
8
  }, async ({ email }) => {
6
9
  try {
7
10
  // Basic email validation
@@ -26,8 +26,11 @@ 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("http-status-codes", {
30
+ description: "Get information about HTTP status codes",
31
+ inputSchema: {
32
+ code: z.number().optional().describe("HTTP status code to look up (optional)"),
33
+ }
31
34
  }, async ({ code }) => {
32
35
  try {
33
36
  const statusCodes = {
@@ -33,9 +33,12 @@ 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("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
+ }
39
42
  }, async ({ input, lookupType = "extension-to-mime" }) => {
40
43
  try {
41
44
  if (lookupType === "extension-to-mime") {
@@ -1,7 +1,10 @@
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("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
+ }
5
8
  }, async ({ query }) => {
6
9
  try {
7
10
  const ports = {
@@ -1,9 +1,12 @@
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("rem-px-converter", {
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
+ }
7
10
  }, async ({ value, fromUnit, rootFontSize = 16 }) => {
8
11
  try {
9
12
  let result;
@@ -53,6 +56,7 @@ Notes:
53
56
  }
54
57
  catch (error) {
55
58
  return {
59
+ isError: true,
56
60
  content: [{
57
61
  type: "text",
58
62
  text: `Error converting REM/PX: ${error instanceof Error ? error.message : 'Unknown error'}`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "it-tools-mcp",
3
- "version": "3.2.10",
3
+ "version": "3.6.0",
4
4
  "description": "MCP server providing access to various IT tools and utilities for developers",
5
5
  "type": "module",
6
6
  "main": "./build/index.js",