Token导航 LogoToken导航TokenDH.com
MCP Lambda Nodejs logo
运维云端未说明官方级别未说明来源级核验

MCP Lambda Nodejs

MCP Server

用于构建在AWS Lambda上运行的Model Context Protocol服务器的TypeScript SDK,支持通过装饰器定义工具并自动处理JSON-RPC路由、验证和会话管理。

工具数

1

提示词数

0

GitHub Stars

2

资源数

0
服务器框架TypeScript会话管理

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

TyagoVeras

提供方

TyagoVeras

最后核验

2026/5/17 20:20

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

mcp lambda nodejs

](https://www.npmjs.com/package/mcp-lambda-nodejs) ![License: MIT](./LICENSE) ](https://nodejs.org)

用于构建的TypeScript SDK 模型上下文协议 (MCP)服务器,其运行方式为 AWS Lambda函数.

使用装饰器定义MCP工具,连接单个处理程序,然后部署——SDK自动处理JSON-RPC路由、Zod验证、CORS和会话管理。

需求

  • Node.js 18+
  • TypeScript 5.0+ experimentalDecoratorsemitDecoratorMetadata 启用

安装

npm install mcp-lambda-nodejs
# peer dependency
npm install --save-dev @types/aws-lambda

快速开始

1.在中启用装饰器元数据 tsconfig.json

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

2.创建MCP服务器类

// calculator-server.ts
import { MCPServer, MCPTool, z } from 'mcp-lambda-nodejs';

@MCPServer({
  name: 'my-calculator',
  version: '1.0.0'
})
export class CalculatorServer {
  @MCPTool({
    title: 'Add Numbers',
    description: 'Adds two numbers together',
    inputSchema: {
      a: z.number().describe('First number'),
      b: z.number().describe('Second number')
    },
    outputSchema: {
      result: z.number().describe('The sum'),
      operation: z.string().describe('Human-readable equation')
    }
  })
  async add(params: { a: number; b: number }) {
    return {
      result: params.a + params.b,
      operation: `${params.a} + ${params.b} = ${params.a + params.b}`
    };
  }
}

3.创建Lambda处理程序

// handler.ts
import { APIGatewayProxyEventV2, APIGatewayProxyResultV2, MCPHandlerFactory } from 'mcp-lambda-nodejs';
import { CalculatorServer } from './calculator-server';

const handler = MCPHandlerFactory.createHandler(CalculatorServer, 'calculator');

export async function main(event: APIGatewayProxyEventV2): Promise {
  return handler(event);
}

4.部署(无服务器框架示例)

# serverless.yml
service: my-mcp-server

provider:
  name: aws
  runtime: nodejs20.x
  build:
    esbuild:
      bundle: true

functions:
  calculator:
    handler: handler.main
    events:
      - httpApi:
          path: /calculator
          method: post
      - httpApi:
          path: /calculator
          method: options
serverless deploy

5.呼叫您的MCP服务器

# List tools
curl -X POST https://.execute-api..amazonaws.com/calculator \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

# Call a tool
curl -X POST https://.execute-api..amazonaws.com/calculator \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": { "name": "add", "arguments": { "a": 5, "b": 3 } }
  }'

答复:

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [{ "type": "text", "text": "{\"result\":8,\"operation\":\"5 + 3 = 8\"}" }],
    "structuredContent": { "result": 8, "operation": "5 + 3 = 8" }
  }
}

API 参考

@MCPServer(config)

注册MCP服务器的类装饰器。

字段类型描述
namestring服务器标识符
versionstring服务器版本

@MCPTool(config)

方法装饰器,将方法作为MCP工具公开。

字段类型描述
titlestring人类可读的工具名称
descriptionstring该工具的功能是什么
inputSchemaRecord每个输入字段的Zod模式
outputSchemaRecord每个输出字段的Zod模式

方法名称将成为工具的 name 在MCP协议中。

MCPHandlerFactory.createHandler(ServerClass, serverName?)

返回AWS Lambda处理程序(APIGatewayProxyEventV2 → APIGatewayProxyResultV2).

参数类型说明
ServerClass装饰服务器类
serverNamestring?用于实例键控的名称(可选)

自动处理:

  • CORS飞行前(OPTIONS)
  • JSON-RPC 2.0解析和路由
  • initialize, tools/list, tools/call, resources/list, prompts/list
  • 通过Zod进行输入/输出验证

MCPSessionManager

可选的会话状态管理器,用于需要跨调用维护状态的工具。

import { MCPSessionManager } from 'mcp-lambda-nodejs';

const sessionManager = new MCPSessionManager();

// Create session
const session = await sessionManager.createSession({ ttlHours: 2 });

// Update state
await sessionManager.updateSessionState(session.sessionId, { lastValue: 42 });

// Read session
const current = await sessionManager.getSession(session.sessionId);

默认存储为 内存中。对于多容器部署,注入自定义 SessionStorage:

import { MCPSessionManager, SessionStorage, MCPSession } from 'mcp-lambda-nodejs';

class DynamoDBSessionStorage implements SessionStorage {
  async get(sessionId: string): Promise {
    /* ... */
  }
  async set(session: MCPSession): Promise {
    /* ... */
  }
  async delete(sessionId: string): Promise {
    /* ... */
  }
  async cleanup(): Promise {
    /* ... */
  }
}

const sessionManager = new MCPSessionManager(new DynamoDBSessionStorage());

请求中的会话ID

通过 mcp-session-id 作为HTTP报头。SDK会自动提取它,并在工具参数不存在时将其注入到工具参数中:

curl -X POST https://... \
  -H "mcp-session-id: user-abc-123" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{...}}'

高级用法

有状态的工具

import { MCPServer, MCPTool, MCPSessionManager, z } from 'mcp-lambda-nodejs';

@MCPServer({ name: 'stateful-server', version: '1.0.0' })
export class StatefulServer {
  private sessionManager = new MCPSessionManager();

  @MCPTool({
    title: 'Increment Counter',
    description: 'Increments a per-session counter',
    inputSchema: { sessionId: z.string().optional() },
    outputSchema: { count: z.number() }
  })
  async increment(params: { sessionId?: string }) {
    const session = params.sessionId ? await this.sessionManager.getSession(params.sessionId) : null;

    const count = ((session?.state.count as number) ?? 0) + 1;

    if (params.sessionId) {
      await this.sessionManager.updateSessionState(params.sessionId, { count });
    }

    return { count };
  }
}

错误处理

在工具方法中抛出-SDK捕获它并返回正确的MCP错误响应:

@MCPTool({
  title: 'Safe Divide',
  description: 'Divides two numbers',
  inputSchema: { dividend: z.number(), divisor: z.number() },
  outputSchema: { result: z.number() }
})
async divide(params: { dividend: number; divisor: number }) {
  if (params.divisor === 0) {
    throw new Error('Division by zero');
  }
  return { result: params.dividend / params.divisor };
}

支持的JSON-RPC方法

方法说明
initialize握手——返回协议版本和功能
tools/list列出所有 @MCPTool-装饰方法
tools/call按名称调用工具
resources/list返回空列表(存根)
resources/read未实施
prompts/list返回空列表(存根)
prompts/get未实施

依赖项

包装用途
@modelcontextprotocol/sdkMCP协议实现
zod架构验证
reflect-metadata装饰元数据
uuid会话ID生成

许可证

MIT© 蒂亚戈·维拉斯

贡献

  1. 分叉回购
  2. 创建要素分支
  3. 通过测试进行更改
  4. 打开拉取请求

问题:

目录标签

目录标签

服务器框架TypeScript会话管理AWSLambda本地部署TypeScriptSDKJSON-RPC

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

session

工具数量(toolCount,工具数)

1

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明session部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP