三剑合璧:Cline + MCP + Deepseek极速提升开发效率

MCP

在 AI 技术飞速发展的今天,开发者希望更加便捷地构建个性化的智能代理(Intelligence)来辅助开发工作。然而,传统方案往往需要将代码和数据上传至第三方平台运行,对于注重数据隐私的企业并不友好。而 Anthropic 开源的 MCP (模型上下文协议, Model Context Protocol 与 VSCode 插件 Cline 的结合,为开发者提供了一种更简单、安全、可控的方式来创建专属的 AI 助手。本文将详细介绍 MCP 协议如何大幅简化智能体的构建,并剖析 Cline 工作原理,辅以实际案例展示二者协作如何极速提升开发效率

Cline 与 MCP简介

当前模块简单介绍 Cline插件的能力和介绍什么是MCP,如果 你已十分了解,可跳过此小节,阅读后续内容。

为什么选择 Cline + Deepseek

目前常用的AI编码辅助工具cursorwindsurftrae海外版都有安全合规 问题,使用它们会造成隐私内容外泄。而使用Cline,结合火山方舟部署的deepseek模型,则可以完美的规避代码外泄,并拥有优秀的编码能力。

Cline:开源 VS Code AI 助手

Cline 是一个开源的 VS Code 扩展插件,能够为开发者提供强大的 AI 助手机制。它免费且易于使用,支持直接集成多个大型语言模型(LLM)API,包括 OpenAI、Anthropic、Google Gemini、AWS Bedrock 等主流服务(也可以配置兼容 OpenAI 接口的其他模型,如通过 OpenRouter 接入 DeepSeek)。得益于先进模型的代理能力,Cline 不仅能完成代码补全,更可以自主执行各种开发任务,真正成为开发者在编辑器中的智能小助手。

Cline 的主要功能亮点包括:

  • 代码智能代理:借助高级 LLM(Claude 3.5 Sonnet 等),Cline 能够逐步处理复杂的编程任务,而不仅仅是完成一句代码的补全。它可以理解任务意图,规划多步操作来完成高层次目标。

  • 项目文件管理:Cline 可以浏览项目结构,创建、编辑甚至重构多个文件,帮助开发者在大代码库中高效导航和修改代码。

  • 终端 集成:在获得用户许可的前提下,Cline 能执行终端命令并监控输出。这意味着它可以运行构建或启动开发服务器,捕获错误日志并进行相应处理(如根据错误提示自动修复代码问题)。

  • 浏览器自动化:对于Web开发,Cline 可启动一个无头浏览器,执行点击、输入、滚动等操作,甚至截屏或获取控制台日志,用于调试运行时错误或视觉问题。

  • 人类审核环节:出于安全考虑,Cline 在执行敏感操作(如文件改动、执行命令)前会通过GUI询问用户确认。这种“Human-in-the-loop”机制确保开发者对AI行为有监督控制,防止错误或危险操作。

  • 上下文感知:Cline 会分析项目的文件结构、源码的AST,以及进行正则搜索等,以理解现有代码环境。这让它能提供相关且准确的帮助,而不会因为缺少上下文而出错。

  • 主动错误处理:当发现lint或编译错误时,Cline 会主动尝试修复问题(如自动添加缺失的导入、纠正语法错误)。

更重要的是,Cline 具备高度 可扩展性。借助 MCP 协议,开发者可以为 Cline 创建新的工具和能力,甚至构建完全定制的智能代理。Cline 中集成的 LLM 可以通过 MCP 调用外部服务,从而突破自身预置功能的限制。简单配置后,开发者就能在 VSCode 中无缝集成这些 AI 助手,实现个性化的开发流程自动化

模型上下文协议(MCP):让 AI 助手学会“用工具”

MCP(Model Context Protocol)是 Anthropic 提出并开源的一种协议,旨在让 AI 助手具备使用工具和访问资源的能力。简单来说,MCP 为大型语言模型和外部资源之间提供了一个统一的“插头”或接口。以前每当需要让 AI 连接新的数据库、文件系统或服务时,开发者都必须为每种资源写专门的对接代码;有了 MCP,AI 助手可以通过标准协议“即插即用”地访问各种数据源,再也不必困在“信息孤岛”中。

MCP 的架构包含 MCP 主机、MCP 客户端和 MCP 服务器等几部分。MCP 服务器相当于一个轻量的本地或远程服务,开放出特定功能(例如读取文件、查询数据库或调用外部 API)。MCP 客户端则嵌入在 AI 工具中,与服务器建立连接并调用这些功能。以本场景为例,Cline 就充当 MCP 客户端,通过 MCP 可以让 VS Code 中的 AI 助手直接使用服务器提供的各种“技能”。

对于开发者而言,MCP 带来的意义在于:AI 助手不再只是输出代码,而是能够实际“动手”操作开发环境。它可以访问项目文件、执行构建和测试脚本,甚至与项目的数据库或文档系统交互。这使得 AI 助手更像一个真正的开发助手,而不仅是一个代码生成器。例如,当你让 AI 修复一个 bug 时,如果启用了 MCP,它可以自行在项目中搜索相关文件,定位问题所在,进行修改后运行测试来验证结果。这样的工作流程极大地减少了人工来回切换窗口、查找资料的时间,将开发效率提升到一个新的层次。

Cline 与 MCP 在前端开发中的协同作用

将 Cline 和 MCP 结合起来,可以发挥 1+1>2 的效用,为前端开发流程带来质的飞跃。Cline 通过集成 MCP,能够深度访问和操作各种数据源,极大提升开发者工作效率,并拓展了其作为通用 AI Agent 的应用场景。具体来说,在前端开发中,两者协同作用体现在多个方面:

  • 组件开发与设计规范对接:前端开发往往需要遵循既定的设计系统或组件库规范。借助 MCP 工具,Cline 可以直接对接这些规范资源,实现组件的自动化开发。例如,公司基于 Ant Design 定制了一套业务组件规范,那么通过接入前述 AntD 代码生成 MCP 服务,开发者只需描述想要的组件功能,Cline 就能调用该服务生成符合规范的代码。整个过程Cline 会确保组件的命名、样式、交互都与既有规范一致,省去了人工对照设计文档的步骤。
  • 数据联动与实时调试:前端功能往往涉及调用后端接口或处理数据。当 Cline 集成了数据库或API调用类的 MCP 工具后,AI 可以在开发阶段直接获取真实的数据结构或示例返回结果,从而同步完成前后端的契合。举例来说,在开发一个用户列表组件时,Cline 可以通过 MCP 请求后端用户API的 Swagger 文档或调用一次接口,拿到返回的 JSON 格式。这使得它生成的组件代码能够准确映射数据字段,避免了因为误解接口而返工。同时,在代码生成后,Cline 利用无头浏览器加载组件并填入模拟数据进行渲染测试。如果发现接口字段缺失或类型不匹配导致前端报错,AI 会立刻提示可能的数据接口问题或前端解析问题,帮助开发者在早期就修复。这种前后端联动调试过去往往要等到集成阶段才能发现问题,现在在开发写码阶段就可由 AI 协助完成。
  • 开发运维自动化:前端开发除写代码外,还有许多环境配置和优化工作,例如构建打包、性能分析、部署等。Cline + MCP 在这些方面同样协同高效。通过 MCP,Cline 可以调用持续集成(CI)脚本或版本控制系统的API,实现自动提交代码、触发构建和部署。当开发者完成一个前端功能后,可以指示 Cline 打包优化资源文件,甚至生成部署配置。Cline 会在得到授权的前提下运行构建命令、调用分析工具(比如通过 MCP 接入一个性能分析脚本获取打包结果的体积报告),然后将结果反馈给开发者。例如:“构建完成,主包大小 200KB,已符合性能预算”。接着,它还能通过 Git MCP 工具自动提交代码并创建拉取请求(PR),将生成的代码推送到仓库供团队审核。这样一来,开发-调试-构建-提交整个流程都可以在一个工具内完成,减少了人工来回操作的开销。
  • 知识库与文档融合:大型前端项目中,文档和知识库是开发的重要参考。Cline 与 MCP 的结合使得 AI 可以实时查阅项目的知识库,提高开发决策的正确性。例如在一个复杂前端项目里,当开发者询问“我们项目里的 Button 组件有没有二次封装的约定?”时,Cline 可以通过 MCP 访问内部Wiki或文档站,搜索相关内容。如果找到“Button 组件开发规范”,它会将要点提炼后告诉开发者,并在生成新代码时遵循这些约定。又或者开发者遇到疑难问题,Cline 可访问公司内部的问答系统或Slack记录,寻找类似问题的解决方案。这些知识层面的支持对于经验不足的开发者尤为宝贵——相当于AI在背后随时查询“前人怎么做”,从而减少踩坑。对于经验丰富的工程师,这种融合也节省了时间,让他们不必在文档和代码之间频繁切换。

综上,Cline 作为AI编码助手,借助 MCP 工具的强大联通能力,正在重塑前端开发的协作方式。从拿到需求到代码落地、从遵循规范到联调测试,各个环节都可以有人机协同:AI高效完成80%的机械性工作,人类专注于关键的20%创造性决策。这种协同让开发流程更流畅,团队协作更紧密——因为AI产出的内容本身已经考虑了团队约定和上下游接口,减少了后期返工和沟通成本。

flowchart TB
    Developer["开发者"] -->|输入请求| Cline["Cline (AI 代理)"]
    Cline -->|通过 MCP 协议调用 Figma-To-Code、组件库RAG工具、接口定义查询工具等| MCP["MCP (协议)"]
    MCP -->|处理请求并返回结果| Cline
    Cline -->|调用 Deepseek 进行数据处理与优化| Deepseek["Deepseek (数据优化)"]
    Deepseek -->|返回优化结果| Cline
    Cline -->|输出代码或优化建议| Developer

暂时无法在飞书文档外展示此内容

基础工具实现

本章节将介绍如何开发Model Context Protocol (MCP)工具来提升业务开发效率。通过三个实用工具的开发实践,我们将探讨开发MCP的核心思路和最佳实践,帮助读者根据自身业务场景打造专属的效率工具。

提示:文中提到的MCP工具包都可以在bnpm上搜索对应包名查看源代码。

快速开始:创建MCP工具模板

首先,我们使用cli来创建一个MCP模板

npx @modelcontextprotocol/create-server my-first-mcp

? What is the name of your MCP server? my-first-mcp
? What is the description of your server? A Model Context Protocol server
? Would you like to install this server for Claude.app? No
✔ MCP server created successfully!

Next steps:
  cd my-first-mcp
  npm install
  npm run build  # or: npm run watch
  npm link       # optional, to make available globally

➜  cline-test 

MCP工具的核心组成

一个完整的MCP工具包含以下四个核心部分:

  1. 服务创建:初始化MCP服务实例
  2. 工具列表处理器:定义工具的方法、功能描述和参数格式
  3. 工具调用处理器:实现具体的工具调用逻辑
  4. 服务启动:启动并运行MCP服务

下面是一个最小化MCP实现示例:

#!/usr/bin/env node

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

// 创建了一个 MCP 服务器实例
// 定义了服务器名称和版本
// 声明了服务器的功能(capabilities),包括资源、工具和提示
const server = new Server(
  {
    name: "my-first-mcp",
    version: "0.1.0",
  },
  {
    capabilities: {
      resources: {},
      tools: {},
      prompts: {},
    },
  }
);

// 工具列表处理器
// 定义了一个处理工具列表请求的处理器
// 注册了一个名为 create_note 的工具
// 使用 JSON Schema 定义了工具的输入参数格式
server.setRequestHandler(ListToolsRequestSchema, async () => {
  return {
    tools: [
      {
        name: "create_note",
        description: "Create a new note",
        inputSchema: {
          type: "object",
          properties: {
            title: {
              type: "string",
              description: "Title of the note"
            },
            content: {
              type: "string",
              description: "Text content of the note"
            }
          },
          required: ["title", "content"]
        }
      }
    ]
  };
});

// 工具调用处理器
// 处理具体工具调用的逻辑
// 实现了 create_note 工具的功能
// 返回执行结果
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  switch (request.params.name) {
    case "create_note": {
      const title = String(request.params.arguments?.title);
      const content = String(request.params.arguments?.content);
      if (!title || !content) {
        throw new Error("Title and content are required");
      }

      const id = String(Object.keys(notes).length + 1);
      notes[id] = { title, content };

      return {
        content: [{
          type: "text",
          text: `Created note ${id}: ${title}`
        }]
      };
    }

    default:
      throw new Error("Unknown tool");
  }
});

// 服务启动
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
}

main().catch((error) => {
  console.error("Server error:", error);
  process.exit(1);
});

MCP 实战示例:Figma-to-Code、组件库 RAG、接口定义查询

基于上述模板,我们将介绍三个在实际业务中发挥重要作用的MCP工具:

  1. Figma-To-Code工具

在日常前端开发中,UI 设计师常用 Figma 或其他设计工具输出界面稿,但前端工程师需要手动将设计稿转化为 React 代码。此过程往往费时费力,且易出现命名不一致、样式还原度不足等问题。

没有 MCP 之前,市面上也有一些 Figma-to-Code 的工具或插件,但:

  • 需要第三方云端:代码和设计稿可能要传到公共云平台,存在企业隐私或安全风险;
  • 适配麻烦:不少工具针对特定框架或 CSS 方案,难以适配企业内部的技术栈;
  • 缺乏协同:与本地开发环境(VSCode)难以无缝集成,开发者需要在多个平台之间切换。

借助 MCP,我们可以将 Figma-to-Code 功能“本地化”或“私有化”,让 AI 助手(Cline)直接通过 MCP 协议调用 Figma-to-Code 服务,并将生成的代码自动保存到项目中。这样既保证了数据隐私,也提高了设计到代码的衔接效率。

配置和使用

可以使用社区的MCP服务

{
  "mcpServers": {
    "Framelink Figma MCP": {
      "command": "npx",
      "args": ["-y", "figma-developer-mcp", "--figma-api-key=YOUR-KEY", "--stdio"]
    }
  }
}

当状态提示变绿色以后,则可以使用了,我们在figma中,我们复制模块对应链接,就可以在cline中,通过工具获取代码,并做一些工作。

picture.image

我们给他以下任务:

  1. 使用工具获取figma链接对应的代码
  2. 优化classname命名规范
  3. 保存在本地

演示如下:

picture.image

picture.image

  1. 内部私有组件库RAG工具

在企业内部往往会积累大量自研或二次封装的组件库,如基于 Semi Design、AntD 等进行深度改造。这些私有组件库的文档分散在各种 Wiki、Markdown 文件或 Confluence 页面里,开发者查阅起来费力,而且组件版本与文档可能不一致。

没有 MCP 之前,工程师遇到组件用法问题时只能:

  • 自行翻阅:在大量文档页面中搜索,或者问同事获取最佳实践;
  • 手动对比:若组件库升级,历史文档容易过时,不便于更新。

现在有了 MCP 协议,通过将组件文档向量化并提供 RAG(Retrieval-Augmented Generation)检索能力,AI 助手可以一键搜索最相关的组件文档,然后给出准确的用法示例和注意事项。开发者不必在多个系统之间切换,使开发更高效、规范。

快速体验1:组件功能查询

工具需要配置模型参数,OPENAI_API_KEYOPENAI_API_EMBEDDING_MODEL,分别是火山方舟中申请的apikey和豆包的向量模型Doubao-embedding-large,大家需要在火山方舟自己申请使用。

{
  "mcpServers": {
    "component-rag": 
      "command": "npx",
      "args": [
        "@webcast/mcp-component-rag@0.0.0-feature-mcp-20250228092032"
      ]
    }
  }
}

效果展示:

我们让Cline查询Semi如何使用Input限制只能填写数字,并保留3位精度。Cline通过调用工具查询到了使用方法,然后出色的完成任务。

picture.image

快速体验2:Semi-Table实现排序

我们来上一上强度,假如我们有一个已经实现的table,我们想让Cline帮我们实现拖拽排序,通过以下方法提问,提问以后,cline分析用户诉求,调用工具

// user query
@/src/table.tsx 调用工具查询文档,让Table支持拖拽排序

// 分析问题后调用工具
// cline use a tool
{
  "query": "How to implement drag-and-drop row sorting in Semi Design Table component?"
}

picture.image

可以看出,查到相关文档后,Cline帮我们列出了解决思路,根据文档说明,要在 Table 组件中实现拖拽排序功能,我们需要:

  1. 安装必要的依赖包:

    1. @dnd-kit/core - 提供拖拽核心功能
    2. @dnd-kit/sortable - 提供排序相关功能
  2. 使用上下文组件包装 Table:

    1. DndContext 包装最外层
    2. SortableContext 包装 Table 组件
  3. 创建可排序的行组件:

    1. 使用 useSortable hook 创建 SortableRow 组件
    2. 这个组件将处理拖拽的交互逻辑
  4. 配置 Table 组件:

    1. 通过 Table 的 components 属性传入自定义的 SortableRow 组件
    2. 这样可以让每一行都具备拖拽排序的能力
  5. 实现拖拽结束的处理函数:

    1. 实现 handleDragEnd 函数
    2. 当拖拽结束时,更新数据的顺序以反映新的排序结果

然后根据这个解决思路完成了任务,diff如下:

picture.image

实现思路

笔者部门主要使用Semi和内部的一套基于semi分装的标准化组件库,方便演示,笔者前置已经把API文档拆分并向量化,当前MCP实现最小可用版本,定义了一个query_component工具,入参为组件信息的字符串。而实现,则是通过向量检索获取最相似的8条。

核心代码实现如下:

完整代码

// 以下代码片段承接自上文‘最小化MCP实现示例’,只需在此基础上增加工具描述与handler即可。

// 工具列表描述定义
this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "query_component",
      description: "Ask questions about Semi Design components and Standard components. You can inquire about component usage, props, examples, best practices, or component differences.",
      inputSchema: {
        type: "object",
        properties: {
          query: {
            type: "string",
            description: "Ask questions about Semi Design components and Standard components. You can inquire about component usage, props, examples, best practices, or component differences.",
          },
        },
        required: ["query"],
      },
    },
  ],
}));

// 工具实现
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === "query_component") {
  const { query } = request.params.arguments as { query: string };

  try {
    const relevantDocs = await this.vectorStore.similaritySearch(query, 8);
    const context = relevantDocs.map((doc) => doc.pageContent).join("\n\n");

    return {
      content: [
        {
          type: "text",
          text: context,
        },
      ],
    };
  } catch (error) {
  }
});

通过这个组件库 RAG 工具,Cline 能快速检索到企业内部的组件文档,进而提供对应的用法指导和示例代码。

  • 开发者可在 VSCode 内直接获取“即时帮助”,避免手动查找文档的痛苦;
  • 该工具也能随着组件库的迭代实时更新嵌入向量,保证信息时效性;
  • 未来可在此基础上扩展出更多查询维度,比如组件差异对比、组件性能优化建议等。

工具处理思路

讲一下我在做RAG的MCP工具时的一些思路。

picture.image

流程如下:

  • 将 Semi 、Standard-UI 或其他组件库作为数据源,获取他们的 md 格式文档
  • 根据示例和 API 拆分,一般使用 “###” 拆分chunk,然后可以过滤掉过少的篇幅,例如小于 100 个字符,这种一般不会为示例。
  • 然后使用大模型,给每个chunk写一个总结,方便向量化搜索。为什么需要给chunk写总结?看这里
// 随便用个便宜的模型,批量处理,如deepseek、grok
const llm = new ChatOpenAI({
  model: "deepseek-chat"
});

for (const [index, chunk] of formatContent.chunks.entries()) {
   const response = await llm.invoke(`<document>
${文档原文,如Semi.Form}
</document>

这是需要放置在文档中的内容片段:
<chunk>
${chunk: Semi.Form 的某个用法}
</chunk>

请简要描述此内容片段的上下文和所属文档,用于确定该内容片段在整体文档中的位置,以提升对该片段的搜索检索效果,如果当前内容片段作用不明确,请做简单的补充。
仅需提供简洁的上下文描述和补充(如果需要),无需其他内容。
`);

生成产物:

暂时无法在飞书文档外展示此内容

  • 然后对所有chunk进行向量化
import { FaissStore } from "@langchain/community/vectorstores/faiss";
import { OpenAIEmbeddings } from "@langchain/openai";
import * as fs from "fs";
import * as path from "path";
import type { Document } from "@langchain/core/documents";
import { glob } from "glob";
import { dirname } from "path";
import { fileURLToPath } from "url";

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const VECTOR_STORE_PATH = "./vector-store";
const DOCS_PATH = path.resolve(__dirname, "./processed2");

async function loadDocumentsFromJson(): Promise<Document[]> {
  const documents: Document[] = [];

  const jsonFiles = await glob("**/*.mdx", {
    cwd: DOCS_PATH,
    absolute: true,
  });

  for (const filePath of jsonFiles) {
    try {
      const content = await fs.promises.readFile(filePath, "utf-8");
      const relativePath = path.relative(DOCS_PATH, filePath);
      documents.push({
        pageContent: content,
        metadata: {
          source: filePath,
          relativePath,
          fileName: path.basename(filePath),
          type: "mdx",
        },
      });
    } catch (error) {
      console.error(`读取文件 ${filePath} 时出错:`, error);
    }
  }

  return documents;
}

async function getOrCreateVectorStore() {
  const embeddings = new OpenAIEmbeddings();

  if (fs.existsSync(VECTOR_STORE_PATH)) {
    try {
      const loadedStore = await FaissStore.load(VECTOR_STORE_PATH, embeddings);
      console.log("已从本地加载向量存储");
      return loadedStore;
    } catch (error) {
      console.error("加载向量存储失败:", error);
    }
  }

  // 从 JSON 文件加载文档
  const documents = await loadDocumentsFromJson();
  console.log(`已加载 ${documents.length} 个文档片段`);

  // 创建新的向量存储
  const vectorStore = await FaissStore.fromDocuments(documents, embeddings);

  // 确保目录存在
  if (!fs.existsSync(VECTOR_STORE_PATH)) {
    fs.mkdirSync(VECTOR_STORE_PATH, { recursive: true });
  }

  // 保存到本地
  await vectorStore.save(VECTOR_STORE_PATH);
  console.log("已创建新的向量存储");

  return vectorStore;
}

// const retrieve = await getOrCreateVectorStore();

// const result = await retrieve.similaritySearch(
//   "filterList 的插槽中,实现一个二维码展示功能",
//   20
// );
// console.log(result);
  • 最后就可以封装成MCP工具了,进行RAG检索。
  1. 接口定义查询工具

在前后端联调阶段,经常需要查阅接口的入参、出参、字段含义、返回格式等信息。有些团队在 API 管理平台上维护文档,但开发时依然可能需要频繁跳出编辑器去查询。若接口多、版本分支多,还会混淆字段或漏掉必填参数,影响开发进度。

没有 MCP 之前,开发者可能:

  • 反复切换:VSCode → API 文档平台 → VSCode,工作流中断;
  • 手动复制粘贴:记录接口字段、手动写 TypeScript 类型定义,易出错;
  • 多环境不统一:不同分支、测试环境的接口定义经常对不齐。

现在通过 MCP,将接口管理平台(如 Bam、Swagger、OpenAPI 等)封装成一个可被 AI 助手调用的工具,Cline 可以:

  • 自动检索并展示接口定义;
  • 生成 TypeScript 类型或请求示例;
  • 在 VSCode 里实时更新对应的接口定义,减少人为失误。

快速体验

大部分公司内部都有接口定义查询的API,例如swagger。这里笔者使用公司内部的方案来演示,大家也可以按照这个思路,基于公司内部提供的基建来封装使用。

"query_interface": {
  "command": "npx",
  "args": [
    "@webcast/mcp-interface-tool@0.0.0-feature-mcp-20250223154559"
  ],
  "env": {
    "AK_NAME": "xxx", // AK申请,直播平台前端的同学可以找@renxiangyu获取
    "USERNAME": "renxiangyu",  //填你的邮箱前缀
  }
}

picture.image

实现思路

  1. 工具功能描述
  • 根据给定的接口路径(path)、服务(psm)和分支(branch)查询接口信息
  • 生成对应的 TypeScript 接口定义
  1. 实现主要流程
  • 调用 getEndpoints 获取接口数据
  • 找到匹配的接口信息
  • 分别提取请求和响应的 schema
  • 使用 gencode 生成 TypeScript 定义
  • 返回格式化后的接口定义文本

完整代码

// 以下代码片段承接自上文‘最小化MCP实现示例’,只需在此基础上增加工具描述与handler即可。

this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "query_interface",
      description: "Query MCP interface information including request and response parameters",
      inputSchema: {
        type: "object",
        properties: {
          path: {
            type: "string",
            description: "Interface path",
          },
          psm: {
            type: "string",
            description: "PSM of the service",
          },
          branch: {
            type: "string",
            description: "Branch name",
          },
        },
        required: ["path", "psm", "branch"],
      },
    },
  ],
}));

this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === "query_interface") {
    const { path, psm, branch } = request.params.arguments as { 
      path: string;
      psm: string;
      branch: string;
    };

    try {
      // bam openapi
      const endpointsResponse = await this.getEndpoints({
        with_schema: '1',
        psm,
        branch,
        cluster: 'default'
      });
      
      const { version, data } = endpointsResponse.data || {};
      const pathData = data.find((item: any) => item.path === path);

      const resSchemaInfo = pathData?.resp_schema['200'];
      const reqSchemaInfo = pathData?.req_schema;
      
      const result = `
接口请求定义:\n
${Object.values(gencodeRequest?.data?.data?.structs || {}).join('\n')}\n
接口响应定义:\n
${Object.values(gencodeResponse?.data?.data?.structs || {}).join('\n')}\n
      `;

      return {
        content: [
          {
            type: "text",
            text: result,
          },
        ],
      };
    } catch (error) {
      console.error('Error:', error);
      throw new McpError(
        ErrorCode.InternalError,
        `获取接口定义失败: ${error instanceof Error ? error.message : String(error)}`
      );
    }
  } else {
    throw new McpError(
      ErrorCode.MethodNotFound,
      `Unknown tool: ${request.params.name}`
    );
  }
});

通过这个接口定义查询工具,Cline 能快速获取所需接口的请求/响应参数,自动生成 TS 类型定义,避免了手动查阅与重复录入。

  • 对团队来说,这能显著减少前后端在对接阶段的沟通成本;

  • 还可结合 Cline 的其他功能(如自动生成测试、代码合并)一起使用,覆盖更多 DevOps 环节;

  • 若后续接口变更,也可随时调用同一工具获取最新定义并一键更新。

重头戏:Cline Agent 结合MCP完成复杂任务

简介:Cline中的ReAct

这里的react不是前端组件库ReAct(Reasoning and Acting,推理与行动)是Google Research和Princeton University团队在2022年提出的进一步发展,旨在将推理与行动结合 (ReAct: Synergizing Reasoning and Acting in Language Models)。ReAct的核心思想是通过交错的推理-行动-观察循环,让模型不仅能生成推理轨迹,还能与外部环境交互,例如通过API调用获取实时信息。这与COT的纯推理过程形成对比,ReAct通过行动步骤(如搜索知识库或执行任务)克服了COT的局限性,例如事实幻觉和错误传播。

ReAct在AI场景至关重要,利用这个功能,Cline可以分析用户的需求,思考每一步需要做的事,思考任务的完成度,一步一步的完成用户提出的需求。

基于内部组件库实现复杂功能

描述需求

使用 FilterLIst 组件实现一个列表,列表中展示的字段对其接口定义。
列表右边操作区,有 预约 和 取消预约两个操作,需要用 弹窗组件。

我们来编写一个简单的提示词,提示词功能如下:

  1. 实现一个列表:使用 FilterList 组件展示数据,右侧有“预约”和“取消预约”按钮。

  2. 接口请求:通过 fetch 请求获取列表数据和进行预约操作。

  3. 弹窗和表单:使用弹窗和表单来处理“预约”和“取消预约”操作。

  4. 组件结构:遵循指定的文件结构和 TypeScript 编码规范。

  5. 实现位置:功能需要在 @/apps/ark/recruit/src/pages/test2/ 目录下实现。

Prompt如下

帮我逐步实现以下功能

## 需求如下:
使用 FilterLIst 组件实现一个列表,列表中展示的字段对其接口定义,
接口信息如下:
/ark/api/uanchor/union_recruit/diff_industry/list_diff_industry_clue
psm: webcast.ark_uanchor.api
branch: feat/diff_industry_cooperation

列表右边操作区,有 预约 和取消预约两个操作 ,接口定义如下
/ark/api/uanchor/union_recruit/diff_industry/reserve_for_diff_industry_clue
psm: webcast.ark_uanchor.api
branch: feat/diff_industry_cooperation

需要用 弹窗组件 + form组件实现

## 组件实现规范
src/
|-- components/
|   |-- Button/
|   |   |-- Button.tsx            # 组件实现
|   |   |-- Button.module.css    # 组件样式
|   |   |-- Button.test.js       # 组件测试
|   |   |-- index.tsx             # 组件导出
|
|-- hooks/
|   |-- useAuth.ts               # 自定义 hooks 示例
|   |-- useFetch.ts              # 另一个自定义 hook
|
|-- services/
|   |-- api.ts                   # API 请求逻辑
|
|-- utils/
|   |-- formatDate.ts            # 工具函数示例
|
|-- contexts/
|   |-- AuthContext.ts           # 状态管理和 Context 示例
|
|-- assets/
|   |-- images/                  # 组件/应用所需的图片
|   |-- icons/                   # 组件/应用所需的图标
|
|-- App.tsx                       # 主应用组件
|-- index.tsx                     # 入口文件

    
## 注意点
- 使用 ts 实现代码
- 假设所有依赖库都已安装完成,无需额外安装
- 使用原生 fetch实现请求
- 代码编写严格遵守组件实现规范
- 所有组件使用工具查询用法,查询时,优先查询标准化组件库使用

在 @/apps/ark/recruit/src/pages/test2/  下实现所有功能

效果展示

  1. 第一步:查询组件使用

picture.image

  1. 第二步:查询接口定义

picture.image

  1. 第三步:编写代码

picture.image

4.代码完成,手动验收调试

加餐

MCP调试技巧

MCP本身提供了完备的调试方法,在开发过程中,我们可以使用以下步骤开启GUI进行调试:

npm run watch

// 重新开个terminal
npm run inspector

启动完成以后,我们打开localhost:5173,然后按照如下方法就可以了

  1. 在左侧配置工具需要的环境变量,例如上文开发的RAG工具,则需要OPEN_API_KEY
  2. 点击connect,等待状态变绿
  3. 右侧点击Tools,获得工具列表,点击工具query_component
  4. 在右侧输入工具相关参数,获得结果

picture.image

总结与展望

展望未来,MCP 有望在自动化程度生态系统扩展方面进一步释放潜力,为 AI 赋能开发提供更强大的支持。首先,在自动化层面,随着 MCP 的发展,AI 助手将能执行更复杂的多步骤任务并进行自主决策。例如,未来的 Cline 助手可能根据开发者意图自动选择并调用适当的 MCP 工具序列来完成任务,而无需每一步都由用户明确指示。当前版本中通过自然语言生成工具的功能已初步展示了这种自动化趋势;随着模型推理能力和 MCP 集成深度的提升,AI 完全可以承担起更多开发流程的自动处理工作,为开发者提供更智能的代理式服务

其次,在生态系统扩展方面,MCP 作为开放标准正在被越来越多的第三方接受和支持,这将进一步丰富 AI 助手可以利用的资源种类。事实上,MCP 发布时间不久便吸引了众多平台加入其生态,目前已有多种官方和社区驱动的 MCP 服务器可用,而一些知名企业(如 Block、Apollo)和开发工具厂商(如 Zed、Replit)也率先采纳了该协议。可以预见,随着社区贡献的增加,将有更多针对不同领域的新工具、新服务通过 MCP 接入AI助手,使其能力边界不断扩大。正如开发者在实践中所感受到的,MCP 生态的快速扩张正让 AI 助手在越来越多样的场景下发挥作用。Anthropic 的 Claude、OpenAI 的 ChatGPT 等模型如果广泛支持 MCP,将构建起跨工具、跨平台的统一智能协作网络,为开发、运营、数据分析等各方面带来革新。

总而言之,MCP 为 AI 助手插上了连接现实数据和工具的“翅膀”,大幅提升了 AI 赋能开发的价值。借助 MCP,AI 助手可以从封闭的文本对话工具进化为强大的智能开发代理,灵活调用各种资源完成任务。Cline 与 DeepSeek V3 等模型在 MCP 加持下的“三剑合璧”展现出惊人的生产力提升和实用性提升。可以预期,随着 MCP 技术的不断成熟和普及,开发者将享受到更加高效、智能且安全的开发体验,而 AI 助手也将在更多领域中发挥日益重要的作用。MCP 所打造的开放生态与自动化能力,正是未来 AI 赋能软件开发革命的关键支撑之一。

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论