{"id":50398583,"url":"https://github.com/theevalon/vmware-vcenter-mcp","last_synced_at":"2026-05-30T22:01:46.066Z","repository":{"id":355613596,"uuid":"1228828847","full_name":"TheEvalon/vmware-vcenter-mcp","owner":"TheEvalon","description":"VMware vCenter 8.0 MCP server with dry-run safety","archived":false,"fork":false,"pushed_at":"2026-05-04T14:29:19.000Z","size":257,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-04T14:29:53.298Z","etag":null,"topics":["cursor","devops","infrastructure","mcp","model-context-protocol","vcenter","vmware","vsphere"],"latest_commit_sha":null,"homepage":"https://github.com/TheEvalon/vmware-vcenter-mcp","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TheEvalon.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-04T12:25:01.000Z","updated_at":"2026-05-04T14:28:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TheEvalon/vmware-vcenter-mcp","commit_stats":null,"previous_names":["theevalon/vmware-vcenter-mcp"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/TheEvalon/vmware-vcenter-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheEvalon%2Fvmware-vcenter-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheEvalon%2Fvmware-vcenter-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheEvalon%2Fvmware-vcenter-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheEvalon%2Fvmware-vcenter-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TheEvalon","download_url":"https://codeload.github.com/TheEvalon/vmware-vcenter-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheEvalon%2Fvmware-vcenter-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33711018,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cursor","devops","infrastructure","mcp","model-context-protocol","vcenter","vmware","vsphere"],"created_at":"2026-05-30T22:01:41.976Z","updated_at":"2026-05-30T22:01:46.061Z","avatar_url":"https://github.com/TheEvalon.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo-256.png\" alt=\"VMware vCenter MCP by iOblako\" width=\"160\" height=\"160\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eVMware vCenter 8.0 MCP Server\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/TheEvalon/vmware-vcenter-mcp/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/TheEvalon/vmware-vcenter-mcp/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"/\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License: MIT\"/\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/node-%3E%3D22-brightgreen.svg\" alt=\"Node \u003e= 22\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/MCP-compatible-7c3aed.svg\" alt=\"MCP compatible\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/vCenter-8.0-1f8ff5.svg\" alt=\"vCenter 8.0\"/\u003e\n\u003c/p\u003e\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server that lets\nCursor (or any MCP-compatible client) manage a VMware vCenter 8.0 deployment\nend-to-end: read inventory, query statistics, take snapshots, power VMs on\nand off, vMotion across hosts, mount ISOs, configure DRS/HA, remediate\nclusters with vLCM, and more.\n\nThe server fronts three vSphere API surfaces behind a single session:\n\n- **vSphere Automation REST API** (`/api/...`) - primary, modern JSON.\n- **VI/JSON API** (`/sdk/vim25/{release}/...`, vCenter 8.0 U1+) - full vim25\n  parity for ops not exposed by the Automation API (snapshots, advanced VM\n  config, performance counters, alarms, RBAC).\n- **vSphere Web Services SOAP** via `@vates/node-vsphere-soap` - lazy\n  fallback; exposed through a single `soap_runCommand` escape hatch.\n\n\u003e **Safety first.** Every destructive tool (`*_delete`, `*_powerOff`,\n\u003e `snapshot_remove`, `host_reboot`, ...) requires an explicit `confirm: true`\n\u003e argument. Otherwise, the tool returns a structured **dry-run** describing\n\u003e the exact request that would have been sent, but never touches vCenter.\n\u003e A global `VCENTER_READ_ONLY=true` kill switch refuses every destructive\n\u003e tool regardless of `confirm`.\n\n---\n\n## Quick start\n\n```powershell\ngit clone https://github.com/TheEvalon/vmware-vcenter-mcp.git\ncd vmware-vcenter-mcp\nnpm install\ncopy .env.example .env\n# edit .env with your vCenter details\nnpm run build\nnpm start\n```\n\nFor development you can run the server with `tsx`:\n\n```powershell\nnpm run dev\n```\n\nRun the unit test suite:\n\n```powershell\nnpm test\n```\n\nRun the **comprehensive read-only integration suite** against a real vCenter\n(recommended pre-publish gate). It spawns the MCP server twice over stdio,\ndiscovers your lab inventory, exercises every read-only tool, dry-runs every\ndestructive tool, and verifies the `VCENTER_READ_ONLY=true` kill switch\nblocks every write path:\n\n```powershell\nnpm run test:integration:readonly\n```\n\nThe legacy single-test smoke pass is still available:\n\n```powershell\n$env:VCENTER_INTEGRATION = \"true\"; npm run test:integration\n```\n\n---\n\n## Integrating with Cursor\n\nThis MCP server uses the standard stdio transport and registers with\nCursor the same way any MCP server does: a single entry in your\n`mcp.json`. Five steps end-to-end:\n\n### 1. Prerequisites\n\n- Node.js \u003e= 22 on PATH (`node --version`).\n- This repo cloned and built once -- see [Quick start](#quick-start). The\n  important output is `dist/index.js`.\n- Cursor 0.42 or newer. Older Cursor builds support MCP but use a\n  different config schema.\n- vCenter credentials handy (`VCENTER_HOST`, `VCENTER_USER`,\n  `VCENTER_PASS`).\n\n### 2. Get the absolute path to `dist/index.js`\n\nCursor launches the MCP server itself, so it needs an absolute path -- a\nrelative path will silently fail to start. From inside your clone:\n\n```powershell\n# Windows (PowerShell)\n(Resolve-Path .\\dist\\index.js).Path\n```\n\n```bash\n# macOS / Linux\nrealpath dist/index.js\n```\n\nCopy the printed path; you'll paste it into `args` below.\n\n### 3. Edit your Cursor MCP config\n\nCursor reads MCP servers from one of two locations. Either works -- the\nproject-scoped one is recommended if you want the MCP available only\ninside specific Cursor workspaces.\n\n| Scope         | File                                             |\n|---------------|--------------------------------------------------|\n| Global        | `~/.cursor/mcp.json` (macOS/Linux)               |\n| Global        | `%USERPROFILE%\\.cursor\\mcp.json` (Windows)       |\n| Project-only  | `\u003cyour-project\u003e/.cursor/mcp.json`                |\n\nOpen the file (create it if missing) and add the `vmware` entry:\n\n```json\n{\n  \"mcpServers\": {\n    \"vmware\": {\n      \"command\": \"node\",\n      \"args\": [\"\u003cabsolute-path-from-step-2\u003e/dist/index.js\"],\n      \"env\": {\n        \"VCENTER_HOST\": \"vcsa.lab.local\",\n        \"VCENTER_USER\": \"administrator@vsphere.local\",\n        \"VCENTER_PASS\": \"********\",\n        \"VCENTER_INSECURE\": \"false\",\n        \"VCENTER_READ_ONLY\": \"true\",\n        \"VCENTER_LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\nNotes on the snippet:\n\n- `VCENTER_READ_ONLY=true` is the **recommended starting point**. Every\n  destructive tool is blocked globally until you explicitly flip it to\n  `false`. See [Safety / dry-run](#safety--dry-run).\n- `VCENTER_INSECURE` should stay `false` in production. Set it to `true`\n  only for homelabs with self-signed certs.\n- If you already have other MCP servers in `mcp.json`, just add the\n  `\"vmware\"` key alongside them inside the existing `\"mcpServers\"`\n  object -- don't replace the file.\n- On Windows, write the path with **forward slashes** or\n  **double-escaped backslashes** in JSON:\n  `\"D:/Repos/vmware-vcenter-mcp/dist/index.js\"` or\n  `\"D:\\\\Repos\\\\vmware-vcenter-mcp\\\\dist\\\\index.js\"`.\n\n### 4. Reload Cursor and verify the server is up\n\n1. Quit Cursor fully (don't just close the window).\n2. Reopen Cursor.\n3. Open **Settings -\u003e MCP** (or Cmd/Ctrl+Shift+J -\u003e \"MCP\"). You should\n   see a `vmware` entry with a green dot. The tools list should show\n   100+ entries (`vm_list`, `snapshot_create`, `host_enterMaintenance`,\n   etc.) once the server has finished registering.\n4. If the dot is red, click it to view the stderr log -- the most\n   common cause is a wrong absolute path or unreachable\n   `VCENTER_HOST`. See [Troubleshooting](#troubleshooting) below.\n\n### 5. Try it from a Cursor chat\n\nOpen a new chat in any project and ask, for example:\n\n\u003e \"List the VMs in my vCenter and show their power state.\"\n\n\u003e \"Take a snapshot of `vm-101` named `pre-upgrade`. Use dry-run first,\n\u003e then ask me before applying.\"\n\n\u003e \"Show DRS recommendations for cluster `cl-prod-01`.\"\n\nCursor will pick the right tool from the catalog automatically. Because\n`VCENTER_READ_ONLY=true` is set, any destructive ask will be answered\nwith a structured dry-run preview rather than a real change -- exactly\nwhat you want for the first session.\n\n### Development variant (run from source via `tsx`)\n\nIf you're hacking on this MCP and want changes to take effect without a\nrebuild, swap the `command`/`args` for:\n\n```json\n\"command\": \"npx\",\n\"args\": [\"tsx\", \"\u003cabsolute-path-to-clone\u003e/src/index.ts\"]\n```\n\nCursor restarts the MCP on every config save, so a Cursor reload picks\nup the new source.\n\n---\n\n## Environment variables\n\n| Variable                  | Required | Default | Description |\n|---------------------------|----------|---------|-------------|\n| `VCENTER_HOST`            | yes      | -       | Hostname or IP of the vCenter Server (no scheme). |\n| `VCENTER_PORT`            | no       | `443`   | HTTPS port. |\n| `VCENTER_USER`            | yes      | -       | SSO username (e.g. `administrator@vsphere.local`). |\n| `VCENTER_PASS`            | yes      | -       | SSO password. |\n| `VCENTER_INSECURE`        | no       | `false` | Skip TLS verification (homelab / self-signed certs). |\n| `VCENTER_LOG_LEVEL`       | no       | `info`  | `trace`, `debug`, `info`, `warn`, `error`. Logs go to stderr only. |\n| `VCENTER_TASK_TIMEOUT_MS` | no       | `600000`| Max wait for any long-running task (clones, vMotion, remediation). |\n| `VCENTER_TASK_POLL_MS`    | no       | `1500`  | Task polling interval. |\n| `VCENTER_READ_ONLY`       | no       | `false` | Block all destructive tools regardless of `confirm`. |\n\nThe server reads `.env` automatically via `dotenv`.\n\n---\n\n## Safety / dry-run\n\n```jsonc\n// First call: no confirm flag, returns a structured dry-run preview.\n{\n  \"tool\": \"snapshot_create\",\n  \"arguments\": { \"vmId\": \"vm-101\", \"name\": \"pre-upgrade\" }\n}\n// -\u003e {\n//   \"content\": [{\"type\":\"text\",\"text\":\"DRY RUN: Would create snapshot \\\"pre-upgrade\\\" on vm-101 ...\"}],\n//   \"structuredContent\": {\n//     \"dryRun\": true,\n//     \"tool\": \"snapshot_create\",\n//     \"summary\": \"...\",\n//     \"request\": {\"method\":\"POST\",\"path\":\"/sdk/vim25/{release}/.../CreateSnapshotEx_Task\",\"body\":{...}},\n//     \"hint\": \"Re-run with confirm:true to execute.\"\n//   }\n// }\n\n// Second call: confirm:true actually creates the snapshot.\n{\n  \"tool\": \"snapshot_create\",\n  \"arguments\": { \"vmId\": \"vm-101\", \"name\": \"pre-upgrade\", \"confirm\": true }\n}\n```\n\n### Pre-publish testing\n\n`npm run test:integration:readonly` is wired into `prepublishOnly`, so a\nbroken build cannot be published to npm. The suite covers, against a live\nvCenter:\n\n- **Tool registration** - every name in the README catalog is registered\n  exactly once and exposes both `inputSchema` and `outputSchema`.\n- **Read-only happy paths** - every `*_list`, `*_get`, `vcenter_about`,\n  `vcenter_health`, `task_*`, `event_list`, `alarm_list`, `stats_*`,\n  `iso_listFromDatastore`, `customization_*`, `role_list`, `permission_list`,\n  `identityProvider_list`, `lifecycle_listClusterImage`,\n  `lifecycle_checkCompliance`, `drs_recommendations`, `dvswitch_list`,\n  `dvportgroup_list`, `template_list`, `contentLibrary*` is invoked through\n  the MCP stdio transport and the parsed envelope is structurally validated.\n- **Safety: dry-run** - every destructive tool is called WITHOUT `confirm`\n  and asserted to return a structured `{ dryRun: true, ... }` preview\n  instead of touching vCenter.\n- **Safety: kill switch** - every destructive tool is called WITH\n  `confirm:true` against a `VCENTER_READ_ONLY=true` server fixture and\n  asserted to return `isError:true` with the read-only refusal message.\n- **Protocol stream** - the server's stdout is parsed line-by-line to\n  guarantee every chunk is a JSON-RPC envelope (no stray `console.log`).\n\nThe suite is inventory-agnostic: tools that need an entity that may not\nexist in every lab (`vm_consoleTicket`, `customization_get`, vLCM-managed\nclusters, content libraries) skip-with-warn instead of failing.\n\n### Read-only mode\n\nSet `VCENTER_READ_ONLY=true` to disable every destructive tool globally:\n\n```text\nsnapshot_create blocked: Server is running in read-only mode (VCENTER_READ_ONLY=true).\nSet VCENTER_READ_ONLY=false to enable writes.\n```\n\nRead-only tools (`*_list`, `*_get`, `vcenter_health`, `task_get`, etc.) are\nunaffected.\n\n---\n\n## Tool catalog\n\n\u003e Names in **bold** are destructive (require `confirm: true`).\n\n### vCenter\n\n- `vcenter_about` - product version / build / api version.\n- `vcenter_health` - aggregate appliance health components.\n\n### VM lifecycle\n\n- `vm_list`, `vm_get`, `vm_powerState`\n- `vm_create`, `vm_clone`, **`vm_delete`**\n- `vm_powerOn`, **`vm_powerOff`**, **`vm_reset`**, `vm_suspend`\n- `vm_shutdown`, `vm_reboot` (guest-OS-aware)\n- `vm_reconfigure` (CPU / memory / name)\n- `vm_migrate` (vMotion), `vm_relocate` (Storage vMotion)\n- `vm_consoleTicket` (mints a one-shot VMRC ticket)\n- `vm_attachNetwork`\n\n### Snapshots\n\n- `snapshot_list`\n- **`snapshot_create`**, **`snapshot_revert`**, **`snapshot_remove`**, **`snapshot_removeAll`**\n\n### Hosts (ESXi)\n\n- `host_list`, `host_get`\n- **`host_enterMaintenance`**, `host_exitMaintenance`\n- **`host_reboot`**, **`host_shutdown`**\n- **`host_disconnect`**, `host_reconnect`\n- `host_addToCluster`\n\n### Clusters / DRS / HA\n\n- `cluster_list`, `cluster_get`\n- `cluster_create`, **`cluster_delete`**\n- **`cluster_setDrs`**, **`cluster_setHa`**\n- `drs_recommendations`, **`drs_apply`**\n\n### Datacenters / folders\n\n- `datacenter_list`, `datacenter_create`, **`datacenter_delete`**\n- `folder_list`, `folder_create`, **`folder_delete`**\n\n### Datastores\n\n- `datastore_list`, `datastore_get`\n- `datastore_browse` - lists one folder; supports a `matchPattern` glob array.\n- `datastore_searchRecursive` - finds files **recursively** by glob (e.g.\n  `[\"*.vmdk\"]`, `[\"*.iso\", \"*.img\"]`, `[\"myvm-*.vmx\"]`). Auto-resolves the\n  datastore root when `path` is omitted. Optional `fileTypes` restricts to\n  vSphere file-type queries (`VmDiskFileQuery`, `IsoImageFileQuery`,\n  `FloppyImageFileQuery`, `FolderFileQuery`, `VmConfigFileQuery`,\n  `VmTemplateFileQuery`, `VmLogFileQuery`, `VmNvramFileQuery`,\n  `VmSnapshotFileQuery`) for faster scans on large datastores.\n  `caseInsensitive` defaults to `true`.\n- **`datastore_deleteFile`**, **`datastore_moveFile`**\n\n### Networks\n\n- `network_list`, `dvswitch_list`, `dvportgroup_list`\n- `portgroup_create`, **`portgroup_delete`**\n\n### Resource pools\n\n- `resourcepool_list`, `resourcepool_create`, **`resourcepool_delete`**, `resourcepool_reconfigure`\n\n### Templates / content library\n\n- `template_list`, `template_deploy`\n- `contentLibrary_list`, `contentLibraryItem_list`, `contentLibraryItem_deploy`\n- `contentLibrary_publish`\n\n### Tags\n\n- `category_list`, `tag_list`, `tag_create`\n- `tag_attach`, **`tag_detach`**\n\n### Alarms / events\n\n- `alarm_list`, `alarm_acknowledge`\n- `event_list`\n\n### Performance / stats\n\n- `stats_listCounters`, `stats_query`, `stats_summary`\n\n### ISO / media\n\n- `iso_listFromDatastore`, `iso_mount`, **`iso_unmount`**\n\n### Customization specs\n\n- `customization_list`, `customization_get`, **`customization_apply`**\n\n### Identity / RBAC\n\n- `role_list`, `permission_list`, **`permission_assign`**, `identityProvider_list`\n\n### vSphere Lifecycle Manager (vLCM)\n\n- `lifecycle_listClusterImage`, `lifecycle_checkCompliance`, **`lifecycle_remediate`**\n\n### Tasks\n\n- `task_list`, `task_get`\n\n### SOAP escape hatch\n\n- **`soap_runCommand`** - invokes any vim25 SOAP method when REST and VI/JSON\n  do not expose the operation. Lazy-loads `@vates/node-vsphere-soap` on\n  first use.\n\n---\n\n## Architecture\n\n```\nsrc/\n  index.ts                   stdio entry, McpServer + StdioServerTransport\n  config.ts                  Zod-validated env loader\n  client/\n    session-manager.ts       POST /api/session, cached vmware-api-session-id\n    http-client.ts           shared HTTP layer (auto re-auth on 401)\n    rest-client.ts           Automation REST helpers (/api/...)\n    vimjson-client.ts        VI/JSON helpers (/sdk/vim25/{release}/...)\n    soap-client.ts           lazy @vates/node-vsphere-soap wrapper\n    task-tracker.ts          poll vim25 Task to terminal state\n    errors.ts                vCenter error mapping\n    http-agent.ts            undici Agent with self-signed cert handling\n  tools/\n    _register.ts             registers every tool module\n    _safety.ts               withConfirm() / safeReadOnly() helpers\n    vm/, snapshot/, host/, ...   one folder per domain\n  schemas/                   shared Zod schemas (MoRef, PowerState, ...)\n  utils/                     logger (stderr-only; stdout reserved for JSON-RPC)\n  types/                     ambient module declarations\ntests/\n  unit/                      vitest + undici MockAgent\n  integration/               gated by VCENTER_INTEGRATION=true\n```\n\n### Why three API surfaces?\n\n| Concern                         | Surface used | Why |\n|---------------------------------|--------------|-----|\n| VM CRUD, hosts, clusters, networks, datastores, resource pools | Automation REST | Modern, JSON, fully documented. |\n| Snapshots, advanced VM config, alarms, events, performance counters, RBAC | VI/JSON | The Automation API does not expose these. |\n| Anything else (legacy or 8.0 GA without U1) | SOAP via `soap_runCommand` | Maintained library, full vim25 parity. |\n\nAll three share the same `vmware-api-session-id` token established once by\n`POST /api/session`, with transparent re-auth on 401 responses.\n\n---\n\n## Troubleshooting\n\n- **`Failed to reach vCenter at https://...`** - check connectivity, hostname\n  resolution, and that the vCenter Server is reachable on\n  `VCENTER_PORT` (default 443). For homelab or self-signed certs, set\n  `VCENTER_INSECURE=true`.\n- **`Login failed (401)`** - check `VCENTER_USER` and `VCENTER_PASS`. The\n  user must include the SSO domain (`administrator@vsphere.local`).\n- **`Tool blocked: Server is running in read-only mode`** - clear or set\n  `VCENTER_READ_ONLY=false` if you intend to make changes.\n- **`Could not auto-detect VI/JSON release`** - vCenter is older than 8.0 U1\n  (or the user lacks permission for the ServiceInstance). The client falls\n  back to the literal `release` segment, which only works on U1+. Use the\n  `soap_runCommand` escape hatch for older deployments.\n- **`Task ... did not complete within 600000ms`** - bump\n  `VCENTER_TASK_TIMEOUT_MS` for clones/migrations of large VMs.\n- **MCP client logs say \"tool result is not valid JSON\"** - confirm that no\n  custom logger is writing to stdout. The bundled logger only writes to\n  stderr; if you add `console.log()` calls anywhere they will corrupt the\n  JSON-RPC stream.\n\n---\n\n## About\n\nBuilt and maintained by [iOblako](https://iOblako.com)\n(`info@iOblako.com`). `oblako` means *cloud* in Russian — fitting for an\nMCP that talks to a virtualized cloud. Pull requests, bug reports, and\nfield notes from real lab and production deployments are very welcome.\n\n## Other projects by iOblako\n\n- [oses.iOblako.com](https://oses.iOblako.com) — operating-system\n  experiments and write-ups.\n- [easycpu.iOblako.com](https://easycpu.iOblako.com) — accessible CPU\n  internals and hands-on tooling.\n\n## Support / contact\n\n- Bug reports and feature requests:\n  [GitHub Issues](https://github.com/TheEvalon/vmware-vcenter-mcp/issues).\n- Security disclosures (private): see [SECURITY.md](SECURITY.md), or\n  email `info@iOblako.com`.\n- Other inquiries: `info@iOblako.com`.\n\n## License\n\n[MIT](LICENSE) © 2026 Gregory / iOblako\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheevalon%2Fvmware-vcenter-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheevalon%2Fvmware-vcenter-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheevalon%2Fvmware-vcenter-mcp/lists"}