把 MCP Server 打包进 VS Code extension
大家好!我是韩老师。
本文是 MCP 系列文章的第六篇,之前的五篇是:
- Code Runner MCP Server,来了!
- 从零开始开发一个 MCP Server!
- 一键安装 MCP Server!
- 再见,SSE!你好,Streamable HTTP!
- 容器化 MCP Server!但是。。
写在最前:如果你正好在用 Node.js 开发一个 MCP Server,那么,这篇文章将对你有用!
WHY
首先,你肯定要问,把 MCP Server 打包进 VS Code extension,有什么好处?
好处,有三:
- 在 VS Code 中,用户不需要任何配置,就可以直接安装 MCP Server。
- 用户不需要安装任何额外的工具来运行 MCP Server。甚至于,用户不需要安装 Node.js/npx。
- 整个 MCP Server + VS Code extension 的体积很小。以我的 Code Runner MCP Server 的 VS Code extension 为例,在没有使用 webpack 的情况下,整个体积都只有 4 MB。

HOW
你肯定想要知道,如何做到?
其实,很简单,三步就能搞定!
1. 在你的 MCP Server 中,export 一个启动 Streamable Http MCP Server 的函数:
export async function startMcpServer(transport: Transport, options?: HttpServerOptions): Promise<void | McpServerEndpoint> {
if (transport === 'stdio') {
return startStdioMcpServer();
} else if (transport === 'http') {
return startStreamableHttpMcpServer(options?.port);
} else {
throw new Error('Invalid transport. Must be either "stdio" or "http"');
}
}
2. 在 VS Code extension 中,引用你的 MCP Server 的 npm,然后启动 Streamable Http MCP Server,然后得到一个 localhost 的 MCP URL:
import { startMcpServer } from "mcp-server-code-runner";
async function startHttpMcpServer(): Promise<string | undefined> {
const result = await startMcpServer("http", { port: 3098 });
return result ? result.url : undefined;
}
3. 把这个 localhost 的 MCP URL,配置到 VS Code 的 settings.json 中:
async function updateMcpUrlToVsCodeSettings(mcpUrl: string) {
const configuration = vscode.workspace.getConfiguration();
const mcpServers = configuration.get<any>("mcp.servers", {});
mcpServers["code-runner-streamable-http-mcp-server"] = {
type: "http",
url: mcpUrl,
};
await configuration.update("mcp.servers", mcpServers, vscode.ConfigurationTarget.Global);
}
好了,大功告成!
原理其实也很简单:因为 VS Code extension,就是一个 Node.js 的程序。MCP Server 作为 VS Code extension 的一部分,一起运行在了 Extension Host 这个进程中。所以,不需要用户的机器上额外安装 Node.js/npx 了!
完整代码,完全开源,欢迎大家围观!
MCP Server:
https://github.com/formulahendry/mcp-server-code-runner
VS Code extension:
https://github.com/formulahendry/vscode-code-runner-mcp-server
大家也可以也可以在 VS Code Marketplace 搜索 Code Runner MCP Server 来直接试用:

注意需要使用最新的 VS Code Insider,版本号 >= 1.100
https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner-mcp-server
把 MCP Server 打包进 VS Code extension的更多相关文章
- MS SQL错误:SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the Windows event logs for information about possible related problems
早晨宁波那边的IT人员打电话告知数据库无法访问了.其实我在早晨也发现Ignite监控下的宁波的数据库服务器出现了异常,但是当时正在检查查看其它服务器发过来的各类邮件,还没等到我去确认具体情 ...
- 使用Maven Assembly plugin将依赖打包进jar
一个Eclipse的工程,在pom中配置了若干依赖,需要将pom中所有的依赖全部打包进一个jar包中,可以选择的方案有maven-assembly-plugin和fatjar.以前采用fatjar进行 ...
- Java Server returned HTTP response code: 401
今天写一个小功能需要通过http请求获取一些返回数据,但是在登陆时是需要进行用户名和密码的校验的.写好之后请求,返回异常Java Server returned HTTP response code: ...
- 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)
原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版) 很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个e ...
- java.io.IOException: Server returned HTTP response code: 411 for URL
今日调用一post方式提交的http接口,此接口在测试环境ip调用时无问题,但在生产环境通过域名调用时一直报如下错误: java.io.IOException: Server returned HTT ...
- 元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”;Syntax error on token "Invalid Character";Server returned HTTP response code: 503 for URL;
元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”:复制的代码有中文空格 Syntax error on token "Invalid Character&qu ...
- 通过设置代理,解决服务器禁止抓取,报“java.io.IOException: Server returned HTTP response code: 403 for URL”错误的方法
java.io.IOException: Server returned HTTP response code: 403 for URL: http:// 这个是什么异常呢? 当你使用java程序检索 ...
- Xcode5.1.1支持低版本和image not found和Couldn't register XXXX with the bootstrap server. Error: unknown error code.
一:问题 targets中证书的设置 1.项目支持多设备(Xcode5.1.1支持低版本) 2.真机测试要确保Code Siging 设置没问题 支持的最低版本 二 :问题:image not f ...
- Maven引入本地Jar包并打包进War包中
1.概述 在平时的开发中,有一些Jar包因为种种原因,在Maven的中央仓库中没有收录,所以就要使用本地引入的方式加入进来. 2. 拷贝至项目根目录 项目根目录即pom.xml文件所在的同级目录,可以 ...
- 记录解决java.io.IOException: Server returned HTTP response code: 500 for URL:xxxxxxxx
踩坑经历 因为项目需要去对接别的接口,使用URLConnection POST请求https接口,发送json数组时遇到java.io.IOException: Server returned HTT ...
随机推荐
- @所有Mac用户 刺客信条系列登陆Mac平台!
[历史性的跨越] 在无数Mac游戏爱好者的热切期盼中,终于将风靡全球的3A级巨作--刺客信条系列,成功移植至MacOS系统!这意味着,无论是穿梭于中世纪欧洲的隐秘巷弄,还是翱翔于维多利亚时代的伦敦天际 ...
- CTFHub-RCE漏洞wp
引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文就是远程代码执行漏洞.顾名思义,这是一种安全漏洞,允许攻击者在受害者的系统上远程执 ...
- linux mint安装eclipse
安装eclipse之前需要先安装配置jdk,参考上面, 一.Eclipse的下载与安装 1.首先,在Eclipse的官网中下载最新版的Luna SR2http://www.eclipse.org/do ...
- Luogu P5005 中国象棋 - 摆上马 / Luogu P8756 国际象棋 题解 [ 蓝 ] [ 状压 dp ] [ 位运算 ]
国际象棋:模板棋盘状压. 摆上马:需要点思维的棋盘状压,相比上一道题加了"蹩马脚"的设定. Easy_version :国际象棋 概述一下此类棋盘问题的思路: 用二进制数表示出棋盘 ...
- vscode开发小程序2
开发tab: 1.下载阿里图标到新建文件夹icons里面 2.在app.json里面的"windows"同层下设置tab: 默认样式的设置:小程序中不识别通配符*! 1. 2.查看 ...
- Linux - 安装JDK(.tar.gz)
1.上传 jdk-8u351-linux-x64.tar.gz 到 /opt/module 目录下并解压 tar -zxvf jdk-8u351-linux-x64.tar.gz -C /opt/mo ...
- 【BUUCTF】Easy Java
[BUUCTF]Easy Java 题目来源 收录于:BUUCTF RoarCTF 2019 题目描述 经典登录框 不过SQL注入.目录扫描都没有发现 题解 点击页面的 help 跳转到/Downlo ...
- 【攻防世界】ez_curl
ez_curl 题目来源 攻防世界 NO.GFSJ1188 题解 是一个PHP的代码审计 同时还提供了一个附件app.js,打开后内容如下 app.js中: req.query.admin.inclu ...
- ABC391D题解
前置知识: map priority_queue 思路 考虑预处理每一个图块在第几秒后会被删除. 如何预处理?我使用了一种非常暴力的做法,首先处理的过程肯定是从下往上的,于是每一个图块能被删除一定是它 ...
- 通过fetch_mcp,让Cline能够获取网页内容。
fetch_mcp介绍 GitHub地址:https://github.com/zcaceres/fetch-mcp 此MCP服务器提供了以多种格式(包括HTML.JSON.纯文本和Markdown) ...