bamboo-mcp-server 1.1.3 → 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/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # [1.2.0](https://github.com/norus/atlassian-bamboo-mcp/compare/v1.1.3...v1.2.0) (2026-02-06)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **ci:** bump release job Node.js version from 20 to 22 ([b765d05](https://github.com/norus/atlassian-bamboo-mcp/commit/b765d0554851d63d676764269c4de603a12e13fd))
7
+
8
+
9
+ ### Features
10
+
11
+ * add clone plan and create deployment project tools ([b7ab0c3](https://github.com/norus/atlassian-bamboo-mcp/commit/b7ab0c3c83f98d40e25878e66b2a62e681ebd70e))
12
+
1
13
  ## [1.1.3](https://github.com/norus/atlassian-bamboo-mcp/compare/v1.1.2...v1.1.3) (2026-01-09)
2
14
 
3
15
 
package/README.md CHANGED
@@ -37,7 +37,7 @@ No tab-switching, no manual navigation — just ask and get instant CI/CD insigh
37
37
 
38
38
  ## Features
39
39
 
40
- - **24 tools** covering all major Bamboo operations
40
+ - **26 tools** covering all major Bamboo operations
41
41
  - **Build logs** with actual content (not just URLs)
42
42
  - **Deployment logs** with full output
43
43
  - **Proxy support** for corporate environments
@@ -246,7 +246,7 @@ services:
246
246
  | `bamboo_list_projects` | List all projects |
247
247
  | `bamboo_get_project` | Get project details by key |
248
248
 
249
- ### Plans (5)
249
+ ### Plans (6)
250
250
 
251
251
  | Tool | Description |
252
252
  |------|-------------|
@@ -255,6 +255,7 @@ services:
255
255
  | `bamboo_search_plans` | Search plans by name |
256
256
  | `bamboo_enable_plan` | Enable a build plan |
257
257
  | `bamboo_disable_plan` | Disable a build plan |
258
+ | `bamboo_clone_plan` | Clone a build plan to a new plan |
258
259
 
259
260
  ### Branches (2)
260
261
 
@@ -282,12 +283,13 @@ services:
282
283
  | `bamboo_get_build_queue` | Get current build queue |
283
284
  | `bamboo_get_deployment_queue` | Get deployment queue status |
284
285
 
285
- ### Deployments (5)
286
+ ### Deployments (6)
286
287
 
287
288
  | Tool | Description |
288
289
  |------|-------------|
289
290
  | `bamboo_list_deployment_projects` | List deployment projects |
290
291
  | `bamboo_get_deployment_project` | Get deployment project details |
292
+ | `bamboo_create_deployment_project` | Create a deployment project linked to a build plan |
291
293
  | `bamboo_get_deployment_results` | Get deployment results for environment |
292
294
  | `bamboo_get_deployment_result` | Get deployment result with logs |
293
295
  | `bamboo_trigger_deployment` | Trigger a deployment |
@@ -26,6 +26,7 @@ export declare class BambooClient {
26
26
  }): Promise<unknown>;
27
27
  enablePlan(planKey: string): Promise<unknown>;
28
28
  disablePlan(planKey: string): Promise<unknown>;
29
+ clonePlan(sourceKey: string, destKey: string): Promise<unknown>;
29
30
  listPlanBranches(planKey: string, params?: {
30
31
  enabledOnly?: boolean;
31
32
  startIndex?: number;
@@ -58,6 +59,7 @@ export declare class BambooClient {
58
59
  getDeploymentQueue(): Promise<unknown>;
59
60
  listDeploymentProjects(): Promise<unknown>;
60
61
  getDeploymentProject(projectId: string | number): Promise<unknown>;
62
+ createDeploymentProject(name: string, planKey: string, description?: string): Promise<unknown>;
61
63
  triggerDeployment(versionId: string | number, environmentId: string | number): Promise<unknown>;
62
64
  getDeploymentResults(environmentId: string | number, params?: {
63
65
  startIndex?: number;
@@ -104,6 +104,9 @@ export class BambooClient {
104
104
  async disablePlan(planKey) {
105
105
  return this.request(`/plan/${planKey}/enable`, { method: 'DELETE' });
106
106
  }
107
+ async clonePlan(sourceKey, destKey) {
108
+ return this.request(`/clone/${sourceKey}:${destKey}`, { method: 'PUT' });
109
+ }
107
110
  // Branch endpoints
108
111
  async listPlanBranches(planKey, params) {
109
112
  const query = buildQueryString({
@@ -319,6 +322,16 @@ export class BambooClient {
319
322
  async getDeploymentProject(projectId) {
320
323
  return this.request(`/deploy/project/${projectId}`);
321
324
  }
325
+ async createDeploymentProject(name, planKey, description) {
326
+ return this.request('/deploy/project', {
327
+ method: 'PUT',
328
+ body: JSON.stringify({
329
+ name,
330
+ planKey: { key: planKey },
331
+ ...(description && { description }),
332
+ }),
333
+ });
334
+ }
322
335
  async triggerDeployment(versionId, environmentId) {
323
336
  return this.request(`/queue/deployment?versionId=${versionId}&environmentId=${environmentId}`, { method: 'POST' });
324
337
  }
@@ -21,6 +21,19 @@ export function registerDeploymentTools(server, client) {
21
21
  return formatError(error);
22
22
  }
23
23
  });
24
+ server.tool('bamboo_create_deployment_project', 'Create a new Bamboo deployment project linked to a build plan', {
25
+ name: z.string().describe('Name of the deployment project'),
26
+ plan_key: z.string().describe('Build plan key to link (e.g., "PROJ-PLAN")'),
27
+ description: z.string().optional().describe('Description of the deployment project'),
28
+ }, async ({ name, plan_key, description }) => {
29
+ try {
30
+ const result = await client.createDeploymentProject(name, plan_key, description);
31
+ return jsonResponse(result);
32
+ }
33
+ catch (error) {
34
+ return formatError(error);
35
+ }
36
+ });
24
37
  server.tool('bamboo_trigger_deployment', 'Trigger a deployment to an environment', {
25
38
  version_id: z.string().describe('The release version ID to deploy'),
26
39
  environment_id: z.string().describe('The target environment ID'),
@@ -70,4 +70,18 @@ export function registerPlanTools(server, client) {
70
70
  return formatError(error);
71
71
  }
72
72
  });
73
+ server.tool('bamboo_clone_plan', 'Clone an existing Bamboo build plan to a new plan', {
74
+ source_plan_key: z.string().describe('Source plan key (e.g., "PROJ-PLAN")'),
75
+ dest_project_key: z.string().describe('Destination project key (e.g., "NEWPROJ")'),
76
+ dest_plan_key: z.string().describe('New plan key within destination project (e.g., "NEWPLAN")'),
77
+ }, async ({ source_plan_key, dest_project_key, dest_plan_key }) => {
78
+ try {
79
+ const destKey = `${dest_project_key}-${dest_plan_key}`;
80
+ const result = await client.clonePlan(source_plan_key, destKey);
81
+ return jsonResponse(result);
82
+ }
83
+ catch (error) {
84
+ return formatError(error);
85
+ }
86
+ });
73
87
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bamboo-mcp-server",
3
- "version": "1.1.3",
3
+ "version": "1.2.0",
4
4
  "description": "MCP server for Atlassian Bamboo",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -52,7 +52,7 @@
52
52
  "@types/node": "^20.0.0",
53
53
  "@vitest/coverage-v8": "^4.0.16",
54
54
  "msw": "^2.12.7",
55
- "semantic-release": "^24.2.9",
55
+ "semantic-release": "^25.0.2",
56
56
  "typescript": "^5.3.0",
57
57
  "vitest": "^4.0.16"
58
58
  },