关于 MCP TypeScript Server Starter
面向 TypeScript MCP 服务开发者的起始项目,提供 echo 示例,并涵盖本地测试与远程部署。它支持 STDIO 和 SSE 模式,还内置开发检查器。
主要功能
- 01Echo 工具、资源和提示词示例
- 02支持 STDIO 和 SSE 通信
- 03支持热重载的开发服务器
- 04内置测试检查器
- 05提供低层 API 实现
适用场景
- 01用 TypeScript 搭建 MCP 服务原型
- 02在本地测试工具、资源和提示词
- 03部署可远程访问的 SSE 服务
MCP 相关
这是一个 MCP 服务起始项目,向 MCP 客户端提供 echo 工具、资源和提示词示例,并支持 STDIO 与 SSE 连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP TypeScript 服务入门项目
一个用于使用 TypeScript 构建 Model Context Protocol(MCP)服务的入门项目。此项目提供了一个简单的回显服务实现,用于演示 MCP 的核心功能。
快速入门清单
📥 安装
- 克隆仓库:
git clone https://github.com/ralf-boltshauser/mcp-typescript-server-starter.git cd mcp-typescript-server-starter - 安装依赖项:
pnpm install
🛠️ 本地开发
- 启动开发服务:
pnpm dev - 访问检查器:http://localhost:6274
- 测试你的 MCP 服务:
- 在检查器中点击“连接”
- 前往“工具”部分
- 点击“列出工具”
- 选择“echo”工具
- 输入测试消息
- 点击“提交”
- 打开
src/index.ts,添加你自己的:- 工具(AI 可以调用的函数)
- 资源(AI 可以访问的数据)
- 提示词(用于 AI 交互的模板)
- 更新
src/index.html,填写服务的描述和文档
🚀 部署(Coolify 示例)
- 在 Coolify 上进行设置:
- 连接你的仓库
- 在高级设置中:
- 禁用 GZIP 压缩(SSE 所必需)
- 配置域名:
- 添加你的域名:
https://subdomain.yourdomain.com:3001:3001至关重要,它会告知 traefik 绑定到你的内部端口
- 添加你的域名:
- 验证部署:
- 访问
subdomain.yourdomain.com查看你的 index.html - 在
https://subdomain.yourdomain.com/sse测试 SSE 连接
- 访问
🔌 连接到已部署的服务
使用此命令连接到你的服务:
npx -y mcp-remote https://subdomain.yourdomain.com/sse
Cursor/Claude Desktop 的示例配置:
{
"mcpServers": {
"your-server-name": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://subdomain.yourdomain.com/sse"]
},
}
}
功能
- 简单的回显服务实现
- 支持工具、资源和提示词
- 支持 TypeScript
- 支持热重载的开发服务
- 内置检查器,可用于测试和调试
- 支持 STDIO 和 SSE 两种通信模式
前置条件
- Node.js(v16 或更高版本)
- pnpm(推荐)或 npm
使用模式
此服务支持两种主要通信模式:
-
STDIO 模式
- 非常适合本地开发和基础测试
- 直接进程通信
- 默认用于大多数 MCP 客户端
- 非常适合在本地运行服务
- 设置和使用简单
-
SSE 模式
- 更适合生产环境部署
- HTTP/SSE 通信
- 可使用 npm 包转换为 STDIO(后文会介绍)
- 支持远程访问你的服务
- 可扩展性更强,更适合生产环境
本地开发请选择 STDIO;需要部署服务以便远程访问时,请选择 SSE。
STDIO 模式(直接进程通信)
此模式非常适合与 Cursor 或 Claude Desktop 等工具直接集成。
-
配置服务
- 在
src/index.ts中:- 注释掉(底部的)Express/SSE 代码
- 取消注释 STDIO 代码(上方部分)
- 在
-
构建并运行
pnpm build node dist/index.cjs
或
pnpm dev # starts the server and the inspector
-
与 Claude Desktop 集成
pnpm add-claude⚠️ 注意:这会覆盖你现有的 Claude Desktop 配置。
这是配置 Claude Desktop 的标准方式。生成的 json 也可用于 Cursor 等工具!
-
手动集成 对于其他工具,请使用以下命令:
node /path/to/your/project/dist/index.cjs或
pnpm cmd # this gives you the node .../dist/index.cjs command directly with pwd
SSE 模式(HTTP/SSE 通信)
此模式非常适合基于 Web 的工具和远程部署。
-
配置服务
- 在
src/index.ts中:- 保持 Express/SSE 代码启用(位于底部)
- 注释掉 STDIO 代码(位于其上方)
- 在
-
本地开发
pnpm dev服务将在以下地址提供:
- 主端点:http://127.0.0.1:3001
- SSE 端点:http://127.0.0.1:3001/sse
- 测试端点:http://127.0.0.1:3001/test
- Inspector:http://127.0.0.1:6274
-
本地 Docker 测试 需要使用 docker compose 覆盖配置才能实际公开这些端口。在 coolify 之类的平台上部署时则不需要,因为 traefik 会处理这些端口。
docker compose -f docker-compose.yaml -f docker-compose.local.yaml up -
生产环境部署(例如 Coolify)
- 让你的 IDE 更新 src/index.html,使其与服务描述相符。
- 将服务部署到你首选的平台
- 重要:在 Coolify 的高级设置中:
- 禁用 GZIP 压缩(这会中断 SSE 流)
- 确保正确公开端口 3001 -> 设置域名时,请按如下格式设置:https://your-domain.com:3001,这会告知 traefik 绑定到端口 3001。
- 配置服务监听所有接口(0.0.0.0)(已完成)
-
使用远程服务 部署后,你可以使用以下方式连接到服务:
npx -y mcp-remote https://your-domain.com/sse你可以将其粘贴为命令,并将 "node .../dist/index.cjs" 替换为此内容。
项目结构
src/index.ts- 主服务实现src/low-level-index.ts- 使用低级 API 的替代实现dist/- 编译输出目录
服务功能
Echo 工具
一个简单的工具,可回显输入的消息:
server.tool("echo", { message: z.string() }, async ({ message }) => ({
content: [{ type: "text", text: `Tool echo: ${message}` }],
}));
Echo 资源
一个可通过 URI 访问的资源:
server.resource(
"echo",
new ResourceTemplate("echo://{message}", { list: undefined }),
async (uri, { message }) => ({
contents: [
{
uri: uri.href,
text: `Resource echo: ${message}`,
},
],
})
);
Echo 提示词
用于处理消息的提示词模板:
server.prompt("echo", { message: z.string() }, ({ message }) => ({
messages: [
{
role: "user",
content: {
type: "text",
text: `Please process this message: ${message}`,
},
},
],
}));
实现建议
调试消息
可使用 server.server.sendLoggingMessage 方法发送调试消息,以便查看服务运行情况。
基本用法
server.server.sendLoggingMessage({
level: "info",
data: "Starting server...",
});
这有助于你:
- 实时跟踪服务运行情况
- 在开发过程中调试问题
- 在生产环境中监控服务状态
你可以在 Inspector 的右下角查看这些消息!
环境变量
对于服务端环境变量(由开发者提供,而非特定用户的变量):
-
使用 Docker Compose
# docker-compose.yaml services: mmcp-server: environment: - API_KEY=${API_KEY} - DATABASE_URL=${DATABASE_URL}这使你能够:
- 在 shell 中设置变量:
export API_KEY=your-key - 使用 Docker Compose 会自动加载的
.env文件
- 在 shell 中设置变量:
-
在代码中访问
const apiKey = process.env.API_KEY; const dbUrl = process.env.DATABASE_URL; -
本地开发
- 在项目根目录创建
.env文件:API_KEY=sk-123 - 将
.env添加到.gitignore,以保护机密 - 使用环境变量运行开发服务:
pnpm dev
- 在项目根目录创建
-
生产环境部署
- 在部署平台(例如 Coolify)中设置环境变量
- 切勿将敏感值提交到版本控制系统
最佳实践
-
错误处理
- 始终为环境变量实现适当的错误处理
- 为缺少必需变量的情况提供有意义的错误消息
-
类型安全
- 使用 TypeScript 定义环境变量类型
- 考虑使用
zod等验证库进行运行时检查
-
安全性
- 切勿向客户端公开敏感环境变量
- 为开发环境和生产环境使用不同的变量集
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。