it-tools-mcp 3.0.23 → 3.1.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 (127) hide show
  1. package/README.dockerhub.md +30 -17
  2. package/README.md +81 -33
  3. package/build/index.js +47 -15
  4. package/build/tools/ansible/ansible-inventory-generator/index.js +212 -0
  5. package/build/tools/ansible/ansible-playbook-validator/index.js +128 -0
  6. package/build/tools/ansible/ansible-reference/index.js +393 -0
  7. package/build/tools/ansible/ansible-vault-decrypt/index.js +137 -0
  8. package/build/tools/ansible/ansible-vault-encrypt/index.js +79 -0
  9. package/build/tools/color/color-hex-to-rgb/index.js +29 -0
  10. package/build/tools/{color.js → color/color-rgb-to-hex/index.js} +1 -27
  11. package/build/tools/crypto/basic-auth-generator/index.js +45 -0
  12. package/build/tools/crypto/bcrypt-hash/index.js +67 -0
  13. package/build/tools/crypto/bip39-generate/index.js +53 -0
  14. package/build/tools/crypto/hash-md5/index.js +19 -0
  15. package/build/tools/crypto/hash-sha1/index.js +19 -0
  16. package/build/tools/crypto/hash-sha256/index.js +19 -0
  17. package/build/tools/crypto/hash-sha512/index.js +19 -0
  18. package/build/tools/crypto/hmac-generator/index.js +37 -0
  19. package/build/tools/crypto/jwt-decode/index.js +41 -0
  20. package/build/tools/crypto/otp-code-generator/index.js +67 -0
  21. package/build/tools/crypto/password-generate/index.js +54 -0
  22. package/build/tools/crypto/token-generator/index.js +75 -0
  23. package/build/tools/dataFormat/html-to-markdown/index.js +34 -0
  24. package/build/tools/dataFormat/json-diff/index.js +94 -0
  25. package/build/tools/dataFormat/json-format/index.js +100 -0
  26. package/build/tools/dataFormat/json-minify/index.js +29 -0
  27. package/build/tools/dataFormat/json-to-csv/index.js +34 -0
  28. package/build/tools/dataFormat/json-to-toml/index.js +30 -0
  29. package/build/tools/dataFormat/markdown-to-html/index.js +32 -0
  30. package/build/tools/dataFormat/phone-format/index.js +35 -0
  31. package/build/tools/dataFormat/sql-format/index.js +37 -0
  32. package/build/tools/dataFormat/toml-to-json/index.js +29 -0
  33. package/build/tools/dataFormat/xml-format/index.js +44 -0
  34. package/build/tools/dataFormat/yaml-format/index.js +58 -0
  35. package/build/tools/{development.js → development/crontab-generate/index.js} +1 -129
  36. package/build/tools/development/html-prettifier/index.js +47 -0
  37. package/build/tools/development/javascript-prettifier/index.js +74 -0
  38. package/build/tools/development/list-converter/index.js +62 -0
  39. package/build/tools/development/markdown-toc-generator/index.js +53 -0
  40. package/build/tools/development/regex-tester/index.js +69 -0
  41. package/build/tools/docker/docker-compose-to-docker-run/index.js +138 -0
  42. package/build/tools/docker/docker-compose-validator/index.js +125 -0
  43. package/build/tools/docker/docker-reference/index.js +188 -0
  44. package/build/tools/docker/docker-run-to-docker-compose/index.js +117 -0
  45. package/build/tools/docker/traefik-compose-generator/index.js +98 -0
  46. package/build/tools/encoding/base64-decode/index.js +28 -0
  47. package/build/tools/encoding/base64-encode/index.js +16 -0
  48. package/build/tools/encoding/html-decode/index.js +21 -0
  49. package/build/tools/encoding/html-encode/index.js +21 -0
  50. package/build/tools/encoding/html-entities-extended/index.js +72 -0
  51. package/build/tools/encoding/text-to-binary/index.js +51 -0
  52. package/build/tools/encoding/url-decode/index.js +28 -0
  53. package/build/tools/encoding/url-encode/index.js +16 -0
  54. package/build/tools/forensic/file-type-identifier/index.js +90 -0
  55. package/build/tools/forensic/safelink-decoder/index.js +54 -0
  56. package/build/tools/forensic/url-fanger/index.js +52 -0
  57. package/build/tools/idGenerators/qr-generate/index.js +76 -0
  58. package/build/tools/idGenerators/svg-placeholder-generator/index.js +59 -0
  59. package/build/tools/idGenerators/ulid-generate/index.js +34 -0
  60. package/build/tools/idGenerators/uuid-generate/index.js +14 -0
  61. package/build/tools/math/math-evaluate/index.js +33 -0
  62. package/build/tools/math/number-base-converter/index.js +46 -0
  63. package/build/tools/math/percentage-calculator/index.js +50 -0
  64. package/build/tools/math/roman-numeral-converter/index.js +76 -0
  65. package/build/tools/math/temperature-converter/index.js +59 -0
  66. package/build/tools/math/unix-timestamp-converter/index.js +55 -0
  67. package/build/tools/network/cat/index.js +15 -0
  68. package/build/tools/network/cidr-to-ip-range/index.js +108 -0
  69. package/build/tools/network/curl/index.js +35 -0
  70. package/build/tools/network/dig/index.js +19 -0
  71. package/build/tools/network/grep/index.js +18 -0
  72. package/build/tools/network/head/index.js +17 -0
  73. package/build/tools/network/iban-validate/index.js +83 -0
  74. package/build/tools/network/ip-range-to-cidr/index.js +88 -0
  75. package/build/tools/network/ip-subnet-calculator/index.js +102 -0
  76. package/build/tools/network/ipv4-subnet-calc/index.js +112 -0
  77. package/build/tools/network/ipv6-subnet-calculator/index.js +104 -0
  78. package/build/tools/network/ipv6-ula-generator/index.js +65 -0
  79. package/build/tools/network/mac-address-generate/index.js +68 -0
  80. package/build/tools/network/nslookup/index.js +18 -0
  81. package/build/tools/network/ping/index.js +20 -0
  82. package/build/tools/network/ps/index.js +22 -0
  83. package/build/tools/network/random-port/index.js +53 -0
  84. package/build/tools/network/scp/index.js +134 -0
  85. package/build/tools/network/ssh/index.js +83 -0
  86. package/build/tools/network/tail/index.js +16 -0
  87. package/build/tools/network/telnet/index.js +45 -0
  88. package/build/tools/network/top/index.js +14 -0
  89. package/build/tools/network/url-parse/index.js +52 -0
  90. package/build/tools/physics/angle-converter/index.js +73 -0
  91. package/build/tools/physics/energy-converter/index.js +72 -0
  92. package/build/tools/physics/power-converter/index.js +71 -0
  93. package/build/tools/text/ascii-art-text/index.js +112 -0
  94. package/build/tools/text/distinct-words/index.js +30 -0
  95. package/build/tools/text/emoji-search/index.js +76 -0
  96. package/build/tools/text/lorem-ipsum-generator/index.js +87 -0
  97. package/build/tools/text/numeronym-generator/index.js +37 -0
  98. package/build/tools/text/slugify-string/index.js +44 -0
  99. package/build/tools/text/string-obfuscator/index.js +49 -0
  100. package/build/tools/text/text-camelcase/index.js +20 -0
  101. package/build/tools/text/text-capitalize/index.js +16 -0
  102. package/build/tools/text/text-diff/index.js +72 -0
  103. package/build/tools/text/text-kebabcase/index.js +20 -0
  104. package/build/tools/text/text-lowercase/index.js +15 -0
  105. package/build/tools/text/text-pascalcase/index.js +18 -0
  106. package/build/tools/text/text-snakecase/index.js +20 -0
  107. package/build/tools/text/text-stats/index.js +29 -0
  108. package/build/tools/text/text-to-nato-alphabet/index.js +57 -0
  109. package/build/tools/text/text-to-unicode/index.js +50 -0
  110. package/build/tools/text/text-to-unicode-names/index.js +34 -0
  111. package/build/tools/text/text-uppercase/index.js +15 -0
  112. package/build/tools/utility/css-prettifier/index.js +70 -0
  113. package/build/tools/utility/device-info/index.js +44 -0
  114. package/build/tools/utility/email-normalizer/index.js +73 -0
  115. package/build/tools/utility/http-status-codes/index.js +173 -0
  116. package/build/tools/utility/mime-types/index.js +121 -0
  117. package/build/tools/utility/port-numbers/index.js +106 -0
  118. package/build/tools/utility/rem-px-converter/index.js +63 -0
  119. package/package.json +3 -3
  120. package/build/tools/crypto.js +0 -445
  121. package/build/tools/dataFormat.js +0 -535
  122. package/build/tools/encoding.js +0 -240
  123. package/build/tools/idGenerators.js +0 -180
  124. package/build/tools/math.js +0 -310
  125. package/build/tools/network.js +0 -931
  126. package/build/tools/text.js +0 -678
  127. package/build/tools/utility.js +0 -407
@@ -2,9 +2,16 @@
2
2
 
3
3
  [![Docker Pulls](https://img.shields.io/docker/pulls/wrenchpilot/it-tools-mcp?refresh=1)](https://hub.docker.com/r/wrenchpilot/it-tools-mcp)
4
4
  [![Docker Image Size](https://img.shields.io/docker/image-size/wrenchpilot/it-tools-mcp/latest?refresh=1)](https://hub.docker.com/r/wrenchpilot/it-tools-mcp)
5
- [![Build Status](https://github.com/wrenchpilot/it-tools-mcp/workflows/Build%20and%20Push%20to%20Docker%20Hub/badge.svg)](https://github.com/wrenchpilot/it-tools-mcp/actions)
5
+ [![NPM Version](https://img.shields.io/npm/v/it-tools-mcp?color=blue)](https://www.npmjs.com/package/it-tools-mcp)
6
+ [![NPM Downloads](https://img.shields.io/npm/dm/it-tools-mcp?color=green)](https://www.npmjs.com/package/it-tools-mcp)
7
+ [![GitHub Release](https://img.shields.io/github/v/release/wrenchpilot/it-tools-mcp?include_prereleases&sort=semver)](https://github.com/wrenchpilot/it-tools-mcp/releases)
8
+ [![License](https://img.shields.io/github/license/wrenchpilot/it-tools-mcp)](https://github.com/wrenchpilot/it-tools-mcp/blob/main/LICENSE)
9
+ [![GitHub Issues](https://img.shields.io/github/issues/wrenchpilot/it-tools-mcp)](https://github.com/wrenchpilot/it-tools-mcp/issues)
10
+ [![GitHub Last Commit](https://img.shields.io/github/last-commit/wrenchpilot/it-tools-mcp)](https://github.com/wrenchpilot/it-tools-mcp/commits/main)
11
+ [![Docker Platform](https://img.shields.io/badge/platform-linux%2Famd64%20%7C%20linux%2Farm64-blue)](https://hub.docker.com/r/wrenchpilot/it-tools-mcp)
12
+ [![GitHub Stars](https://img.shields.io/github/stars/wrenchpilot/it-tools-mcp?style=social)](https://github.com/wrenchpilot/it-tools-mcp/stargazers)
6
13
 
7
- A comprehensive Model Context Protocol (MCP) server that provides access to **88 IT tools and utilities** commonly used by developers, system administrators, and IT professionals. This server exposes a complete set of tools for encoding/decoding, text manipulation, hashing, network utilities, and many other common development and IT tasks.
14
+ A comprehensive Model Context Protocol (MCP) server that provides access to **112 IT tools and utilities** commonly used by developers, system administrators, and IT professionals. This server exposes a complete set of tools for encoding/decoding, text manipulation, hashing, network utilities, and many other common development and IT tasks.
8
15
 
9
16
  [![MCP Server Badge](https://glama.ai/mcp/servers/@wrenchpilot/it-tools-mcp/badge)](https://glama.ai/mcp/servers/@wrenchpilot/it-tools-mcp)
10
17
 
@@ -58,7 +65,7 @@ Add to your VS Code `settings.json`:
58
65
  }
59
66
  ```
60
67
 
61
- See the complete list of all 88 tools with detailed parameters on [GitHub](https://github.com/wrenchpilot/it-tools-mcp#available-tools)
68
+ See the complete list of all 112 tools with detailed parameters on [GitHub](https://github.com/wrenchpilot/it-tools-mcp#available-tools)
62
69
 
63
70
  ## 📸 Examples in Action
64
71
 
@@ -80,7 +87,7 @@ Built with **TypeScript**, **Zod** validation, and **MCP SDK** for robust, type-
80
87
 
81
88
  This project was developed using **VS Code**, **Copilot Chat Agent**, **Playwright MCP**, and the **Claude Sonnet 4 Model**, showcasing modern AI-assisted software development:
82
89
 
83
- - 🔧 **All 88 tools** designed and implemented with AI assistance
90
+ - 🔧 **All 112 tools** designed and implemented with AI assistance
84
91
  - 📦 **Complete Docker setup** with GitHub Actions CI/CD pipeline
85
92
  - 🔍 **Schema optimization** with systematic validation cleanup
86
93
  - 📚 **Comprehensive documentation** and tool catalogs
@@ -89,23 +96,29 @@ This project was developed using **VS Code**, **Copilot Chat Agent**, **Playwrig
89
96
 
90
97
  ```text
91
98
  src/
92
- ├── index.ts # Main MCP server
93
- └── tools/ # Tool modules by category
94
- ├── encoding.ts # Base64, URL, HTML encoding
95
- ├── crypto.ts # Hashing, JWT, passwords
96
- ├── dataFormat.ts # JSON, XML, YAML processing
97
- ├── text.ts # Text manipulation tools
98
- ├── network.ts # Network utilities
99
- ├── math.ts # Mathematical operations
100
- ├── idGenerators.ts # UUID, ULID, QR codes
101
- └── utility.ts # Color, MIME, HTTP tools
99
+ ├── index.ts # Main MCP server with dynamic tool loading
100
+ └── tools/ # Modular tool categories
101
+ ├── ansible/ # 5 Ansible automation tools
102
+ ├── color/ # 2 Color conversion tools
103
+ ├── crypto/ # 9 Cryptographic & security tools
104
+ ├── dataFormat/ # 12 Data format conversion tools
105
+ ├── development/ # 6 Development utilities
106
+ ├── docker/ # 5 Docker & containerization tools
107
+ ├── encoding/ # 8 Encoding/decoding tools
108
+ ├── forensic/ # 3 Digital forensics tools
109
+ ├── idGenerators/ # 4 ID & code generation tools
110
+ ├── math/ # 6 Mathematical operation tools
111
+ ├── network/ # 23 Network utilities
112
+ ├── physics/ # 3 Physics calculation tools
113
+ ├── text/ # 19 Text manipulation tools
114
+ └── utility/ # 7 General utility tools
102
115
  ```
103
116
 
104
117
  ### Adding New Tools
105
118
 
106
- 1. Choose/create a tool module in `src/tools/`
107
- 2. Define tool with input schema using Zod
108
- 3. Register in `src/index.ts`
119
+ 1. Create a tool directory in appropriate category under `src/tools/`
120
+ 2. Define tool with input schema using Zod in its `index.ts`
121
+ 3. Export registration function for dynamic loading
109
122
  4. Rebuild with `npm run build`
110
123
 
111
124
  ## 🤝 Contributing
package/README.md CHANGED
@@ -2,11 +2,18 @@
2
2
 
3
3
  [![Docker Pulls](https://img.shields.io/docker/pulls/wrenchpilot/it-tools-mcp?refresh=1)](https://hub.docker.com/r/wrenchpilot/it-tools-mcp)
4
4
  [![Docker Image Size](https://img.shields.io/docker/image-size/wrenchpilot/it-tools-mcp/latest?refresh=1)](https://hub.docker.com/r/wrenchpilot/it-tools-mcp)
5
- [![Build Status](https://github.com/wrenchpilot/it-tools-mcp/workflows/Build%20and%20Push%20to%20Docker%20Hub/badge.svg)](https://github.com/wrenchpilot/it-tools-mcp/actions)
5
+ [![NPM Version](https://img.shields.io/npm/v/it-tools-mcp?color=blue)](https://www.npmjs.com/package/it-tools-mcp)
6
+ [![NPM Downloads](https://img.shields.io/npm/dm/it-tools-mcp?color=green)](https://www.npmjs.com/package/it-tools-mcp)
7
+ [![GitHub Release](https://img.shields.io/github/v/release/wrenchpilot/it-tools-mcp?include_prereleases&sort=semver)](https://github.com/wrenchpilot/it-tools-mcp/releases)
8
+ [![License](https://img.shields.io/github/license/wrenchpilot/it-tools-mcp)](https://github.com/wrenchpilot/it-tools-mcp/blob/main/LICENSE)
9
+ [![GitHub Issues](https://img.shields.io/github/issues/wrenchpilot/it-tools-mcp)](https://github.com/wrenchpilot/it-tools-mcp/issues)
10
+ [![GitHub Last Commit](https://img.shields.io/github/last-commit/wrenchpilot/it-tools-mcp)](https://github.com/wrenchpilot/it-tools-mcp/commits/main)
11
+ [![Docker Platform](https://img.shields.io/badge/platform-linux%2Famd64%20%7C%20linux%2Farm64-blue)](https://hub.docker.com/r/wrenchpilot/it-tools-mcp)
12
+ [![GitHub Stars](https://img.shields.io/github/stars/wrenchpilot/it-tools-mcp?style=social)](https://github.com/wrenchpilot/it-tools-mcp/stargazers)
6
13
 
7
14
  > **📝 Note**: A condensed version of this README is automatically synced to [Docker Hub](https://hub.docker.com/r/wrenchpilot/it-tools-mcp) due to character limits.
8
15
 
9
- A comprehensive Model Context Protocol (MCP) server that provides access to 87 IT tools and utilities commonly used by developers, system administrators, and IT professionals. This server exposes a complete set of tools for encoding/decoding, text manipulation, hashing, network utilities, and many other common development and IT tasks.
16
+ A comprehensive Model Context Protocol (MCP) server that provides access to 112 IT tools and utilities commonly used by developers, system administrators, and IT professionals. This server exposes a complete set of tools for encoding/decoding, text manipulation, hashing, network utilities, and many other common development and IT tasks.
10
17
 
11
18
  [![MCP Server Badge](https://glama.ai/mcp/servers/@wrenchpilot/it-tools-mcp/badge)](https://glama.ai/mcp/servers/@wrenchpilot/it-tools-mcp)
12
19
 
@@ -82,16 +89,22 @@ echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"base64-enc
82
89
 
83
90
  ## 🛠️ Tool Categories
84
91
 
85
- This MCP server provides **87 tools** across **8 categories**:
86
-
87
- - **🔧 Encoding & Decoding** (9 tools): Base64, URL, HTML entities, text-to-binary, Unicode
88
- - **📝 Data Format** (11 tools): JSON, XML, YAML, SQL, TOML, Markdown HTML conversion
89
- - **🔐 Security & Crypto** (12 tools): Hashing (MD5, SHA1-512), HMAC, JWT, bcrypt, passwords, tokens
90
- - **✨ Text Processing** (16 tools): Case conversion, stats, diff, ASCII art, NATO alphabet, slugify
91
- - **🌐 Network & System** (20 tools): IPv4/IPv6 subnets, URL parsing, MAC addresses, phone formatting, ps, top, cat, head, tail, grep, ping, nslookup, telnet, dig, ssh, random-port, mac-address-generate, ip/ipv6 calculators, curl
92
- - **🔢 Math & Calculations** (6 tools): Expression evaluation, base conversion, temperature, percentages
93
- - **🆔 ID & Code Generators** (4 tools: UUID, ULID, QR codes, SVG placeholders
94
- - **🛠️ Utility Tools** (9 tools): Color, MIME, HTTP, device info, email normalization, etc.
92
+ This MCP server provides **112 tools** across **14 categories**:
93
+
94
+ - **� Ansible Tools** (5 tools): Vault encryption/decryption, inventory parser, playbook validator, reference
95
+ - **🎨 Color Tools** (2 tools): HexRGB conversion
96
+ - **📝 Data Format** (12 tools): JSON, XML, YAML, SQL, TOML, Markdown ↔ HTML conversion, phone formatting
97
+ - **�️ Development Tools** (6 tools): Regex testing, cron generation, list conversion, code prettifiers, markdown TOC
98
+ - **🐳 Docker Tools** (5 tools): Compose validation, conversion tools, Traefik generator, reference
99
+ - **🔧 Encoding & Decoding** (8 tools): Base64, URL, HTML entities, text-to-binary
100
+ - **🔍 Forensic Tools** (3 tools): File type identification, safelink decoding, URL fanger
101
+ - **🆔 ID & Code Generators** (4 tools): UUID, ULID, QR codes, SVG placeholders
102
+ - **🔢 Math & Calculations** (6 tools): Expression evaluation, base conversion, temperature, percentages, Unix timestamps, Roman numerals
103
+ - **🌐 Network & System** (23 tools): IPv4/IPv6 subnets, URL parsing, MAC addresses, ps, top, cat, head, tail, grep, ping, nslookup, telnet, dig, ssh, scp, curl, IBAN validation
104
+ - **⚡ Physics** (3 tools): Angle, energy, and power unit conversions
105
+ - **🔐 Security & Crypto** (12 tools): Hashing (MD5, SHA1, SHA256, SHA512), HMAC, JWT, bcrypt, passwords, tokens, OTP, BIP39
106
+ - **✨ Text Processing** (19 tools): Case conversion, stats, diff, ASCII art, NATO alphabet, slugify, Unicode
107
+ - **🛠️ Utility Tools** (7 tools): Email normalization, MIME types, HTTP status codes, device info, CSS prettifier, rem/px converter
95
108
 
96
109
  ## 📸 Screenshot Examples
97
110
 
@@ -109,6 +122,15 @@ Examples of using the IT Tools MCP server with VS Code Copilot Chat for secure p
109
122
 
110
123
  | Tool | Description | Parameters |
111
124
  | --------------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
125
+ | **Ansible Tools** | | |
126
+ | `ansible-inventory-generator` | Generate Ansible inventory | `hosts: string[]`, `groups?: Record<string, string[]>`, `variables?: Record<string, any>` |
127
+ | `ansible-playbook-validator` | Validate Ansible playbook YAML | `playbook: string` |
128
+ | `ansible-reference` | Ansible syntax and module reference | `query?: string` |
129
+ | `ansible-vault-decrypt` | Decrypt Ansible Vault data | `data: string`, `password: string` |
130
+ | `ansible-vault-encrypt` | Encrypt data with Ansible Vault | `data: string`, `password: string` |
131
+ | **Color Tools** | | |
132
+ | `color-hex-to-rgb` | Convert HEX to RGB | `hex: string` |
133
+ | `color-rgb-to-hex` | Convert RGB to HEX | `r: number`, `g: number`, `b: number` |
112
134
  | **Data Format** | | |
113
135
  | `html-to-markdown` | Convert HTML to Markdown | `html: string` |
114
136
  | `json-diff` | Compare JSON objects | `json1: string`, `json2: string` |
@@ -124,8 +146,17 @@ Examples of using the IT Tools MCP server with VS Code Copilot Chat for secure p
124
146
  | `yaml-format` | Format YAML | `yaml: string` |
125
147
  | **Development Tools** | | |
126
148
  | `crontab-generate` | Generate cron expressions | `minute?: string`, `hour?: string`, `dayOfMonth?: string`, `month?: string`, `dayOfWeek?: string` |
149
+ | `html-prettifier` | Format and prettify HTML | `html: string`, `indent?: number` |
150
+ | `javascript-prettifier` | Format and prettify JavaScript | `javascript: string`, `indent?: number` |
127
151
  | `list-converter` | Convert list formats | `list: string`, `inputFormat: 'comma' \| 'semicolon' \| 'newline' \| 'space' \| 'pipe'`, `outputFormat: 'comma' \| 'semicolon' \| 'newline' \| 'space' \| 'pipe' \| 'json' \| 'quoted'`, `trim?: boolean` |
152
+ | `markdown-toc-generator` | Generate table of contents for Markdown | `markdown: string`, `maxDepth?: number` |
128
153
  | `regex-tester` | Test regular expressions | `pattern: string`, `text: string`, `flags?: string` |
154
+ | **Docker Tools** | | |
155
+ | `docker-compose-to-docker-run` | Convert Compose to Docker run command | `compose: string`, `service?: string` |
156
+ | `docker-compose-validator` | Validate Docker Compose YAML | `compose: string` |
157
+ | `docker-reference` | Docker command and syntax reference | `query?: string` |
158
+ | `docker-run-to-docker-compose` | Convert Docker run to Compose | `command: string` |
159
+ | `traefik-compose-generator` | Generate Traefik Docker Compose | `domain: string`, `service: string`, `port?: number`, `network?: string` |
129
160
  | **Encoding & Decoding** | | |
130
161
  | `base64-decode` | Decode Base64 text | `text: string` |
131
162
  | `base64-encode` | Encode text to Base64 | `text: string` |
@@ -136,6 +167,10 @@ Examples of using the IT Tools MCP server with VS Code Copilot Chat for secure p
136
167
  | `text-to-unicode` | Convert text to Unicode and vice versa | `input: string`, `operation: 'encode' \| 'decode'` |
137
168
  | `url-decode` | URL decode text | `text: string` |
138
169
  | `url-encode` | URL encode text | `text: string` |
170
+ | **Forensic Tools** | | |
171
+ | `file-type-identifier` | Identify file type from content | `data: string`, `filename?: string` |
172
+ | `safelink-decoder` | Decode Microsoft SafeLinks | `url: string` |
173
+ | `url-fanger` | Fang and defang URLs for analysis | `text: string`, `operation: 'fang' \| 'defang'` |
139
174
  | **ID & Code Generators** | | |
140
175
  | `qr-generate` | Generate QR codes for any content | `text: string`, `size?: number` - Supports URLs, WiFi (WIFI:T:WPA;S:network;P:password;;), contact info, etc. |
141
176
  | `svg-placeholder-generator` | Generate SVG placeholder | `width?: number`, `height?: number`, `text?: string`, `backgroundColor?: string`, `textColor?: string` |
@@ -150,25 +185,29 @@ Examples of using the IT Tools MCP server with VS Code Copilot Chat for secure p
150
185
  | `unix-timestamp-converter` | Convert timestamps | `input: string` |
151
186
  | **Network & System** | | |
152
187
  | `cat` | Display file content | `file: string` |
153
- | `curl` | HTTP client (GET, POST, etc.) | `url: string`, `method?: string`, `headers?: Record<string, string>`, `body?: string` |
188
+ | `curl` | HTTP client (GET, POST, etc.) | `url: string`, `method?: string`, `headers?: Record<string, string>`, `body?: string` |
154
189
  | `dig` | DNS query (custom type) | `target: string`, `type?: string` |
155
190
  | `grep` | Search for pattern in file | `file: string`, `pattern: string` |
156
191
  | `head` | Show first N lines of file | `file: string`, `lines?: number` |
157
- | `iban-validate` | Validate IBAN | `iban: string` |
192
+ | `iban-validate` | Validate IBAN | `iban: string` |
158
193
  | `ip-subnet-calculator` | Calculate IPv4 subnet | `ip: string`, `cidr: number` |
159
194
  | `ipv4-subnet-calc` | Enhanced IPv4 subnet calc | `cidr: string` |
160
195
  | `ipv6-ula-generator` | Generate IPv6 ULA | `globalId?: string` |
161
- | `mac-address-generate` | Generate MAC address | `prefix?: string`, `separator?: ':' \| '-'` |
196
+ | `mac-address-generate` | Generate MAC address | `prefix?: string`, `separator?: ':' \| '-'` |
162
197
  | `nslookup` | DNS lookup (A/AAAA/CNAME) | `target: string` |
163
198
  | `ping` | Ping a host | `target: string`, `count?: number` |
164
199
  | `ps` | List running processes | None |
165
200
  | `random-port` | Generate random ports | `count?: number`, `min?: number`, `max?: number`, `exclude?: number[]` |
166
- | `scp` | Copy files to/from remote host (SFTP) | `target: string`, `user: string`, `direction: 'upload'\|'download'`, `localPath: string`, `remotePath: string`, `privateKey?: string` |
201
+ | `scp` | Copy files to/from remote host (SFTP) | `target: string`, `user: string`, `direction: 'upload'\|'download'`, `localPath: string`, `remotePath: string`, `privateKey?: string` |
167
202
  | `ssh` | SSH command execution | `target: string`, `user: string`, `command: string` |
168
203
  | `tail` | Show last N lines of file | `file: string`, `lines?: number` |
169
204
  | `telnet` | Test TCP connectivity | `target: string`, `port: number` |
170
205
  | `top` | Show top processes (by CPU) | None |
171
206
  | `url-parse` | Parse URL components | `url: string` |
207
+ | **Physics** | | |
208
+ | `angle-converter` | Convert angle units | `value: number`, `from: 'degrees' \| 'radians' \| 'gradians'`, `to: 'degrees' \| 'radians' \| 'gradians'` |
209
+ | `energy-converter` | Convert energy units | `value: number`, `from: 'joules' \| 'calories' \| 'kwh' \| 'btu'`, `to: 'joules' \| 'calories' \| 'kwh' \| 'btu'` |
210
+ | `power-converter` | Convert power units | `value: number`, `from: 'watts' \| 'kilowatts' \| 'horsepower' \| 'btu_per_hour'`, `to: 'watts' \| 'kilowatts' \| 'horsepower' \| 'btu_per_hour'` |
172
211
  | **Security & Crypto** | | |
173
212
  | `basic-auth-generator` | Generate Basic Auth header | `username: string`, `password: string` |
174
213
  | `bcrypt-hash` | Generate/verify bcrypt hash | `password: string`, `rounds?: number`, `hash?: string` |
@@ -184,6 +223,7 @@ Examples of using the IT Tools MCP server with VS Code Copilot Chat for secure p
184
223
  | `token-generator` | Generate secure token | `length?: number`, `charset?: 'alphanumeric' \| 'hex' \| 'base64' \| 'custom'`, `customChars?: string` |
185
224
  | **Text Processing** | | |
186
225
  | `ascii-art-text` | Generate ASCII art | `text: string`, `font?: string` (supports 295+ figlet fonts) |
226
+ | `distinct-words` | Extract unique words from text | `text: string`, `caseSensitive?: boolean` |
187
227
  | `emoji-search` | Search emojis | `query: string` |
188
228
  | `lorem-ipsum-generator` | Generate Lorem Ipsum | `type?: 'words' \| 'sentences' \| 'paragraphs'`, `count?: number` |
189
229
  | `numeronym-generator` | Generate numeronyms | `text: string` |
@@ -198,14 +238,16 @@ Examples of using the IT Tools MCP server with VS Code Copilot Chat for secure p
198
238
  | `text-snakecase` | Convert to snake_case | `text: string` |
199
239
  | `text-stats` | Get text statistics | `text: string` |
200
240
  | `text-to-nato-alphabet` | Convert to NATO alphabet | `text: string` |
241
+ | `text-to-unicode-names` | Convert text to Unicode character names | `text: string` |
201
242
  | `text-uppercase` | Convert to uppercase | `text: string` |
202
243
  | **Utility Tools** | | |
203
- | `color-hex-to-rgb` | Convert HEX to RGB | `hex: string` |
204
- | `color-rgb-to-hex` | Convert RGB to HEX | `r: number`, `g: number`, `b: number` |
244
+ | `css-prettifier` | Format and prettify CSS | `css: string`, `indent?: number` |
205
245
  | `device-info` | Get system information | None |
206
246
  | `email-normalizer` | Normalize email addresses | `email: string` |
207
247
  | `http-status-codes` | HTTP status reference | `code?: number` |
208
248
  | `mime-types` | Look up MIME types | `input: string`, `lookupType?: 'extension-to-mime' \| 'mime-to-extension'` |
249
+ | `port-numbers` | Look up port number assignments | `port?: number`, `service?: string` |
250
+ | `rem-px-converter` | Convert between REM and PX units | `value: number`, `conversion: 'rem-to-px' \| 'px-to-rem'`, `baseFontSize?: number` |
209
251
 
210
252
  ## 🏗️ Architecture & Development
211
253
 
@@ -216,14 +258,14 @@ Built with **TypeScript**, **Zod** validation, and **MCP SDK** for robust, type-
216
258
  This project was developed using **VS Code**, **Copilot Chat Agent**, **Playwright MCP**, and the **Claude Sonnet 4 Model**, demonstrating the power of AI-assisted software development:
217
259
 
218
260
  - **Intelligent Code Generation**: Claude Sonnet analyzed requirements and generated comprehensive tool implementations
219
- - **Schema Validation**: Automatically identified and resolved JSON schema validation issues across 75 tools
261
+ - **Schema Validation**: Automatically identified and resolved JSON schema validation issues across 112 tools
220
262
  - **Docker Optimization**: Created production-ready Docker workflows and multi-stage builds
221
263
  - **Documentation**: Generated comprehensive README with examples and tool reference tables
222
264
  - **Testing**: Implemented robust error handling and validation throughout the codebase
223
265
 
224
266
  **Key AI Contributions:**
225
267
 
226
- - 🔧 **Tool Implementation**: All 75 tools designed and implemented with AI assistance
268
+ - 🔧 **Tool Implementation**: All 112 tools designed and implemented with AI assistance
227
269
  - 📦 **Docker Setup**: Complete containerization with GitHub Actions CI/CD pipeline
228
270
  - 🔍 **Schema Cleanup**: Systematic removal of unsupported Zod keywords from all tool definitions
229
271
  - 📚 **Documentation**: Comprehensive README with usage examples and tool catalogs
@@ -233,25 +275,31 @@ This showcases how AI can accelerate development while maintaining code quality,
233
275
 
234
276
  ### Adding New Tools
235
277
 
236
- 1. Choose/create a tool module in `src/tools/`
237
- 2. Define tool with input schema using Zod
238
- 3. Register in `src/index.ts`
278
+ 1. Create a tool directory in appropriate category under `src/tools/`
279
+ 2. Define tool with input schema using Zod in its `index.ts`
280
+ 3. Export registration function for dynamic loading
239
281
  4. Rebuild with `npm run build`
240
282
 
241
283
  ### Project Structure
242
284
 
243
285
  ```text
244
286
  src/
245
- ├── index.ts # Main MCP server
246
- └── tools/ # Tool modules by category
247
- ├── encoding.ts # Base64, URL, HTML encoding
248
- ├── crypto.ts # Hashing, JWT, passwords
249
- ├── dataFormat.ts # JSON, XML, YAML processing
250
- ├── text.ts # Text manipulation tools
251
- ├── network.ts # Network utilities
252
- ├── math.ts # Mathematical operations
253
- ├── idGenerators.ts # UUID, ULID, QR codes
254
- └── utility.ts # Color, MIME, HTTP tools
287
+ ├── index.ts # Main MCP server with dynamic tool loading
288
+ └── tools/ # Modular tool categories
289
+ ├── ansible/ # 5 Ansible automation tools
290
+ ├── color/ # 2 Color conversion tools
291
+ ├── crypto/ # 9 Cryptographic & security tools
292
+ ├── dataFormat/ # 12 Data format conversion tools
293
+ ├── development/ # 6 Development utilities
294
+ ├── docker/ # 5 Docker & containerization tools
295
+ ├── encoding/ # 8 Encoding/decoding tools
296
+ ├── forensic/ # 3 Digital forensics tools
297
+ ├── idGenerators/ # 4 ID & code generation tools
298
+ ├── math/ # 6 Mathematical operation tools
299
+ ├── network/ # 23 Network utilities
300
+ ├── physics/ # 3 Physics calculation tools
301
+ ├── text/ # 19 Text manipulation tools
302
+ └── utility/ # 7 General utility tools
255
303
  ```
256
304
 
257
305
  ## 🤝 Contributing
package/build/index.js CHANGED
@@ -4,6 +4,9 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
4
4
  import { z } from "zod";
5
5
  import fs from 'fs';
6
6
  import path from 'path';
7
+ import { fileURLToPath } from 'url';
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
7
10
  /**
8
11
  * Security utilities for IT Tools MCP Server
9
12
  */
@@ -221,24 +224,53 @@ const server = new McpServer({
221
224
  tools: {},
222
225
  },
223
226
  });
227
+ // Helper function to dynamically load modular tools from a category directory
228
+ async function loadModularTools(server, category) {
229
+ const toolsDir = path.join(__dirname, 'tools', category);
230
+ if (!fs.existsSync(toolsDir)) {
231
+ console.warn(`Category directory does not exist: ${toolsDir}`);
232
+ return;
233
+ }
234
+ const toolDirs = fs.readdirSync(toolsDir, { withFileTypes: true })
235
+ .filter(dirent => dirent.isDirectory())
236
+ .map(dirent => dirent.name);
237
+ for (const toolDir of toolDirs) {
238
+ const toolPath = path.join(toolsDir, toolDir, 'index.js');
239
+ if (fs.existsSync(toolPath)) {
240
+ try {
241
+ const toolModule = await import(`./${path.relative(__dirname, toolPath).replace(/\\/g, '/')}`);
242
+ // Find the register function in the module
243
+ const registerFunction = Object.values(toolModule).find((fn) => typeof fn === 'function' && fn.name.startsWith('register'));
244
+ if (registerFunction) {
245
+ console.time(`register:${category}:${toolDir}`);
246
+ registerFunction(server);
247
+ console.timeEnd(`register:${category}:${toolDir}`);
248
+ }
249
+ else {
250
+ console.warn(`No register function found in ${toolPath}`);
251
+ }
252
+ }
253
+ catch (error) {
254
+ console.error(`Failed to load tool ${category}/${toolDir}:`, error);
255
+ }
256
+ }
257
+ else {
258
+ console.warn(`Tool index file does not exist: ${toolPath}`);
259
+ }
260
+ }
261
+ }
224
262
  // Register all tool modules (dynamically for faster startup, with per-module timing)
225
263
  async function registerAllTools(server) {
226
- const modules = [
227
- { name: 'encoding', fn: () => import('./tools/encoding.js').then(m => m.registerEncodingTools(server)) },
228
- { name: 'crypto', fn: () => import('./tools/crypto.js').then(m => m.registerCryptoTools(server)) },
229
- { name: 'dataFormat', fn: () => import('./tools/dataFormat.js').then(m => m.registerDataFormatTools(server)) },
230
- { name: 'text', fn: () => import('./tools/text.js').then(m => m.registerTextTools(server)) },
231
- { name: 'idGenerators', fn: () => import('./tools/idGenerators.js').then(m => m.registerIdGeneratorTools(server)) },
232
- { name: 'network', fn: () => import('./tools/network.js').then(m => m.registerNetworkTools(server)) },
233
- { name: 'math', fn: () => import('./tools/math.js').then(m => m.registerMathTools(server)) },
234
- { name: 'utility', fn: () => import('./tools/utility.js').then(m => m.registerUtilityTools(server)) },
235
- { name: 'development', fn: () => import('./tools/development.js').then(m => m.registerDevelopmentTools(server)) },
236
- { name: 'color', fn: () => import('./tools/color.js').then(m => m.registerColorTools(server)) },
264
+ // All categories to load modularly
265
+ const categories = [
266
+ 'docker', 'ansible', 'color', 'encoding', 'idGenerators',
267
+ 'crypto', 'dataFormat', 'text', 'network', 'math',
268
+ 'utility', 'development', 'forensic', 'physics'
237
269
  ];
238
- for (const mod of modules) {
239
- console.time(`register:${mod.name}`);
240
- await mod.fn();
241
- console.timeEnd(`register:${mod.name}`);
270
+ for (const category of categories) {
271
+ console.time(`register:${category}-modular`);
272
+ await loadModularTools(server, category);
273
+ console.timeEnd(`register:${category}-modular`);
242
274
  }
243
275
  }
244
276
  // Add resource monitoring tool
@@ -0,0 +1,212 @@
1
+ import { z } from "zod";
2
+ export function registerAnsibleInventoryParser(server) {
3
+ server.tool("ansible-inventory-parser", "Parse and validate Ansible inventory files", {
4
+ inventory: z.string().describe("Ansible inventory content (INI or YAML format)"),
5
+ }, async ({ inventory }) => {
6
+ if (!inventory?.trim()) {
7
+ return {
8
+ content: [
9
+ {
10
+ type: "text",
11
+ text: "Please provide inventory content to parse",
12
+ },
13
+ ],
14
+ };
15
+ }
16
+ try {
17
+ let parsed = {};
18
+ const trimmed = inventory.trim();
19
+ // Check if it's YAML format
20
+ if (trimmed.startsWith('{') || trimmed.includes('---') || trimmed.includes(':')) {
21
+ try {
22
+ const yaml = await import('js-yaml');
23
+ parsed = yaml.load(inventory);
24
+ }
25
+ catch (yamlError) {
26
+ // Fall back to INI parsing
27
+ parsed = parseINIInventory(inventory);
28
+ }
29
+ }
30
+ else {
31
+ // Parse as INI format
32
+ parsed = parseINIInventory(inventory);
33
+ }
34
+ // Validate and format the result
35
+ const result = formatInventoryResult(parsed);
36
+ return {
37
+ content: [
38
+ {
39
+ type: "text",
40
+ text: result,
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ catch (error) {
46
+ return {
47
+ content: [
48
+ {
49
+ type: "text",
50
+ text: `Error parsing inventory: ${error.message}`,
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ });
56
+ }
57
+ // Helper function to parse INI format inventory
58
+ function parseINIInventory(inventory) {
59
+ const result = { all: { children: {}, hosts: {} } };
60
+ const lines = inventory.split('\n');
61
+ let currentGroup = 'all';
62
+ for (const line of lines) {
63
+ const trimmed = line.trim();
64
+ // Skip empty lines and comments
65
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith(';')) {
66
+ continue;
67
+ }
68
+ // Group header
69
+ if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
70
+ currentGroup = trimmed.slice(1, -1);
71
+ // Handle group variables and children sections
72
+ if (currentGroup.includes(':')) {
73
+ const [groupName, section] = currentGroup.split(':');
74
+ if (section === 'vars') {
75
+ if (!result.all.children[groupName]) {
76
+ result.all.children[groupName] = { hosts: {}, vars: {} };
77
+ }
78
+ currentGroup = `${groupName}:vars`;
79
+ }
80
+ else if (section === 'children') {
81
+ if (!result.all.children[groupName]) {
82
+ result.all.children[groupName] = { hosts: {}, children: {} };
83
+ }
84
+ currentGroup = `${groupName}:children`;
85
+ }
86
+ }
87
+ else {
88
+ if (!result.all.children[currentGroup]) {
89
+ result.all.children[currentGroup] = { hosts: {} };
90
+ }
91
+ }
92
+ continue;
93
+ }
94
+ // Parse host or variable lines
95
+ if (currentGroup.endsWith(':vars')) {
96
+ // Group variables
97
+ const groupName = currentGroup.replace(':vars', '');
98
+ const [key, ...valueParts] = trimmed.split('=');
99
+ if (key && valueParts.length > 0) {
100
+ const value = valueParts.join('=');
101
+ if (!result.all.children[groupName].vars) {
102
+ result.all.children[groupName].vars = {};
103
+ }
104
+ result.all.children[groupName].vars[key.trim()] = value.trim();
105
+ }
106
+ }
107
+ else if (currentGroup.endsWith(':children')) {
108
+ // Child groups
109
+ const groupName = currentGroup.replace(':children', '');
110
+ if (!result.all.children[groupName].children) {
111
+ result.all.children[groupName].children = {};
112
+ }
113
+ result.all.children[groupName].children[trimmed] = {};
114
+ }
115
+ else {
116
+ // Host entries
117
+ const [hostname, ...varParts] = trimmed.split(/\s+/);
118
+ const hostVars = {};
119
+ // Parse host variables
120
+ for (const varPart of varParts) {
121
+ const [key, ...valueParts] = varPart.split('=');
122
+ if (key && valueParts.length > 0) {
123
+ hostVars[key] = valueParts.join('=');
124
+ }
125
+ }
126
+ if (currentGroup === 'all') {
127
+ result.all.hosts[hostname] = hostVars;
128
+ }
129
+ else {
130
+ result.all.children[currentGroup].hosts[hostname] = hostVars;
131
+ }
132
+ }
133
+ }
134
+ return result;
135
+ }
136
+ // Helper function to format inventory parsing results
137
+ function formatInventoryResult(parsed) {
138
+ let result = '# Parsed Ansible Inventory\n\n';
139
+ try {
140
+ // Count totals
141
+ let totalHosts = 0;
142
+ let totalGroups = 0;
143
+ function countHosts(obj) {
144
+ let count = 0;
145
+ if (obj.hosts) {
146
+ count += Object.keys(obj.hosts).length;
147
+ }
148
+ if (obj.children) {
149
+ for (const child of Object.values(obj.children)) {
150
+ count += countHosts(child);
151
+ }
152
+ }
153
+ return count;
154
+ }
155
+ function countGroups(obj) {
156
+ let count = 0;
157
+ if (obj.children) {
158
+ count += Object.keys(obj.children).length;
159
+ for (const child of Object.values(obj.children)) {
160
+ count += countGroups(child);
161
+ }
162
+ }
163
+ return count;
164
+ }
165
+ totalHosts = countHosts(parsed.all || parsed);
166
+ totalGroups = countGroups(parsed.all || parsed);
167
+ result += `## Summary\n`;
168
+ result += `- Total Hosts: ${totalHosts}\n`;
169
+ result += `- Total Groups: ${totalGroups}\n\n`;
170
+ // List all groups and hosts
171
+ function formatGroup(groupName, group, indent = 0) {
172
+ const spaces = ' '.repeat(indent);
173
+ let output = `${spaces}## ${groupName}\n`;
174
+ if (group.hosts && Object.keys(group.hosts).length > 0) {
175
+ output += `${spaces}### Hosts:\n`;
176
+ for (const [hostname, vars] of Object.entries(group.hosts)) {
177
+ output += `${spaces}- ${hostname}`;
178
+ if (vars && typeof vars === 'object' && Object.keys(vars).length > 0) {
179
+ output += ` (vars: ${Object.keys(vars).join(', ')})`;
180
+ }
181
+ output += '\n';
182
+ }
183
+ }
184
+ if (group.vars && Object.keys(group.vars).length > 0) {
185
+ output += `${spaces}### Variables:\n`;
186
+ for (const [key, value] of Object.entries(group.vars)) {
187
+ output += `${spaces}- ${key}: ${value}\n`;
188
+ }
189
+ }
190
+ if (group.children && Object.keys(group.children).length > 0) {
191
+ output += `${spaces}### Child Groups:\n`;
192
+ for (const [childName, child] of Object.entries(group.children)) {
193
+ output += formatGroup(childName, child, indent + 1);
194
+ }
195
+ }
196
+ return output + '\n';
197
+ }
198
+ if (parsed.all) {
199
+ result += formatGroup('all', parsed.all);
200
+ }
201
+ else {
202
+ // Handle direct group format
203
+ for (const [groupName, group] of Object.entries(parsed)) {
204
+ result += formatGroup(groupName, group);
205
+ }
206
+ }
207
+ }
208
+ catch (error) {
209
+ result += `Error formatting inventory: ${error.message}`;
210
+ }
211
+ return result;
212
+ }