此仓库包含运行OpenStack MCP服务器以及一个非常基础的代理程序代码和说明,用于测试。
本PoC采用的方法如下:
使用OpenStack codegenerator项目(openstack-code-generator)为OpenStack创建OpenAPI规范。
使用mcp-openapi项目从过滤后的完整OpenAPI规范中启动多个MCP服务器(每个OpenStack组件一个)。
使用agent代码通过LLM与MCP服务器进行交互。
对于快速测试,您只需遵循快速入门指南,但如果您想做不同的事情,则需要查阅运行指南。
我们假设您已访问到一个OpenStack部署和一个LLM,因为它们是运行所必需的。
您还需要uv包管理器。如果没有安装,可以使用sudo dnf install uv来安装它。
我们将使用两个终端,一个用于MCP服务器,另一个用于代理。
我们将克隆此仓库,并仅包含运行所需的最小外部项目。
$ git clone --shallow-submodules \
--recurse-submodules=mcp-openapi \
https://github.com/Akrog/mcp-openstack.git
$ cd mcp-openstack
首先我们需要配置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目录:
$ cd agent
现在我们将确保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 LLM端点的密钥/令牌。
然后编辑agent.json文件,用我们的LLM地址替换<LLM_URL>占位符,并用要使用的模型替换<MODEL>。例如,对于Anthropic,我们可能会有如下内容:
{
"base_url": "https://api.anthropic.com/v1",
"model": "claude-3-5-haiku-20241022",
< ... >
}
现在我们只需要启动代理:
$ uv run main.py
我们现在可以询问有关部署的问题,并在MCP服务器终端上查看REST API调用。
例如,要获取nova风味,我们可以这样做:
$ uv run main.py
LLM: claude-3-5-haiku-20241022 @ https://api.anthropic.com/v1 工具: 46
>>> 我的风味有哪些?
请注意,代理没有记忆功能,因此每次提示都会是LLM的新提示。