文章视频教程: https://www.bilibili.com/video/BV1wWd8YNEZY/?vd_source=e14a954d1c7739b152548d58bf125603

MCP+Lambda

MCP服务器充当MCP客户端与Lambda函数之间的桥梁,使生成式AI模型能够访问和运行Lambda函数作为工具。

社区项目 https://github.com/danilop/MCP2Lambda

但是目前MCP在安全方面还比较弱,所以社区MCP工具基本都是本地工具,Lambda能不能也本地部署。

Refunc是基于K8S的一个本地化的Lambda平台,可以实现本地部署Lambda函数。

MCP+Refunc

Refunc社区跟进MCP发展,实现了任意函数通过MCP开放调用。

https://github.com/refunc/mcp-server

部署 Refunc

refunc-system 命名空间下部署所有 Refunc 组件。

kubectl apply -f https://raw.githubusercontent.com/refunc/mcp-server/refs/heads/main/deploy/play-all-in-one.yaml

接着,将 Refunc 服务代理到本地。

kubectl port-forward svc/aws-api 8000:http --address 0.0.0.0 -n refunc-system
kubectl port-forward svc/mcp-server 8001:http --address 0.0.0.0 -n refunc-system

注意:演示部署中的数据是非持久化的。

创建函数

使用 refunc-cli 创建一个函数。

pip install -U refunc-cli
mkdir mcp-demo && cd mcp-demo
rfctl init

main.py 中编写任意代码,演示将回显一条问候消息。

AWS_DEFAULT_ENDPOINT=http://127.0.0.1:8000 rfctl create

注意:您需要一个 Python 3 环境。

创建 MCP 端点

编辑 lambda.yaml 并粘贴以下代码。

metadata:
  name: mcp-demo
  namespace: refunc-system
spec:
  build:
    source: .
    manifest: requirements.txt
    language: python
    architecture: x86_64
  handler: main.lambda_handler
  timeout: 120
  runtime: "python3.10"
  concurrency: 1
  environment:
    ENV_TEST: TEST
#  url:
#    cors:
#      allowCredentials: true
#      allowHeaders: "*"
#      allowMethods: "*"
#      allowOrigins: "*"
#      exposeHeaders: "*"
#      maxAge: 300
  events:
    # - name: hourly
    #   type: cron
    #   mapping:
    #     cron: 0 * * * *
    #     location: Asia/Shanghai
    #     args:
    #       var1: value1
    #     saveLog: false
    #     saveResult: false
    - name: mcp
      type: mcp
      mapping:
        args:
          token: mcp-demo
          tools:
            - name: echo-hello
              desc: Echo a hello msg
              schema:
                type: object
                properties: {}
                required: []
        saveLog: false
        saveResult: false

接下来,运行以下命令更新配置:

AWS_DEFAULT_ENDPOINT=http://127.0.0.1:8000 rfctl update-config

演示的 MCP SSE 端点为:http://127.0.0.1:8001/refunc-system/mcp-demo/test/mcp-demo/sse

Refunc MCP SSE URL 路径格式为:/namespace/<token-secret-name>/<token>/<func-name>/sse

Refunc MCP 事件规范

- name: mcp
  type: mcp # 事件类型必须为 mcp。
  mapping:
    args:
      token: mcp-demo # 可以在 play-all-in-one.yaml 中找到的 token 秘钥名称。
      tools: # MCP 工具
        - name: echo-hello # MCP 工具名称
          desc: Echo a hello msg # MCP 工具描述
          schema: # MCP 工具参数,用有效的 JSON Schema 描述。
            type: object
            properties: {}
            required: []
    saveLog: false
    saveResult: false

事件的tools字段是一个数组,您可以通过一个函数实现多个tool。在调用函数时,Refunc 会添加两个内置参数:_call_type_call_method,其中 _call_method 是tool的名称。_call_type会表示调用来自MCP的什么类型,Tool、Resource或者Prompts。