MCP协议实现包

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

  • by HeatherFlux
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 HeatherFlux/serverless-mcp

使用说明

无服务器MCP

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

特性

  • 🎯 完全支持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边界定义

运输

支持多种传输机制:

  • 标准运输 -用于子流程通信
  • Http流传输 -对于带有服务器发送事件的HTTP
  • 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';

许可证

麻省理工学院-见 许可证 文件以获取详细信息。

贡献

欢迎投稿!请阅读我们的 贡献指南 并将pull请求提交到我们的存储库。

支持