zsvirt-mcp-server
OfficialZSvirt MCP Server
MCP-сервер, позволяющий ИИ динамически запрашивать и вызывать 2000+ API ZSvirt.
Возможности
Поиск API: поиск API ZStack по ключевым словам с поддержкой нечёткого сопоставления
Описание API: получение подробного описания параметров API
Выполнение API: выполнение API ZStack и возврат результата
Поиск метрик мониторинга: поиск доступных метрик мониторинга
Получение данных мониторинга: получение данных мониторинга по указанным метрикам
Установка
# 从 PyPI 安装
pip install zsvirt-mcp-server
# 或者使用 uv
uv pip install zsvirt-mcp-server💡 Можно не устанавливать, а запустить одной командой через
uvxилиpipx run(см. раздел «Способы использования» ниже)
Конфигурация
Задайте следующие переменные окружения:
export ZSTACK_API_URL="http://localhost:8080" # ZStack API 地址
export ZSTACK_ALLOW_ALL_API="false" # 是否允许写操作(可选,默认 false)
# 认证方式一:用户名密码(会自动登录获取 Session)
export ZSTACK_ACCOUNT="admin" # 账户名
export ZSTACK_PASSWORD="your-password" # 密码(明文)
# 认证方式二:直接传入 SessionID(优先级更高,设置后忽略用户名密码)
export ZSTACK_SESSION_ID="your-session-uuid" # 已有的 Session UUID
# 查询响应控制(可选)
export ZSTACK_QUERY_DEFAULT_LIMIT="50" # Query API 默认 limit(设 0 禁用)
export ZSTACK_RESPONSE_SIZE_LIMIT="65536" # 响应大小上限,字节(设 0 禁用)Описание способов аутентификации
Способ | Переменные окружения | Описание |
Имя пользователя и пароль |
| Автоматический вход для получения Session |
Session ID |
| Использование существующего Session (приоритет выше) |
💡 Если заданы и
ZSTACK_SESSION_ID, и имя пользователя с паролем, приоритет отдаётся Session ID
Примечание по безопасности
По умолчанию разрешены только API на чтение, включая:
Query*— запросыGet*— получениеList*— спискиDescribe*— описанияCheck*— проверкиCount*— подсчётПрочие операции только на чтение...
Для вызова операций записи (например, CreateVmInstance, DeleteVolume и т.д.) необходимо задать:
export ZSTACK_ALLOW_ALL_API="true"⚠️ Предупреждение: после включения операций записи ИИ сможет выполнять опасные действия — создание, удаление, изменение. Используйте с осторожностью!
Управление размером ответов Query
В Query API по умолчанию подставляется limit=50, чтобы предотвратить переполнение контекстного окна модели при полной выгрузке данных. Если ответ превышает 64 КБ, список inventories автоматически обрезается для сохранения корректного JSON.
Переменная окружения | Значение по умолчанию | Описание |
|
| Значение по умолчанию, автоматически подставляемое в Query API, если |
|
| Максимальный размер ответа (байт), при превышении выполняется обрезка; |
Явно переданный
limitне перезаписываетсяПри обрезке в ответ добавляется поле
_truncation, подсказывающее использоватьlimit/startдля постраничной навигации илиfieldsдля сокращения возвращаемых полей
Способы использования
Запуск в качестве MCP-сервера
# 使用 uvx 直接运行(无需安装)
uvx zsvirt-mcp-server
# 或使用 pipx
pipx run zsvirt-mcp-server
# 如果已安装,直接运行
zsvirt-mcp-serverЗапуск в режиме SSE
По умолчанию используется транспорт stdio. Для режима SSE можно переключиться через аргументы командной строки или переменные окружения:
# 命令行方式
uvx zsvirt-mcp-server --transport sse --host 0.0.0.0 --port 8000
# 环境变量方式
export MCP_TRANSPORT="sse"
export MCP_HOST="0.0.0.0"
export MCP_PORT="8000"
export MCP_PATH="/sse" # 可选
uvx zsvirt-mcp-serverПримечание: также поддерживаются
FASTMCP_HOST/FASTMCP_PORT/FASTMCP_MOUNT_PATH(нативные переменные окружения FastMCP)
Запуск в режиме Streamable HTTP
# 命令行方式
uvx zsvirt-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --streamable-path /mcp
# 环境变量方式
export MCP_TRANSPORT="streamable-http"
export MCP_HOST="0.0.0.0"
export MCP_PORT="8000"
export MCP_STREAMABLE_PATH="/mcp" # 可选
uvx zsvirt-mcp-serverПримечание: также поддерживается
FASTMCP_STREAMABLE_HTTP_PATH
Аутентификация через HTTP-заголовки (режим мультитенантности)
В режимах SSE или streamable-http администратор может запустить общий MCP-сервер, а несколько пользователей передают свои учётные данные через HTTP-заголовки, обеспечивая изоляцию между арендаторами.
Поддерживаемые HTTP-заголовки:
HTTP Header | Соответствующая переменная окружения | Описание |
|
| Имя учётной записи |
|
| Пароль |
|
| Существующий Session (приоритет выше имени пользователя и пароля) |
|
| Адрес управляющего узла ZStack (можно проксировать несколько сред) |
Приоритет учётных данных: HTTP-заголовки > переменные окружения
Типичное применение:
# 管理员启动共享 MCP Server
ZSTACK_ALLOW_ALL_API=false uvx zsvirt-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000Пользователь добавляет HTTP-заголовки в конфигурацию MCP-клиента и использует свою учётную запись:
{
"mcpServers": {
"zstack": {
"transport": "streamable-http",
"url": "http://mcp-server:8000/mcp",
"headers": {
"X-ZStack-Account": "user-a",
"X-ZStack-Password": "password-a",
"X-ZStack-API-URL": "http://zstack-env-1:8080"
}
}
}
}Особенности:
Session для одной учётной записи автоматически кэшируется и переиспользуется — новый Session не создаётся при каждом запросе
Запросы с разными
X-ZStack-API-URLмаршрутизируются в разные среды ZStackВ режиме stdio HTTP-заголовков нет — автоматически выполняется откат к аутентификации через переменные окружения, поведение не меняется
Настройка в Claude Desktop
Добавьте в claude_desktop_config.json:
Способ 1: имя пользователя и пароль
{
"mcpServers": {
"zstack": {
"command": "uvx",
"args": ["zsvirt-mcp-server"],
"env": {
"ZSTACK_API_URL": "http://your-zstack-server:8080",
"ZSTACK_ACCOUNT": "admin",
"ZSTACK_PASSWORD": "your-password",
"ZSTACK_ALLOW_ALL_API": "false"
}
}
}
}Способ 2: Session ID
{
"mcpServers": {
"zstack": {
"command": "uvx",
"args": ["zsvirt-mcp-server"],
"env": {
"ZSTACK_API_URL": "http://your-zstack-server:8080",
"ZSTACK_SESSION_ID": "your-session-uuid",
"ZSTACK_ALLOW_ALL_API": "false"
}
}
}
}💡 Установите
ZSTACK_ALLOW_ALL_APIв"true", чтобы включить операции записи (создание/удаление/изменение и т.д.)
Доступные инструменты
1. search_api
Поиск API ZStack по ключевым словам.
Параметры:
keywords(list[str]): ключевые слова для поиска, например["Query", "Vm"]category(str, необязательно): фильтр по категорииlimit(int, по умолчанию 15): максимальное количество возвращаемых результатов
2. describe_api
Получение подробного описания параметров указанного API.
Параметры:
api_name(str): имя API, например"QueryVmInstance"
3. execute_api
Выполнение API ZStack.
Параметры:
api_name(str): имя APIparameters(dict): параметры API
4. search_metric
Поиск доступных метрик мониторинга.
Параметры:
keywords(list[str]): ключевые слова для поискаnamespace(str, необязательно): фильтр по пространству имён (поддерживается нечёткое сопоставление, напримерvm/host)limit(int, по умолчанию 20): максимальное количество возвращаемых результатовmatch_mode(str, по умолчаниюor): режим сопоставления ключевых слов (and/or)prefer_namespaces(list[str], необязательно): список пространств имён для приоритетной сортировки (по умолчанию["ZStack/VM","ZStack/Host"])
💡 Подсказка: если не уверены в namespace, можно сначала не передавать его — в результатах будет указано значение namespace для выбора 💡 По умолчанию
match_mode=or(объединение по нескольким ключевым словам); для пересечения явно передайтеand💡 Имена метрик могут совпадать в разных пространствах имён; рекомендуется указыватьnamespaceилиprefer_namespaces, чтобы обеспечить приоритетную сортировку
5. get_metric_data
Получение данных мониторинга.
Параметры:
namespace(str): пространство имёнmetric_name(str): имя метрикиstart_time(str|int, необязательно): время начала (ISO или временная метка в секундах)end_time(str|int, необязательно): время окончания (ISO или временная метка в секундах)period(int, по умолчанию 60): период дискретизации (секунды)labels(list[str]|dict, необязательно): фильтр по меткам, например["VMUuid=xxx"]или{"VMUuid":"xxx"}summary_only(bool, необязательно): возвращать только статистическую информацию (количество точек/максимум/минимум/среднее/дисперсия/стандартное отклонение)
Примечание по объёму данных:
Оценка количества возвращаемых точек:
ceil((end_time - start_time) / period) * series_countseries_count— количество различных комбинаций меток; еслиlabelsне переданы, может быть возвращено несколько серийРекомендуется сокращать временной диапазон, увеличивать
periodили добавлять фильтрlabels, чтобы избежать слишком большого вывода
6. get_metric_summary
Получение агрегированного TopN метрик мониторинга (с группировкой по label_key).
Параметры:
namespace(str): пространство имёнmetric_name(str): имя метрикиlabel_key(str): ключ метки, напримерVMUuid/HostUuidmetric_names(list[str], необязательно): объединение нескольких метрик (например, in/out)start_time(str|int, необязательно): время начала (ISO или временная метка в секундах)end_time(str|int, необязательно): время окончания (ISO или временная метка в секундах)period(int, по умолчанию 60): период дискретизации (секунды)aggregate(str, по умолчанию max): способ агрегации одной метрики (max/avg/sum/min)combine(str, по умолчанию sum): способ объединения нескольких метрик (sum/avg/max/min)threshold_op(str, необязательно): оператор сравнения порога (>,>=,<,<=,==,!=)threshold_value(number, необязательно): значение порогаtop_n(int, по умолчанию 10): количество возвращаемых записейresolve_resource(str, необязательно):vmилиhost, для разрешения имён
Синтаксис условий Query API
Для API класса Query параметр conditions поддерживает следующие операторы:
Оператор | Значение | Пример |
| равно |
|
| не равно |
|
| больше |
|
| больше или равно |
|
| меньше |
|
| меньше или равно | |
| нечёткое сопоставление (LIKE, в некоторых версиях |
|
| нечёткое несоответствие | |
| сопоставление по регулярному выражению |
|
| несоответствие регулярному выражению | |
| пусто |
|
| не пусто | |
| в списке |
|
| не в списке |
|
Формат conditions:
{
"conditions": [
{"name": "uuid", "op": "=", "value": "xxx"},
{"name": "state", "op": "in", "value": "Running,Stopped"}
]
}Пример взаимодействия
Пользователь спрашивает: «Помоги мне получить детали VM, UUID которой начинается с ae6e57a0»
ИИ выполнит:
Вызов
search_api(keywords=["Query", "Vm", "Instance"])Вызов
describe_api(api_name="QueryVmInstance")Вызов
execute_api(api_name="QueryVmInstance", parameters={"conditions": [{"name": "uuid", "op": "?=", "value": "ae6e57a0%"}]})
Разработка
# 克隆仓库
git clone https://github.com/ZSvirt/zsvirt-mcp-server/zsvirt-mcp-server.git
cd zsvirt-mcp-server
# 安装开发依赖
pip install -e ".[dev]"
# 运行测试
pytestЛицензия
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
GibsonAI MCP server: manage your databases with natural language
Manage projects, tasks, time tracking, and team collaboration through natural language.
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ZSvirt/zsvirt-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server