一个现代的TypeScript包,实现了Model Context Protocol (MCP),具有模块化架构和对AWS Lambda流的支持。
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);
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协议的一个特定方面:
支持多种传输机制:
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编写的,并提供了全面的类型定义:
import type {
McpTool,
McpResource,
McpPrompt,
JsonRpcMessage,
ToolDefinition,
ResourceDefinition,
PromptDefinition,
} from 'serverless-mcp';
MIT - 查看LICENSE文件了解详情。
欢迎贡献!请阅读我们的贡献指南并提交拉取请求到我们的仓库。