VMWare-MCP-server-for-LLMs
by nholuongut
README.md

### [View all Roadmaps](https://github.com/nholuongut/all-roadmaps) · [Best Practices](https://github.com/nholuongut/all-roadmaps/blob/main/public/best-practices/) · [Questions](https://www.linkedin.com/in/nholuong/)
<br/>
<img align="right" alt="Scripting" width="400" src="https://cdn.dribbble.com/userupload/7725640/file/original-a2b82ab8779ece4c49df3672f7753ccb.gif">
[](https://git.io/typing-svg)
# π About Me
- βοΈ **Blogger**: Sharing insights on DevOps & Cloud.
- βΎοΈ **DevOps Engineer Lead**: Transforming infrastructure with IaC & CI/CD.
- β **Open-source Contributor**: Passionate about building community tools.
- π **Lifelong Learner**: Exploring AI-Ops, Cloud Native, and Security.
### π GitHub Performance
<p align="center">
<img src="https://img.shields.io/badge/Total_Contributions-2,831-brightgreen?style=for-the-badge&logo=github" alt="Total Contributions" />
<img src="https://img.shields.io/badge/Current_Streak-434-blue?style=for-the-badge&logo=github" alt="Current Streak" />
<img src="https://img.shields.io/badge/GitHub_Grade-A%2B-blueviolet?style=for-the-badge&logo=github" alt="GitHub Grade" />
</p>
I am a results-driven **DevOps Engineer Lead** with over 10+ years of experience in IT infrastructure and cloud transformations. My focus is on designing scalable, secure, and resilient systems across **DevOps & DevSecOps with CI/CD Pipelines, Cloud Computing (AWS, Microsoft Azure), Docker, Kubernetes, Python, Linux System Administration, Git, Docker, Terraform, Jenkins, Ansible, Bash Scripting, Cybersecurity, Web Services, MongoDB, MySQL, SQL, React.js, HTML, CSS, Java, C++, Data Structures, C (Programming Language).**
> *"Automating the Future, Securing the Infrastructure"*
[](https://github.com/ashutosh00710/github-readme-activity-graph)
# VMWare-MCP-server-for-LLMs
An [MCP](https://modelcontextprotocol.io/) server that gives AI agents direct access to your VMware vSphere infrastructure. Built on top of [`govc`](https://github.com/vmware/govmomi/tree/main/govc), it exposes **55 typed tools** covering VM lifecycle, snapshots, datastores, networking, and more β with additional tools being added over time.
Tool output is formatted in [TOON](https://github.com/toon-format/spec) for token-efficient LLM consumption, with automatic JSON fallback.
## Available Tools
| Category | Tools |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Navigation** | `about`, `ls`, `find`, `tree`, `events`, `tasks`, `logs`, `logs.ls` |
| **VM Lifecycle** | `vm.create`, `vm.clone`, `vm.instantclone`, `vm.destroy`, `vm.register`, `vm.unregister`, `vm.upgrade` |
| **VM Configuration** | `vm.change`, `vm.customize`, `vm.info`, `vm.ip`, `vm.power`, `vm.migrate`, `vm.vnc`, `vm.question` |
| **VM Disks** | `vm.disk.create`, `vm.disk.attach`, `vm.disk.change`, `vm.disk.promote` |
| **VM Networking** | `vm.network.add`, `vm.network.change` |
| **VM Options & Policies** | `vm.option.info`, `vm.option.ls`, `vm.policy.ls`, `vm.target.info`, `vm.target.cap.ls`, `vm.guest.tools` |
| **Snapshots** | `snapshot.create`, `snapshot.remove`, `snapshot.export`, `snapshot.tree` |
| **Datastore** | `datastore.info`, `datastore.ls`, `datastore.cp`, `datastore.mv`, `datastore.tail`, `datastore.disk.info`, `datastore.cluster.info`, `datastore.cluster.change`, `datastore.maintenance.enter`, `datastore.maintenance.exit` |
| **Session** | `session.login`, `session.logout`, `session.ls`, `session.rm` |
| **vSAN** | `vsan.info` |
| **Task** | `task.cancel` |
Plus **3 meta tools**: `govc_search` (fuzzy search across all commands), `govc_help` (get help for any command), and `govc_run` (escape hatch for any govc command).
First, copy and fill in your credentials:
```bash
cp .env.docker.example .env.docker # edit with your vCenter URL, username & password
```
## Quick Start β Ephemeral
A fresh container per connection, removed when done.
```bash
# Docker
docker run --rm -i --env-file .env.docker github.com/nholuongut/VMWare-MCP-server-for-LLMs
# Claude Code
claude mcp add VMWare-MCP-server-for-LLMs -- docker run --rm -i --env-file .env.docker github.com/nholuongut/VMWare-MCP-server-for-LLMs
```
## Quick Start β Persistent
The container runs as a long-lived service. Clients connect via `docker exec`.
```bash
# Docker (once)
docker run -d --name VMWare-MCP-server-for-LLMs --restart unless-stopped \
--env-file .env.docker -e MCP_KEEP_ALIVE=true github.com/nholuongut/VMWare-MCP-server-for-LLMs
# Claude Code
claude mcp add VMWare-MCP-server-for-LLMs -- docker exec -i VMWare-MCP-server-for-LLMs VMWare-MCP-server-for-LLMs
```
> Restart Claude Code after running `claude mcp add`. Tools appear as `mcp__VMWare-MCP-server-for-LLMs__*`. Check status with `/mcp`.
## Quick Start β From Source
```bash
git clone https://github.com/nholuongut/VMWare-MCP-server-for-LLMs
cd VMWare-MCP-server-for-LLMs
bun install
cp .env.example .env # fill in your credentials
bun run start # run the MCP server over stdio
```
To explore and test tools interactively, you can use the [MCP Inspector](https://github.com/modelcontextprotocol/inspector) instead:
```bash
bun run ui
```
## Configuration
| Variable | Required | Description |
| ----------------- | -------- | --------------------------------------------------------------- |
| `GOVC_URL` | β
| vCenter / ESXi SDK URL (e.g. `https://vcenter.example.com/sdk`) |
| `GOVC_USERNAME` | β
| vSphere username |
| `GOVC_PASSWORD` | β
| vSphere password |
| `GOVC_INSECURE` | | Set `1` to skip TLS verification |
| `GOVC_BIN` | | Path to `govc` binary (default: `govc`) |
| `GOVC_TIMEOUT_MS` | | Subprocess timeout in ms (default: `120000`) |
| `MCP_KEEP_ALIVE` | | Set `true` for persistent container mode (see above) |
## SSH Tunnel
If vCenter is only reachable through an internal network:
```bash
ssh [-J jump_user@jump_host] -L 8443:vcenter_host:443 user@internal_host -N
```
Then use `GOVC_URL=https://localhost:8443/sdk` with `GOVC_INSECURE=1`.
---
## Development
### Prerequisites
- [Bun](https://bun.sh/) β₯ 1.0
- [govc](https://github.com/vmware/govmomi/tree/main/govc) in `PATH`
### Scripts
| Script | Description |
| ------------------------- | -------------------------------- |
| `bun run start` | Run MCP server (stdio) |
| `bun run dev` | Run with `--watch` |
| `bun run ui` | Launch MCP Inspector (web UI) |
| `bun run check` | Biome + tsc (CI gate) |
| `bun run docker:build` | Build Docker image (native arch) |
| `bun run docker:build:ci` | Build Docker image (linux/amd64) |
### Adding a Command
1. Add entry to `GOVC_COMMAND_INDEX` in `src/commands.ts`.
2. Add `GovcToolDef` to `GOVC_TOOL_DEFS` with typed flags.
3. Generator wires it automatically.
4. `bun run check`.

# I'm are always open to your feedbackπ
# **[Contact Meπ»]**
* [Name: Nho Luong]
* [Telegram](https://t.me/nholuongut)
* [WhatsApp](https://wa.me/84983630781)
* [PayPal.Me](https://www.paypal.com/paypalme/nholuongut)
* [Linkedin](https://www.linkedin.com/in/nholuong/)


[](https://ko-fi.com/nholuong)
# Licenseπ»
* Nho Luong (c). All Rights Reserved.π
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues