@daghis/teamcity-mcp 2.12.0 → 2.12.5
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 +35 -0
- package/README.md +26 -2
- package/dist/index.js +26 -29
- package/package.json +5 -5
- package/server.json +2 -2
- package/tsconfig.test.json +1 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.12.5](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.12.4...teamcity-mcp-v2.12.5) (2026-10-03)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **publish:** use Node 24 and pin npm for trusted publishing ([#536](https://github.com/Daghis/teamcity-mcp/issues/536)) ([533814b](https://github.com/Daghis/teamcity-mcp/commit/533814bbe8d25fb7f7bb89f14a92e9a261d4ebbb))
|
|
9
|
+
|
|
10
|
+
## [2.12.4](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.12.3...teamcity-mcp-v2.12.4) (2026-10-02)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **deps:** bump axios to 1.20 and patch transitive advisories ([#534](https://github.com/Daghis/teamcity-mcp/issues/534)) ([d5a9296](https://github.com/Daghis/teamcity-mcp/commit/d5a92964633a60f6626d50dd6cfa509e9ae68bdb))
|
|
16
|
+
|
|
17
|
+
## [2.12.3](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.12.2...teamcity-mcp-v2.12.3) (2026-10-02)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **api-client:** keep the original error when retries are exhausted ([#529](https://github.com/Daghis/teamcity-mcp/issues/529)) ([3a417ef](https://github.com/Daghis/teamcity-mcp/commit/3a417ef17260b2991885e2943e04a22e9c754aa8))
|
|
23
|
+
|
|
24
|
+
## [2.12.2](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.12.1...teamcity-mcp-v2.12.2) (2026-08-31)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Bug Fixes
|
|
28
|
+
|
|
29
|
+
* **deps:** resolve all Dependabot alerts; cap axios at ~1.18.0 ([#527](https://github.com/Daghis/teamcity-mcp/issues/527)) ([74c7b66](https://github.com/Daghis/teamcity-mcp/commit/74c7b66d954a8c8bb55f5ded35b4981eef76b512))
|
|
30
|
+
|
|
31
|
+
## [2.12.1](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.12.0...teamcity-mcp-v2.12.1) (2026-05-12)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Bug Fixes
|
|
35
|
+
|
|
36
|
+
* **tools:** mark download_* as readOnly and idempotent ([#507](https://github.com/Daghis/teamcity-mcp/issues/507)) ([0a09663](https://github.com/Daghis/teamcity-mcp/commit/0a09663a5ff39e82f9b471e1aa7102ffc4d68163))
|
|
37
|
+
|
|
3
38
|
## [2.12.0](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.11.0...teamcity-mcp-v2.12.0) (2026-05-03)
|
|
4
39
|
|
|
5
40
|
|
package/README.md
CHANGED
|
@@ -11,6 +11,11 @@ A Model Control Protocol (MCP) server that bridges AI coding assistants with Jet
|
|
|
11
11
|
<img width="380" height="200" src="https://glama.ai/mcp/servers/@Daghis/teamcity-mcp/badge" alt="TeamCity Server MCP server" />
|
|
12
12
|
</a>
|
|
13
13
|
|
|
14
|
+
> [!NOTE]
|
|
15
|
+
> **Project status (June 2026): stable, low-key maintenance.** This does what it set out to do and is no longer under active development. It still works and stays installable; issues and PRs may get slow or no response, and security fixes are best-effort.
|
|
16
|
+
>
|
|
17
|
+
> JetBrains now ships official AI integration for TeamCity — a built-in MCP and the [TeamCity CLI](https://github.com/JetBrains/teamcity-cli) with an installable agent skill — which is the better default for most workflows. See [_How this compares to JetBrains' official tooling_](#how-this-compares-to-jetbrains-official-tooling) below before adopting.
|
|
18
|
+
|
|
14
19
|
## Overview
|
|
15
20
|
|
|
16
21
|
The TeamCity MCP Server allows developers using AI-powered coding assistants (Claude Code, Cursor, Windsurf) to interact with TeamCity directly from their development environment via MCP tools.
|
|
@@ -47,6 +52,18 @@ See the [Tools Mode Matrix](docs/mcp-tools-mode-matrix.md) for the complete list
|
|
|
47
52
|
- Performance-conscious: fast startup with minimal overhead
|
|
48
53
|
- Clean codebase with clear module boundaries
|
|
49
54
|
|
|
55
|
+
## How this compares to JetBrains' official tooling
|
|
56
|
+
|
|
57
|
+
**As of June 2026,** JetBrains ships first-party AI integration for TeamCity: a built-in MCP endpoint and the [TeamCity CLI](https://github.com/JetBrains/teamcity-cli), which includes an installable agent skill. Together these are JetBrains' recommended path and cover the common AI workflows — reading logs, diagnosing failures, and rerunning builds — with no install and official support.
|
|
58
|
+
|
|
59
|
+
teamcity-mcp predates that tooling and overlaps with it. Broadly, the official tooling is the better default today; teamcity-mcp's remaining edge is a broader set of write and management operations exposed as an MCP server. That gap is real but narrowing, and JetBrains' tooling is evolving quickly — so rather than pin down a feature-by-feature comparison here (it would go stale fast), check the current docs and pick what fits:
|
|
60
|
+
|
|
61
|
+
- [TeamCity 2026.1 announcement](https://blog.jetbrains.com/teamcity/2026/05/teamcity-20261/) — overview of the official AI integration
|
|
62
|
+
- [AI agent integration docs](https://www.jetbrains.com/help/teamcity/ai-agent-integration.html) — the built-in MCP
|
|
63
|
+
- [TeamCity CLI](https://github.com/JetBrains/teamcity-cli) — the terminal + agent-skill path
|
|
64
|
+
|
|
65
|
+
If you're comfortable with JetBrains' CLI, you may not need this project at all. It stays MIT-licensed and installable for whatever the built-ins don't yet reach — fork it if you want to take it further yourself.
|
|
66
|
+
|
|
50
67
|
## Installation
|
|
51
68
|
|
|
52
69
|
### Prerequisites
|
|
@@ -110,7 +127,14 @@ On Windows, Claude Code's MCP configuration [may not properly merge environment
|
|
|
110
127
|
"mcpServers": {
|
|
111
128
|
"teamcity": {
|
|
112
129
|
"command": "npx",
|
|
113
|
-
"args": [
|
|
130
|
+
"args": [
|
|
131
|
+
"-y",
|
|
132
|
+
"@daghis/teamcity-mcp",
|
|
133
|
+
"--url",
|
|
134
|
+
"https://teamcity.example.com",
|
|
135
|
+
"--token",
|
|
136
|
+
"YOUR_TOKEN"
|
|
137
|
+
]
|
|
114
138
|
}
|
|
115
139
|
}
|
|
116
140
|
}
|
|
@@ -359,4 +383,4 @@ This repository has GitHub secret scanning and push protection enabled. See [SEC
|
|
|
359
383
|
|
|
360
384
|
---
|
|
361
385
|
|
|
362
|
-
Built with ❤️ for developers who love efficient CI/CD workflows
|
|
386
|
+
Built with ❤️ for developers who love efficient CI/CD workflows
|
package/dist/index.js
CHANGED
|
@@ -6,11 +6,20 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
-
var __esm = (fn, res) => function __init() {
|
|
10
|
-
|
|
9
|
+
var __esm = (fn, res, err) => function __init() {
|
|
10
|
+
if (err) throw err[0];
|
|
11
|
+
try {
|
|
12
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
13
|
+
} catch (e) {
|
|
14
|
+
throw err = [e], e;
|
|
15
|
+
}
|
|
11
16
|
};
|
|
12
17
|
var __commonJS = (cb, mod) => function __require() {
|
|
13
|
-
|
|
18
|
+
try {
|
|
19
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
20
|
+
} catch (e) {
|
|
21
|
+
throw mod = 0, e;
|
|
22
|
+
}
|
|
14
23
|
};
|
|
15
24
|
var __export = (target, all) => {
|
|
16
25
|
for (var name in all)
|
|
@@ -1216,7 +1225,7 @@ function debug2(message, meta) {
|
|
|
1216
1225
|
// package.json
|
|
1217
1226
|
var package_default = {
|
|
1218
1227
|
name: "@daghis/teamcity-mcp",
|
|
1219
|
-
version: "2.12.
|
|
1228
|
+
version: "2.12.5",
|
|
1220
1229
|
description: "Model Control Protocol server for TeamCity CI/CD integration with AI coding assistants",
|
|
1221
1230
|
mcpName: "io.github.Daghis/teamcity",
|
|
1222
1231
|
main: "dist/index.js",
|
|
@@ -1245,7 +1254,7 @@ var package_default = {
|
|
|
1245
1254
|
"lint:check": "node ./node_modules/eslint/bin/eslint.js 'src/**/*.{ts,tsx}' 'tests/**/*.test.{ts,tsx,js}' --no-error-on-unmatched-pattern",
|
|
1246
1255
|
format: "node ./node_modules/prettier/bin/prettier.cjs --write 'src/**/*.{ts,tsx,json,md}' 'tests/**/*.{ts,tsx,js,json,md}'",
|
|
1247
1256
|
"format:check": "node ./node_modules/prettier/bin/prettier.cjs --check 'src/**/*.{ts,tsx,json,md}' 'tests/**/*.{ts,tsx,js,json,md}'",
|
|
1248
|
-
typecheck: "node ./node_modules/typescript/bin/tsc --noEmit -p tsconfig.build.json",
|
|
1257
|
+
typecheck: "node ./node_modules/typescript/bin/tsc --noEmit -p tsconfig.build.json && npm run typecheck:all",
|
|
1249
1258
|
"typecheck:all": "node ./node_modules/typescript/bin/tsc --noEmit",
|
|
1250
1259
|
check: "npm run typecheck && npm run lint:check && npm run format:check",
|
|
1251
1260
|
clean: "rm -rf dist coverage",
|
|
@@ -1280,8 +1289,8 @@ var package_default = {
|
|
|
1280
1289
|
url: "https://github.com/Daghis/teamcity-mcp/issues"
|
|
1281
1290
|
},
|
|
1282
1291
|
dependencies: {
|
|
1283
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
1284
|
-
axios: "^1.
|
|
1292
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
1293
|
+
axios: "^1.20.0",
|
|
1285
1294
|
"axios-retry": "^4.5.0",
|
|
1286
1295
|
dotenv: "17.4.2",
|
|
1287
1296
|
tslib: "^2.8.1",
|
|
@@ -1316,7 +1325,7 @@ var package_default = {
|
|
|
1316
1325
|
},
|
|
1317
1326
|
overrides: {
|
|
1318
1327
|
"@hono/node-server": "^1.19.13",
|
|
1319
|
-
axios: "^1.
|
|
1328
|
+
axios: "^1.20.0",
|
|
1320
1329
|
"body-parser": "^2.2.1",
|
|
1321
1330
|
"follow-redirects": "^1.16.0",
|
|
1322
1331
|
"glob@>=10.2.0 <10.5.0": "^10.5.0",
|
|
@@ -4883,6 +4892,9 @@ function logResponse(response) {
|
|
|
4883
4892
|
return response;
|
|
4884
4893
|
}
|
|
4885
4894
|
function logAndTransformError(error3) {
|
|
4895
|
+
if (error3 instanceof TeamCityAPIError) {
|
|
4896
|
+
return Promise.reject(error3);
|
|
4897
|
+
}
|
|
4886
4898
|
const requestId = error3.config?.requestId;
|
|
4887
4899
|
const tcError = TeamCityAPIError.fromAxiosError(error3, requestId);
|
|
4888
4900
|
const meta = asTimingMetaContainer(error3.config)?._tcMeta;
|
|
@@ -40147,24 +40159,9 @@ var DEV_TOOLS = [
|
|
|
40147
40159
|
}
|
|
40148
40160
|
const shouldRetry2 = (error3) => {
|
|
40149
40161
|
if (error3 instanceof TeamCityAPIError) {
|
|
40150
|
-
|
|
40151
|
-
return true;
|
|
40152
|
-
}
|
|
40153
|
-
return isRetryableError(error3);
|
|
40154
|
-
}
|
|
40155
|
-
if ((0, import_axios36.isAxiosError)(error3)) {
|
|
40156
|
-
const status = error3.response?.status;
|
|
40157
|
-
if (status === 404) {
|
|
40158
|
-
return true;
|
|
40159
|
-
}
|
|
40160
|
-
if (status != null && status >= 500 && status < 600) {
|
|
40161
|
-
return true;
|
|
40162
|
-
}
|
|
40163
|
-
if (!status) {
|
|
40164
|
-
return true;
|
|
40165
|
-
}
|
|
40162
|
+
return error3.statusCode === 404;
|
|
40166
40163
|
}
|
|
40167
|
-
return
|
|
40164
|
+
return (0, import_axios36.isAxiosError)(error3) && error3.response?.status === 404;
|
|
40168
40165
|
};
|
|
40169
40166
|
const normalizeError = (error3) => {
|
|
40170
40167
|
if ((0, import_axios36.isAxiosError)(error3)) {
|
|
@@ -41544,9 +41541,9 @@ var DEV_TOOLS = [
|
|
|
41544
41541
|
{
|
|
41545
41542
|
name: "download_build_artifact",
|
|
41546
41543
|
annotations: {
|
|
41547
|
-
readOnlyHint:
|
|
41544
|
+
readOnlyHint: true,
|
|
41548
41545
|
destructiveHint: false,
|
|
41549
|
-
idempotentHint:
|
|
41546
|
+
idempotentHint: true,
|
|
41550
41547
|
openWorldHint: true
|
|
41551
41548
|
},
|
|
41552
41549
|
description: "Download a single build artifact, with base64, text, or streaming output. Returns the artifact bytes or stream metadata; returns 404 if the build or path is unknown.",
|
|
@@ -41612,9 +41609,9 @@ var DEV_TOOLS = [
|
|
|
41612
41609
|
{
|
|
41613
41610
|
name: "download_build_artifacts",
|
|
41614
41611
|
annotations: {
|
|
41615
|
-
readOnlyHint:
|
|
41612
|
+
readOnlyHint: true,
|
|
41616
41613
|
destructiveHint: false,
|
|
41617
|
-
idempotentHint:
|
|
41614
|
+
idempotentHint: true,
|
|
41618
41615
|
openWorldHint: true
|
|
41619
41616
|
},
|
|
41620
41617
|
description: "Download multiple build artifacts, with base64, text, or streaming output. Returns per-artifact payloads or stream metadata; returns 404 if the build or any path is unknown.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daghis/teamcity-mcp",
|
|
3
|
-
"version": "2.12.
|
|
3
|
+
"version": "2.12.5",
|
|
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",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"lint:check": "node ./node_modules/eslint/bin/eslint.js 'src/**/*.{ts,tsx}' 'tests/**/*.test.{ts,tsx,js}' --no-error-on-unmatched-pattern",
|
|
30
30
|
"format": "node ./node_modules/prettier/bin/prettier.cjs --write 'src/**/*.{ts,tsx,json,md}' 'tests/**/*.{ts,tsx,js,json,md}'",
|
|
31
31
|
"format:check": "node ./node_modules/prettier/bin/prettier.cjs --check 'src/**/*.{ts,tsx,json,md}' 'tests/**/*.{ts,tsx,js,json,md}'",
|
|
32
|
-
"typecheck": "node ./node_modules/typescript/bin/tsc --noEmit -p tsconfig.build.json",
|
|
32
|
+
"typecheck": "node ./node_modules/typescript/bin/tsc --noEmit -p tsconfig.build.json && npm run typecheck:all",
|
|
33
33
|
"typecheck:all": "node ./node_modules/typescript/bin/tsc --noEmit",
|
|
34
34
|
"check": "npm run typecheck && npm run lint:check && npm run format:check",
|
|
35
35
|
"clean": "rm -rf dist coverage",
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"url": "https://github.com/Daghis/teamcity-mcp/issues"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
68
|
-
"axios": "^1.
|
|
67
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
68
|
+
"axios": "^1.20.0",
|
|
69
69
|
"axios-retry": "^4.5.0",
|
|
70
70
|
"dotenv": "17.4.2",
|
|
71
71
|
"tslib": "^2.8.1",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
},
|
|
101
101
|
"overrides": {
|
|
102
102
|
"@hono/node-server": "^1.19.13",
|
|
103
|
-
"axios": "^1.
|
|
103
|
+
"axios": "^1.20.0",
|
|
104
104
|
"body-parser": "^2.2.1",
|
|
105
105
|
"follow-redirects": "^1.16.0",
|
|
106
106
|
"glob@>=10.2.0 <10.5.0": "^10.5.0",
|
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.12.
|
|
10
|
+
"version": "2.12.5",
|
|
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.12.
|
|
16
|
+
"version": "2.12.5",
|
|
17
17
|
"runtimeHint": "npx",
|
|
18
18
|
"runtimeArguments": [
|
|
19
19
|
{
|