MCP协议实现包

一个现代化的TypeScript包,实现了模型上下文协议(MCP),具有模块化架构和AWS Lambda流支持。

  • by ExtendOSS
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ExtendOSS/serverless-mcp

使用说明

无服务器MCP(微服务云应用平台)

一个现代的TypeScript包,采用模块化架构实现模型上下文协议(MCP),并支持AWS Lambda流处理。

特点

  • 🎯(靶心) 全面支持MCP协议 - 完全实现MCP 2024-11-05规范
  • 🧩 这个符号在中文里通常被用作“拼图”或“碎片”的象征,没有直接对应的中文词汇,但可以根据上下文翻译为“拼图块”或“碎片”等意思。如果单独使用,也可以保持原样或解释为“一个拼图块/碎片”。 模块化架构 - 为提示、资源、工具和根目录设置独立的切片
  • 🚀 表情符号“🚀”在中文中通常被直接保留为原样,因为它是一个通用的表情符号,表示火箭、快速上升或加速等概念,没有直接对应的中文翻译。所以,“🚀”翻译成中文仍然是“🚀”。 AWS Lambda 准备就绪 - 内置对Lambda流式响应的支持
  • 📡(天线/信号发射器) 多种运输方式 - stdio(标准输入输出)、HTTP 流传输和 Lambda 传输
  • 🔧 修理工具 TypeScript 优先 - 全类型安全性,配备全面的模式(或架构)
  • 🧪 表示“实验”或“化学实验”。 经过充分测试 - 全面的测试套件,高覆盖率
  • ⚡(闪电符号,无特定中文含义,可表示速度、能量、惊喜等抽象概念) 高性能 - 为无服务器和边缘环境优化
  • 🎨(颜料/美术符号) 装饰器支持 - 可选的装饰器,用于实现简洁的API设计

安装

npm install serverless-mcp
# or
pnpm add serverless-mcp
# or
yarn add serverless-mcp

快速入门

基本服务器

import {
  McpServer,
  StdioTransport,
  McpToolProvider,
  McpResourceProvider,
} from 'serverless-mcp';

// Create transport and server
const transport = new StdioTransport();
const server = new McpServer(transport, {
  name: 'my-mcp-server',
  version: '1.0.0',
});

// Setup tools
const toolProvider = new McpToolProvider();
toolProvider.registerTool({
  name: 'hello',
  description: 'Say hello',
  inputSchema: {
    type: 'object',
    properties: {
      name: { type: 'string', description: 'Name to greet' }
    },
    required: ['name']
  },
  handler: async (args) => `Hello, ${args.name}!`
});

server.setToolProvider(toolProvider);

AWS Lambda 服务器

import { LambdaMcpHandler } from 'serverless-mcp';

export const handler = LambdaMcpHandler.create(
  {
    name: 'lambda-mcp-server',
    version: '1.0.0',
    transport: {
      cors: { origin: '*' },
      enableLogs: true,
    },
  },
  (server) => {
    // Configure your server here
    const toolProvider = new McpToolProvider();
    // ... setup tools, resources, prompts
    server.setToolProvider(toolProvider);
  }
);

核心概念

切片

该库被组织成多个模块化部分,每个部分负责处理MCP协议的一个特定方面:

  • 提示 - 模板消息和对话模式
  • 资源 - 数据源和内容提供商
  • 工具 - 可由AI模型执行的功能
  • 根源 - 文件系统和URI边界定义

交通

支持多种传输机制:

  • StdioTransport(可译为“标准I/O传输”或根据上下文具体含义调整,但直接翻译保持原样为“Stdio传输”) - 用于子进程通信
  • HTTP流传输 - 对于支持服务器发送事件的HTTP
  • Lambda流式传输(或Lambda流传输) - 对于支持响应流的AWS Lambda

API 参考文档

工具

import { McpToolProvider } from 'serverless-mcp';

const toolProvider = new McpToolProvider();

// Simple tool
toolProvider.registerTool(
  McpToolProvider.createSimpleTool(
    'current-time',
    'Get current timestamp',
    () => new Date().toISOString()
  )
);

// Parameterized tool
toolProvider.registerTool(
  McpToolProvider.createParameterizedTool(
    'calculate',
    'Perform calculations',
    [
      { name: 'operation', type: 'string', required: true },
      { name: 'a', type: 'number', required: true },
      { name: 'b', type: 'number', required: true },
    ],
    async (args) => {
      // Tool implementation
    }
  )
);

资源

import { McpResourceProvider } from 'serverless-mcp';

const resourceProvider = new McpResourceProvider();

// Static resource
resourceProvider.registerResource(
  McpResourceProvider.createStaticResource(
    'memory://config',
    'Configuration',
    JSON.stringify({ setting: 'value' }),
    'application/json'
  )
);

// Dynamic resource
resourceProvider.registerResource(
  McpResourceProvider.createDynamicResource(
    'memory://stats',
    'Live Statistics',
    () => JSON.stringify({ timestamp: Date.now() }),
    'application/json'
  )
);

提示

import { McpPromptProvider, PromptUtils } from 'serverless-mcp';

const promptProvider = new McpPromptProvider();

promptProvider.registerPrompt({
  name: 'greeting',
  description: 'Generate personalized greetings',
  arguments: [
    { name: 'name', required: true },
    { name: 'formal', required: false }
  ],
  handler: async (args) => {
    const greeting = args.formal 
      ? `Good day, ${args.name}`
      : `Hi ${args.name}!`;
    
    return [PromptUtils.createUserMessage(greeting)];
  }
});

中间件

为工具添加中间件以处理横切关注点:

import { 
  createTimingMiddleware,
  createLoggingMiddleware,
  createTimeoutMiddleware,
  createRateLimitMiddleware,
} from 'serverless-mcp';

const toolProvider = new McpToolProvider();

toolProvider
  .use(createTimingMiddleware())
  .use(createLoggingMiddleware())
  .use(createTimeoutMiddleware(5000))
  .use(createRateLimitMiddleware(10, 60000)); // 10 calls per minute

示例

见 例子 包含完整工作示例的目录:

发展

# Install dependencies
pnpm install

# Run tests
pnpm test

# Build the package
pnpm build

# Lint and format
pnpm lint
pnpm format

建筑学

src/
├── core/           # Core JSON-RPC and MCP protocol
├── prompts/        # Prompt management and templates
├── resources/      # Resource providers and caching
├── tools/          # Tool execution and middleware
├── roots/          # Root directory management
├── transports/     # Transport implementations
└── lambda/         # AWS Lambda integration

每个切片都是独立可测试的,并且在需要时可以单独使用。

TypeScript 支持

该库是使用TypeScript构建的,并提供了全面的类型定义:

import type {
  McpTool,
  McpResource,
  McpPrompt,
  JsonRpcMessage,
  ToolDefinition,
  ResourceDefinition,
  PromptDefinition,
} from 'serverless-mcp';

许可证

MIT - 看 许可证 文件中包含详细信息。

贡献;做出贡献

欢迎投稿!请阅读我们的 贡献指南 并向我们的仓库提交拉取请求。

支持

  • 📚 书籍或学习的象征 文档
  • 🐛(虫子) 问题追踪器
  • 💬(表示对话或消息的符号,无实际翻译内容) 讨论