返回市场
无服务器-mcp

无服务器-mcp

作者:HeatherFlux2 星标更新:2025-09-26

项目介绍

无服务器MCP

一个现代的TypeScript包,实现了Model Context Protocol (MCP),具有模块化架构和对AWS Lambda流的支持。

特性

  • 🎯 完整的MCP协议支持 - 完整实现MCP 2024-11-05规范
  • 🧩 模块化架构 - 独立的切片用于提示、资源、工具和根目录
  • 🚀 AWS Lambda就绪 - 内置支持Lambda流响应
  • 📡 多种传输方式 - 标准输入输出、HTTP流和Lambda传输
  • 🔧 TypeScript优先 - 全面类型安全,带有详尽的模式
  • 🧪 经过充分测试 - 高覆盖率的全面测试套件
  • 高性能 - 优化用于无服务器和边缘环境
  • 🎨 装饰器支持 - 可选装饰器以实现简洁的API设计

安装

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

快速开始

基本服务器

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

// 创建传输和服务器
const transport = new StdioTransport();
const server = new McpServer(transport, {
  name: 'my-mcp-server',
  version: '1.0.0',
});

// 设置工具
const toolProvider = new McpToolProvider();
toolProvider.registerTool({
  name: 'hello',
  description: '打招呼',
  inputSchema: {
    type: 'object',
    properties: {
      name: { type: 'string', description: '要问候的名字' }
    },
    required: ['name']
  },
  handler: async (args) => `你好,${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) => {
    // 在这里配置你的服务器
    const toolProvider = new McpToolProvider();
    // ... 设置工具、资源、提示
    server.setToolProvider(toolProvider);
  }
);

核心概念

切片

库被组织成模块化的切片,每个切片处理MCP协议的一个特定方面:

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

传输方式

支持多种传输机制:

  • StdioTransport - 用于子进程通信
  • HttpStreamingTransport - 用于带有服务端发送事件的HTTP
  • LambdaStreamingTransport - 用于带有响应流的AWS Lambda

API参考

工具

import { McpToolProvider } from 'serverless-mcp';

const toolProvider = new McpToolProvider();

// 简单工具
toolProvider.registerTool(
  McpToolProvider.createSimpleTool(
    'current-time',
    '获取当前时间戳',
    () => new Date().toISOString()
  )
);

// 参数化工具
toolProvider.registerTool(
  McpToolProvider.createParameterizedTool(
    'calculate',
    '执行计算',
    [
      { name: 'operation', type: 'string', required: true },
      { name: 'a', type: 'number', required: true },
      { name: 'b', type: 'number', required: true },
    ],
    async (args) => {
      // 工具实现
    }
  )
);

资源

import { McpResourceProvider } from 'serverless-mcp';

const resourceProvider = new McpResourceProvider();

// 静态资源
resourceProvider.registerResource(
  McpResourceProvider.createStaticResource(
    'memory://config',
    '配置',
    JSON.stringify({ setting: 'value' }),
    'application/json'
  )
);

// 动态资源
resourceProvider.registerResource(
  McpResourceProvider.createDynamicResource(
    'memory://stats',
    '实时统计',
    () => JSON.stringify({ timestamp: Date.now() }),
    'application/json'
  )
);

提示

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

const promptProvider = new McpPromptProvider();

promptProvider.registerPrompt({
  name: 'greeting',
  description: '生成个性化的问候语',
  arguments: [
    { name: 'name', required: true },
    { name: 'formal', required: false }
  ],
  handler: async (args) => {
    const greeting = args.formal 
      ? `您好,${args.name}`
      : `嗨,${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次调用

示例

查看示例目录中的完整工作示例:

开发

# 安装依赖
pnpm install

# 运行测试
pnpm test

# 构建包
pnpm build

# 代码检查和格式化
pnpm lint
pnpm format

架构

src/
├── core/           # 核心JSON-RPC和MCP协议
├── prompts/        # 提示管理和模板
├── resources/      # 资源提供者和缓存
├── tools/          # 工具执行和中间件
├── roots/          # 根目录管理
├── transports/     # 传输实现
└── lambda/         # AWS Lambda集成

每个切片都可以独立测试,并且如果需要可以单独使用。

TypeScript支持

该库是用TypeScript编写的,并提供了全面的类型定义:

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

许可证

MIT - 查看LICENSE文件了解详情。

贡献

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

支持