AI完成claude mcp落地,让小AI给我打工

41 阅读5分钟

从零开始 Claude MCP 服务:小白也能实现的团队部署效率提升。

本文记录了为 Claude Code 开发 MCP (Model Context Protocol) 服务的过程,通过自定义工具实现项目部署信息的一键查询,大幅提升开发效率。

背景

以下信息是AI根据总结生成,AI可以帮我们做很多事情,尤其有了调用mcp和使用tools之后。可以自己执行动作,比如修改代码,推送分支,那么一直让我不得不浪费时间去做的一件事是,打开公司pmo的项目管理平台,然后找到自己的分支点击去部署跳转到meta平台选择分支和项目进行测试环境的功能部署,链路非常长,一个打开功能需要很多步。程序员的时间也是时间。

所以我有了想法就是实现一个mcp在我claudecode使用,核心的方法就是完成一个mcp服务,接受一个pmo号或者git分支号,调用服务直接返回拼接好的链接。和信息打开即可。

我有的资源:claudecode ,network查到的一个根据pmo获取信息的接口,meta的标准化链接。claude code标准mcp的接入方式。

通过这些的组合让ai帮我完成自己测试就好了。最终的使用方式也就是提供一个包直接运行.sh就完成全部注册了。 有mcp管理平台完全可以参考一下。还是那句话,AI帮我提高生产力,我们负责管理他们不断发现身边问题不断解决,才是我们的真正工作。各位加油。

image.png

在日常开发中,我们经常需要查看项目的部署信息或触发部署。让我们先看看原来的操作流程。

原来的操作链路

场景:需要查看或触发某个项目的部署

1. 打开浏览器,输入 PMO 平台地址
2. 登录(如果未登录)
3. 在搜索框输入项目编号(如 PROJ-12345)
4. 从搜索结果中找到对应项目
5. 点击进入项目详情
6. 点击「发布 Beta」按钮
7. 选择目标环境(测试/预发等)
8. 选择要发布的分支
9. 点击「确认发布」

整个流程下来,至少需要 30-60 秒,而且需要多次点击和记忆环境 ID、分支名等信息。

新的操作方式

安装 MCP 服务后:

用户: 查看 PROJ-12345 的部署信息

Claude: [自动调用工具,2秒内返回]
      项目编号: PROJ-12345
      环境 ID: 10058
      应用: 业务系统 (app-code)
      分支: feature-new-fix
      部署链接: https://deploy.internal.com/...

只需要一句话,5 秒内获取到所有信息,点击链接即可直接进入部署页面。

效率对比

指标原方式新方式提升
耗时30-60 秒5 秒6-12 倍
操作步骤9 步1 步9 倍
上下文切换需要不需要
记忆负担需要记住环境 ID自动显示

什么是 MCP

MCP (Model Context Protocol) 是 Claude 推出的开放协议,允许 AI 助手连接外部数据源和工具。通过 MCP,我们可以:

  • 让 AI 调用内部 API 获取数据
  • 自定义工具扩展 AI 能力
  • 实现 AI 与企业系统的集成

项目架构

┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│   Claude Code   │─────│  MCP Server     │─────│   PMO API       │
│                 │      │  (stdio)        │      │                 │
└─────────────────┘      └─────────────────┘      └─────────────────┘
        │                        │
        │                        │
    用户对话              解析输入/调用API

核心实现

1. 项目初始化

mkdir pmo-mcp-server
cd pmo-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk

2. MCP 服务基础结构

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";

// 创建服务器实例
const server = new Server({
  name: "pmo-deploy-server",
  version: "1.0.0",
}, {
  capabilities: { tools: {} }
});

// 启动服务
const transport = new StdioServerTransport();
await server.connect(transport);

3. 定义工具

MCP 通过 "工具" (Tools) 暴露功能给 AI:

server.setRequestHandler(ListToolsRequestSchema, async () => {
  return {
    tools: [{
      name: "get_deploy_info",
      description: "获取项目部署信息并生成部署页面链接",
      inputSchema: {
        type: "object",
        properties: {
          input: {
            type: "string",
            description: "项目编号或分支名"
          }
        },
        required: ["input"]
      }
    }]
  };
});

4. 智能输入解析

用户可能输入项目编号,也可能是分支名,需要智能识别:

function parseInput(input) {
  const trimmed = input.trim();
  // 匹配项目编号格式,如 PROJ-12345
  const match = trimmed.match(/(PROJ|PRJ)-\d+/i);
  if (match) {
    const projectId = match[0].toUpperCase();
    // 判断是纯项目编号还是从分支名提取的
    const type = trimmed === projectId ? "direct" : "from_branch";
    return { type, projectId, originalInput: trimmed };
  }
  return { type: "unknown" };
}

5. 调用内部 API

async function fetchDeployInfo(projectId) {
  const url = `https://internal-api.com/deploy?projectId=${projectId}`;

  return new Promise((resolve, reject) => {
    https.get(url, (res) => {
      let data = "";
      res.on("data", (chunk) => data += chunk);
      res.on("end", () => {
        const result = JSON.parse(data);
        resolve({
          projectId: result.data.id,
          envId: result.data.envId,
          applications: result.data.apps.map(app => ({
            code: app.code,
            name: app.name,
            branch: app.branch,
            deployUrl: generateDeployUrl(result.data.envId, app.code, app.branch)
          }))
        });
      });
    }).on("error", reject);
  });
}

6. 处理工具调用

server.setRequestHandler(CallToolRequestSchema, async (request) => {
  const { name, arguments: args } = request.params;

  if (name === "get_deploy_info") {
    const parsed = parseInput(args.input);

    if (parsed.type === "unknown") {
      return {
        content: [{
          type: "text",
          text: "无法识别输入,请提供有效的项目编号或分支名"
        }]
      };
    }

    const info = await fetchDeployInfo(parsed.projectId);

    // 格式化输出
    let output = `项目部署信息\n`;
    output += `项目编号: ${info.projectId}\n`;
    output += `环境 ID: ${info.envId}\n\n`;

    for (const app of info.applications) {
      output += `应用: ${app.name} (${app.code})\n`;
      output += `分支: ${app.branch}\n`;
      output += `部署链接: ${app.deployUrl}\n\n`;
    }

    return { content: [{ type: "text", text: output }] };
  }
});

安装配置

安装脚本

为了让团队成员快速安装,编写了安装脚本:

#!/bin/bash
# 安装依赖
npm install

# 添加到 Claude(用户级别)
INDEX_JS="$(pwd)/index.js"
claude mcp add --scope user deploy-info -- node "$INDEX_JS"

# 验证安装
claude mcp list

配置文件

安装后会在 ~/.claude.json 的根目录添加配置:

{
  "mcpServers": {
    "deploy-info": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/pmo-mcp-server/index.js"]
    }
  }
}

使用效果

安装完成后,在 Claude 中自然对话即可:

用户: 查看 PROJ-12345 的部署信息

Claude: [调用 get_deploy_info 工具]
      项目部署信息
      项目编号: PROJ-12345
      环境 ID: 10058
      应用: 业务系统 (app-code)
      分支: feature-xxx-PROJ-12345
      部署链接: https://deploy.internal.com/...
用户: feature-new-fix-proj 这个分支部署在哪里?

Claude: [自动解析分支名中的项目编号,调用工具]
      已从分支名解析出项目编号: PROJ-12345
      [显示部署信息...]

技术要点

1. stdio 通信

MCP 使用标准输入输出进行通信,这是 Claude 与扩展服务通信的标准方式:

// 错误日志输出到 stderr(不影响通信)
console.error("Server starting...");

// 正常数据通过 MCP 协议传输
await server.connect(new StdioServerTransport());

2. 正则匹配技巧

使用精确的正则避免误匹配:

// ❌ 太宽泛,可能匹配错误
/([A-Z]+)-\d+/

// ✅ 精确匹配特定前缀
/(PROJ|PRJ|TASK)-\d+/

3. 错误处理

try {
  const info = await fetchDeployInfo(projectId);
  return { content: [{ type: "text", text: formatOutput(info) }] };
} catch (error) {
  return {
    content: [{
      type: "text",
      text: `获取部署信息失败: ${error.message}`
    }]
  };
}

分发方案

本地分发

# 打包(排除 node_modules)
tar --exclude=node_modules -czf deploy-mcp.tar.gz .

# 其他成员解压后安装
tar -xzf deploy-mcp.tar.gz
cd pmo-mcp-server
bash install.sh

远程一键安装

curl -sSL https://raw.githubusercontent.com/xxx/repo/main/install.sh | bash

收益与总结

通过开发这个 MCP 服务:

  1. 效率提升:查询部署信息从 30 秒缩短到 5 秒
  2. 体验优化:在对话中自然完成操作,无需切换应用
  3. 团队赋能:一次开发,全团队受益

关键收获

  • MCP 协议简洁高效,易于集成
  • stdio 通信方式让扩展更灵活
  • AI + 企业系统集成是未来趋势

展望

后续可以扩展更多功能:

  • 一键部署触发
  • 部署状态查询
  • 多环境管理
  • 版本回滚操作

相关资源

本文介绍了如何通过 MCP 协议扩展 Claude AI 的能力,实现与企业内部系统的集成。希望能给有类似需求的团队提供参考。