使用说明
Oci mcp智能查询
Oci mcp智能查询 是一个使用人工智能的助手 模型上下文协议(MCP) 和 生成型人工智能(Ollama/OpenAI兼容模型) 到 使用自然语言编排Oracle云基础架构(OCI)资源.
你可以:
- 用简单的英语问:
- “从以下位置获取所有实例
test隔间” - “创建计算实例
SMARTVMTEST在root/test使用任何子网” - “终止
AUTOTEST实例在test隔间”
- “从以下位置获取所有实例
- 让 规划师LLM 制定执行计划。
- 拥有 MCP客户端 使用 MCP服务器,它通过官方Python SDK与OCI通信。
- 使用 流线型UI 它看起来类似于现代的人工智能聊天客户端。
1.特点
- 🔹 自然语言→ OCI行动 通过Ollama/LLM规划师
- 🔹 MCP服务器 公开OCI工具:
get_compartment_ocidlist_instancesget_instance_by_nameget_available_subnetsget_subnet_by_nameget_latest_image_by_prefixget_images_by_prefixcreate_compute_instancedelete_instance
- 🔹 智能规划 -规划者决定调用哪些工具以及如何将它们链接起来
- 🔹 流线型UI 具有类似控制台的输出
- 🔹 设计为 可扩展的 更多OCI服务,甚至未来的AWS
2.仓库布局
OCI-MCP-SmartQueryAI/
├── common/
│ └── utils.py
├── config/
│ └── settings.yaml # OCI & app configuration (edit this)
├── docs/
│ └── architecture.md
├── mcp_server/
│ ├── mcp_oci_server.py # FastAPI + MCP server for OCI tools
│ ├── oci_helper.py # OCI SDK helper methods
│ └── tools/ # MCP tool registration
├── mcp_client/
│ ├── mcp_client_helper.py # MCP HTTP client wrapper
│ ├── streamlit_app.py # (optional) Streamlit entrypoint
│ └── ollama/
│ ├── smart_ollama_mcp_client.py # CLI AI planner client
│ └── planner_prompt.txt # System prompt for planner LLM
├── scripts/
│ └── test_mcp_client.py # Simple direct MCP client test
├── voice-assistant/
│ └── speech_to_text.py # Future voice integration
├── control_services.sh # Helper to start/stop MCP server + Streamlit UI
├── requirements.txt
└── README.md
3.先决条件
3.1.操作系统/运行时
- Linux(在类似Oracle Linux/RELL的发行版上测试)
- python 3.10+ (用3.12测试)
bash/POSIX外壳(用于control_services.sh)
3.2.OCI设置
- OCI配置文件
创建/验证 ~/.oci/config 使用配置文件(默认值: DEFAULT):
[DEFAULT]
user=ocid1.user.oc1..aaaaaaaa...
fingerprint=aa:bb:cc:dd:...
key_file=/home/<user>/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..aaaaaaaa...
region=us-phoenix-1
- 政策/IAM
与您的配置关联的用户(或组)必须具有以下权限:
Allow group <group-name> to inspect compartments in tenancy
Allow group <group-name> to read virtual-network-family in tenancy
Allow group <group-name> to inspect images in tenancy
Allow group <group-name> to manage instance-family in compartment <target-compartment-name>
调整范围(tenancy 与特定隔间相比)。
3.3。奥拉马/LLM
安装并运行 奥拉玛 在可从MCP客户端访问的机器上:
# On the Ollama host
curl -fsSL https://ollama.com/install.sh | sh # or use the official installer
ollama serve # typically listens on :11434
# Pull a suitable model (e.g., llama3.2)
ollama pull llama3.2
然后在环境中设置(在运行客户端/UI的计算机上):
export OLLAMA_URL="http://<ollama-host>:11434/api/chat"
export OLLAMA_MODEL="llama3.2"
您可以根据需要交换其他支持聊天的模型,只要它们支持OpenAI风格
/api/chat通过Ollama接口。
4.克隆和安装
# 1) Clone the repository
git clone https://github.com/bhaskaro/OCI-MCP-SmartQueryAI.git
cd OCI-MCP-SmartQueryAI
# 2) Create & activate virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# 3) Install dependencies
pip install --upgrade pip
pip install -r requirements.txt
# 4) Ensure Python can see this repo as a package
export PYTHONPATH="$(pwd)"
5.配置
5.1. config/settings.yaml
更新配置文件以匹配您的环境。典型的布局可能包括:
oci:
profile: DEFAULT # profile from ~/.oci/config
region: us-phoenix-1 # OCI region
default_compartment: test # logical name used by your helper / planner
server:
host: 0.0.0.0
port: 8000
streamlit:
host: 0.0.0.0
port: 8501
调整按键/结构以匹配当前
settings.yaml如果回购发生了变化。
这里是 更新了5.2环境变量部分,重写得很干净,以匹配你的新 .env-基于配置模型。
你可以 将此内容直接复制并粘贴到README.md中.
5.2.环境变量
应用程序现在从以下位置加载配置 .env 文件 使用 python-dotenv.
这使敏感值远离源代码,并简化了部署。
步骤1——创建 .env 文件
从项目根:
cd OCI-MCP-SmartQueryAI
cat > .env << 'EOF'
# LLM / Ollama
OLLAMA_URL=http://<ollama-host>:11434/api/chat
OLLAMA_MODEL=llama3.2
# MCP server
MCP_BASE_URL=http://localhost:8000/mcp
# (Optional) OCI config overrides
OCI_CONFIG_FILE=$HOME/.oci/config
OCI_PROFILE=DEFAULT
EOF
或者,如果您更喜欢使用示例文件:
cp .env.example .env
步骤2——覆盖每个会话变量(可选)
如果您想在不编辑的情况下临时覆盖值 .env:
export OLLAMA_URL=http://my-new-host:11434/api/chat
export OLLAMA_MODEL=llama3.2
export MCP_BASE_URL=http://localhost:8000/mcp
应用程序将更喜欢导出变量,而不是 .env.
6.运行堆栈
您有两个选择:
6.1.使用 control_services.sh (推荐)
从repo根目录:
chmod +x control_services.sh
# Start MCP server + Streamlit UI
./control_services.sh start
# Stop both
./control_services.sh stop
# Restart both
./control_services.sh restart
脚本将:
- 启动 MCP OCI服务器 端口上的(FastAPI+MCP)
8000. - 启动 流线型UI 在港口
8501.
日志通常会转到:
- MCP服务器:
/tmp/mcp_server.log - UI:
/tmp/streamlit_ui.log
6.2.手动启动(高级)
MCP服务器:
# From repo root, with venv activated and PYTHONPATH set
uvicorn mcp_server.mcp_oci_server:app --host 0.0.0.0 --port 8000
流线型用户界面:
# From repo root
streamlit run mcp_client/ollama/streamlit_ollama_ui.py \
--server.address 0.0.0.0 \
--server.port 8501
7.防火墙/网络(Oracle Linux示例)
如果您想远程访问Streamlit UI:
sudo firewall-cmd --add-port=8501/tcp --permanent
sudo firewall-cmd --reload
# (Similarly for MCP server if exposed remotely)
sudo firewall-cmd --add-port=8000/tcp --permanent
sudo firewall-cmd --reload
然后在浏览器中打开:
- 流线型UI →
http://<vm-ip>:8501/
8.通过CLI(智能Ollama MCP客户端)进行测试
AI规划器客户端位于 mcp_client/ollama/smart_ollama_mcp_client.py.
8.1.基本模式
从回购根目录(venv已激活,PYTHONPATH已设置):
python -m mcp_client.ollama.smart_ollama_mcp_client "your natural language query here"
8.2.示例
8.2.1.列出隔间中的实例
python -m mcp_client.ollama.smart_ollama_mcp_client \
"get list of instances from test compartment"
预期规划师计划(简化):
{
"steps": [
{
"tool": "get_compartment_ocid",
"args": { "compartment_name": "test" },
"save_as": "compartment_ocid"
},
{
"tool": "list_instances",
"args": { "compartment_ocid": "$compartment_ocid" },
"save_as": "instances"
}
]
}
客户将打印:
- 生成的计划
- 每次MCP工具调用
- 最终变量,包括
instances包含实例详细信息。
8.2.2.创建计算实例
查询示例:
python -m mcp_client.ollama.smart_ollama_mcp_client \
"create compute instance with the name SMARTVMTEST in compartment root/test. \
Take whatever subnet available in the same compartment."
典型方案:
-
get_compartment_ocid→ 解决root/test -
get_available_subnets→ 在该隔间中选择一个子网 -
get_latest_image_by_prefix→ 例如,最新oracle-linux图像 -
create_compute_instance→ 已解析OCID和默认值:- 形状:
VM.Standard.E2.1.Micro(或按配置) - 可选的
cpu_mem_shape用于弯曲 - 子网OCID
- 图像OCID
- 形状:
8.2.3.获取单实例详细信息
python -m mcp_client.ollama.smart_ollama_mcp_client \
"get AUTOTEST instance details from test compartment"
规划师应:
- 解析隔间OCID
- 呼叫
get_instance_by_name(不是list_instances)
8.2.4.终止实例
python -m mcp_client.ollama.smart_ollama_mcp_client \
"terminate AUTOTEST instance in test compartment"
规划师应:
- 解析隔间OCID
get_instance_by_namedelete_instance(使用$instance.id)
底层辅助方法将:
- 呼叫
terminate_instance - 民意调查
TERMINATED状态达到配置的超时时间 - 返回结构化结果(例如。,
{ "instance_ocid": "...", "status": "TERMINATED" })
8.2.5.按前缀获取最新图像
python -m mcp_client.ollama.smart_ollama_mcp_client \
"get latest image with prefix oracle-linux from compartment root"
计划员:
get_compartment_ocid为了rootget_latest_image_by_prefix随着"oracle-linux"
帮手:
- 用途
list_images随着sort_by=TIMECREATED,sort_order=DESC - 按不区分大小写的前缀筛选
- 返回最新匹配的图像(id、name、time_created、lifecycle_state)
8.2.6.按前缀获取所有图像
python -m mcp_client.ollama.smart_ollama_mcp_client \
"get all images with prefix oracle-linux from compartment root"
计划员:
get_compartment_ocidget_images_by_prefix
助手使用 list_call_get_all_results 拿来 所有页面 并返回所有匹配图像的列表。
9.使用Streamlit UI
曾经 control_services.sh (或手动命令)已启动UI:
-
打开浏览器:
http://<vm-ip>:8501/ -
您将看到:
-
A. 头球 (例如,“OCI-MCP SmartQueryAI控制台”)
-
A. 红色水平线 标题下
-
A. 文本框 输入您的自然语言查询
-
A. 提交 按钮
-
控制台风格区域,打印:
- 生成的计划
- 每次MCP工具调用
- 最终变量/结果
-
A. 页脚 另一条红线和一条联系线(为保护隐私,电子邮件被屏蔽)
-
示例查询(与CLI相同):
get list of instances from test compartmentcreate compute instance with the name SMARTVMTEST in compartment root/testterminate AUTOTEST instance in test compartmentget all images with prefix oracle-linux from compartment root
10.可扩展性
OCI MCP SmartQueryAI旨在 开放的:
-
添加新的辅助方法 在
mcp_server/oci_helper.py(例如,卷、负载平衡器、对象存储、自治数据库)。 -
将它们注册为MCP工具 在
mcp_server/mcp_oci_server.py. -
把它们交给计划者 通过更新
planner_prompt.txt与:- 工具名称
- 参数
- 行为规则/何时使用
-
可选择将计划器提示调整为:
- 亚马逊云服务
- 多云场景
- 高阶工作流(例如,“克隆此实例”、“快照然后终止”)
这使得该框架成为 全AI驱动的云编排.
11.安全注意事项
-
这个工具可以 创建和销毁真实的OCI资源.
-
始终进行测试 非生产区 第一。
-
考虑添加:
- “干运行”模式
- 明确确认破坏性操作(
delete_instance等等) - 日志/审计挂钩
