使用说明
MCP快速启动服务器
这个项目是一个使用TypeScript构建的模型上下文协议(MCP)服务器的简单快速入门示例 @modelcontextprotocol/sdk。它演示了如何定义基本工具、资源和提示。
特性
- 工具:
add:将两个数字相加。- 参数:
a(数字),b(编号) - 返回值:字符串形式的总和。
- 参数:
- 工具:
fetch-chuck-jokes:偶然听到查克·诺里斯的笑话。- 参数:无
- 返回:Chuck Norris的笑话作为字符串。
- 资源:
greeting:提供个性化问候。- URI方案:
greeting://{name} - 例子:
greeting://World将为“世界”献上问候。
- URI方案:
- 提示:
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
先决条件
设置和安装
-
克隆存储库(如果您还没有):
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资源: 客户端可以请求读取资源URIgreeting://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应该能很好地概述你的项目!