@rishibhushan/jenkins-mcp-server 1.1.17 β 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
|
|
1
2
|
# π§ Jenkins MCP Server
|
|
2
3
|
|
|
4
|
+

|
|
5
|
+

|
|
6
|
+

|
|
7
|
+
|
|
3
8
|
**Jenkins MCP Server** is an AI-enabled Model Context Protocol (MCP) server that exposes Jenkins automation through natural-language commands.
|
|
4
9
|
|
|
5
10
|
Designed to work seamlessly with automation clients such as:
|
|
@@ -33,7 +38,6 @@ Designed to work seamlessly with automation clients such as:
|
|
|
33
38
|
- π **Console improvements** - Line-based truncation with tail mode
|
|
34
39
|
- π¨ **Structured logging** - Better debugging with JSON logs
|
|
35
40
|
|
|
36
|
-
---
|
|
37
41
|
|
|
38
42
|
## β¨ About codebase
|
|
39
43
|
|
|
@@ -46,7 +50,6 @@ Designed to work seamlessly with automation clients such as:
|
|
|
46
50
|
- β
**Performance** - 10x faster with intelligent caching and optimization
|
|
47
51
|
- β
**Reliability** - Comprehensive input validation and error handling
|
|
48
52
|
|
|
49
|
-
---
|
|
50
53
|
|
|
51
54
|
## π¦ Features
|
|
52
55
|
|
|
@@ -114,7 +117,6 @@ This project includes:
|
|
|
114
117
|
|
|
115
118
|
For detailed technical documentation, see [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).
|
|
116
119
|
|
|
117
|
-
---
|
|
118
120
|
|
|
119
121
|
## π Quick Start
|
|
120
122
|
|
|
@@ -175,7 +177,6 @@ npm -v
|
|
|
175
177
|
```
|
|
176
178
|
</details>
|
|
177
179
|
|
|
178
|
-
---
|
|
179
180
|
|
|
180
181
|
## βοΈ Configuration
|
|
181
182
|
|
|
@@ -246,7 +247,6 @@ Settings are loaded in this order (later overrides earlier):
|
|
|
246
247
|
5. Give it a name and click **Generate**
|
|
247
248
|
6. Copy the token (β οΈ it won't be shown again!)
|
|
248
249
|
|
|
249
|
-
---
|
|
250
250
|
|
|
251
251
|
## π Installation/Running the Server
|
|
252
252
|
|
|
@@ -320,7 +320,100 @@ Options:
|
|
|
320
320
|
--help, -h Show help message
|
|
321
321
|
```
|
|
322
322
|
|
|
323
|
-
|
|
323
|
+
## π³ Run with Docker (Standalone / CI / Headless environments)
|
|
324
|
+
|
|
325
|
+
Docker support allows you to run the MCP server without installing Node
|
|
326
|
+
or Python locally.
|
|
327
|
+
|
|
328
|
+
### π¦ Build the image
|
|
329
|
+
|
|
330
|
+
``` bash
|
|
331
|
+
docker build -t jenkins-mcp-server .
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
### βΆοΈ Run the container
|
|
338
|
+
|
|
339
|
+
``` bash
|
|
340
|
+
docker run -it --rm \
|
|
341
|
+
-p 3000:3000 \
|
|
342
|
+
-e JENKINS_URL=http://your-jenkins:8080 \
|
|
343
|
+
-e JENKINS_USERNAME=your_username \
|
|
344
|
+
-e JENKINS_TOKEN=your_token \
|
|
345
|
+
jenkins-mcp-server
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### π₯ Pull Prebuilt Image (Recommended)
|
|
349
|
+
|
|
350
|
+
Instead of building locally, you can pull the official image:
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
docker pull ghcr.io/rishibhushan/jenkins-mcp-server:latest
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### π MCP Client Configuration (Docker)
|
|
357
|
+
|
|
358
|
+
Example configuration for MCP clients:
|
|
359
|
+
|
|
360
|
+
```json
|
|
361
|
+
{
|
|
362
|
+
"jenkins": {
|
|
363
|
+
"command": "docker",
|
|
364
|
+
"args": [
|
|
365
|
+
"run",
|
|
366
|
+
"-i",
|
|
367
|
+
"--rm",
|
|
368
|
+
"-e",
|
|
369
|
+
"JENKINS_URL",
|
|
370
|
+
"-e",
|
|
371
|
+
"JENKINS_USERNAME",
|
|
372
|
+
"-e",
|
|
373
|
+
"JENKINS_TOKEN",
|
|
374
|
+
"ghcr.io/rishibhushan/jenkins-mcp-server:latest"
|
|
375
|
+
]
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### π Required Environment Variables
|
|
381
|
+
| Variable | Description |
|
|
382
|
+
|---|---|
|
|
383
|
+
| JENKINS_URL | Jenkins base URL |
|
|
384
|
+
| JENKINS_USERNAME | Jenkins username |
|
|
385
|
+
| JENKINS_TOKEN | API token (recommended) |
|
|
386
|
+
| JENKINS_PASSWORD | Password (if not using token) |
|
|
387
|
+
|
|
388
|
+
### π§ When to use Docker
|
|
389
|
+
|
|
390
|
+
Docker is recommended when running the MCP server:
|
|
391
|
+
|
|
392
|
+
- In CI/CD pipelines
|
|
393
|
+
- On Jenkins agents
|
|
394
|
+
- As a shared service
|
|
395
|
+
- Outside VS Code
|
|
396
|
+
- In production-like environments
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
## βοΈ Configuration Priority
|
|
401
|
+
|
|
402
|
+
The server resolves configuration in this order:
|
|
403
|
+
|
|
404
|
+
1οΈβ£ Environment variables\
|
|
405
|
+
2οΈβ£ `.env` file\
|
|
406
|
+
3οΈβ£ VS Code `settings.json`
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
## π§ͺ Verify Server is Running
|
|
411
|
+
|
|
412
|
+
After starting, you should see logs indicating:
|
|
413
|
+
|
|
414
|
+
- Jenkins configuration loaded
|
|
415
|
+
- MCP server started
|
|
416
|
+
- Listening on port `3000`
|
|
324
417
|
|
|
325
418
|
## π Integration with VSCode
|
|
326
419
|
|
|
@@ -427,7 +520,6 @@ Common issues:
|
|
|
427
520
|
- **No tools appear:** Check the config file path and restart Claude Desktop
|
|
428
521
|
- **Connection timeout:** Verify Jenkins URL is accessible from your network
|
|
429
522
|
|
|
430
|
-
---
|
|
431
523
|
|
|
432
524
|
|
|
433
525
|
## π’ Corporate Network / Proxy Setup
|
|
@@ -495,7 +587,7 @@ export PIP_TRUSTED_HOST="pypi.org pypi.python.org files.pythonhosted.org"
|
|
|
495
587
|
|
|
496
588
|
The Node.js wrapper automatically handles SSL certificate issues when it detects proxy environment variables.
|
|
497
589
|
|
|
498
|
-
|
|
590
|
+
|
|
499
591
|
## π‘ Usage Examples
|
|
500
592
|
|
|
501
593
|
### Natural Language Commands
|
|
@@ -551,7 +643,6 @@ if result['build_number']:
|
|
|
551
643
|
print(output)
|
|
552
644
|
```
|
|
553
645
|
|
|
554
|
-
---
|
|
555
646
|
|
|
556
647
|
## π Quick Troubleshooting
|
|
557
648
|
|
|
@@ -581,7 +672,6 @@ npx --yes @rishibhushan/jenkins-mcp-server --env-file /path/to/.env
|
|
|
581
672
|
- β
Clear npm cache: `npm cache clean --force`
|
|
582
673
|
- β
Try with latest version: `npx --yes @rishibhushan/jenkins-mcp-server@latest`
|
|
583
674
|
|
|
584
|
-
---
|
|
585
675
|
|
|
586
676
|
## π§ Troubleshooting
|
|
587
677
|
|
|
@@ -1169,7 +1259,7 @@ Run with verbose flag to see detailed logs:
|
|
|
1169
1259
|
jenkins-mcp-server --verbose
|
|
1170
1260
|
```
|
|
1171
1261
|
|
|
1172
|
-
|
|
1262
|
+
|
|
1173
1263
|
|
|
1174
1264
|
## π§ͺ Development & Testing
|
|
1175
1265
|
|
|
@@ -1208,7 +1298,6 @@ pip install -e .
|
|
|
1208
1298
|
jenkins-mcp-server --verbose
|
|
1209
1299
|
```
|
|
1210
1300
|
|
|
1211
|
-
---
|
|
1212
1301
|
|
|
1213
1302
|
## π Project Structure
|
|
1214
1303
|
|
|
@@ -1227,11 +1316,10 @@ jenkins_mcp_server/
|
|
|
1227
1316
|
β βββ server.py # MCP server implementation (26 tools)
|
|
1228
1317
|
βββ tests/ # Test suite
|
|
1229
1318
|
βββ requirements.txt # Python dependencies
|
|
1230
|
-
βββ package.json
|
|
1231
|
-
βββ README.md
|
|
1319
|
+
βββ package.json # Node.js configuration (ES modules)
|
|
1320
|
+
βββ README.md # This file
|
|
1232
1321
|
```
|
|
1233
1322
|
|
|
1234
|
-
---
|
|
1235
1323
|
|
|
1236
1324
|
## π Security Best Practices
|
|
1237
1325
|
|
|
@@ -1242,7 +1330,6 @@ jenkins_mcp_server/
|
|
|
1242
1330
|
5. **Review permissions** - Only grant necessary Jenkins permissions
|
|
1243
1331
|
6. **Keep dependencies updated** - Run `pip install --upgrade -r requirements.txt`
|
|
1244
1332
|
|
|
1245
|
-
---
|
|
1246
1333
|
|
|
1247
1334
|
## π€ Contributing
|
|
1248
1335
|
|
|
@@ -1254,13 +1341,11 @@ Contributions are welcome! Please feel free to submit a Pull Request.
|
|
|
1254
1341
|
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
|
1255
1342
|
5. Open a Pull Request
|
|
1256
1343
|
|
|
1257
|
-
---
|
|
1258
1344
|
|
|
1259
1345
|
## π License
|
|
1260
1346
|
|
|
1261
1347
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
1262
1348
|
|
|
1263
|
-
---
|
|
1264
1349
|
|
|
1265
1350
|
## π Acknowledgments
|
|
1266
1351
|
|
|
@@ -1268,14 +1353,12 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
1268
1353
|
- Powered by [python-jenkins](https://python-jenkins.readthedocs.io/)
|
|
1269
1354
|
- Inspired by the need for AI-powered DevOps automation
|
|
1270
1355
|
|
|
1271
|
-
---
|
|
1272
1356
|
|
|
1273
1357
|
## π Support
|
|
1274
1358
|
|
|
1275
1359
|
- **Issues**: https://github.com/rishibhushan/jenkins_mcp_server/issues
|
|
1276
1360
|
- **Discussions**: https://github.com/rishibhushan/jenkins_mcp_server/discussions
|
|
1277
1361
|
|
|
1278
|
-
---
|
|
1279
1362
|
|
|
1280
1363
|
## πΊοΈ Roadmap
|
|
1281
1364
|
|
package/package.json
CHANGED
|
@@ -11,6 +11,7 @@ import sys
|
|
|
11
11
|
|
|
12
12
|
from .config import get_settings, get_default_settings
|
|
13
13
|
from .verbose import set_verbose, vprint
|
|
14
|
+
from .version import __version__
|
|
14
15
|
from . import server
|
|
15
16
|
|
|
16
17
|
|
|
@@ -83,7 +84,7 @@ Configuration Priority:
|
|
|
83
84
|
parser.add_argument(
|
|
84
85
|
'--version',
|
|
85
86
|
action='version',
|
|
86
|
-
version='jenkins-mcp-server
|
|
87
|
+
version=f'jenkins-mcp-server {__version__}'
|
|
87
88
|
)
|
|
88
89
|
|
|
89
90
|
parser.add_argument(
|
|
@@ -122,7 +123,8 @@ Configuration Priority:
|
|
|
122
123
|
logger.error(" 1. .env file (JENKINS_URL, JENKINS_USERNAME, JENKINS_TOKEN)")
|
|
123
124
|
logger.error(" 2. VS Code settings.json")
|
|
124
125
|
logger.error(" 3. Environment variables")
|
|
125
|
-
logger.error("\nFor help, run: %(prog)s --help" % {'prog': parser.prog})
|
|
126
|
+
# logger.error("\nFor help, run: %(prog)s --help" % {'prog': parser.prog})
|
|
127
|
+
logger.error("\nFor help, run: %(prog)s --help" % {'prog': "jenkins-mcp-server"})
|
|
126
128
|
sys.exit(1)
|
|
127
129
|
|
|
128
130
|
# Log configuration summary
|
|
@@ -154,5 +156,4 @@ Configuration Priority:
|
|
|
154
156
|
|
|
155
157
|
|
|
156
158
|
# Package metadata
|
|
157
|
-
|
|
158
|
-
__all__ = ['main', 'server']
|
|
159
|
+
__all__ = ['main', 'server', '__version__']
|
|
@@ -27,6 +27,7 @@ from .config import JenkinsSettings, get_default_settings
|
|
|
27
27
|
from .jenkins_client import get_jenkins_client
|
|
28
28
|
from .metrics import get_metrics_collector, record_tool_execution
|
|
29
29
|
from .verbose import vprint, _VERBOSE
|
|
30
|
+
from .version import __version__
|
|
30
31
|
|
|
31
32
|
# Configure logging
|
|
32
33
|
logger = logging.getLogger(__name__)
|
|
@@ -1916,7 +1917,7 @@ async def main():
|
|
|
1916
1917
|
sys.exit(1)
|
|
1917
1918
|
|
|
1918
1919
|
vprint(f"=== About to log startup message ===")
|
|
1919
|
-
logger.info(f"Starting Jenkins MCP Server
|
|
1920
|
+
logger.info(f"Starting Jenkins MCP Server v{__version__}")
|
|
1920
1921
|
logger.info(f"Connected to: {settings.url}")
|
|
1921
1922
|
vprint(f"=== Startup messages logged ===")
|
|
1922
1923
|
|
|
@@ -1934,7 +1935,7 @@ async def main():
|
|
|
1934
1935
|
print(f"Press Ctrl+C to stop the server")
|
|
1935
1936
|
print(f"----------------------------------------")
|
|
1936
1937
|
if _VERBOSE:
|
|
1937
|
-
vprint(f"Jenkins MCP Server
|
|
1938
|
+
vprint(f"Jenkins MCP Server v{__version__}")
|
|
1938
1939
|
vprint(f"Connected to: {settings.url}")
|
|
1939
1940
|
|
|
1940
1941
|
await server.run(
|
|
@@ -1942,7 +1943,7 @@ async def main():
|
|
|
1942
1943
|
write_stream,
|
|
1943
1944
|
InitializationOptions(
|
|
1944
1945
|
server_name="jenkins-mcp-server",
|
|
1945
|
-
server_version=
|
|
1946
|
+
server_version=__version__,
|
|
1946
1947
|
capabilities=server.get_capabilities(
|
|
1947
1948
|
notification_options=NotificationOptions(),
|
|
1948
1949
|
experimental_capabilities={},
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Version management - reads from package.json"""
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def get_version() -> str:
|
|
8
|
+
"""
|
|
9
|
+
Read version from package.json.
|
|
10
|
+
Falls back to a default if package.json is not found.
|
|
11
|
+
"""
|
|
12
|
+
try:
|
|
13
|
+
# Get the project root (3 levels up from this file)
|
|
14
|
+
# src/jenkins_mcp_server/version.py -> project root
|
|
15
|
+
current_file = Path(__file__)
|
|
16
|
+
project_root = current_file.parent.parent.parent
|
|
17
|
+
package_json_path = project_root / "package.json"
|
|
18
|
+
|
|
19
|
+
if package_json_path.exists():
|
|
20
|
+
with open(package_json_path, 'r') as f:
|
|
21
|
+
package_data = json.load(f)
|
|
22
|
+
return package_data.get('version', '0.0.0')
|
|
23
|
+
else:
|
|
24
|
+
# Fallback if package.json not found
|
|
25
|
+
return '0.0.0'
|
|
26
|
+
|
|
27
|
+
except Exception:
|
|
28
|
+
# If anything goes wrong, return a safe default
|
|
29
|
+
return '0.0.0'
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Module-level constant
|
|
33
|
+
__version__ = get_version()
|