项目简介

'mcp-ephemeral-k8s' 是一个Python应用,它既作为一个Model Context Protocol (MCP) 服务器运行,也提供了一个配套的FastAPI接口。其核心价值在于允许用户利用Kubernetes的基础设施,按需(即临时地)启动、监控和终止其他功能性MCP服务器实例(例如用于Fetch、Git、GitHub、GitLab等任务的服务器)。这使得LLM客户端可以通过连接到这个中心管理器服务器,来动态获取和利用多种多样的MCP功能,而无需长期运行所有潜在需要的服务器。

主要功能点

  • 按需启动/停止MCP服务器: 利用Kubernetes Job动态地创建和删除其他类型的MCP服务器实例。
  • 管理MCP服务器生命周期: 监控已启动的临时MCP服务器的状态,并在不再需要时将其终止。
  • 通过MCP接口进行管理: 提供遵循MCP标准的工具(Tools),允许LLM客户端直接通过Tool Call请求来远程控制其他MCP服务器的生命周期。
  • 提供状态和配置信息: 通过MCP资源(Resources)暴露自身版本信息以及可用于启动其他服务器的预设配置列表。
  • 提供FastAPI管理接口: 除了MCP接口外,还提供一个HTTP接口,便于非LLM应用或脚本通过RESTful API进行管理操作。

安装步骤

该项目设计为在Kubernetes环境中运行。典型的安装流程包括:

  1. 配置Kubernetes访问: 确保你的环境中配置了有效的Kubernetes连接(通过'~/.kube/config'或Service Account,项目支持in-cluster和kubeconfig两种模式)。
  2. 构建和部署: 克隆仓库,构建包含本应用的Docker镜像。然后编写Kubernetes manifest文件(Deployment、Service等),将该管理器应用部署到你的Kubernetes集群中。确保Service配置正确,以便MCP客户端能够访问到管理器应用的MCP端口(默认为8080)。
  3. 权限配置: 确保部署本应用的Kubernetes Service Account具有创建和删除Job、Pod、Service等资源的权限。

详细的构建和部署指南通常可在项目的GitHub仓库中找到。

服务器配置 (MCP客户端视角)

作为MCP客户端,你需要连接到 'mcp-ephemeral-k8s' 这个管理器服务器本身,而不是直接连接到它所管理的那些临时服务器。管理器服务器会告诉你如何连接到它所启动的其他服务器。

连接到 'mcp-ephemeral-k8s' 管理器MCP服务器的配置信息:

  • 'server name': 可以是任意有意义的名称,例如 "Kubernetes MCP Manager"。
  • 'command': LLM客户端用于启动与管理器服务器通信进程或建立网络连接的命令。这取决于管理器服务器在Kubernetes中如何部署和暴露。例如:
    • 如果作为Stdio应用运行,命令可能是指向其入口点脚本,如 '["python", "-m", "mcp_ephemeral_k8s.app.mcp"]'(但这不常见于实际部署)。
    • 如果作为网络服务暴露,命令会指向连接程序和服务器的网络地址和端口,例如 '["mcp-client-connect", "sse://your-manager-service-url:8080"]' 或 '["mcp-client-connect", "ws://your-manager-service-url:8080/ws"]'。具体URL和端口取决于你的Kubernetes Service配置。
  • 'args': 传递给'command'的参数,例如指定传输协议或地址。

基本使用方法

一旦你的MCP客户端成功连接到 'mcp-ephemeral-k8s' 管理器服务器,你可以通过标准MCP协议与其交互:

  1. 读取资源 (Resource Read):

    • 获取管理器版本:读取 'config://version' 资源。
    • 获取可用服务器预设配置:读取 'config://presets' 资源。
  2. 调用工具 (Tool Call):

    • 列出所有正在运行的临时服务器: 调用名为 'list_mcp_servers' 的工具。此工具不接受参数。
    • 创建一个新的临时MCP服务器: 调用名为 'create_mcp_server' 的工具。此工具接受以下参数:
      • 'runtime_exec': 字符串,指定运行MCP服务器的可执行程序,例如 '"uvx"' 或 '"npx"'。
      • 'runtime_mcp': 字符串,指定要运行的MCP服务器模块/包名,例如 '"mcp-server-fetch"' 或 '"@modelcontextprotocol/server-github"'。
      • 'env' (可选): 字典,为新服务器设置环境变量,例如 '{"GITHUB_PERSONAL_ACCESS_TOKEN": "your_token"}'。
      • 'wait_for_ready' (可选): 布尔值,是否等待服务器启动并准备就绪(默认为 'true')。
    • 删除一个临时MCP服务器: 调用名为 'delete_mcp_server' 的工具。此工具接受一个参数:
      • 'pod_name': 字符串,要删除的服务器的Kubernetes Pod名称(可以通过 'list_mcp_servers' 获取)。
    • 获取某个服务器的状态: 调用名为 'get_mcp_server_status' 的工具。此工具接受一个参数:
      • 'pod_name': 字符串,要查询状态的服务器的Pod名称。

通过这些工具,LLM客户端可以根据需要动态地创建和使用各种MCP服务器提供的功能。

信息

分类

AI与计算