cli-mcp-mapper 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1 +1,705 @@
1
- # cli-mcp-mapper
1
+ # CLI MCP Mapper
2
+
3
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
+ [![npm version](https://img.shields.io/npm/v/cli-mcp-mapper.svg)](https://www.npmjs.com/package/cli-mcp-mapper)
5
+
6
+ **Transform any CLI command into a Model Context Protocol (MCP) tool with simple JSON configuration.**
7
+
8
+ CLI MCP Mapper is a powerful MCP server that dynamically exposes command-line tools as MCP tools. This allows AI assistants and other MCP clients to safely execute system commands, scripts, and tools through a declarative JSON configuration—no code required.
9
+
10
+ ## Table of Contents
11
+
12
+ - [Why CLI MCP Mapper?](#why-cli-mcp-mapper)
13
+ - [Features](#features)
14
+ - [Installation](#installation)
15
+ - [Configuration](#configuration)
16
+ - [Environment Variable](#environment-variable)
17
+ - [Default Location](#default-location)
18
+ - [Configuration File Format](#configuration-file-format)
19
+ - [JSON Specification](#json-specification)
20
+ - [Schema Reference](#schema-reference)
21
+ - [Command Definition](#command-definition)
22
+ - [Parameter Definition](#parameter-definition)
23
+ - [Parameter Types](#parameter-types)
24
+ - [Usage Examples](#usage-examples)
25
+ - [Basic Commands Example](#basic-commands-example)
26
+ - [Git Operations Example](#git-operations-example)
27
+ - [Complex Parameters Example](#complex-parameters-example)
28
+ - [MCP Client Configuration](#mcp-client-configuration)
29
+ - [Claude Desktop](#claude-desktop)
30
+ - [Other MCP Clients](#other-mcp-clients)
31
+ - [Example Configuration Files](#example-configuration-files)
32
+ - [Troubleshooting](#troubleshooting)
33
+ - [Security Considerations](#security-considerations)
34
+ - [Contributing](#contributing)
35
+ - [License](#license)
36
+
37
+ ## Why CLI MCP Mapper?
38
+
39
+ The Model Context Protocol (MCP) enables AI assistants to interact with external tools and systems. However, creating MCP servers for every command-line tool can be time-consuming and requires coding expertise. CLI MCP Mapper solves this by:
40
+
41
+ - **No Coding Required**: Define tools using simple JSON configuration
42
+ - **Universal Compatibility**: Works with any CLI tool (git, npm, docker, custom scripts, etc.)
43
+ - **Type Safety**: JSON schema validation ensures configuration correctness
44
+ - **Flexible Parameter Handling**: Supports positional arguments, named flags, booleans, enums, and more
45
+ - **Reusable Configurations**: Share and version control your tool definitions
46
+ - **Rapid Prototyping**: Test MCP tool ideas without writing server code
47
+
48
+ ### Use Cases
49
+
50
+ - **DevOps Automation**: Expose docker, kubectl, terraform commands to AI assistants
51
+ - **Development Workflows**: Make build tools, linters, and test runners available as MCP tools
52
+ - **System Administration**: Safely expose system commands with controlled parameters
53
+ - **Custom Scripts**: Wrap your own scripts and make them AI-accessible
54
+ - **Git Operations**: Provide version control capabilities to AI assistants
55
+ - **File Management**: Enable AI to perform file operations with safety guardrails
56
+
57
+ ## Features
58
+
59
+ ✨ **Dynamic Tool Generation**: Automatically creates MCP tools from JSON definitions
60
+ 🎯 **Flexible Parameters**: Supports positional args, named flags, booleans, enums, and required/optional parameters
61
+ 📝 **Type System**: String, boolean, and number parameter types with validation
62
+ 🔒 **Schema Validation**: JSON schema for validating your command configurations
63
+ 🚀 **Zero Dependencies**: Minimal runtime footprint (only @modelcontextprotocol/sdk)
64
+ 🔧 **Easy Configuration**: Environment variable or default path configuration
65
+ 📚 **Rich Examples**: Comprehensive example configurations included
66
+
67
+ ## Installation
68
+
69
+ Install CLI MCP Mapper globally from GitHub:
70
+
71
+ ```bash
72
+ npm install -g git+https://github.com/SteffenBlake/cli-mcp-mapper.git
73
+ ```
74
+
75
+ Or install from npm (once published):
76
+
77
+ ```bash
78
+ npm install -g cli-mcp-mapper
79
+ ```
80
+
81
+ Verify the installation:
82
+
83
+ ```bash
84
+ cli-mcp-mapper --version
85
+ ```
86
+
87
+ ## Configuration
88
+
89
+ CLI MCP Mapper requires a JSON configuration file that defines which commands to expose as MCP tools.
90
+
91
+ ### Environment Variable
92
+
93
+ You can specify a custom configuration path using the `CLI_MCP_MAPPER_CONFIG` environment variable:
94
+
95
+ ```bash
96
+ export CLI_MCP_MAPPER_CONFIG=/path/to/your/commands.json
97
+ ```
98
+
99
+ For persistent configuration, add this to your shell profile (`~/.bashrc`, `~/.zshrc`, etc.):
100
+
101
+ ```bash
102
+ # Add to ~/.bashrc or ~/.zshrc
103
+ export CLI_MCP_MAPPER_CONFIG="$HOME/my-mcp-configs/commands.json"
104
+ ```
105
+
106
+ ### Default Location
107
+
108
+ If no environment variable is set, CLI MCP Mapper looks for the configuration at:
109
+
110
+ ```
111
+ ~/.config/cli-mcp-mapper/commands.json
112
+ ```
113
+
114
+ On different systems:
115
+ - **Linux/macOS**: `~/.config/cli-mcp-mapper/commands.json`
116
+ - **Windows**: `%USERPROFILE%\.config\cli-mcp-mapper\commands.json`
117
+
118
+ To create the default configuration directory:
119
+
120
+ ```bash
121
+ mkdir -p ~/.config/cli-mcp-mapper
122
+ ```
123
+
124
+ Then copy one of the example configurations or create your own:
125
+
126
+ ```bash
127
+ # Copy a basic example
128
+ cp examples/basic-commands.json ~/.config/cli-mcp-mapper/commands.json
129
+
130
+ # Or create your own
131
+ cat > ~/.config/cli-mcp-mapper/commands.json << 'EOF'
132
+ {
133
+ "commands": {
134
+ "hello": {
135
+ "description": "Say hello",
136
+ "command": "echo",
137
+ "baseArgs": [],
138
+ "parameters": {
139
+ "name": {
140
+ "type": "string",
141
+ "description": "Name to greet",
142
+ "required": true,
143
+ "position": 0
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ EOF
150
+ ```
151
+
152
+ ### Configuration File Format
153
+
154
+ The configuration file is a JSON object with a single `commands` property containing a map of command definitions:
155
+
156
+ ```json
157
+ {
158
+ "commands": {
159
+ "command_name": {
160
+ "description": "What this command does",
161
+ "command": "base-command",
162
+ "baseArgs": ["--static", "args"],
163
+ "parameters": {
164
+ "param_name": {
165
+ "type": "string",
166
+ "description": "Parameter description",
167
+ "required": false,
168
+ "position": 0
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }
174
+ ```
175
+
176
+ ## JSON Specification
177
+
178
+ ### Schema Reference
179
+
180
+ A JSON Schema is provided for validating your configuration files. Reference it in your JSON:
181
+
182
+ ```json
183
+ {
184
+ "$schema": "./commands.schema.json",
185
+ "commands": { ... }
186
+ }
187
+ ```
188
+
189
+ This enables autocompletion and validation in editors that support JSON Schema (VS Code, IntelliJ, etc.).
190
+
191
+ ### Command Definition
192
+
193
+ Each command in the `commands` object has the following structure:
194
+
195
+ | Property | Type | Required | Description |
196
+ |----------|------|----------|-------------|
197
+ | `description` | string | ✅ Yes | Human-readable description shown to MCP clients |
198
+ | `command` | string | ✅ Yes | Base command to execute (e.g., `"git"`, `"npm"`, `"docker"`) |
199
+ | `baseArgs` | string[] | No | Static arguments always passed to the command (e.g., `["build", "--quiet"]`) |
200
+ | `parameters` | object | No | Map of parameter names to parameter definitions |
201
+
202
+ **Example:**
203
+
204
+ ```json
205
+ {
206
+ "git_status": {
207
+ "description": "Show the working tree status",
208
+ "command": "git",
209
+ "baseArgs": ["status"],
210
+ "parameters": {
211
+ "short": {
212
+ "type": "boolean",
213
+ "description": "Give output in short format",
214
+ "argName": "-s"
215
+ }
216
+ }
217
+ }
218
+ }
219
+ ```
220
+
221
+ ### Parameter Definition
222
+
223
+ Each parameter in the `parameters` object defines how the parameter is passed to the command:
224
+
225
+ | Property | Type | Required | Description |
226
+ |----------|------|----------|-------------|
227
+ | `type` | string | ✅ Yes | Parameter type: `"string"`, `"boolean"`, or `"number"` |
228
+ | `description` | string | ✅ Yes | Human-readable parameter description |
229
+ | `required` | boolean | No | Whether the parameter must be provided (default: `false`) |
230
+ | `position` | number | No | For positional arguments: 0-based position in command line |
231
+ | `argName` | string | No | For named arguments: the flag to use (e.g., `"--output"`, `"-v"`) |
232
+ | `argValue` | string | No | Static value to pass after `argName` (rarely used) |
233
+ | `enum` | string[] | No | List of allowed values |
234
+ | `default` | any | No | Default value if not provided |
235
+
236
+ **Parameter Processing Rules:**
237
+
238
+ 1. **Positional Parameters** (`position` is set):
239
+ - Added to command line in position order (0, 1, 2, ...)
240
+ - No `argName` needed
241
+ - If parameter is not provided and not required, it's omitted
242
+
243
+ 2. **Named Parameters** (`argName` is set):
244
+ - For `boolean` type: If `true`, adds `argName` to command
245
+ - For `string` or `number` type: Adds `argName` followed by the value
246
+ - If parameter is not provided, it's omitted
247
+
248
+ 3. **Required Parameters** (`required: true`):
249
+ - MCP clients must provide these parameters
250
+ - Validation happens before command execution
251
+
252
+ ### Parameter Types
253
+
254
+ #### String Parameters
255
+
256
+ Used for text values, file paths, URLs, etc.
257
+
258
+ ```json
259
+ {
260
+ "file_path": {
261
+ "type": "string",
262
+ "description": "Path to the file",
263
+ "required": true,
264
+ "position": 0
265
+ }
266
+ }
267
+ ```
268
+
269
+ With enum for limited choices:
270
+
271
+ ```json
272
+ {
273
+ "log_level": {
274
+ "type": "string",
275
+ "description": "Logging level",
276
+ "enum": ["debug", "info", "warn", "error"],
277
+ "argName": "--log-level"
278
+ }
279
+ }
280
+ ```
281
+
282
+ #### Boolean Parameters
283
+
284
+ Used for flags/switches. When `true`, the `argName` is added to the command.
285
+
286
+ ```json
287
+ {
288
+ "verbose": {
289
+ "type": "boolean",
290
+ "description": "Enable verbose output",
291
+ "argName": "-v"
292
+ }
293
+ }
294
+ ```
295
+
296
+ Multiple boolean flags can be combined:
297
+
298
+ ```json
299
+ {
300
+ "force": {
301
+ "type": "boolean",
302
+ "description": "Force operation",
303
+ "argName": "-f"
304
+ },
305
+ "recursive": {
306
+ "type": "boolean",
307
+ "description": "Recursive operation",
308
+ "argName": "-r"
309
+ }
310
+ }
311
+ ```
312
+
313
+ When both are true, command becomes: `command -f -r`
314
+
315
+ #### Number Parameters
316
+
317
+ Used for numeric values (counts, limits, sizes, etc.).
318
+
319
+ ```json
320
+ {
321
+ "max_count": {
322
+ "type": "number",
323
+ "description": "Maximum number of results",
324
+ "argName": "-n"
325
+ }
326
+ }
327
+ ```
328
+
329
+ ## Usage Examples
330
+
331
+ ### Basic Commands Example
332
+
333
+ Simple file system operations:
334
+
335
+ ```json
336
+ {
337
+ "commands": {
338
+ "ls": {
339
+ "description": "List directory contents",
340
+ "command": "ls",
341
+ "baseArgs": ["-lah"],
342
+ "parameters": {
343
+ "path": {
344
+ "type": "string",
345
+ "description": "Directory path",
346
+ "position": 0
347
+ }
348
+ }
349
+ },
350
+ "mkdir": {
351
+ "description": "Create a directory",
352
+ "command": "mkdir",
353
+ "baseArgs": [],
354
+ "parameters": {
355
+ "path": {
356
+ "type": "string",
357
+ "description": "Directory to create",
358
+ "required": true,
359
+ "position": 0
360
+ },
361
+ "parents": {
362
+ "type": "boolean",
363
+ "description": "Create parent directories",
364
+ "argName": "-p"
365
+ }
366
+ }
367
+ }
368
+ }
369
+ }
370
+ ```
371
+
372
+ **Usage in MCP client:**
373
+ - `ls()` → executes `ls -lah`
374
+ - `ls({ path: "/tmp" })` → executes `ls -lah /tmp`
375
+ - `mkdir({ path: "/tmp/test", parents: true })` → executes `mkdir -p /tmp/test`
376
+
377
+ ### Git Operations Example
378
+
379
+ Version control commands:
380
+
381
+ ```json
382
+ {
383
+ "commands": {
384
+ "git_commit": {
385
+ "description": "Commit changes with a message",
386
+ "command": "git",
387
+ "baseArgs": ["commit"],
388
+ "parameters": {
389
+ "message": {
390
+ "type": "string",
391
+ "description": "Commit message",
392
+ "required": true,
393
+ "argName": "-m"
394
+ },
395
+ "all": {
396
+ "type": "boolean",
397
+ "description": "Stage all modified files",
398
+ "argName": "-a"
399
+ }
400
+ }
401
+ },
402
+ "git_status": {
403
+ "description": "Show repository status",
404
+ "command": "git",
405
+ "baseArgs": ["status"],
406
+ "parameters": {}
407
+ }
408
+ }
409
+ }
410
+ ```
411
+
412
+ **Usage in MCP client:**
413
+ - `git_status()` → executes `git status`
414
+ - `git_commit({ message: "Fix bug", all: true })` → executes `git commit -m "Fix bug" -a`
415
+
416
+ ### Complex Parameters Example
417
+
418
+ Advanced parameter handling with mixed positional and named arguments:
419
+
420
+ ```json
421
+ {
422
+ "commands": {
423
+ "find_files": {
424
+ "description": "Search for files",
425
+ "command": "find",
426
+ "baseArgs": [],
427
+ "parameters": {
428
+ "path": {
429
+ "type": "string",
430
+ "description": "Starting directory",
431
+ "position": 0,
432
+ "default": "."
433
+ },
434
+ "name": {
435
+ "type": "string",
436
+ "description": "File name pattern",
437
+ "argName": "-name"
438
+ },
439
+ "type": {
440
+ "type": "string",
441
+ "description": "File type",
442
+ "enum": ["f", "d", "l"],
443
+ "argName": "-type"
444
+ },
445
+ "max_depth": {
446
+ "type": "number",
447
+ "description": "Maximum search depth",
448
+ "argName": "-maxdepth"
449
+ }
450
+ }
451
+ }
452
+ }
453
+ }
454
+ ```
455
+
456
+ **Usage in MCP client:**
457
+ - `find_files({ name: "*.js", type: "f" })` → executes `find . -name "*.js" -type f`
458
+ - `find_files({ path: "/src", name: "*.ts", max_depth: 3 })` → executes `find /src -name "*.ts" -maxdepth 3`
459
+
460
+ ## MCP Client Configuration
461
+
462
+ ### Claude Desktop
463
+
464
+ To use CLI MCP Mapper with Claude Desktop, add it to your MCP configuration file.
465
+
466
+ **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
467
+ **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
468
+ **Linux:** `~/.config/Claude/claude_desktop_config.json`
469
+
470
+ Add the following to the `mcpServers` section:
471
+
472
+ ```json
473
+ {
474
+ "mcpServers": {
475
+ "cli-mcp-mapper": {
476
+ "type": "local",
477
+ "command": "cli-mcp-mapper",
478
+ "args": [],
479
+ "tools": ["*"]
480
+ }
481
+ }
482
+ }
483
+ ```
484
+
485
+ **With custom configuration path:**
486
+
487
+ ```json
488
+ {
489
+ "mcpServers": {
490
+ "cli-mcp-mapper": {
491
+ "type": "local",
492
+ "command": "cli-mcp-mapper",
493
+ "args": [],
494
+ "env": {
495
+ "CLI_MCP_MAPPER_CONFIG": "/path/to/your/commands.json"
496
+ },
497
+ "tools": ["*"]
498
+ }
499
+ }
500
+ }
501
+ ```
502
+
503
+ After updating the configuration:
504
+
505
+ 1. Save the file
506
+ 2. Restart Claude Desktop
507
+ 3. Your configured commands will appear as available tools
508
+
509
+ ### Other MCP Clients
510
+
511
+ For other MCP clients, refer to their documentation for adding MCP servers. The general pattern is:
512
+
513
+ ```json
514
+ {
515
+ "command": "cli-mcp-mapper",
516
+ "args": [],
517
+ "env": {
518
+ "CLI_MCP_MAPPER_CONFIG": "/path/to/commands.json"
519
+ }
520
+ }
521
+ ```
522
+
523
+ ## Example Configuration Files
524
+
525
+ The repository includes several example configuration files in the `examples/` directory:
526
+
527
+ ### `basic-commands.json`
528
+ Common Unix/Linux commands: `ls`, `cat`, `mkdir`, `rm`, `pwd`, `echo`, `find`, `grep`
529
+
530
+ Use this to give AI assistants basic file system capabilities.
531
+
532
+ ### `git-commands.json`
533
+ Git operations: `git status`, `git commit`, `git push`, `git pull`, `git log`, etc.
534
+
535
+ Enable version control operations for AI-assisted development.
536
+
537
+ ### `file-operations.json`
538
+ File manipulation: `cp`, `mv`, `touch`, `chmod`, `chown`, `tar`, `wc`
539
+
540
+ Advanced file and archive operations.
541
+
542
+ ### Using Examples
543
+
544
+ To use an example configuration:
545
+
546
+ ```bash
547
+ # Copy to default location
548
+ cp examples/basic-commands.json ~/.config/cli-mcp-mapper/commands.json
549
+
550
+ # Or use with environment variable
551
+ export CLI_MCP_MAPPER_CONFIG="$PWD/examples/git-commands.json"
552
+ ```
553
+
554
+ You can also merge multiple examples into a single configuration:
555
+
556
+ ```bash
557
+ # Combine multiple configurations
558
+ jq -s '{"commands": (map(.commands) | add)}' \
559
+ examples/basic-commands.json \
560
+ examples/git-commands.json \
561
+ > ~/.config/cli-mcp-mapper/commands.json
562
+ ```
563
+
564
+ ## Troubleshooting
565
+
566
+ ### Configuration File Not Found
567
+
568
+ **Error:** `Cannot find module '/path/to/commands.json'`
569
+
570
+ **Solutions:**
571
+ 1. Verify the file exists: `ls -la ~/.config/cli-mcp-mapper/commands.json`
572
+ 2. Create the directory: `mkdir -p ~/.config/cli-mcp-mapper`
573
+ 3. Check environment variable: `echo $CLI_MCP_MAPPER_CONFIG`
574
+ 4. Ensure JSON file is valid: `cat ~/.config/cli-mcp-mapper/commands.json | jq`
575
+
576
+ ### Invalid JSON Syntax
577
+
578
+ **Error:** `Unexpected token` or `JSON Parse error`
579
+
580
+ **Solutions:**
581
+ 1. Validate JSON syntax: `cat commands.json | jq`
582
+ 2. Use an editor with JSON validation (VS Code, etc.)
583
+ 3. Check for missing commas, brackets, or quotes
584
+ 4. Validate against schema: Use the provided `commands.schema.json`
585
+
586
+ ### Command Not Executing
587
+
588
+ **Error:** Command returns error or unexpected output
589
+
590
+ **Solutions:**
591
+ 1. Test command manually: Run the generated command in your terminal
592
+ 2. Check `baseArgs`: Ensure they're valid for your command
593
+ 3. Verify `argName` matches command's expected flags
594
+ 4. Check positional argument order
595
+ 5. Review command's help: `command --help`
596
+
597
+ ### Permission Denied
598
+
599
+ **Error:** `EACCES` or `Permission denied`
600
+
601
+ **Solutions:**
602
+ 1. Ensure command is in PATH: `which command-name`
603
+ 2. Check file permissions: `ls -la $(which command-name)`
604
+ 3. Use absolute path in `command` field
605
+ 4. For scripts, ensure execute permission: `chmod +x script.sh`
606
+
607
+ ### Tool Not Appearing in MCP Client
608
+
609
+ **Solutions:**
610
+ 1. Restart MCP client (e.g., Claude Desktop)
611
+ 2. Check MCP client logs for errors
612
+ 3. Verify `commands.json` is valid
613
+ 4. Ensure CLI MCP Mapper is installed: `which cli-mcp-mapper`
614
+ 5. Check client configuration file syntax
615
+
616
+ ### Commands Execute but Return No Output
617
+
618
+ **Issue:** Command executes successfully but returns empty string
619
+
620
+ **Explanation:** Some commands output to stderr instead of stdout. CLI MCP Mapper captures both but only returns stdout by default on success.
621
+
622
+ **Solutions:**
623
+ 1. Check if command writes to stderr
624
+ 2. Use command flags to redirect output to stdout
625
+ 3. This is often expected behavior for commands that only show errors
626
+
627
+ ## Security Considerations
628
+
629
+ ⚠️ **Important Security Notes:**
630
+
631
+ 1. **Command Injection Risk**: CLI MCP Mapper executes real system commands. Only expose commands you trust.
632
+
633
+ 2. **Access Control**: MCP clients that connect to CLI MCP Mapper will have the same permissions as the user running it.
634
+
635
+ 3. **Validate Parameters**: Use `enum` to restrict parameter values when possible.
636
+
637
+ 4. **Avoid Dangerous Commands**: Be cautious about exposing commands like:
638
+ - `rm -rf` without proper constraints
639
+ - `chmod` with unrestricted modes
640
+ - Commands that can execute arbitrary code
641
+ - Network commands that could expose sensitive data
642
+
643
+ 5. **Read-Only Operations**: Consider starting with read-only commands (ls, cat, git status) before exposing write operations.
644
+
645
+ 6. **Configuration Security**:
646
+ - Don't commit sensitive configurations to version control
647
+ - Use environment-specific configuration files
648
+ - Review configurations before deploying
649
+
650
+ 7. **Least Privilege**: Only grant the minimum necessary commands for your use case.
651
+
652
+ **Best Practices:**
653
+
654
+ ```json
655
+ {
656
+ "commands": {
657
+ "safe_delete": {
658
+ "description": "Delete files (safe - no recursive)",
659
+ "command": "rm",
660
+ "baseArgs": ["-i"], // Interactive mode for safety
661
+ "parameters": {
662
+ "file": {
663
+ "type": "string",
664
+ "description": "Single file to delete",
665
+ "required": true,
666
+ "position": 0
667
+ }
668
+ }
669
+ }
670
+ }
671
+ }
672
+ ```
673
+
674
+ ## Contributing
675
+
676
+ Contributions are welcome! Here's how you can help:
677
+
678
+ 1. **Report Issues**: Found a bug? Open an issue on GitHub
679
+ 2. **Submit PRs**: Fix bugs, add features, improve documentation
680
+ 3. **Share Examples**: Create and share useful command configurations
681
+ 4. **Improve Documentation**: Help make the docs clearer and more comprehensive
682
+
683
+ ### Development Setup
684
+
685
+ ```bash
686
+ # Clone the repository
687
+ git clone https://github.com/SteffenBlake/cli-mcp-mapper.git
688
+ cd cli-mcp-mapper
689
+
690
+ # Install dependencies
691
+ npm install
692
+
693
+ # Test locally
694
+ node index.js
695
+ ```
696
+
697
+ ## License
698
+
699
+ MIT License - see [LICENSE](LICENSE) file for details.
700
+
701
+ ---
702
+
703
+ **Made with ❤️ for the MCP community**
704
+
705
+ For issues, questions, or contributions, visit: https://github.com/SteffenBlake/cli-mcp-mapper