关于 OpenStack MCP + Agent PoC
OpenStack MCP + Agent PoC 是用于测试 OpenStack MCP 服务及基础 Agent 的概念验证项目。它根据 OpenStack API 生成多个 MCP 服务,并通过 LLM 查询部署;Agent 不保留对话记忆。
主要功能
- 01从 OpenAPI 规范生成 MCP 服务
- 02按 OpenStack 组件拆分服务
- 03通过 LLM 查询 OpenStack 部署
- 04限制启用的 REST API 路径
适用场景
- 01查询 OpenStack 部署信息
- 02查看 Nova flavor 列表
MCP 相关
项目通过 mcp-openapi 从筛选后的 OpenStack OpenAPI 规范启动多个 MCP 服务,供配套 Agent 通过 LLM 调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
OpenStack MCP + Agent PoC
此仓库包含运行 OpenStack MCP 服务以及用于测试它的基础 Agent 配套程序所需的代码和说明。
此 PoC 采用的方法如下:
-
使用 OpenStack
codegenerator项目(openstack-code-generator)为 OpenStack 生成 OpenAPI 规范。 -
使用
mcp-openapi项目,根据经过筛选的 OpenStack 各组件完整 OpenAPI 规范,启动多个 MCP 服务(每个组件一个)。 -
使用
agent代码通过大模型与 MCP 服务交互。
若只是快速测试,无需完成上述所有步骤,只需遵循快速入门指南即可;但如果想进行其他操作,则需要阅读运行相关程序指南。
快速入门
我们假设你可以访问 OpenStack 部署和大模型,因为运行这些程序需要它们。
你还需要 uv 包管理器。如果尚未安装,可以使用 sudo dnf install uv 安装。
我们将使用两个终端,一个用于 MCP 服务,另一个用于 Agent。
克隆此仓库
我们将克隆此仓库,并仅包含运行程序所需的最少外部项目。
$ git clone --shallow-submodules \
--recurse-submodules=mcp-openapi \
https://github.com/Akrog/mcp-openstack.git
$ cd mcp-openstack
运行 MCP 服务
首先,我们需要配置 MCP 服务。为此,我们将编辑 servers.yaml 文件,并将 <NOVA_PUBLIC_URL>、<CINDER_PUBLIC_URL> 和 <GLANCE_PUBLIC_URL> 占位符替换为集群对应的值。
你会注意到,我们只启用了一部分 REST API 路径,以避免工具过多,超出模型的上下文窗口,或导致模型产生幻觉。
现在可以运行服务:
$ cd mcp-openapi
$ uv run main.py --config ../servers.yaml
让服务在此终端中持续运行,然后转到另一个终端。
运行 Agent
在另一个终端中,进入 agent 目录:
$ cd agent
OpenStack 客户端配置
现在,我们要确保 OpenStack 客户端配置位于标准位置之一,具体位置详见文档:
agent/~/.config/openstack/
如果运行的是 OSP 18 云,可以通过以下方式获取配置:
$ oc cp openstackclient:/home/cloud-admin/.config/openstack/clouds.yaml ./clouds.yaml
$ oc cp openstackclient:/home/cloud-admin/.config/openstack/secure.yaml ./secure.yaml
大模型配置
我们将创建一个 llm.token 文件,其中包含要使用的 OpenAI 大模型端点的密钥/令牌。
然后编辑 agent.json 文件,将 <LLM_URL> 占位符替换为大模型的地址,并将 <MODEL> 替换为要使用的模型。例如,使用 Anthropic 时,配置可以如下所示:
{
"base_url": "https://api.anthropic.com/v1",
"model": "claude-3-5-haiku-20241022",
< ... >
}
运行 Agent
现在只需启动 Agent:
$ uv run main.py
开始使用
现在可以询问有关部署的问题,并在 MCP 服务终端中查看 REST API 调用。
例如,要获取 nova flavors,可以执行:
$ uv run main.py
LLM: claude-3-5-haiku-20241022 @ https://api.anthropic.com/v1 Tools: 46
>>> What are my flavors?
请注意,Agent 没有记忆,因此每条提示词都会作为一条全新的提示词发送给大模型。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。