mcp-nutanix-pc-connector
A server implemented in Go designed to facilitate interaction between Large Language Models (LLMs) utilizing the Model Context Protocol (MCP) and backend resources managed via Nutanix Prism Central (PC).
Author
thunderboltsid
Quick Info
Actions
Tags
Nutanix Prism Central MCP Interface
This utility acts as a Model Context Protocol (MCP) gateway, enabling generative AI models to query and retrieve state information from a Nutanix Prism Central deployment.
:warning: Experimental Status Notice
BE ADVISED: THIS IS NOT PRODUCTION-READY SOFTWARE.
This component originated as an exercise to explore Go-based implementations of the MCP framework. Key characteristics:
- It is not an official utility provided or supported by Nutanix.
- It carries no official endorsement or maintenance commitment from the vendor.
- It should never be deployed in mission-critical or production environments.
- It is supplied strictly "AS IS," without any form of warranty or assurance regarding fitness for purpose or stability.
USER ASSUMES ALL RISK: The creator is not liable for any operational disruption, data inconsistencies, or system failures resulting from the deployment or utilization of this source code.
Core Functionality Summary
This MCP server bridges LLMs to the Nutanix ecosystem by:
- Establishing authenticated connectivity to a specified Prism Central instance using supplied credentials.
- Enumerating inventory elements (e.g., Virtual Machines, Cluster definitions, Host hypervisors, Image repositories).
- Fetching granular configuration details for entities identified by unique resource locators (URIs).
The underlying mechanism leverages the official Prism Go Client Library for API calls and the MCP Go Abstraction Layer for protocol adherence.
Initial Setup Guide
Prerequisites
- Go compiler version 1.23 or newer.
- Network access to a functional Nutanix Prism Central deployment.
- Standard development utilities such as
makeandgo fmt.
Compilation Process
bash
Obtain the source repository
git clone https://github.com/thunderboltsid/mcp-nutanix.git cd mcp-nutanix
Compile the executable server application
make build
Authentication Methods
The server accommodates two distinct credential injection strategies:
- Interactive Mode (Default): Suitable for clients like Claude that can manage sequential prompting exchanges.
- Static Configuration: Necessary for tools (e.g., Cursor) lacking interactive prompt capabilities, relying on pre-set environment variables or configuration files.
MCP Client Integration Details
Configuration specifics depend on the consuming MCP client software.
Configuration for Claude Desktop/Code
Modify or establish the configuration file located at ~/.anthropic/claude_desktop.json:
{ "mcpServers": { "nutanix": { "command": "/path/to/mcp-nutanix" } } }
Upon first invocation, Claude will automatically initiate the credential dialogue.
Configuration for Cursor
Since Cursor prohibits interactive input, static credentials must be injected via environment mappings within ~/.cursor/mcp.json:
{ "mcpServers": { "nutanix": { "command": "/path/to/mcp-nutanix", "env": { "NUTANIX_ENDPOINT": "your-prism-central-ip-or-hostname", "NUTANIX_USERNAME": "your-username", "NUTANIX_PASSWORD": "your-password", "NUTANIX_INSECURE": "true" } } } }
Required Environment Variables:
- NUTANIX_ENDPOINT: The FQDN or IP address of the Prism Central instance (mandatory).
- NUTANIX_USERNAME: The API user identifier (mandatory).
- NUTANIX_PASSWORD: The corresponding secret for the API user (mandatory).
- NUTANIX_INSECURE: Setting this to "true" bypasses certificate validation for self-signed CAs (optional).
Third-Party MCP Clients
This implementation strictly adheres to the established MCP specification, ensuring compatibility with any client utilizing standard stdio communication. Consult your specific client's documentation for integration steps.
Operational Use Cases
After successful client setup and connection to the targeted Prism Central deployment, LLMs can issue requests.
Resource Index Retrieval
Execute the following tool calls to fetch collection summaries:
vms clusters hosts images subnets
The LLM payload will subsequently contain a parsable JSON array detailing the retrieved collection members.
Entity Detail Fetching
To query the specific metadata for an object, utilize its unique identifier within the corresponding resource scheme:
vm://{uuid} cluster://{uuid} host://{uuid}
The resulting response will deliver comprehensive JSON attributes pertaining to the requested entity.
Internal Development Structure
Directory Layout
mcp-nutanix/ ├── bin/ # Built executable artifacts ├── internal/ # Private implementation packages │ ├── client/ # Logic for PC API communication │ ├── codegen/ # Utilities for automated code generation │ └── json/ # Specialized JSON utility functions ├── pkg/ # Publicly releasable components │ ├── prompts/ # Handlers for MCP prompt interpretation │ ├── resources/ # Modules responsible for resource abstraction │ └── tools/ # Implementations of exposed MCP tools └── Makefile # Build targets and helper scripts
Code Re-generation Procedure
If modifications necessitate updating auto-generated files (e.g., interface definitions), execute the regeneration target:
bash make generate
Current Constraints
- Operation throughput is constrained by the maximum payload size defined within the MCP specification.
- Retrieving entities with exceptionally large attribute sets might trigger data truncation or process failure.
- The current feature set lacks support for data pagination; fetching large collections may yield incomplete results.
- This implementation is restricted to read-only actions; write operations (create, modify, delete) are not supported.
Licensing Information
This project is distributed under the terms of the MIT License (refer to the LICENSE file).
Acknowledgements
- Gratitude to Nutanix for providing the underlying Prism API.
- Appreciation to Mark3Labs for developing the foundational MCP Go library.
- Thanks to the Nutanix Cloud Native organization for the official Prism Go Client SDK.
Contribution Policy
As this remains an experimental side project, there is no formal contribution pipeline. Suggestions, bug reports (issues), or proposed code changes (pull requests) are welcome.
