TeamCity for VS Code & Cursor
Browse and manage TeamCity builds from the sidebar, and expose a read-only MCP server so GitHub Copilot and Cursor agents can look up build types, recent builds, failures, and logs.
Features
Extension UI
- Projects tree: projects → build configurations
- Builds tree: running, queued, and recent builds (click a build type to focus its recent history)
- Trigger a build (optional branch + comment)
- Cancel / stop running or queued builds
- Open projects, build types, and builds in the browser
- Status bar connection indicator
MCP (read-only)
Agents can call:
| Tool |
Purpose |
teamcity_list_projects |
List projects (optionally under a parent) |
teamcity_list_build_types |
List build configs by project / name |
teamcity_get_build_type |
Build type details, parameters, VCS roots |
teamcity_list_builds |
Recent builds with filters |
teamcity_get_build |
Build detail + problems + failed tests |
teamcity_get_build_log |
Log text (tailLines / grep / size cap) |
teamcity_list_running |
Currently running builds |
teamcity_list_queued |
Build queue |
teamcity_search |
Free-text search over build types |
MCP cannot trigger or cancel builds.
Setup
1. Create a TeamCity access token
In TeamCity: My Settings & Tools → Access Tokens → Create.
A read-only / view builds scope is enough for MCP. Trigger/cancel in the UI needs queue/cancel permissions.
2. Install the extension
npm install
npm run build
npm run package
Then in VS Code or Cursor: Extensions → … → Install from VSIX… and pick the generated .vsix.
For local development: open this folder and run the Run Extension launch config.
3. Connect
Command Palette:
TeamCity: Set Server URL — e.g. https://teamcity.example.com
TeamCity: Set Access Token
TeamCity: Test Connection
Token is stored in Secret Storage; URL is in settings (teamcity.url).
Settings
| Setting |
Default |
Description |
teamcity.url |
"" |
Server base URL |
teamcity.pollIntervalSeconds |
15 |
Builds view refresh interval |
teamcity.recentBuildCount |
25 |
Recent builds to show |
teamcity.rejectUnauthorized |
true |
Set false only for self-signed TLS |
MCP for GitHub Copilot (VS Code)
The extension registers an MCP server definition provider (teamcity). After install + credentials:
- Open Copilot Chat in Agent mode
- Open the tools picker and enable TeamCity if needed
- Ask things like: “What failed in the latest MyApp_Build build? Show the log errors.”
No .vscode/mcp.json is required when the extension is installed.
MCP for Cursor
On activate, the extension tries vscode.cursor.mcp.registerServer when that API exists.
Fallback / explicit install:
- Run
TeamCity: Install MCP for Cursor
- Choose global (
~/.cursor/mcp.json) or workspace (.cursor/mcp.json)
- Reload Cursor if the server does not appear under Customize → MCPs
The MCP process is started as:
node <extension>/dist/mcp/server.js
with env:
TEAMCITY_URL
TEAMCITY_TOKEN
TEAMCITY_REJECT_UNAUTHORIZED (true / false)
Example agent prompts
- “List TeamCity build types matching
backend.”
- “Show the last 10 builds for
MyProject_Build including failed ones on any branch.”
- “Get problems and failed tests for build
12345, then pull the last 200 log lines matching error.”
- “What’s currently running and queued on TeamCity?”
Development
npm install
npm run build # bundles dist/extension.js and dist/mcp/server.js
npm run watch # rebuild on change
npm run check # TypeScript noEmit
npm run package # create .vsix
Shared TeamCity REST client lives in src/teamcity/ and is used by both the extension host UI and the MCP stdio process.