{"_id":"@alexsarrell/jenkins-mcp-server","_rev":"3-de484fda3aa4b951f78d7db22dcd1ec7","name":"@alexsarrell/jenkins-mcp-server","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@alexsarrell/jenkins-mcp-server","version":"1.0.0","keywords":["jenkins","mcp","claude"],"license":"MIT","_id":"@alexsarrell/jenkins-mcp-server@1.0.0","maintainers":[{"name":"alexsarrell","email":"alexsarrell.workspace@gmail.com"}],"bin":{"jenkins-mcp-server":"dist/index.js"},"dist":{"shasum":"d5690a0f62ec29392d61772f346facfb4b002446","tarball":"https://registry.npmjs.org/@alexsarrell/jenkins-mcp-server/-/jenkins-mcp-server-1.0.0.tgz","fileCount":20,"integrity":"sha512-sBBnbpbKwba91Xpb/Dm4se8zOoMSY5uMTU1UGApuVTWOwTtFK9zV4pUSD7wNvor12/qBRTJTzsLHIat3Hg0NiA==","signatures":[{"sig":"MEUCIQD/H1KsWxJBsHU/uGXbojGTZZxvhI0UTHqo2OFF4JoT+gIgCoHcafnQU1jz4q/nK2thS42xMICulv1y4yUUDDncxE4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58243},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"ee415f5360d839ed2fe4b49c8bff51ffed479a70","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"alexsarrell","email":"alexsarrell.workspace@gmail.com"},"_npmVersion":"10.9.2","description":"Jenkins MCP server for Claude Code integration","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/jenkins-mcp-server_1.0.0_1774194463930_0.7177020954491105","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alexsarrell/jenkins-mcp-server","version":"1.0.1","keywords":["jenkins","mcp","claude"],"license":"MIT","_id":"@alexsarrell/jenkins-mcp-server@1.0.1","maintainers":[{"name":"alexsarrell","email":"alexsarrell.workspace@gmail.com"}],"bin":{"jenkins-mcp-server":"dist/index.js"},"dist":{"shasum":"9ac1d0a8d592d11463e2dab52a7e0429598c7de7","tarball":"https://registry.npmjs.org/@alexsarrell/jenkins-mcp-server/-/jenkins-mcp-server-1.0.1.tgz","fileCount":20,"integrity":"sha512-WjJfRvuKszBuf0sZQzIYLm+SY4FmkM0affnJULK1uO4eF25UBFVkg5sshoa27StcjN/IbFfN1QVww7KuVrKJrA==","signatures":[{"sig":"MEUCIHO9g34gcW4o4bCJU+yd1NOGVMBRuM9rdXJcub/x0Fh2AiEArdqzTa2JjOO1oD41FFeVB397iO+0DBZ9HxDjV0Bueg4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59809},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"04535c96b8496b79766918af545bad2cd4c5f7ae","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"alexsarrell","email":"alexsarrell.workspace@gmail.com"},"_npmVersion":"10.9.2","description":"Jenkins MCP server for Claude Code integration","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/jenkins-mcp-server_1.0.1_1774625275530_0.24705966807943458","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@alexsarrell/jenkins-mcp-server","version":"1.3.0","description":"Jenkins MCP server for Claude Code integration","main":"dist/index.js","bin":{"jenkins-mcp-server":"dist/index.js"},"scripts":{"build":"tsc","lint":"eslint src/","lint:fix":"eslint src/ --fix","dev":"tsc --watch","start":"node dist/index.js","test":"vitest run","test:watch":"vitest"},"type":"module","keywords":["jenkins","mcp","claude"],"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.27.1","fast-xml-parser":"^4.5.6","zod":"^4.3.6"},"devDependencies":{"@eslint/js":"9.28.0","@types/node":"^25.5.0","@vitest/coverage-v8":"^3.2.4","eslint":"9.28.0","typescript":"^5.9.3","typescript-eslint":"8.57.2","vitest":"^3.2.4"},"_id":"@alexsarrell/jenkins-mcp-server@1.3.0","gitHead":"3bbd712974148aff1dd901911a6eca2d59a20d4a","types":"./dist/index.d.ts","_nodeVersion":"22.17.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-q565wh9W8RQnj/hWkkWJltR7InLbEDFFKBZlw/wDMc28Z+6p87fyuTroLNYMfEDKUQUGrSOzoswzF53gM3iq4Q==","shasum":"d1c747ea7d1387806a3075408a1bd2816d2b58ca","tarball":"https://registry.npmjs.org/@alexsarrell/jenkins-mcp-server/-/jenkins-mcp-server-1.3.0.tgz","fileCount":32,"unpackedSize":107618,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCH0SWZwwmIof9VfSA1p0litYQy4O+JohOkz95fu2Q0JECIQCyfnnJvFoCSXQ9lKpyGtJPJYJKF0oqz55a/sHYx3kZjA=="}]},"_npmUser":{"name":"alexsarrell","email":"alexsarrell.workspace@gmail.com"},"directories":{},"maintainers":[{"name":"alexsarrell","email":"alexsarrell.workspace@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jenkins-mcp-server_1.3.0_1778148419087_0.44279624934484607"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-22T15:47:43.812Z","modified":"2026-05-07T10:06:59.347Z","1.0.0":"2026-03-22T15:47:44.082Z","1.0.1":"2026-03-27T15:27:55.674Z","1.3.0":"2026-05-07T10:06:59.220Z"},"license":"MIT","keywords":["jenkins","mcp","claude"],"description":"Jenkins MCP server for Claude Code integration","maintainers":[{"name":"alexsarrell","email":"alexsarrell.workspace@gmail.com"}],"readme":"# @alexsarrell/jenkins-mcp-server v1.3.0\n\nA custom MCP (Model Context Protocol) server for Jenkins integration with Claude Code. Provides 22 tools (20 default + 2 unsafe) for comprehensive Jenkins management including pipeline replay, stage-level logs, structured config reads, parameter introspection, and rich log search.\n\n## Why?\n\nThe official Jenkins MCP plugin has timeout issues (30s timeouts). This standalone server connects directly to Jenkins REST API via stdio transport and works reliably.\n\n## Quick Start\n\nAdd to your `~/.claude.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"jenkins\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@alexsarrell/jenkins-mcp-server\"],\n      \"env\": {\n        \"JENKINS_URL\": \"https://your-jenkins.example.com\",\n        \"JENKINS_USER\": \"your-username\",\n        \"JENKINS_API_TOKEN\": \"your-api-token\"\n      }\n    }\n  }\n}\n```\n\nRestart Claude Code and the `jenkins` MCP server will be available.\n\n### Getting Your API Token\n\n1. Log in to Jenkins\n2. Click your username (top right) -> Configure\n3. API Token -> Add new Token -> Generate\n4. Copy the token\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `JENKINS_URL` | Yes | Jenkins server URL |\n| `JENKINS_USER` | Yes | Jenkins username |\n| `JENKINS_API_TOKEN` | Yes | Jenkins API token |\n| `JENKINS_ALLOW_UNSAFE_OPERATIONS` | No | Set to `true` to enable unsafe tools (`replayBuild`, `updateJobConfig`) |\n\n### Unsafe Operations\n\nBy default, tools that can execute arbitrary code or modify job configurations are **disabled**. This includes:\n\n- **replayBuild** — replays a build with arbitrary Groovy/Pipeline script\n- **updateJobConfig** — overwrites job XML configuration\n\nTo enable them, add the env variable to your MCP config:\n\n```json\n\"env\": {\n  \"JENKINS_URL\": \"...\",\n  \"JENKINS_USER\": \"...\",\n  \"JENKINS_API_TOKEN\": \"...\",\n  \"JENKINS_ALLOW_UNSAFE_OPERATIONS\": \"true\"\n}\n```\n\n## Tools (20 default + 2 unsafe)\n\n### Job Management\n- **getJobs** - List jobs in a folder with status summary\n- **getJob** - Job details, parameters, health, branches (for multibranch pipelines)\n- **getJobConfig** - Get job XML configuration (config.xml)\n- **getJobParameters** - Structured `ParameterSpec[]` for the job (types, choices, defaults). Use this before `triggerBuild` to know what to pass.\n- **describeJob** - Structured read of `config.xml` (SCM url/branch, Jenkinsfile path, parameters, cron, retention) without parsing raw XML.\n- **previewJobConfig** - Generate a `config.xml` from a structured spec (pipeline / multibranch / folder), optionally diffed against an existing job. Read-only.\n- **updateJobConfig** - Update job XML configuration\n\n### Build Operations\n- **triggerBuild** - Trigger builds with optional parameters (string or string[] values for multi-value parameters)\n- **getBuild** - Build details (status, duration, parameters, artifacts, changes); use `include` to control returned sections\n- **getBuildLog** - Console output with tail / byte-pagination / grep modes (regex + before/after context)\n- **stopBuild** - Abort a running build\n- **getBuildArtifacts** - List build artifacts\n- **getBuildTestResults** - Test results with failure details\n\n### Pipeline\n- **getPipelineStages** - Stage overview (names, status, duration)\n- **getStageLog** - Log for a specific pipeline stage\n- **getPipelineScript** - Get Jenkinsfile content from replay page\n- **replayBuild** - Replay a build with optional script modifications\n- **restartFromStage** - Restart pipeline from a specific stage\n\n### Discovery & Utilities\n- **searchBuildLogs** - Grep across build logs (regex, before/after context, `onlyResults` filter, progressive read)\n- **getQueue** - View the build queue\n- **getQueueItem** - Map a queue item ID (returned by `triggerBuild`) to the build that started, or its current waiting/cancelled state\n- **enableDisableJob** - Enable or disable a job\n\n## Multibranch Pipelines\n\nJob paths use `/` as separator: `folder/pipeline/branch`\n\nFor branches with slashes in the name, use `::` separator:\n```\nmy-pipeline::feature/my-branch\n```\n\n## Multi-value parameters\n\n`triggerBuild` accepts each parameter value as either a string or a string array. The string form is **never** split on commas — passing `\"hello, world\"` sends one value verbatim. For multi-select / `ExtendedChoiceParameter (PT_CHECKBOX)` parameters, pass an array:\n\n```js\ntriggerBuild({ jobPath: \"x\", parameters: { TAGS: [\"alpha\", \"beta\", \"gamma\"] } });\n```\n\nA legacy `splitOnComma: true` flag preserves the pre-1.3 behaviour (split string values on commas) — deprecated, will be removed in v2.0.\n\n## Log search and grep\n\nBoth `getBuildLog` and `searchBuildLogs` accept a `pattern` (with optional `regex`) and `before`/`after` context lines. `getBuildLog` switches to grep mode when `pattern` is set; otherwise it returns a tail. `searchBuildLogs` streams logs via Jenkins' progressive-text API and stops early once `maxMatchesPerBuild` is reached, and an `onlyResults: [\"FAILURE\"]` filter prunes builds before fetching their logs.\n\n## Notes\n\n- **Replay** uses Jenkins' form-based replay endpoint (not a clean REST API)\n- **Restart from Stage** requires the Declarative Pipeline plugin\n- **Config editing** works with raw XML — use `getJobConfig` (or `describeJob` for a structured subset) to read, modify, then `updateJobConfig`. For new configs from a spec, use `previewJobConfig` then paste into `updateJobConfig`.\n- Build logs are capped at 100KB per response; use grep mode or pagination for larger logs\n- CSRF crumbs are handled automatically\n- Authentication uses HTTP Basic Auth with user API token\n\n## License\n\nMIT\n","readmeFilename":"README.md"}