详细教程展示如何用 TypeScript MCP 模板快速开发和部署 MCP 服务。降低初学者入门门槛。
如果你一直想构建自己的 Model Context Protocol(MCP)Server,却不知道该从哪里开始,那么我这里有个东西,或许能帮你节省大量时间。最近,我从自己实际使用的 MCP 项目中提取出了一套 TypeScript 模板。它处理了所有样板代码,让你可以专注于真正重要的事情:构建自己的 tools 和 resources。
事情是这样的:MCP 仍然是一个相当新的技术,大家才刚刚开始探索如何构建自己的 Server。目前市面上的模板和脚手架项目还不算多,所以我决定自己创建一个。
构建完 dev.to MCP Server 后,我意识到自己已经有了一套扎实的基础架构,其他人也能从中受益。于是,我把其中好用的部分全部提取了出来,包括 TypeScript 配置、MCP SDK 集成、Vite 打包配置,以及从 v22.18.0 开始提供的 Node.js 类型剥离开发模式,并将它们整理成了一个任何人都能使用的模板。
就在昨天,我还用这个模板快速搭建了新的 Pimp My Ride MCP Server。我借助这套模板进行 vibe coding,大约 30 分钟就完成了新的 MCP Server。
这套模板包含了现代 MCP Server 开发所需的一切:
现代 TypeScript 开发体验:
GitHub 可以让你轻松地将它用作项目起点。你不需要 fork,只需基于这个模板创建一个新的 repository。在 repo 页面点击“Use this template”,为新的 MCP Server 起个名字,就可以开始了。
使用模板创建好自己的 repo 后:
或者用我更喜欢的方式:借助 GitHub CLI。
第一次接触 GitHub CLI?可以看看下面的内容 👇
所有内容的组织方式如下:
Server 代码放在 src/index.ts 中,可复用的工具函数和 MCP tools 位于 src/lib/,测试文件则直接放在被测试代码的旁边。Tool 的输入 schema 使用 Zod 执行运行时校验,因此可以一次性获得类型安全和数据校验能力。
将测试写在 *.test.ts 文件中,并与被测试的代码放在一起。
所有配置都通过环境变量提供,并使用 Zod 校验,随后在 src/config.ts 中完成解析:
PORT——Server 端口,默认值为 3000SERVER_NAME——Server 的名称LOG_LEVEL——Pino 日志级别,例如 info、debug 等Zod schema 会在启动时确保环境变量有效,这样你就能尽早发现配置问题,而不是等到运行期间才发现。要添加新的配置项,只需扩展 src/config.ts 中的 schema。没有硬编码的 secret;所有配置都会经过校验,并通过默认值加以说明。
Pino 已经完成接入,可以直接用于结构化日志。只需导入 logger 并使用它:
日志在生产环境中以结构化 JSON 的形式输出,在开发环境中则会经过美化后打印。无论是本地调试,还是在生产环境中解析日志,都非常合适。
模板已经预先配置好了 ESLint 和 Prettier:
这些规则都很合理:两个空格缩进、双引号、尾随逗号,以及能够捕获真正重要问题的 TypeScript 感知 lint 规则。允许使用以 _ 开头的未使用变量,因为有时 API contract 确实需要这样做;同时不鼓励使用 any,但也没有完全禁止。
准备发布时:
或者使用内置的 Dockerfile:
如果你要远程部署 MCP Server,而不只是运行在 localhost 上,MCP 安全最佳实践建议使用 proxy 或 gateway 来完成身份认证和授权。我使用 Pomerium 保护自己的 MCP Servers,因为它能够处理身份认证和访问策略,我不必亲自构建这些功能。在生产环境中,我就是通过它来保护 dev.to MCP Server 和 pimp-my-ride-mcp 的。
坦白说:我在 Pomerium 工作,但即便我不在那里任职,我也会在这个场景中使用它。为远程服务管理身份认证和访问控制非常麻烦,而拥有一个能够干净利落地处理这些问题的 proxy,确实很有用。
先后使用这套配置构建了 dev.to MCP Server 和 pimp-my-ride-mcp 之后,以下几点是我最欣赏的:
开发循环非常快。Node.js 22.18.0 及以上版本内置了类型剥离功能,这意味着开发期间无需执行构建步骤,就能实现即时重载。
Vite 负责处理生产环境打包。准备发布时,Vite 会把所有内容编译成干净的 ES modules。
MCP SDK 集成非常直接。你可以专注于构建 tools 和 resources,而不必费力处理协议细节。
它有明确的技术主张,但并不僵化。如果愿意,你可以替换其中的组件,不过默认配置已经非常好用。
我还有一个 OAuth 2.0 PR 正在推进中,它将简化身份认证,并加入粗粒度授权功能,应该很快就会合并。
克隆这个模板,然后开始构建自己的 MCP Server。无论你是想暴露一个 API——就像我开发 dev.to MCP Server 时那样——封装一个数据库,还是为自己的 AI 工作流创建自定义 tools——就像 pimp-my-ride-mcp 那样——这套模板都会替你处理那些枯燥的部分,让你能够专注于真正有趣的问题。
查看这个模板 repo,如果觉得有用,可以给它点一颗 star。如果你用它构建出了什么很酷的东西,也请告诉我!
如果你想和我保持联系,可以在 nickyt.online 上找到我的所有社交账号。
照片由 Unsplash 上的 Homa Appliances 拍摄。