McpError系统确保在整个服务器中的错误响应一致且结构化。none、jwt或oauth模式来保护您的服务器。in-memory、filesystem、Supabase、SurrealDB、Cloudflare D1/KV/R2)。特性包括安全不透明游标分页、并行批处理操作和全面验证。tsyringe构建干净、解耦且易于测试的架构。此模板遵循模块化、领域驱动的架构,明确分离关注点:
┌─────────────────────────────────────────────────────────┐
│ MCP 客户端(Claude Code,ChatGPT 等) │
└────────────────────┬────────────────────────────────────┘
│ JSON-RPC 2.0
▼
┌─────────────────────────────────────────────────────────┐
│ MCP 服务器(工具,资源) │
│ 📖 [MCP 服务器指南](src/mcp-server/) │
└────────────────────┬────────────────────────────────────┘
│ 依赖注入
▼
┌─────────────────────────────────────────────────────────┐
│ 依赖注入容器 │
│ 📦 [容器指南](src/container/) │
└────────────────────┬────────────────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 服务 │ │ 存储 │ │ 实用程序 │
│ 🔌 [→] │ │ 💾 [→] │ │ 🛠️ [→] │
└──────────┘ └──────────┘ └──────────┘
[→]: src/services/ [→]: src/storage/ [→]: src/utils/
关键模块:
💡 提示:每个模块都有自己的详细README,包含架构图、使用示例和最佳实践。点击上面的链接深入了解!
此模板包含一些示例以帮助您开始。
| 工具 | 描述 |
|---|---|
template_echo_message | 回显一条消息,可选格式化和重复。 |
template_cat_fact | 从外部API获取随机猫事实。 |
template_madlibs_elicitation | 通过询问单词来完成故事,演示交互式输入。 |
template_code_review_sampling | 使用LLM服务模拟代码审查。 |
template_image_test | 返回一个作为base64编码数据URI的测试图像。 |
| 资源 | URI | 描述 |
|---|---|---|
echo | echo://{message} | 一个简单的资源,回显一条消息。 |
| 提示 | 描述 |
|---|---|
code-review | 结构化的提示,引导LLM进行代码审查。 |
在您的MCP客户端配置文件(例如cline_mcp_settings.json)中添加以下内容。
{
"mcpServers": {
"mcp-ts-template": {
"type": "stdio",
"command": "bunx",
"args": ["mcp-ts-template@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"STORAGE_PROVIDER_TYPE": "filesystem",
"STORAGE_FILESYSTEM_PATH": "/path/to/your/storage"
}
}
}
}
git clone https://github.com/cyanheads/mcp-ts-template.git
cd mcp-ts-template
bun install
所有配置都在启动时集中并验证于src/config/index.ts。您的.env文件中的关键环境变量包括:
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_TRANSPORT_TYPE | 使用的传输类型:stdio或http。 | http |
MCP_HTTP_PORT | HTTP服务器的端口。 | 3010 |
MCP_HTTP_HOST | HTTP服务器的主机名。 | 127.0.0.1 |
MCP_AUTH_MODE | 认证模式:none,jwt或oauth。 | none |
MCP_AUTH_SECRET_KEY | 对于jwt认证模式必需。 32个字符以上的密钥。 | (none) |
OAUTH_ISSUER_URL | 对于oauth认证模式必需。 OIDC提供者的URL。 | (none) |
STORAGE_PROVIDER_TYPE | 存储后端:in-memory,filesystem,supabase,surrealdb,cloudflare-d1,cloudflare-kv,cloudflare-r2。 | in-memory |
STORAGE_FILESYSTEM_PATH | 对于filesystem存储必需。 存储目录的路径。 | (none) |
SUPABASE_URL | 对于supabase存储必需。 您的Supabase项目URL。 | (none) |
SUPABASE_SERVICE_ROLE_KEY | 对于supabase存储必需。 您的Supabase服务角色密钥。 | (none) |
SURREALDB_URL | 对于surrealdb存储必需。 SurrealDB端点(例如wss://cloud.surrealdb.com/rpc)。 | (none) |
SURREALDB_NAMESPACE | 对于surrealdb存储必需。 SurrealDB命名空间。 | (none) |
SURREALDB_DATABASE | 对于surrealdb存储必需。 SurrealDB数据库名称。 | (none) |
SURREALDB_USERNAME | 对于surrealdb存储可选。 数据库用户名用于身份验证。 | (none) |
SURREALDB_PASSWORD | 对于surrealdb存储可选。 数据库密码用于身份验证。 | (none) |
OTEL_ENABLED | 设置为true启用OpenTelemetry。 | false |
LOG_LEVEL | 日志记录的最小级别(debug,info,warn,error)。 | info |
OPENROUTER_API_KEY | OpenRouter LLM服务的API密钥。 | (none) |
none(默认),jwt(需要MCP_AUTH_SECRET_KEY),或oauth(需要OAUTH_ISSUER_URL和OAUTH_AUDIENCE)。withToolAuth([...])或withResourceAuth([...])包装您的工具/资源logic函数以执行范围检查。当认证模式为none时,为开发人员便利,范围检查被绕过。StorageService提供了持久化的统一API。永远不要直接从工具逻辑访问fs或其他存储SDK。in-memory。仅限Node的提供者包括filesystem。边缘兼容的提供者包括supabase,surrealdb,cloudflare-kv和cloudflare-r2。surrealdb提供者时,在首次使用前使用docs/surrealdb-schema.surql初始化数据库模式。StorageService需要context.tenantId。当启用认证时,这会自动从JWT的tid声明传播。getMany(),setMany(),deleteMany()的并行执行RequestContext。OTEL_ENABLED=true启用并配置OTLP端点。每个工具调用的跟踪、指标(持续时间、负载大小)和错误都会自动捕获。构建并运行生产版本:
# 一次性构建
bun rebuild
# 运行已构建的服务器
bun start:http
# 或
bun start:stdio
运行检查和测试:
bun devcheck # 代码检查、格式化、类型检查等
bun run test # 运行测试套件(不要直接使用'bun test',因为它可能无法正常工作)
bun build:worker
bun deploy:dev
bun deploy:prod
注意:
wrangler.toml文件预配置了nodejs_compat以获得最佳结果。
| 目录 | 目的及内容 | 指南 |
|---|---|---|
src/mcp-server/tools/definitions | 您的工具定义(*.tool.ts)。这是您添加新功能的地方。 | 📖 MCP指南 |
src/mcp-server/resources/definitions | 您的资源定义(*.resource.ts)。这是您添加新数据源的地方。 | 📖 MCP指南 |
src/mcp-server/transports | HTTP和STDIO传输的实现,包括认证中间件。 | 📖 MCP指南 |
src/storage | StorageService抽象和所有存储提供者实现。 | 💾 存储指南 |
src/services | 与外部服务的集成(例如,默认的OpenRouter LLM提供者)。 | 🔌 服务指南 |
src/container | 依赖注入容器注册和服务令牌。 | 📦 容器指南 |
src/utils | 核心实用程序,包括日志记录、错误处理、性能、安全性和遥测。 | |
src/config | 使用Zod解析和验证环境变量。 | |
tests/ | 单元和集成测试,镜像src/目录结构。 |
每个主要模块都包含详细的文档,包括架构图、使用示例和最佳实践:
MCP服务器指南 - 构建MCP工具和资源的完整指南
容器指南 - 使用tsyringe的依赖注入
服务指南 - 外部服务集成模式
存储指南 - 抽象持久层
使用此模板与AI代理时,请参阅**AGENTS.md**中的严格规则集。关键原则包括:
logic中永远不要使用try/catch。相反,抛出一个McpError。