@daghis/teamcity-mcp 2.5.0 → 2.6.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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.6.1](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.6.0...teamcity-mcp-v2.6.1) (2026-04-10)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **deps:** upgrade axios to 1.15.0 to fix CVE-2025-62718 SSRF ([#451](https://github.com/Daghis/teamcity-mcp/issues/451)) ([f9068c7](https://github.com/Daghis/teamcity-mcp/commit/f9068c7a4e5515474c3a75d10763cbca8f66fd49))
9
+
10
+ ## [2.6.0](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.5.0...teamcity-mcp-v2.6.0) (2026-03-30)
11
+
12
+
13
+ ### Features
14
+
15
+ * add remove_agent tool to delete stale build agents ([#444](https://github.com/Daghis/teamcity-mcp/issues/444)) ([c32824b](https://github.com/Daghis/teamcity-mcp/commit/c32824b8952d862349b3f39d99f1ca2c306f1493)), closes [#439](https://github.com/Daghis/teamcity-mcp/issues/439)
16
+
3
17
  ## [2.5.0](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.4.3...teamcity-mcp-v2.5.0) (2026-03-18)
4
18
 
5
19
 
package/dist/index.js CHANGED
@@ -1205,7 +1205,7 @@ function debug2(message, meta) {
1205
1205
  // package.json
1206
1206
  var package_default = {
1207
1207
  name: "@daghis/teamcity-mcp",
1208
- version: "2.5.0",
1208
+ version: "2.6.1",
1209
1209
  description: "Model Control Protocol server for TeamCity CI/CD integration with AI coding assistants",
1210
1210
  mcpName: "io.github.Daghis/teamcity",
1211
1211
  main: "dist/index.js",
@@ -1269,10 +1269,10 @@ var package_default = {
1269
1269
  url: "https://github.com/Daghis/teamcity-mcp/issues"
1270
1270
  },
1271
1271
  dependencies: {
1272
- "@modelcontextprotocol/sdk": "^1.26.0",
1273
- axios: "^1.13.5",
1272
+ "@modelcontextprotocol/sdk": "^1.27.0",
1273
+ axios: "^1.15.0",
1274
1274
  "axios-retry": "^4.5.0",
1275
- dotenv: "17.3.1",
1275
+ dotenv: "17.4.1",
1276
1276
  tslib: "^2.8.1",
1277
1277
  winston: "^3.11.0",
1278
1278
  zod: "^4.3.5"
@@ -1285,10 +1285,10 @@ var package_default = {
1285
1285
  "@types/jest": "^30.0.0",
1286
1286
  "@types/js-yaml": "^4.0.9",
1287
1287
  "@types/node": "^25.0.2",
1288
- "@typescript-eslint/eslint-plugin": "^8.57.0",
1289
- "@typescript-eslint/parser": "^8.57.0",
1290
- esbuild: "^0.27.0",
1291
- eslint: "^10.0.3",
1288
+ "@typescript-eslint/eslint-plugin": "^8.58.0",
1289
+ "@typescript-eslint/parser": "^8.58.0",
1290
+ esbuild: "^0.28.0",
1291
+ eslint: "^10.1.0",
1292
1292
  "eslint-config-prettier": "^10.1.8",
1293
1293
  "eslint-plugin-prettier": "^5.0.1",
1294
1294
  globals: "^17.4.0",
@@ -1296,18 +1296,21 @@ var package_default = {
1296
1296
  "jest-junit": "^16.0.0",
1297
1297
  "js-yaml": "^4.1.1",
1298
1298
  prettier: "^3.1.0",
1299
- "ts-jest": "^29.4.5",
1299
+ "ts-jest": "^29.4.9",
1300
1300
  "tsc-alias": "^1.8.8",
1301
1301
  "tsconfig-paths": "^4.2.0",
1302
1302
  tsx: "^4.6.0",
1303
- typescript: "^5.3.2"
1303
+ typescript: "^6.0.2"
1304
1304
  },
1305
1305
  overrides: {
1306
- axios: "^1.13.5",
1306
+ axios: "^1.15.0",
1307
1307
  "body-parser": "^2.2.1",
1308
1308
  "glob@>=10.2.0 <10.5.0": "^10.5.0",
1309
1309
  hono: "^4.12.7",
1310
- "js-yaml@<4.0.0": "^3.14.2"
1310
+ "js-yaml@<4.0.0": "^3.14.2",
1311
+ "lodash-es": "^4.18.0",
1312
+ "picomatch@>=2 <2.3.2": "^2.3.2",
1313
+ "picomatch@>=4 <4.0.4": "^4.0.4"
1311
1314
  }
1312
1315
  };
1313
1316
 
@@ -1426,6 +1429,7 @@ var AgentRequirementsManager = class {
1426
1429
  constructor(client) {
1427
1430
  this.client = client;
1428
1431
  }
1432
+ client;
1429
1433
  async addRequirement(input) {
1430
1434
  const { buildTypeId } = input;
1431
1435
  const payload = this.buildPayload(void 0, input);
@@ -2925,6 +2929,7 @@ var BuildDependencyManager = class {
2925
2929
  constructor(client) {
2926
2930
  this.client = client;
2927
2931
  }
2932
+ client;
2928
2933
  async addDependency(input) {
2929
2934
  const { buildTypeId, dependencyType, dependsOn } = input;
2930
2935
  if (!dependsOn || dependsOn.trim() === "") {
@@ -3138,6 +3143,7 @@ var BuildFeatureManager = class {
3138
3143
  constructor(client) {
3139
3144
  this.client = client;
3140
3145
  }
3146
+ client;
3141
3147
  async addFeature(input) {
3142
3148
  const { buildTypeId, type } = input;
3143
3149
  if (!type || type.trim() === "") {
@@ -4253,6 +4259,9 @@ var MCPToolError = class extends Error {
4253
4259
  this.name = "MCPToolError";
4254
4260
  Error.captureStackTrace(this, this.constructor);
4255
4261
  }
4262
+ code;
4263
+ statusCode;
4264
+ data;
4256
4265
  };
4257
4266
  var MCPTeamCityError = class extends MCPToolError {
4258
4267
  teamCityCode;
@@ -4279,6 +4288,7 @@ var MCPRateLimitError = class extends MCPToolError {
4279
4288
  this.retryAfter = retryAfter2;
4280
4289
  this.name = "MCPRateLimitError";
4281
4290
  }
4291
+ retryAfter;
4282
4292
  };
4283
4293
  function formatError(err, context) {
4284
4294
  if (err instanceof MCPToolError) {
@@ -4389,6 +4399,8 @@ var ComponentErrorLogger = class {
4389
4399
  this.componentName = componentName;
4390
4400
  this.errorLogger = errorLogger2;
4391
4401
  }
4402
+ componentName;
4403
+ errorLogger;
4392
4404
  logError(message, error3, context) {
4393
4405
  return this.errorLogger.logError(message, error3, {
4394
4406
  ...context,
@@ -4422,6 +4434,7 @@ var GlobalErrorHandler = class _GlobalErrorHandler {
4422
4434
  ...options
4423
4435
  };
4424
4436
  }
4437
+ options;
4425
4438
  static instance;
4426
4439
  static getInstance(options) {
4427
4440
  _GlobalErrorHandler.instance ??= new _GlobalErrorHandler(options);
@@ -41225,7 +41238,9 @@ var DEV_TOOLS = [
41225
41238
  successCount: results.filter((item) => item.success).length,
41226
41239
  failureCount: results.filter((item) => !item.success).length
41227
41240
  });
41228
- const failures = results.filter((item) => !item.success);
41241
+ const failures = results.filter(
41242
+ (item) => !item.success
41243
+ );
41229
41244
  if (results.length > 0 && failures.length === results.length) {
41230
41245
  const reason = failures.map((item) => `${item.path}: ${item.error ?? "unknown error"}`).join("; ");
41231
41246
  throw new Error(`All artifact downloads failed: ${reason}`);
@@ -43221,6 +43236,24 @@ var FULL_MODE_TOOLS = [
43221
43236
  },
43222
43237
  mode: "full"
43223
43238
  },
43239
+ {
43240
+ name: "remove_agent",
43241
+ description: "Remove (delete) a build agent from the TeamCity server. Use this to clean up disconnected or ghost agent entries.",
43242
+ inputSchema: {
43243
+ type: "object",
43244
+ properties: {
43245
+ agentId: { type: "string", description: "Agent ID to remove" }
43246
+ },
43247
+ required: ["agentId"]
43248
+ },
43249
+ handler: async (args) => {
43250
+ const typedArgs = args;
43251
+ const adapter = createAdapterFromTeamCityAPI(TeamCityAPI.getInstance());
43252
+ await adapter.modules.agents.deleteAgent(typedArgs.agentId);
43253
+ return json({ success: true, action: "remove_agent", agentId: typedArgs.agentId });
43254
+ },
43255
+ mode: "full"
43256
+ },
43224
43257
  // === Build Step Management ===
43225
43258
  {
43226
43259
  name: "manage_build_steps",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daghis/teamcity-mcp",
3
- "version": "2.5.0",
3
+ "version": "2.6.1",
4
4
  "description": "Model Control Protocol server for TeamCity CI/CD integration with AI coding assistants",
5
5
  "mcpName": "io.github.Daghis/teamcity",
6
6
  "main": "dist/index.js",
@@ -64,10 +64,10 @@
64
64
  "url": "https://github.com/Daghis/teamcity-mcp/issues"
65
65
  },
66
66
  "dependencies": {
67
- "@modelcontextprotocol/sdk": "^1.26.0",
68
- "axios": "^1.13.5",
67
+ "@modelcontextprotocol/sdk": "^1.27.0",
68
+ "axios": "^1.15.0",
69
69
  "axios-retry": "^4.5.0",
70
- "dotenv": "17.3.1",
70
+ "dotenv": "17.4.1",
71
71
  "tslib": "^2.8.1",
72
72
  "winston": "^3.11.0",
73
73
  "zod": "^4.3.5"
@@ -80,10 +80,10 @@
80
80
  "@types/jest": "^30.0.0",
81
81
  "@types/js-yaml": "^4.0.9",
82
82
  "@types/node": "^25.0.2",
83
- "@typescript-eslint/eslint-plugin": "^8.57.0",
84
- "@typescript-eslint/parser": "^8.57.0",
85
- "esbuild": "^0.27.0",
86
- "eslint": "^10.0.3",
83
+ "@typescript-eslint/eslint-plugin": "^8.58.0",
84
+ "@typescript-eslint/parser": "^8.58.0",
85
+ "esbuild": "^0.28.0",
86
+ "eslint": "^10.1.0",
87
87
  "eslint-config-prettier": "^10.1.8",
88
88
  "eslint-plugin-prettier": "^5.0.1",
89
89
  "globals": "^17.4.0",
@@ -91,17 +91,20 @@
91
91
  "jest-junit": "^16.0.0",
92
92
  "js-yaml": "^4.1.1",
93
93
  "prettier": "^3.1.0",
94
- "ts-jest": "^29.4.5",
94
+ "ts-jest": "^29.4.9",
95
95
  "tsc-alias": "^1.8.8",
96
96
  "tsconfig-paths": "^4.2.0",
97
97
  "tsx": "^4.6.0",
98
- "typescript": "^5.3.2"
98
+ "typescript": "^6.0.2"
99
99
  },
100
100
  "overrides": {
101
- "axios": "^1.13.5",
101
+ "axios": "^1.15.0",
102
102
  "body-parser": "^2.2.1",
103
103
  "glob@>=10.2.0 <10.5.0": "^10.5.0",
104
104
  "hono": "^4.12.7",
105
- "js-yaml@<4.0.0": "^3.14.2"
105
+ "js-yaml@<4.0.0": "^3.14.2",
106
+ "lodash-es": "^4.18.0",
107
+ "picomatch@>=2 <2.3.2": "^2.3.2",
108
+ "picomatch@>=4 <4.0.4": "^4.0.4"
106
109
  }
107
110
  }
package/server.json CHANGED
@@ -7,13 +7,13 @@
7
7
  "source": "github"
8
8
  },
9
9
  "websiteUrl": "https://github.com/Daghis/teamcity-mcp",
10
- "version": "2.5.0",
10
+ "version": "2.6.1",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "registryBaseUrl": "https://registry.npmjs.org",
15
15
  "identifier": "@daghis/teamcity-mcp",
16
- "version": "2.5.0",
16
+ "version": "2.6.1",
17
17
  "runtimeHint": "npx",
18
18
  "runtimeArguments": [
19
19
  {
@@ -0,0 +1,21 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "esModuleInterop": true,
5
+ "allowJs": true,
6
+ "strict": false,
7
+ "noImplicitAny": false,
8
+ "strictNullChecks": false,
9
+ "strictFunctionTypes": false,
10
+ "strictBindCallApply": false,
11
+ "strictPropertyInitialization": false,
12
+ "noImplicitThis": false,
13
+ "useUnknownInCatchVariables": false,
14
+ "noUnusedLocals": false,
15
+ "noUnusedParameters": false,
16
+ "noImplicitReturns": false,
17
+ "noUncheckedIndexedAccess": false,
18
+ "noImplicitOverride": false,
19
+ "types": ["jest", "node"]
20
+ }
21
+ }