@daghis/teamcity-mcp 1.9.2 → 1.9.4

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.
@@ -0,0 +1,182 @@
1
+ const js = require('@eslint/js');
2
+ const importPlugin = require('eslint-plugin-import');
3
+ const tsPlugin = require('@typescript-eslint/eslint-plugin');
4
+ const tsParser = require('@typescript-eslint/parser');
5
+ const prettierConfig = require('eslint-config-prettier');
6
+ const globals = require('globals');
7
+
8
+ const typeScriptRecommended = tsPlugin.configs['flat/recommended'].map((config, index) => {
9
+ if (index === 0) {
10
+ return {
11
+ ...config,
12
+ languageOptions: {
13
+ ...config.languageOptions,
14
+ parser: tsParser,
15
+ parserOptions: {
16
+ project: ['./tsconfig.json', './tsconfig.build.json'],
17
+ tsconfigRootDir: __dirname,
18
+ ecmaVersion: 2022,
19
+ sourceType: 'module',
20
+ noWarnOnMultipleProjects: true,
21
+ },
22
+ },
23
+ };
24
+ }
25
+
26
+ return config;
27
+ });
28
+
29
+ module.exports = [
30
+ {
31
+ ignores: [
32
+ '**/node_modules/**',
33
+ 'dist/**',
34
+ 'coverage/**',
35
+ '**/*.js',
36
+ '**/*.mjs',
37
+ '**/*.cjs',
38
+ 'scripts/**',
39
+ '.husky/**',
40
+ 'tests/*.js',
41
+ 'jest.config.js',
42
+ 'eslint.config.cjs',
43
+ 'src/teamcity-client/**',
44
+ ],
45
+ },
46
+ {
47
+ rules: js.configs.recommended.rules,
48
+ },
49
+ ...typeScriptRecommended,
50
+ {
51
+ files: ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'],
52
+ plugins: {
53
+ '@typescript-eslint': tsPlugin,
54
+ import: importPlugin,
55
+ },
56
+ rules: {
57
+ 'no-console': 'error',
58
+ 'no-debugger': 'error',
59
+ 'no-alert': 'error',
60
+ 'no-var': 'error',
61
+ 'prefer-const': 'error',
62
+ 'prefer-arrow-callback': 'error',
63
+ '@typescript-eslint/no-unused-vars': [
64
+ 'error',
65
+ {
66
+ argsIgnorePattern: '^_',
67
+ varsIgnorePattern: '^_',
68
+ caughtErrors: 'none',
69
+ ignoreRestSiblings: true,
70
+ },
71
+ ],
72
+ '@typescript-eslint/strict-boolean-expressions': [
73
+ 'error',
74
+ {
75
+ allowString: true,
76
+ allowNumber: true,
77
+ allowNullableObject: true,
78
+ allowNullableBoolean: true,
79
+ allowNullableString: true,
80
+ allowNullableNumber: true,
81
+ allowAny: false,
82
+ },
83
+ ],
84
+ '@typescript-eslint/explicit-function-return-type': 'off',
85
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
86
+ '@typescript-eslint/no-non-null-assertion': 'warn',
87
+ '@typescript-eslint/prefer-nullish-coalescing': 'warn',
88
+ '@typescript-eslint/prefer-optional-chain': 'warn',
89
+ '@typescript-eslint/no-var-requires': 'error',
90
+ '@typescript-eslint/naming-convention': [
91
+ 'error',
92
+ { selector: 'interface', format: ['PascalCase'] },
93
+ { selector: 'typeAlias', format: ['PascalCase'] },
94
+ { selector: 'enum', format: ['PascalCase'] },
95
+ {
96
+ selector: 'variable',
97
+ format: ['camelCase', 'UPPER_CASE', 'PascalCase'],
98
+ leadingUnderscore: 'allow',
99
+ },
100
+ { selector: 'function', format: ['camelCase'] },
101
+ { selector: 'method', format: ['camelCase'] },
102
+ {
103
+ selector: 'classProperty',
104
+ format: ['camelCase'],
105
+ leadingUnderscore: 'allow',
106
+ },
107
+ {
108
+ selector: 'parameter',
109
+ format: ['camelCase'],
110
+ leadingUnderscore: 'allow',
111
+ },
112
+ ],
113
+ 'import/order': 'off',
114
+ 'import/no-duplicates': 'error',
115
+ 'import/no-unused-modules': 'error',
116
+ 'import/first': 'error',
117
+ 'import/newline-after-import': 'error',
118
+ 'import/no-default-export': 'off',
119
+ 'object-shorthand': 'error',
120
+ 'prefer-template': 'error',
121
+ 'no-useless-concat': 'error',
122
+ 'no-useless-return': 'error',
123
+ 'no-duplicate-imports': 'error',
124
+ 'sort-imports': 'off',
125
+ 'no-implicit-coercion': 'error',
126
+ 'no-param-reassign': 'error',
127
+ 'no-return-assign': 'error',
128
+ 'no-throw-literal': 'error',
129
+ 'prefer-promise-reject-errors': 'error',
130
+ 'no-await-in-loop': 'warn',
131
+ 'require-atomic-updates': 'error',
132
+ },
133
+ settings: {
134
+ 'import/resolver': {
135
+ typescript: {
136
+ alwaysTryTypes: true,
137
+ project: ['./tsconfig.json', './tsconfig.build.json'],
138
+ },
139
+ },
140
+ },
141
+ },
142
+ {
143
+ files: ['**/*.test.ts', '**/*.test.tsx', '**/*.spec.ts', '**/*.spec.tsx'],
144
+ languageOptions: {
145
+ globals: globals.jest,
146
+ },
147
+ rules: {
148
+ '@typescript-eslint/no-explicit-any': 'error',
149
+ '@typescript-eslint/no-non-null-assertion': 'warn',
150
+ '@typescript-eslint/strict-boolean-expressions': 'error',
151
+ '@typescript-eslint/no-floating-promises': 'error',
152
+ '@typescript-eslint/no-misused-promises': 'error',
153
+ '@typescript-eslint/no-require-imports': 'off',
154
+ 'require-atomic-updates': 'off',
155
+ 'no-console': 'off',
156
+ },
157
+ },
158
+ {
159
+ files: ['scripts/**/*.ts', 'scripts/**/*.js'],
160
+ languageOptions: {
161
+ globals: {
162
+ ...globals.node,
163
+ },
164
+ },
165
+ rules: {
166
+ 'no-console': 'off',
167
+ },
168
+ },
169
+ {
170
+ files: ['jest.config.js', '*.config.js'],
171
+ languageOptions: {
172
+ globals: {
173
+ ...globals.node,
174
+ },
175
+ },
176
+ rules: {
177
+ '@typescript-eslint/no-require-imports': 'off',
178
+ 'import/no-default-export': 'off',
179
+ },
180
+ },
181
+ prettierConfig,
182
+ ];
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@daghis/teamcity-mcp",
3
- "version": "1.9.2",
3
+ "version": "1.9.4",
4
4
  "description": "Model Control Protocol server for TeamCity CI/CD integration with AI coding assistants",
5
+ "mcpName": "io.github.daghis/teamcity",
5
6
  "main": "dist/index.js",
6
7
  "types": "dist/index.d.ts",
7
8
  "bin": {
@@ -70,10 +71,11 @@
70
71
  "reflect-metadata": "^0.2.2",
71
72
  "tslib": "^2.8.1",
72
73
  "winston": "^3.11.0",
73
- "zod": "^3.22.4"
74
+ "zod": "^4.1.11"
74
75
  },
75
76
  "devDependencies": {
76
77
  "@codecov/bundler-plugin-core": "^1.9.1",
78
+ "@eslint/compat": "^1.4.0",
77
79
  "@esbuild-plugins/tsconfig-paths": "^0.1.2",
78
80
  "@trivago/prettier-plugin-sort-imports": "^5.2.2",
79
81
  "@types/ajv": "^1.0.4",
@@ -82,11 +84,11 @@
82
84
  "@types/js-yaml": "^4.0.9",
83
85
  "@types/morgan": "^1.9.9",
84
86
  "@types/node": "^24.3.1",
85
- "@typescript-eslint/eslint-plugin": "^6.13.0",
86
- "@typescript-eslint/parser": "^6.13.0",
87
+ "@typescript-eslint/eslint-plugin": "^8.44.1",
88
+ "@typescript-eslint/parser": "^8.44.1",
87
89
  "axios-retry": "^4.5.0",
88
90
  "esbuild": "^0.25.9",
89
- "eslint": "^8.54.0",
91
+ "eslint": "^9.36.0",
90
92
  "eslint-config-prettier": "^10.1.8",
91
93
  "eslint-import-resolver-typescript": "^4.4.4",
92
94
  "eslint-plugin-import": "^2.32.0",
package/server.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json",
3
+ "name": "io.github.daghis/teamcity",
4
+ "description": "MCP server exposing JetBrains TeamCity CI/CD workflows to AI coding assistants",
5
+ "repository": {
6
+ "url": "https://github.com/Daghis/teamcity-mcp",
7
+ "source": "github"
8
+ },
9
+ "websiteUrl": "https://github.com/Daghis/teamcity-mcp",
10
+ "version": "1.9.4",
11
+ "packages": [
12
+ {
13
+ "registryType": "npm",
14
+ "registryBaseUrl": "https://registry.npmjs.org",
15
+ "identifier": "@daghis/teamcity-mcp",
16
+ "version": "1.9.4",
17
+ "runtimeHint": "npx",
18
+ "runtimeArguments": [
19
+ {
20
+ "type": "positional",
21
+ "value": "-y"
22
+ }
23
+ ],
24
+ "transport": {
25
+ "type": "stdio"
26
+ },
27
+ "environmentVariables": [
28
+ {
29
+ "name": "TEAMCITY_URL",
30
+ "description": "Base URL of your TeamCity server",
31
+ "isRequired": true
32
+ },
33
+ {
34
+ "name": "TEAMCITY_TOKEN",
35
+ "description": "TeamCity personal access token with required permissions",
36
+ "isRequired": true,
37
+ "isSecret": true
38
+ },
39
+ {
40
+ "name": "MCP_MODE",
41
+ "description": "Operational mode: dev (default) or full for elevated administrative tools",
42
+ "default": "dev",
43
+ "choices": [
44
+ "dev",
45
+ "full"
46
+ ]
47
+ }
48
+ ]
49
+ }
50
+ ]
51
+ }