【MCP Node.js SDK 全栈进阶指南】初级篇(2):MCP基础服务器开发

引言

在上一篇文章中,我们详细介绍了MCP开发环境的搭建。本文作为MCP TypeScript-SDK系列的第二篇,将深入探讨MCP基础服务器开发的核心内容,包括服务器创建与生命周期管理、McpServer与Server的区别与选择、各种配置选项的详解,以及基本启动与调试技巧。通过本文学习,你将能够构建稳定、高效的MCP服务器,为后续开发高级功能打下坚实基础。

一、服务器创建与生命周期管理

1. MCP服务器基本概念

MCP服务器是MCP应用的核心组件,负责处理客户端请求、管理资源和工具、协调模型交互等核心功能。在TypeScript-SDK中,服务器实例是应用程序的中央控制点,具有完整的生命周期管理机制。

2. 服务器创建方式

MCP TypeScript-SDK提供了两种创建服务器的方式:

2.1 基本创建方式
import {
    McpServer } from '@modelcontextprotocol/sdk';

// 创建服务器实例
const server = new McpServer({
   
  name: 'my-mcp-server',
  description: '我的MCP服务器',
  version: '1.0.0',
});
2.2 使用构建器模式(推荐用于复杂配置)
import {
    McpServerBuilder } from '@modelcontextprotocol/sdk';

// 使用构建器模式创建
const server = new McpServerBuilder()
  .withName('my-mcp-server')
  .withDescription('我的MCP服务器')
  .withVersion('1.0.0')
  .withHttp({
    port: 8080 })
  .build();

3. 服务器生命周期管理

MCP服务器具有明确的生命周期阶段,理解和正确管理这些阶段对于开发稳定的应用至关重要:

3.1 初始化阶段

服务器创建后但尚未启动的阶段,适合进行资源注册、工具注册等准备工作:

// 初始化阶段配置
server.registerTool({
   
  name: 'greeting',
  description: '发送问候',
  parameters: z.object({
   
    name: z.string().describe('被问候者的名字'),
  }),
  execute: async ({
    name }) => {
   
    return `你好,${
     name}`;
  },
});
3.2 启动阶段

服务器开始接受连接的阶段,此时完成所有传输层初始化:

// 启动服务器
await server.start();
console.log('服务器已启动,正在监听请求...');
3.3 运行阶段

服务器正常运行,处理客户端请求的阶段。在这个阶段,您可以动态修改服务器的工具和资源:

// 动态注册新工具
server.registerTool({
   
  name: 'dynamicTool',
  description: '运行时添加的工具',
  parameters: z.object({
   }),
  execute: async () => {
   
    return '这是运行时添加的工具';
  },
});
3.4 关闭阶段

优雅地终止服务器,释放资源的阶段:

// 优雅关闭服务器
await server.shutdown();
console.log('服务器已安全关闭');

4. 生命周期事件监听

MCP服务器提供了丰富的事件机制,允许开发者在不同生命周期阶段执行自定义逻辑:

// 监听服务器启动事件
server.on('start', () => {
   
  console.log('服务器启动事件触发');
  // 执行启动后的初始化工作
});

// 监听服务器关闭事件
server.on('shutdown', () => {
   
  console.log('服务器关闭事件触发');
  // 执行资源清理工作
});

// 监听错误事件
server.on('error', (error) => {
   
  console.error('服务器发生错误:', error);
  // 错误处理逻辑
});

二、McpServer与Server的区别与选择

MCP TypeScript-SDK提供了两种服务器实现:McpServerServer,了解它们的区别对于选择合适的服务器类型至关重要。

1. McpServer介绍

McpServer是符合MCP协议规范的完整实现,提供了全面的功能支持:

  • 特点

    • 完全符合MCP协议规范
    • 内置资源和工具管理
    • 支持多种传输层选项
    • 包含丰富的元数据和发现机制
  • 适用场景

    • 开发标准MCP应用
    • 需要完整MCP协议支持的场景
    • 多客户端交互的复杂应用
import {
    McpServer } from '@modelcontextprotocol/sdk';

const mcpServer = new McpServer({
   
  name: 'standard-mcp-server',
  description: '标准MCP服务器实现',
  version: '1.0.0',
  // MCP协议的完整配置选项
});

2. Server介绍

Server是一个更轻量级的实现,专注于核心功能,适合特定场景:

  • 特点

    • 轻量级实现,占用资源少
    • 更简单的API接口
    • 更灵活的自定义选项
    • 更少的协议约束
  • 适用场景

    • 资源受限的环境
    • 简单的工具服务
    • 需要高度定制的应用
    • 内部系统集成
import {
    Server } from '@modelcontextprotocol/sdk';

const lightServer = new Server({
   
  name: 'light-server',
  // 简化的配置选项
});

3. 选择指南

在选择服务器类型时,可以参考以下指南:

考虑因素 McpServer Server
协议兼容性 完全兼容MCP标准 部分兼容
资源占用 较高 较低
功能完整性 完整功能集 核心功能集
配置复杂度 较复杂 较简单
扩展灵活性 标准化扩展 高度灵活
适用范围 大中型应用 小型或特定场景

4. 转换与互操作

在某些情况下,你可能需要在两种服务器类型之间进行转换或互操作:

import {
    McpServer, Server, convertToMcpServer } from '@modelcontextprotocol/sdk';

// 从轻量服务器升级到完整MCP服务器
const lightServer = new Server({
    name: 

你可能感兴趣的:(#,MCP,Node.js,SDK,全栈进阶指南,服务器,node.js,ubuntu,人工智能,MCP)