MCP服务器中间件

一个用于在AWS Lambda函数中集成Model Context Protocol服务器的Middy中间件,支持API Gateway和ALB的代理集成。

  • by tiagoguatierri
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 tiagoguatierri/middy-mcp-adapter

使用说明

middy mcp适配器

用于模型上下文协议(MCP)服务器与AWS Lambda功能集成的Middy中间件。

描述

middy-mcp适配器是一种中间件,可实现AWS Lambda函数和模型上下文协议服务器之间的无缝集成。它提供了一种使用Middy中间件框架在Lambda函数中处理MCP请求和响应的方便方法。它支持使用代理集成从API网关(REST API/v1和HTTP API/v2)发送到AWS Lambda的请求,以及从ALB发送的请求。

安装

npm install middy-mcp-adapter

需求

  • Node.js>=18.0.0
  • Middy>=4.0.0

用法

此中间件可以抛出HTTP异常,因此可以方便地与 @middy/http-error-handler.

基础示例

下面是一个最小Lambda函数处理程序文件的示例。在API网关的POST路由上部署此Lambda作为代理集成,您就可以开始了。

import middy from '@middy/core'
import httpErrorHandler from '@middy/http-error-handler'
import mcpMiddleware from 'middy-mcp-adapter'

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'

// Create an MCP server
const server = new McpServer({
  name: 'Lambda hosted MCP Server',
  version: '1.0.0'
})

export const handler = middy()
  .use(mcpMiddleware({ server }))
  .use(httpErrorHandler())

使用工具

import middy from '@middy/core'
import httpErrorHandler from '@middy/http-error-handler'
import mcpMiddleware from 'middy-mcp-adapter'

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import {
  ListToolsRequestSchema,
  CallToolRequestSchema
} from '@modelcontextprotocol/sdk/types.js'
import { z } from 'zod'

const server = new McpServer({
  name: 'Lambda hosted MCP Server',
  version: '1.0.0'
})

server.registerTool(
  'add',
  {
    title: 'Addition Tool',
    description: 'Add two numbers',
    inputSchema: { a: z.number(), b: z.number() },
    outputSchema: { result: z.number() }
  },
  async ({ a, b }) => {
    const output = { result: a + b }
    return {
      content: [{ type: 'text', text: JSON.stringify(output) }],
      structuredContent: output
    }
  }
)

server.registerTool(
  'multiply',
  {
    title: 'Multiplication Tool',
    description: 'Multiply two numbers',
    inputSchema: { a: z.number(), b: z.number() },
    outputSchema: { result: z.number() }
  },
  async ({ a, b }) => {
    const output = { result: a * b }
    return {
      content: [{ type: 'text', text: JSON.stringify(output) }],
      structuredContent: output
    }
  }
)

export const handler = middy()
  .use(mcpMiddleware({ server }))
  .use(httpErrorHandler())

API

mcpMiddleware(options)

创建一个Middy中间件,使MCP服务器适应AWS Lambda。

选项

  • server (必填): McpServer -您的MCP服务器实例

退货

Middy中间件对象 before 和 after 钩子。

运作原理

中间件执行以下操作:

  1. 钩子之前:初始化MCP StreamableHTTPServerTransport连接
  2. 请求改编:将API网关事件转换为HTTP IncomingMessage格式
  3. 响应处理:将HTTP ServerResponse转换回API网关格式
  4. 钩子之后:处理MCP服务器响应并将其格式化为Lambda格式

错误处理

中间件抛出HTTP错误,这些错误可以被捕获 @middy/http-error-handler:

  • 500:传输初始化失败或缺少MCP传输
  • 来自的标准HTTP错误代码 http-errors

TypeScript

此包包含TypeScript定义。

import mcpMiddleware, {
  type MCPMiddlewareOptions,
  type MCPContext
} from 'middy-mcp-adapter'

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

贡献

欢迎投稿!请随时打开问题或提交拉取请求。

链接

相关项目

作者

蒂亚戈·瓜蒂埃里- GitHub