Read-Only vSphere MCP Server

Read-Only vSphere MCP Server

Connects MCP-compatible coding agents to VMware vCenter to query information about virtual machines, hosts, clusters, datastores, datacenters, and networks.

Category
访问服务器

README

Read-Only vSphere MCP Server

This project lets Codex read inventory from VMware vCenter. It exposes seven approved MCP tools and cannot create, update, delete, clone, power, or move anything.

Caveman Explanation

You -> Codex -> this MCP server -> vCenter
                                  |
                                  +-> read information only

Codex asks a question. The MCP server logs in to vCenter, performs an approved REST request, and returns the answer. The MCP server runs locally through standard input/output (stdio); it does not open a network port.

What You Need

You need:

  1. The HTTPS address of your vCenter Server, such as https://vcenter.company.com.
  2. A vCenter username.
  3. That user's password.
  4. The built-in Read-only role assigned at the inventory level you need, with propagation enabled.
  5. Network or VPN access from your computer to vCenter.
  6. Python 3.10 or newer, Git, and Codex.

The address alone is not enough. You need a username and password. You do not need a Broadcom developer API key. After login, vCenter returns a temporary session token automatically.

Send this request to your VMware administrator:

Please provide the HTTPS vCenter Server address and a dedicated service account with the built-in Read-only role. Assign it at the required inventory scope with propagation enabled. Please also provide the company CA certificate in PEM format if vCenter uses an internally signed certificate.

This project supports username/password authentication. If your company forces browser-only SSO or MFA, ask for a non-interactive read-only service account.

Install on macOS or Linux

git clone https://github.com/arjungowdal4601/vcenter_mcp.git
cd vcenter_mcp
python3 --version
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
cp .env.example .env
chmod 600 .env

The version command must show Python 3.10 or newer. If python3 is older, use the newer executable installed on your computer, such as python3.13, for the virtual-environment command.

Open .env in a local text editor and replace the example values with your credentials. Do not paste the password into an AI chat.

Install on Windows PowerShell

git clone https://github.com/arjungowdal4601/vcenter_mcp.git
cd vcenter_mcp
py -3 --version
py -3 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e .
Copy-Item .env.example .env

The version command must show Python 3.10 or newer.

Open .env locally and replace the examples. If PowerShell blocks activation, you can still use .\.venv\Scripts\python.exe in the remaining commands.

Configure .env

Minimum configuration:

VSPHERE_HOST="https://vcenter.company.com"
VSPHERE_USERNAME="codex-readonly@vsphere.local"
VSPHERE_PASSWORD="your-real-password"
VSPHERE_VERIFY_SSL="true"
VSPHERE_TIMEOUT_SECONDS="30"

VSPHERE_HOST is the address used to open vCenter Server. Do not use an ESXi host address, the Broadcom documentation website, or an address ending in an API path such as /api or /sdk.

VSPHERE_USERNAME is the read-only vCenter account. Depending on your company, it may look like user@vsphere.local, DOMAIN\\user, or an email address.

VSPHERE_PASSWORD is that account's password. .env is ignored by Git and must never be committed.

VSPHERE_VERIFY_SSL should remain true. Turning verification off makes it possible to send credentials to an impostor server.

If your company uses a private certificate authority, add the absolute path to its PEM bundle:

VSPHERE_CA_BUNDLE="/Users/you/certificates/company-ca.pem"

On Windows, use a quoted absolute path:

VSPHERE_CA_BUNDLE="C:\\Certificates\\company-ca.pem"

Process environment variables override values in .env.

Connect the Server to Codex

Run the command from the repository directory after filling .env.

macOS or Linux:

codex mcp add vsphere -- "$(pwd)/.venv/bin/python" -m vsphere_mcp --env-file "$(pwd)/.env"

Windows PowerShell:

$root = (Get-Location).Path
codex mcp add vsphere -- "$root\.venv\Scripts\python.exe" -m vsphere_mcp --env-file "$root\.env"

The Codex registration stores only the Python command and .env path. It does not store the vCenter username or password.

Check the registration:

codex mcp get vsphere

Restart Codex after registering the server. Then ask:

Use the vSphere tools to list my virtual machines.

To replace an old registration:

codex mcp remove vsphere

Then run the appropriate codex mcp add command again.

Other MCP-compatible coding agents can run the same executable and arguments as a local stdio server. Their configuration format is agent-specific.

Available Tools

Tool What it reads REST endpoint
vsphere_list_vms Visible virtual machines GET /api/vcenter/vm
vsphere_get_vm Details for one VM ID GET /api/vcenter/vm/{vm}
vsphere_list_hosts ESXi hosts GET /api/vcenter/host
vsphere_list_clusters Clusters GET /api/vcenter/cluster
vsphere_list_datastores Datastores GET /api/vcenter/datastore
vsphere_list_datacenters Datacenters GET /api/vcenter/datacenter
vsphere_list_networks Networks GET /api/vcenter/network

vsphere_list_vms can filter by VM IDs, names, folders, datacenters, hosts, clusters, resource pools, and power states. Allowed power states are POWERED_ON, POWERED_OFF, and SUSPENDED.

Example prompts:

Use vSphere to list all VMs.
Show only powered-on VMs named web-server.
Get details for VM vm-42.
List my ESXi hosts and clusters.
List all datastores and datacenters visible to this account.
List the available vCenter networks.

The returned inventory depends on the account's vCenter permissions. An empty list can mean the login worked but the Read-only role was assigned at the wrong inventory scope.

Authentication

The MCP server performs this flow internally:

  1. It sends the username and password to POST /api/session using HTTPS Basic authentication.
  2. vCenter returns a temporary session token.
  3. The server sends that token in the vmware-api-session-id header for REST reads.
  4. If the token expires and vCenter returns HTTP 401, the server logs in once more and retries the read once.

The password is not an API key. The temporary session token is not something you obtain manually.

Security

  • Only explicit read tools are registered with MCP.
  • Every tool is marked read-only, non-destructive, and idempotent.
  • There is no generic call_api tool.
  • vCenter addresses must use HTTPS.
  • Redirects are not followed, preventing credentials from being forwarded to another host.
  • IDs and filters are validated before requests are sent.
  • Passwords are excluded from configuration representations and errors.
  • Real enforcement also comes from the vCenter account's Read-only role.

For stronger protection, create a dedicated service account instead of using a personal administrator account.

Troubleshooting

HTTP 401

vCenter rejected the username, password, or expired session. Confirm the credentials by signing in to the same VSPHERE_HOST. Browser-only MFA accounts will not work.

HTTP 403

The login worked, but the account lacks permission. Ask the administrator to assign the Read-only role at the correct inventory scope with propagation.

Certificate verification failed

Ask the administrator for the company CA certificate in PEM format and set VSPHERE_CA_BUNDLE. Do not solve production certificate errors by disabling verification.

Connection timeout or name error

Confirm the address, DNS, VPN, firewall, and port 443 access from your computer.

Codex cannot see the tools

Run codex mcp get vsphere, confirm the displayed Python and .env paths still exist, and restart Codex. Absolute paths break if the repository is moved; remove and add the registration again after moving it.

Tools return no inventory

The account may have the Read-only role at the wrong scope. vCenter only returns objects visible to that account.

Sharing

Share the GitHub repository, not your .env file. Each user should clone the project, create their own .env, and register their local copy with Codex. Never send vCenter passwords through Git, email, chat, screenshots, or tickets.

This version intentionally supports only local stdio. It does not provide a central HTTP MCP service.

Development

Install development dependencies and run the tests:

python -m pip install -e '.[dev]'
python -m pytest

Show the command-line help:

python -m vsphere_mcp --help

The automated tests use mocked vCenter responses. A real integration test requires a non-production vCenter address and read-only credentials.

Official References

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选