MCP快速启动服务器
这个项目是一个使用TypeScript构建的模型上下文协议(MCP)服务器的简单快速入门示例 @modelcontextprotocol/sdk。它演示了如何定义基本工具、资源和提示。
特性
- 工具:
add:将两个数字相加。
- 参数: a (数字), b (编号) - 返回值:字符串形式的总和。
- 工具:
fetch-chuck-jokes:偶然听到查克·诺里斯的笑话。
- 参数:无 - 返回:Chuck Norris的笑话作为字符串。
- 资源:
greeting:提供个性化问候。
- URI方案: greeting://{name} - 例子: greeting://World 将为“世界”献上问候。
- 提示:
getGreetingAndJoke:指示AI客户端按名字问候用户,然后告诉他们一个Chuck Norris的笑话。
- 参数: name (字符串) - 示例:调用 name: "Narendra" 将为AI设置一个对话,以问候Narendra并讲一个笑话。
目录结构
quick-start/
├── build/ # Compiled JavaScript output
├── src/ # TypeScript source files
│ ├── index.ts # Main server setup and entry point
│ ├── tools/
│ │ └── index.ts # Tool definitions
│ ├── resources/
│ │ └── index.ts # Resource definitions
│ └── prompts/
│ └── index.ts # Prompt definitions
├── .gitignore
├── package-lock.json
├── package.json
├── tsconfig.json
└── README.md # This file先决条件
- (建议使用v18.x或更高版本)
- (附带Node.js)
设置和安装
- 克隆存储库(如果您还没有):
git clone https://github.com/scriptstar/mcp-starter-kit-node.git
cd mcp-starter-kit-node- 安装依赖项:
npm install构建服务器
要将TypeScript代码编译为JavaScript,请运行:
npm run build此命令执行 tsc (TypeScript编译器)根据 tsconfig.json 配置并将输出放置在 build/ 目录。它还使主构建文件可执行。
运行服务器
构建完成后,您可以使用以下命令启动MCP服务器:
node build/index.js或者,对于类似生产的环境,您可以使用start脚本:
npm start服务器将启动并监听标准输入(stdin)上的消息,并向标准输出(stdout)发送响应,因为它使用 StdioServerTransport.
开发工作流程
为了获得更高效的开发体验,您可以使用 dev 脚本:
npm run dev此命令使用 concurrently 运行两个进程:
tsc -w:监视TypeScript文件的更改并自动重新编译。nodemon build/index.js:观察变化build目录(其中tsc输出JavaScript)并自动重启Node.js服务器。
这在开发过程中提供了一种类似实时重新加载的体验。
代码检查
该项目使用ESLint和TypeScript支持来维护代码质量和一致性。
- 要检查棉绒错误,请执行以下操作:
npm run lint- 要自动修复可修复的棉绒错误,请执行以下操作:
npm run lint:fix建议在提交代码之前运行linter。
运作原理
此服务器实现模型上下文协议。
src/index.ts:初始化McpServer实例,从各自的模块导入工具、资源和提示注册函数,调用这些函数向服务器注册,然后连接StdioServerTransport处理沟通。src/tools/index.ts:出口aregisterTools功能。
- add:需要两个数字 a 和 b 并返回它们的总和。 - fetch-chuck-jokes:向以下对象发出HTTP GET请求 https://api.chucknorris.io/jokes/random 并返回笑话。
src/resources/index.ts:出口aregisterResources功能。
- greeting:定义资源模板 greeting://{name}当请求此URI时,它会返回一条个性化的问候消息。
src/prompts/index.ts:出口aregisterPrompts功能。
- getGreetingAndJoke:定义一个需要 name 争论。它构建了一组初始消息来指导AI客户端。第一条消息(角色:助手)设置上下文,第二条消息(职位:用户)使用提供的 name.
与服务器交互(概念)
此MCP服务器设计为由MCP客户端(例如,AI助手、开发工具)控制。客户端通过向其stdin发送JSON-RPC消息并从其stdout接收响应来与服务器通信。
以下是客户端如何与定义的功能交互:
- 呼叫
add工具:
客户端可以发送JSON-RPC请求,如下所示:
{
"jsonrpc": "2.0",
"method": "callTool",
"params": { "name": "add", "args": { "a": 5, "b": 3 } },
"id": "request1"
}服务器将返回结果:
{
"jsonrpc": "2.0",
"result": { "content": [{ "type": "text", "text": "8" }] },
"id": "request1"
}- 访问
greeting资源:
客户端可以请求读取资源URI greeting://Alice:
{
"jsonrpc": "2.0",
"method": "readResource",
"params": { "uri": "greeting://Alice" },
"id": "request2"
}服务器将响应:
{
"jsonrpc": "2.0",
"result": {
"contents": [{ "uri": "greeting://Alice", "text": "Hello, Alice!" }]
},
"id": "request2"
}- 使用
getGreetingAndJoke提示:
想要为“Bob”启动此引导任务的客户端将发送:
{
"jsonrpc": "2.0",
"method": "getPrompt",
"params": {
"uri": "prompt://getGreetingAndJoke",
"args": { "name": "Bob" }
},
"id": "request3"
}服务器将以初始消息进行响应:
{
"jsonrpc": "2.0",
"result": {
"messages": [
{
"role": "assistant",
"content": {
"type": "text",
"text": "You are a friendly assistant. Your task is to greet the user by their name and then tell them a Chuck Norris joke. You should use the available tools and resources to accomplish this. I will now wait for your instruction to proceed with greeting and joke telling for the specified user."
}
},
{
"role": "user",
"content": {
"type": "text",
"text": "Please greet Bob and then tell a Chuck Norris joke."
}
}
]
},
"id": "request3"
}然后,AI客户端将处理这些消息,并随后决定调用 greeting 资源(代表“Bob”)和 fetch-chuck-jokes 工具,使用单独 readResource 和 callTool 请求:
进一步发展
- 添加具有各种输入/输出类型的更复杂的工具。
- 实现与本地文件或数据库交互的资源。
- 为多回合对话创建更复杂的提示。
- 如果需要,探索其他传输层(例如HTTP)。
- 添加全面的错误处理和日志记录。
这个README应该能很好地概述你的项目!
