服务器部署工具

CloudMCP是一个Golang库,简化了将Model Context Protocol (MCP)服务器部署到AWS Lambda的过程,提供生产级安全性和可观察性。

  • by fogfish
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 fogfish/cloudmcp

使用说明

Cloud-Native Serverless Model-Context-Protocol (MCP) Server

将模型上下文协议服务器部署到AWS Lambda,无需担心基础设施问题

CloudMCP是一个Golang库,简化了 模型上下文协议(MCP) 服务器到 AWS Lambda 后面A API网关,使用AWS CDK作为基础设施代码。它弥合了两者之间的差距 模型上下文协议 以及AWS无服务器基础架构。在Go中编写MCP工具,在几分钟内将其部署为Lambda函数。没有样板,没有基础设施难题。

为什么 cloudmcp 图书馆?

构建MCP服务器很容易。将它们作为具有适当身份验证、扩展和监控的最终产品部署到生产中需要付出真正的努力。这个库消除了这种摩擦,并为您提供了开箱即用的生产就绪设置。

您将获得:

  • 建立在 官方Go MCP SDK 默认情况下,确保严格的协议正确性、长期兼容性和高性能的生产级MCP服务器。
  • 无服务器优先架构 具有即时自动缩放、零服务器管理、按使用付费经济性以及完全专注于MCP逻辑而非基础设施的干净开发人员体验。
  • 生产级安全 在AWS API网关使用作战测试认证和授权层。
  • 可插拔身份提供者 使用AWS Cognito、Auth0等进行无缝JWT验证。
  • 基于AWS IAM的安全 用于细粒度权限、安全服务交互和云原生去极化。
  • 基础设施即代码 通过使用AWS CDK进行版本控制、可重复的部署。
  • 开箱即用的可观察性 CloudWatch为每个MCP请求记录日志、指标和结构化跟踪。
  • 一次指挥部署 在全球范围内运送新的MCP工具和服务器,几乎没有运营负担。
  • 无需费力即可移植到服务器(长时间运行)模式 当您的规模或延迟配置文件需要时,无需更改代码,即可从Lambda无缝切换到持久服务器部署。

快速开始

go get github.com/fogfish/cloudmcp

看 examples/helloworld 以一个完整的工作示例作为开始。下面是服务器的简约骨架。

定义您的MCP工具,添加部署配置,运行 cdk deploy.您的MCP服务器现在位于API网关上,已准备好让AI助手呼叫。

import (
  "github.com/modelcontextprotocol/go-sdk/mcp"
  "github.com/fogfish/cloudmcp"
)

// define your tool using **offical Golang SDK**
func Sayer(ctx context.Context, req *mcp.CallToolRequest, input Input) (*mcp.CallToolResult, Output, error) {
  //...
}

// define your server using **offical Golang SDK**
func HelloWorld() (*mcp.Server, error) {
  server := mcp.NewServer(/* ... */)
  return server, nil
}

// deploy MPC server as serverless gateway
func main() {
  cloudmcp.New(server.HelloWorld).
    Hostless().
    AccessApiKey("access", "secret").
    Build()
}

无服务器MCP

图书馆同时提供 高级API 用于以最小的配置将整个MCP服务器部署为Lambda函数,以及 低级API 用于对基础架构进行高级、细粒度的控制。这两种方法都需要对AWS CDK v2有基本的了解,但低级API假设您正在编写完整的IaC,而高级API则提供了一个简单而强大的抽象,大大降低了配置的复杂性。当您将MCP集成到现有的云原生应用程序中时,需要使用低级api,对于备用MCP部署,高级api就足够了。

高级API使用构建器模式,您只需提供服务器工厂功能,而库则负责连接、打包和将MCP服务器部署到Lambda(它自动生成Lambda代码):

cloudmcp.New( func() (*mcp.Server, error) )

只需要配置 托管 和 安全 部署前的选项。

托管

MCP服务器托管在AWS API网关之后。您可以使用默认主机名和TLS证书(所谓的 无主机 模式),或提供自定义主机名和TLS证书。使用自定义域需要正确配置AWS Route 53中的DNS区域,并通过AWS证书管理器配置TLS证书(有关详细说明,请参阅AWS官方文档)。

  • .Hostless() 使用默认主机名作为端点
  • .Host(domain, tlsarn) 配置自定义端点

安全

使用单个方法调用选择您的安全模型:

  • .AccessPublic() -无身份验证(仅用于开发)
  • .AccessApiKey(access, secret) -基于简单密钥的身份验证
  • .AccessJWT(issuer, audiences...) -行业标准JWT代币
  • .AccessAwsCognito(poolArn, clients...) -与AWS Cognito集成
  • .AllowAccessIAM(authorizer, principal) -AWS到AWS的安全通信

IAM身份验证

由于该库通过ApiKey和IAM增强了身份验证选项,因此它提供了一个简单的客户端库,用于创建具有内置身份验证配置的MCP客户端传输。看 pkg/auth

import (
  "github.com/fogfish/cloudmcp/pkg/auth"
)

transport, err := auth.NewTransportIAM(/* ... */)

client := mcp.NewClient(/* ... */)
client.Connect(context.Backgorund(), transport, nil)

CloudWatch日志

自动创建具有可配置保留的日志组。日志显示在 /app/{ServerName} 保留5天(可调)。

示例

  • 你好世界 -使用高级api进行最低限度的MCP服务器部署
  • 无服务器 -使用低级api进行自定义CDK配置的高级模式

这两个例子都包括工作代码和可部署的单个 cdk deploy 命令。

在VS代码中使用

无服务器MCP的集成与其他任何MCP一样简单 mcp.json

{
  "servers": {
    "helloworld": {
      "type": "http",
      "url": "https://0000000000.execute-api.eu-west-1.amazonaws.com/api/helloworld",
      "headers": {
        "Authorization": "Basic YWNjZXNzOnNlY3JldA"
      }
    },
  }
}

何时使用 cloudmcp 图书馆

✅ 您需要生产中的MCP服务器,而不仅仅是本地开发
✅ 你想要无服务器的好处:自动扩展、按使用付费、零维护
✅ 您使用AWS或愿意在那里部署
✅ 您希望使用AWS CDK将基础架构视为代码

❌ 您需要WebSocket/SSE流(Lambda代理限制)
❌ 您已选择其他云提供商

需求

  • 转到1.25+
  • AWS账户
  • AWS-CDK-CLI: npm install -g aws-cdk
  • 已配置AWS凭据

相关项目

贡献

iq 是 麻省理工学院 通过GitHub pull请求获得许可并接受贡献:

  1. 叉起来
  2. 创建功能分支(git checkout -b my-new-feature)
  3. 提交您的更改(git commit -am 'Added some feature')
  4. 推到分支(git push origin my-new-feature)
  5. 创建新的Pull请求

许可证