返回市场
无插件-MCP

无插件-MCP

作者:situ200131 星标更新:2025-07-29

项目介绍

unplugin-mcp

GitHub 仓库 npm 版本 npm 下载量 npm 许可证

[!IMPORTANT] 这是一个正在进行中的项目。尚未准备好用于生产环境。如果您感兴趣并愿意帮助,请随时打开一个issue或PR。

统一的MCP(模型上下文协议)插件,创建和管理MCP服务器,并提供MCP工具,使AI能够更多地了解您的代码库、构建工具,甚至控制构建过程。它与unplugin支持的多种JavaScript构建工具兼容,包括Rollup、Vite、Webpack等。

以下是此插件的愿景,提供统一的MCP服务器和MCP工具给MCP客户端。

flowchart LR
    subgraph "构建工具"
        Rollup["Rollup"]
        Vite["Vite"]
        ESBuild["ESBuild"]
        Webpack["Webpack"]
        Rspack["Rspack"]
        Rolldown["Rolldown"]
    end

    subgraph "unplugin-mcp (此插件)"
        unplugin["unplugin"]
        McpTool["UnpluginMcpTool"]
        McpServer["MCP Server"]
        HTTPServer["HTTP Server"]
    end

    subgraph "MCP 客户端"
        Cursor["Cursor"]
        VSCode["VSCode"]
        More["More"]
    end

    Rollup & Webpack & Vite & ESBuild & Rspack & Rolldown --> unplugin
    unplugin --> McpTool
    McpTool --> McpServer
    McpServer --> HTTPServer
    HTTPServer --> Cursor & VSCode & More

功能

  • 🚀 跨平台MCP集成:在多个构建工具之间无缝创建和管理MCP服务器。
  • 🧩 双向AI集成:不仅向AI助手提供关于您代码库的上下文信息,还允许AI主动修改和控制您的构建过程。
  • 🧰 丰富的内置工具:一组内置工具,用于分析模块依赖关系、检查构建配置、调试错误消息等。
  • 🛠️ 可扩展工具框架:通过简单的UnpluginMcpTool接口创建自定义MCP工具,以暴露特定于项目的相关信息或功能。
  • 🔍 构建过程集成:在插件链和构建工具如Rollup的钩子中无缝集成。
  • 🔄 持久化服务器:即使在监视模式下构建完成后仍继续运行,实现持续的AI交互。
  • 🌐 标准传输层:使用HTTP和服务器发送事件(SSE)进行广泛的兼容性,适用于实现MCP协议的AI助手。

安装

# 安装插件
pnpm add -D unplugin-mcp

# 或安装特定捆绑器的插件,它共享相同的代码库,但仅导出特定捆绑器的插件
pnpm add -D rollup-plugin-mcp

使用

构建工具集成

这是一个如何使用插件与Rollup的示例。当您在监视模式下运行rollup时(rollup -w),服务器将自动启动。

// rollup.config.js
import { defineConfig } from 'rollup';
import { rollupPlugin as mcp } from 'unplugin-mcp';

// 导入一些内置工具
import { ModuleTool, BuildConfigTool, BuildErrorTool } from 'unplugin-mcp/tools';

export default defineConfig({
  plugins: [
    // 其他插件...
    mcp({
      provideUnpluginMcpTools: () => [
        new ModuleTool(),
        new BuildConfigTool(),
        new BuildErrorTool()
      ]
    }),
    // 其他插件...
  ]
});

🚧 其他捆绑器的使用方法正在开发中。

在Cursor中的使用

只需在Cursor设置中添加一个MCP服务器。例如,在~/.config/cursor/mcp.json中:

{
  "mcpServers": {
    "rollup": {
      "url": "http://localhost:14514/mcp/sse"
    }
  }
}

选项

查看McpPluginOptions类型文件中获取所有可用选项。

内置工具兼容性

注意:目前内置工具的实现相对简单,可能无法覆盖所有边缘情况。

工具描述RollupWebpack
ModuleTool分析模块依赖关系和导入
BuildConfigTool检查构建配置
BuildErrorTool调试构建错误
BundleSizeTool检查包及其模块的大小
  • ✅ = 支持
  • ❌ = 尚未实现

自定义工具

您可以使用实现UnpluginMcpTool接口的自定义工具来扩展插件:

import { InputOptions } from "rollup";
import { UnpluginMcpTool, UnpluginMcpToolSetupOptions } from "unplugin-mcp";
import DeferredCtor, { Deferred } from 'promise-deferred';
import { UnpluginOptions } from "unplugin";

export class BuildConfigTool implements UnpluginMcpTool {
  private buildConfig: Deferred<InputOptions>;

  affectsBuildProcess: boolean = false;

  constructor() {
    this.buildConfig = new DeferredCtor<InputOptions>();
  }

  setupMcpServer(mcpServer: any, options?: any) {
    mcpServer.tool(
      `get-build-config`,
      "获取构建配置",
      {},
      async () => {
        const cfg = await this.buildConfig.promise;

        return {
          content: [
            {
              type: 'text',
              text: `构建配置: ${JSON.stringify(cfg)}`
            }
          ]
        };
      }
    );

    return mcpServer;
  }

  registerPlugins(options?: UnpluginMcpToolSetupOptions): UnpluginOptions {
    let self = this;

    return {
      name: 'build-config-tool',

      rollup: {
        options(config) {
          self.buildConfig.resolve(config);
        }
      }
    }
  }
}

然后在插件选项中注册它,例如,在Rollup配置中:

// rollup.config.js
// ... 
plugins: [
  mcp({
    provideUnpluginMcpTools: () => [
      new BuildConfigTool()
    ]
  })
]
// ...

示例

查看示例目录中的工作示例,包括:

  • simple-hello:一个基本示例,演示MCP与Rollup的集成

工作原理

它初始化并设置这些组件:

  1. 创建并设置一个单一实例的MCP服务器。
  2. 向MCP服务器注册一些UnpluginMcpTool实例。
  3. 创建一个HTTP服务器,并为MCP服务器设置HTTP路由。
  4. 启动HTTP服务器,监听指定的端口和主机。
  5. 注册由UnpluginMcpTool实例创建的钩子到构建工具。

完成这些步骤后,插件可以:

  1. 处理来自MCP客户端的传入请求并响应它们。
  2. 对构建过程中由构建工具触发的钩子作出反应。
  3. 向MCP客户端提供构建上下文信息。

许可证

MIT许可证。版权所有 (c) 2025 situ2001。