使用说明
MCP TypeScript服务器启动器
一个用TypeScript构建模型上下文协议(MCP)服务器的启动项目。该项目提供了一个简单的echo服务器实现,演示了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服务器:
- 点击检查器中的“连接”
- 导航到“工具”部分
- 点击“列出工具”
- 选择“回声”工具
- 编写测试消息
- 点击“提交”
- []打开
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 - 在以下位置测试SSE连接
https://subdomain.yourdomain.com/sse
- 访问
🔌 连接到已部署的服务器
使用此命令连接到您的服务器:
npx -y mcp-remote https://subdomain.yourdomain.com/sse
Cursor/Claude桌面的示例配置:
{
"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桌面的方式是标准的。生成的json也可以在游标等中使用!
-
手动积分 对于其他工具,请使用以下命令:
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
- 检查员: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”替换为this。
项目结构
src/index.ts-主服务器实现src/low-level-index.ts-使用低级API的替代实现dist/-编译输出目录
服务器功能
回声工具
一个简单的工具,用于回显输入消息:
server.tool("echo", { message: z.string() }, async ({ message }) => ({
content: [{ type: "text", text: `Tool echo: ${message}` }],
}));
回声资源
可以通过URI访问的资源:
server.resource(
"echo",
new ResourceTemplate("echo://{message}", { list: undefined }),
async (uri, { message }) => ({
contents: [
{
uri: uri.href,
text: `Resource echo: ${message}`,
},
],
})
);
回声提示
用于处理消息的提示模板:
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...",
});
这使您能够:
- 实时跟踪服务器操作
- 开发过程中的调试问题
- 监控生产中的服务器状态
你可以在右下角的检查器中看到它们!
环境变量
对于服务器端环境变量(开发人员提供,非用户特定):
-
使用Docker Compose
# docker-compose.yaml services: mmcp-server: environment: - API_KEY=${API_KEY} - DATABASE_URL=${DATABASE_URL}这使您能够:
- 在shell中设置变量:
export API_KEY=your-key - 使用
.envDocker Compose将自动加载的文件
- 在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用于运行时检查
-
安全
- 切勿将敏感的环境变量暴露给客户端
- 为开发和生产使用不同的变量集