使用说明
MCP TypeScript入门
TypeScript中的一个功能完整的模型上下文协议(MCP)服务器模板。此入门程序使用干净的生产就绪代码演示了MCP的所有主要功能。
📚 文档
✨ 特性
| 类别 | 功能 | 描述 |
|---|---|---|
| 工具 | hello |
带注释的基本工具 |
get_weather |
具有结构化输出模式的工具 | |
ask_llm |
调用LLM采样的工具 | |
long_task |
具有5秒进度更新的工具 | |
load_bonus_tool |
动态加载新工具 | |
| 资源 | info://about |
静态信息资源 |
file://example.md |
基于文件的标记资源 | |
| 模板 | greeting://{name} |
个性化问候 |
data://items/{id} |
按ID查找数据 | |
| 提示 | greet |
各种风格的问候 |
code_review |
重点领域代码审查 |
🚀 快速开始
先决条件
- Node.js 20+
- npm或pnpm
安装
# Clone the repository
git clone https://github.com/SamMorrowDrums/mcp-typescript-starter.git
cd mcp-typescript-starter
# Install dependencies
npm install
# Build
npm run build
运行服务器
stdio传输 (地方发展):
npm run start:stdio
HTTP传输 (用于远程/web部署):
npm run start:http
# Server runs on http://localhost:3000
🔧 VS代码集成
该项目包括用于无缝开发的VS代码配置:
- 在VS Code中打开项目
- MCP配置位于
.vscode/mcp.json - 构建于
Ctrl+Shift+B(或Cmd+Shift+B在Mac上) - 使用VS Code的MCP工具测试服务器
使用DevContainers
- 安装 开发容器扩展
- 打开命令面板:“开发容器:在容器中重新打开”
- 一切都是预先配置好的,随时可以使用!
📁 项目结构
.
├── src/
│ ├── tools.ts # Tool definitions (hello, get_weather, ask_llm, etc.)
│ ├── resources.ts # Resource and template definitions
│ ├── prompts.ts # Prompt definitions
│ ├── server.ts # Server orchestration (combines all modules)
│ ├── stdio.ts # stdio transport entrypoint
│ └── http.ts # HTTP transport entrypoint
├── .vscode/
│ ├── mcp.json # MCP server configuration
│ ├── tasks.json # Build/run tasks
│ └── extensions.json
├── .devcontainer/
│ └── devcontainer.json
├── package.json
├── tsconfig.json
├── .prettierrc # Prettier configuration
└── eslint.config.js
🛠️ 发展
# Development mode with live reload
npm run dev
# Build for production
npm run build
# Format code
npm run format
# Lint
npm run lint
# Clean build
npm run clean && npm run build
实时重新加载
这 npm run dev 命令使用 tsx watch 用于开发过程中的即时重新加载。
更改任何 .ts 文件将自动重新启动服务器。
🔍 MCP检查员
这 MCP检查员 是测试和调试MCP服务器的重要开发工具。
运行检查器
npx @modelcontextprotocol/inspector -- npx tsx src/stdio.ts
检查员提供什么
- 工具选项卡:列出并调用所有已注册的带有参数的工具
- 资源选项卡:浏览和阅读资源和模板
- 提示选项卡:查看和测试提示模板
- 日志选项卡:请参阅客户端和服务器之间的JSON-RPC消息
- 模式验证:验证工具输入/输出模式
调试提示
- 在连接IDE/客户端之前启动检查器
- 使用“日志”选项卡查看确切的请求/响应有效载荷
- 测试工具注释正确显示
- 验证是否显示进度通知
long_task
📖 功能示例
带注释的工具
server.tool(
"hello",
{
title: "Say Hello",
description: "A friendly greeting tool",
annotations: { readOnlyHint: true },
},
{ name: z.string() },
async ({ name }) => ({
content: [{ type: "text", text: `Hello, ${name}!` }],
})
);
资源模板
server.resourceTemplate(
"greeting://{name}",
{ name: "Personalized Greeting", mimeType: "text/plain" },
async ({ name }) => ({
contents: [{
uri: `greeting://${name}`,
text: `Hello, ${name}!`,
}],
})
);
带有进度更新的工具
server.tool(
"long_task",
{ title: "Long Task" },
{ taskName: z.string() },
async ({ taskName }, { sendProgress }) => {
for (let i = 0; i < 5; i++) {
await sendProgress({ progress: i / 5, total: 1.0 });
await sleep(1000);
}
return { content: [{ type: "text", text: "Done!" }] };
}
);
🔐 环境变量
复制 .env.example 到 .env 并配置:
cp .env.example .env
| 变量 | 描述 | 默认值 |
|---|---|---|
PORT |
HTTP服务器端口 | 3000 |
🤝 贡献
欢迎投稿!请确保您的更改与其他语言初学者保持功能对等。
📄 许可证
MIT许可证-请参阅 许可证 了解详情。
