使用TypeScript和FastMCP构建Model Context Protocol(MCP)服务器的最小启动模板。
src/lib、src/services、src/tools。dist/)。fastmcp实现MCP服务器。从这个模板创建一个新的仓库: 点击这里生成一个新仓库。
导航到你的新项目:
cd /path/to/your-new-mcp-server
初始化Git仓库(如果尚未初始化):
git init
git branch -M main # 或者你首选的默认分支名称
自定义package.json:
name、version、description、author、repository等。bin条目。安装依赖项:
pnpm install
配置环境变量: 对于天气服务示例,你需要一个OpenWeather API密钥:
# 创建一个.env文件(添加到.gitignore中)
echo "OPENWEATHER_API_KEY=your_api_key_here" > .env
从OpenWeather获取API密钥。
初始提交: 在设置Husky和Changesets之前,这是一个很好的初始提交阶段。
git add .
git commit -m "feat: 从模板初始化项目"
开发你的服务器:
src/tools/目录下添加自定义工具。src/lib/和src/services/中实现逻辑。src/index.ts中注册工具。此模板包含一个天气服务示例,展示了以下内容:
HTTP实用程序(src/lib/http.ts):
配置(src/lib/config.ts):
天气服务(src/services/weatherService.ts):
天气工具(src/tools/weather.ts):
要使用天气工具:
# 设置你的OpenWeather API密钥
export OPENWEATHER_API_KEY=your_api_key_here
# 运行服务器
pnpm run start
# 使用MCP客户端连接并使用GET_WEATHER工具
# 参数:{ "city": "London" }
此模板在devDependencies中包含了husky和lint-staged,以便在提交前对暂存文件运行Biome。设置方法如下:
确保你的package.json中有husky的准备脚本:
{
"scripts": {
"prepare": "husky"
}
}
安装依赖项并初始化husky:
pnpm install
pnpm dlx husky init
这会创建一个包含必要设置的.husky目录。
为lint-staged创建预提交钩子:
# 创建或编辑pre-commit文件
echo '#!/usr/bin/env sh' > .husky/pre-commit
echo '. "$(dirname -- "$0")/_/husky.sh"
pnpm lint-staged' >> .husky/pre-commit
# 使其可执行
chmod +x .husky/pre-commit
在package.json中配置lint-staged:
// 在package.json中
"lint-staged": {
"*.{js,ts,cjs,mjs,jsx,tsx,json,jsonc}": [
"biome check --write --organize-imports-enabled=false --no-errors-on-unmatched"
]
}
根据需要调整Biome命令。上面的是一个常见示例。
测试它:
暂存一些.ts文件的变化并尝试提交。Biome应该会在暂存文件上运行。
此模板已准备好使用Changesets进行发布管理。
安装Changesets CLI(如果尚未在devDependencies中):
模板package.json应包含@changesets/cli。如果没有:
pnpm add -D @changesets/cli
初始化Changesets:
该命令将在.changeset目录中创建一些配置文件。
pnpm changeset init
# 或 npx changeset init
提交生成的.changeset目录及其内容。
开发过程中添加Changesets: 当你做出一个应该导致版本提升的更改(修复、功能、重大变更)时:
pnpm changeset add
# 或 npx changeset add
跟随提示。这将在.changeset目录中创建一个描述更改的markdown文件。
将此更改集文件与你的代码更改一起提交。
发布一个版本:
GitHub Actions工作流release.yml(在mcp-server-starter/.github/workflows/中)已为此设置好。当你准备发布时:
main。package.json是完整的。添加或更新字段如keywords、author、repository(例如,"repository": {"type": "git", "url": "https://github.com/YOUR_USERNAME/YOUR_REPO_NAME.git"})、bugs(例如,"bugs": {"url": "https://github.com/YOUR_USERNAME/YOUR_REPO_NAME/issues"})和homepage(例如,"homepage": "https://github.com/YOUR_USERNAME/YOUR_REPO_NAME#readme"),以提高npm上的可发现性和信息量。release.yml工作流(默认手动触发)将:
changeset version以消耗更改集文件,更新package.json版本,并更新CHANGELOG.md。它将这些推送到changeset-release/main分支并打开一个“版本包”PR。main上再次运行。这次,它将运行pnpm run publish-packages(应包括changeset publish)以发布到npm并创建GitHub Releases/标签。release.yml中的on: workflow_dispatch更改为on: push: branches: [main](或你的发布分支)。pnpm run build: 编译TypeScript到JavaScript并在dist/中生成可执行输出。pnpm run dev: 使用tsx运行服务器(TypeScript热重载)。pnpm run start: 使用Node运行构建的服务器(来自dist/)。pnpm run lint: 使用Biome检查代码库。pnpm run format: 使用Biome格式化代码库。构建后(pnpm run build),你可以运行服务器:
mcp-hello-server(或你自定义的bin名称)。node dist/index.jspnpm dlx(一旦发布):pnpm dlx your-published-package-name