一个模型控制协议(MCP)服务器,连接AI编码助手与JetBrains TeamCity CI/CD服务器,将TeamCity操作暴露为MCP工具。
TeamCity MCP服务器允许使用AI驱动的编码助手(如Claude Code、Cursor、Windsurf)的开发者通过MCP工具直接从他们的开发环境中与TeamCity进行交互。
开发模式:安全的CI/CD操作
完全模式:完整的基础设施管理
# 克隆仓库
git clone https://github.com/Daghis/teamcity-mcp.git
cd teamcity-mcp
# 安装依赖
npm install
# 配置环境
cp .env.example .env
# 编辑.env文件,填写你的TeamCity URL和令牌
# 在开发模式下运行
npm run dev
通过npx运行MCP服务器(需要Node 20.x)。在命令行或工作目录中的.env文件中设置你的TeamCity环境变量。
# 单次运行(内联环境变量)
TEAMCITY_URL="https://teamcity.example.com" \
TEAMCITY_TOKEN="<your_token>" \
MCP_MODE=dev \
npx -y @daghis/teamcity-mcp
# 或者依赖当前目录下的.env文件
npx -y @daghis/teamcity-mcp
claude mcp add [-s user] teamcity -- npx -y @daghis/teamcity-mcpclaude mcp add [-s user] teamcity -- env TEAMCITY_URL="https://teamcity.example.com" TEAMCITY_TOKEN="tc_<your_token>" MCP_MODE=dev npx -y @daghis/teamcity-mcpMCP_MODE=full):~26k令牌用于MCP工具环境变量在中心位置通过Zod进行验证。支持的变量及其默认值:
# 服务器配置
PORT=3000
NODE_ENV=development
LOG_LEVEL=info
# TeamCity配置(支持别名)
TEAMCITY_URL=https://teamcity.example.com
TEAMCITY_TOKEN=your-auth-token
# 可选别名:
# TEAMCITY_SERVER_URL=...
# TEAMCITY_API_TOKEN=...
# MCP模式(开发或完全)
MCP_MODE=dev
# 可选高级TeamCity选项(显示默认值)
# 连接
# TEAMCITY_TIMEOUT=30000
# TEAMCITY_MAX_CONCURRENT=10
# TEAMCITY_KEEP_ALIVE=true
# TEAMCITY_COMPRESSION=true
# 重试
# TEAMCITY_RETRY_ENABLED=true
# TEAMCITY_MAX_RETRIES=3
# TEAMCITY_RETRY_DELAY=1000
# TEAMCITY_MAX_RETRY_DELAY=30000
# 分页
# TEAMCITY_PAGE_SIZE=100
# TEAMCITY_MAX_PAGE_SIZE=1000
# TEAMCITY_AUTO_FETCH_ALL=false
# 断路器
# TEAMCITY_CIRCUIT_BREAKER=true
# TEAMCITY_CB_FAILURE_THRESHOLD=5
# TEAMCITY_CB_RESET_TIMEOUT=60000
# TEAMCITY_CB_SUCCESS_THRESHOLD=2
这些值在src/config/index.ts中进行规范化,并通过辅助getter由src/teamcity/config.ts消费。
一旦集成到您的AI编码助手:
"在特性分支上构建前端"
"为什么昨晚的测试失败了?"
"用最新构建部署预发布环境"
"为移动应用创建新的构建配置"
content[0].text包含一个JSON字符串。示例形状:
{ "items": [...], "pagination": { "page": 1, "pageSize": 100 } } 或 { "items": [...], "pagination": { "mode": "all", "pageSize": 100, "fetched": 250 } }。pageSize、maxPages和all:
pageSize控制每页的项数。all: true获取多个页面直到maxPages。list_builds上的count为了兼容性而保留,但推荐使用pageSize。success: false且error.code = VALIDATION_ERROR。import { TeamCityAPI } from '@/api-client';
// 获取API客户端实例
const api = TeamCityAPI.getInstance();
// 列出项目
const projects = await api.listProjects();
// 获取构建状态
const build = await api.getBuild('BuildId123');
// 触发新的构建
const newBuild = await api.triggerBuild('BuildConfigId', {
branchName: 'main',
});
注意:从
src/teamcity/index.ts导出的遗留帮助函数仅出于兼容性目的保留,并包括占位符实现。建议使用MCP工具(参见上面提供的参考链接)或此处展示的TeamCityAPI来自动化工作流。
# 运行测试
npm test
# 运行带覆盖率的测试
npm run test:coverage
# 检查代码风格
npm run lint
# 格式化代码
npm run format
# 类型检查
npm run typecheck
# 构建生产环境
npm run build
# 分析捆绑包以供Codecov
npm run build:bundle
CI工作流程运行npm run build:bundle并使用codecov/codecov-action插件上传生成的coverage/bundles JSON。
teamcity-mcp/
├── src/ # 源代码
│ ├── tools/ # MCP工具实现
│ ├── utils/ # 实用函数
│ ├── types/ # TypeScript类型定义
│ └── config/ # 配置管理
├── tests/ # 测试文件
├── docs/ # 文档
└── .agent-os/ # 代理操作系统规范
MCP服务器提供了针对TeamCity操作的工具。每个工具对应特定的TeamCity REST API端点:
TriggerBuild - 排队新的构建GetBuildStatus - 检查构建进度FetchBuildLog - 获取构建日志ListBuilds - 按标准搜索构建ListTestFailures - 获取失败的测试GetTestDetails - 详细的测试信息AnalyzeBuildProblems - 识别失败原因create_build_config - 创建新的TeamCity构建配置,全面支持:
clone_build_config - 将现有配置复制到任何项目,保留步骤、触发器和参数。update_build_config - 调整配置的名称、描述、制品规则和暂停状态。manage_build_steps - 通过单一工具界面添加、更新、移除或重新排序构建步骤。manage_build_triggers - 添加或删除构建触发器,支持全部属性。create_vcs_root & add_vcs_root_to_build - 定义VCS根目录并将它们附加到构建配置。另见:docs/TEAMCITY_MCP_TOOLS_GUIDE.md中的扩展工作流和示例,与当前MCP实现相匹配。
我们欢迎贡献!请参阅CONTRIBUTING.md了解详情。
TEAMCITY_TOKEN(参见.env.example);切勿提交真实令牌docs/文件夹为热爱高效CI/CD工作流的开发者打造,充满❤️