[!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
UnpluginMcpTool接口创建自定义MCP工具,以暴露特定于项目的相关信息或功能。# 安装插件
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设置中添加一个MCP服务器。例如,在~/.config/cursor/mcp.json中:
{
"mcpServers": {
"rollup": {
"url": "http://localhost:14514/mcp/sse"
}
}
}
查看McpPluginOptions在类型文件中获取所有可用选项。
注意:目前内置工具的实现相对简单,可能无法覆盖所有边缘情况。
| 工具 | 描述 | Rollup | Webpack |
|---|---|---|---|
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()
]
})
]
// ...
查看示例目录中的工作示例,包括:
它初始化并设置这些组件:
UnpluginMcpTool实例。UnpluginMcpTool实例创建的钩子到构建工具。完成这些步骤后,插件可以:
MIT许可证。版权所有 (c) 2025 situ2001。