项目简介
'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环境中运行。典型的安装流程包括:
- 配置Kubernetes访问: 确保你的环境中配置了有效的Kubernetes连接(通过'~/.kube/config'或Service Account,项目支持in-cluster和kubeconfig两种模式)。
- 构建和部署: 克隆仓库,构建包含本应用的Docker镜像。然后编写Kubernetes manifest文件(Deployment、Service等),将该管理器应用部署到你的Kubernetes集群中。确保Service配置正确,以便MCP客户端能够访问到管理器应用的MCP端口(默认为8080)。
- 权限配置: 确保部署本应用的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协议与其交互:
-
读取资源 (Resource Read):
- 获取管理器版本:读取 'config://version' 资源。
- 获取可用服务器预设配置:读取 'config://presets' 资源。
-
调用工具 (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与计算