Morpheus MCP Server¶
Every HPE Morpheus Enterprise appliance exposes a built-in MCP (Model Context Protocol) server at /api/mcp. This endpoint allows external AI tools — such as Claude Desktop, VS Code Copilot, cursor, or custom automation scripts — to interact with Morpheus using the same tool-calling interface that powers the built-in AI chat.
The MCP server provides access to the full Morpheus API surface through categorized tools, with dynamic loading to keep initial responses lightweight. All operations respect the authenticated user’s existing RBAC permissions.
Endpoint¶
Method |
Path |
Purpose |
|---|---|---|
POST |
|
JSON-RPC 2.0 message endpoint (Streamable HTTP transport) |
GET |
|
SSE stream for server-to-client notifications |
DELETE |
|
Session termination |
GET |
|
Legacy SSE transport (for older MCP clients) |
POST |
|
Legacy SSE message endpoint |
The server implements MCP protocol version 2025-06-18 with Streamable HTTP as the primary transport.
Important
Your Morpheus appliance must have a valid, signed SSL certificate configured for external MCP clients to connect. Self-signed or untrusted certificates will cause TLS verification failures in MCP clients (Claude Desktop, VS Code, etc.) that cannot be easily bypassed. See SSL Certificates for configuration details.
Authentication¶
External clients authenticate using the same mechanisms as the Morpheus REST API:
Bearer Token —
Authorization: Bearer <your-api-token>header (recommended)Access Token —
?access_token=<token>query parameterExecution Token —
Authorization: Execution <token>header (for task/job contexts)
All tool executions enforce the authenticated user’s role permissions. A user can only access tools and resources their Morpheus role allows.
Connecting External Clients¶
Claude Desktop, Cursor, VS Code, or any MCP-compatible client:
{
"mcpServers": {
"morpheus": {
"url": "https://your-morpheus-host/api/mcp",
"headers": {
"Authorization": "Bearer your-api-token-here"
}
}
}
}
Custom scripts (Python, Node, etc.):
Any HTTP client that supports the MCP Streamable HTTP transport can connect. Send a POST to /api/mcp with a JSON-RPC 2.0 initialize message to start a session, then use the returned Mcp-Session-Id header on subsequent requests.
Session Management¶
Sessions are created on successful
initializehandshakeThe server returns a
Mcp-Session-Idresponse header — include this on all subsequent requestsSessions expire after 1 hour of inactivity
Use
DELETE /api/mcpwith the session header to explicitly terminate a session
Dynamic Tool Loading¶
The MCP server uses progressive category loading to keep the initial tool list manageable for LLMs (max 120 tools per response). On first connection, clients see:
Meta-tools (always available):
get_tool_details— Get detailed documentation for a specific toolsearch_external_tools— Discover tools from connected external MCP serversload_external_tools— Make discovered external tools callable in the sessionget_result_excerpt— Retrieve excerpted portions of large resultsdelegate_to_specialist— Route requests to specialist tool categories
Category loader tools (one per category):
use_instances_tools— Load VM/container instance management toolsuse_clouds_tools— Load cloud integration toolsuse_networks_tools— Load network management toolsuse_clusters_tools— Load cluster management tools(and so on for each category)
When an LLM calls a category loader (e.g., use_instances_tools), the tools for that category become visible in subsequent tools/list calls. The server sends a notifications/tools/list_changed notification so clients know to re-fetch the tool list.
Tool Categories¶
The following 60 tool categories are available (subject to user permissions):
Category |
Tools |
Description |
|---|---|---|
|
178 |
Networks, subnets, routers, DNS, DHCP, IP pools, proxies, firewall rules |
|
115 |
Kubernetes/Docker clusters, namespaces, pods, volumes, services, datastores |
|
70 |
Instance type layouts, container types, option types, spec templates, file templates, scripts |
|
61 |
VM and container instances — CRUD, power actions, snapshots, cloning, resize |
|
53 |
Appliance settings, health, ping, setup, tenants, maintenance mode |
|
48 |
Load balancers, virtual servers, pools, profiles, monitors |
|
45 |
Monitoring checks, check groups, check apps, incidents, alerts |
|
44 |
Cloud integrations, cloud datastores, cloud folders, resource pools, security groups |
|
33 |
Bare-metal hosts, hypervisors, managed servers — CRUD and power actions |
|
26 |
Provision types, virtual images, pricing/service plans |
|
24 |
Storage servers, storage volumes, storage buckets, file shares |
|
23 |
App deployments, deployment versions, deployment files |
|
21 |
Backups, backup results, backup restores, backup settings |
|
20 |
Virtual desktop pools, VDI gateways, VDI allocations |
|
18 |
Self-service catalog types, catalog orders, cart items, checkout, inventory |
|
17 |
Morpheus apps (multi-tier), app lifecycle, app security groups, wiki |
|
16 |
Roles and role permissions management |
|
16 |
Third-party integrations (ITSM, IPAM, DNS, CM, etc.) |
|
16 |
Infrastructure groups, group clouds, group wiki |
|
14 |
Automation tasks — shell scripts, HTTP, Ansible, Puppet, Chef, etc. |
|
14 |
Scheduled jobs and job executions |
|
14 |
Billing, invoices, invoice line items |
|
14 |
Archive buckets and archive files |
|
12 |
Container/node actions — start, stop, restart, suspend, attach logs |
|
11 |
Credential store — CRUD for stored credentials |
|
10 |
Security scans and security packages |
|
9 |
Current user settings and preferences |
|
9 |
Power schedule policies for automated start/stop |
|
9 |
Options API for dynamic form lookups (network options, zone options, etc.) |
|
8 |
Cost and resource optimization recommendations |
|
7 |
Log search and cluster log retrieval |
|
7 |
Image build pipelines and image build executions |
|
7 |
Blueprints (app templates) CRUD |
|
6 |
Wiki pages — server, cloud, group, cluster, instance wiki |
|
6 |
Identity sources (LDAP, SAML, etc.) |
|
6 |
Report types, report execution and results |
|
6 |
Software license management and license reservations |
|
6 |
Governance policies |
|
6 |
Hypervisor console/migration tools |
|
6 |
Environment tags (dev, staging, production, etc.) |
|
5 |
Appliance white-labeling / branding |
|
5 |
User groups management |
|
5 |
Auto-scale threshold definitions |
|
5 |
Resource pool / compute zone management |
|
5 |
Price definitions for billing |
|
5 |
Price set groupings |
|
5 |
Preseed/unattend scripts for OS automation |
|
5 |
Email notification templates |
|
5 |
OAuth client management |
|
5 |
SSL certificate management |
|
5 |
Budget definitions and tracking |
|
5 |
Boot scripts for bare-metal provisioning |
|
5 |
Approval requests and approval actions |
|
4 |
Morpheus license management |
|
4 |
SSH key pair management |
|
3 |
Execution request / remote command execution |
|
2 |
Public archive file links |
|
2 |
Password reset / forgot password |
|
1 |
Global search across all resource types |
|
- |
Invoices, budgets, pricing, and cost management |
|
- |
Appliance health and diagnostics |
|
- |
IPAM — network pools, pool servers, IP addresses |
Common Filter Presets¶
Use the X-Mcp-Tool-Categories header to load only the categories relevant to your use case. The following presets cover common scenarios:
Use Case |
Categories |
|---|---|
VM Operations |
|
Kubernetes |
|
Service Catalog |
|
Networking |
|
Cost Management |
|
Automation |
|
Administration |
|
Provisioning |
|
Full Operations |
|
Available Tools¶
The MCP server exposes 1112 tools providing full coverage of the Morpheus REST API. All tool calls execute with the permissions of the authenticated user.
Area |
Example Tools |
|---|---|
Instances |
|
Servers |
|
Clouds |
|
Clusters |
|
Networks |
|
Monitoring |
|
Automation |
|
Catalog |
|
Admin |
|
Search |
|
Session Customization Headers¶
Control tool visibility and behavior with request headers on the initialize call:
Header |
Description |
|---|---|
|
Comma-separated category list. Only specified categories are loaded immediately (bypasses progressive loading). Example: |
|
Comma-separated IDs of external MCP servers to include in this session |
|
Set to |
|
Set to |
Example: Restricting to Infrastructure Tools Only¶
For a client that should only manage infrastructure:
{
"mcpServers": {
"morpheus-infra": {
"url": "https://your-morpheus-host/api/mcp",
"headers": {
"Authorization": "Bearer your-api-token",
"X-Mcp-Tool-Categories": "instances,clouds,clusters,networks,storage"
}
}
}
}
Example: Read-Only Monitoring Client¶
For a monitoring dashboard that should never modify resources:
{
"mcpServers": {
"morpheus-monitor": {
"url": "https://your-morpheus-host/api/mcp",
"headers": {
"Authorization": "Bearer your-api-token",
"X-Mcp-Tool-Categories": "monitoring,logs,health,reports",
"X-Mcp-Read-Only-Tools": "true"
}
}
}
}
Security Considerations¶
All tool calls execute with the authenticated user’s permissions — the MCP server cannot bypass RBAC
Write operations in the built-in AI chat require user confirmation; external MCP clients bypass this (the client’s LLM handles confirmation)
Use
X-Mcp-Read-Only-Tools: truefor untrusted or automated clientsAPI tokens used for MCP should be scoped to the minimum required role
Sessions are isolated per user — no cross-user data leakage
Exposing to External MCP Clients¶
This section provides step-by-step instructions for connecting external MCP clients to your Morpheus appliance.
Generate a Morpheus API Token¶
To authenticate external MCP clients, you need a Morpheus API token.
Via the Morpheus UI:
Navigate to User Settings > API Keys tab
Click +ADD
Provide a descriptive name (e.g.,
mcp-claude-desktop)Select the appropriate Client ID
Click Save and copy the generated key
Via curl:
curl -X POST "https://your-morpheus-host/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=password&scope=write&client_id=morph-api&username=YOUR_USER&password=YOUR_PASS"
The response contains an access_token field that you use as your Bearer token.
Configure GitHub Copilot CLI¶
Option A: Project-level configuration
Create or edit .github/copilot-mcp.json in your project root:
{
"mcpServers": {
"morpheus": {
"type": "http",
"url": "https://your-morpheus-host/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
}
}
Option B: User-level configuration
Create or edit ~/.config/github-copilot/mcp.json:
{
"mcpServers": {
"morpheus": {
"type": "http",
"url": "https://your-morpheus-host/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
}
}
Configure Claude Desktop¶
Edit the Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"morpheus": {
"type": "http",
"url": "https://your-morpheus-host/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
}
}
Configure OpenCode¶
Option A: Manual configuration
Edit opencode.json in your project root:
{
"mcp": {
"morpheus": {
"type": "remote",
"url": "https://your-morpheus-host/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
}
}
Note
OpenCode uses "type": "remote" for HTTP-based MCP servers, rather than "type": "http" used by other clients.
Option B: CLI
Run opencode mcp add and provide:
Name:
morpheusType:
remoteURL:
https://your-morpheus-host/api/mcpHeaders:
Authorization: Bearer YOUR_API_TOKEN
Configure Generic MCP Clients¶
Streamable HTTP (recommended):
Send a POST request to https://your-morpheus-host/api/mcp with:
Header:
Authorization: Bearer YOUR_API_TOKENHeader:
Content-Type: application/jsonBody: JSON-RPC 2.0 messages
Legacy SSE transport:
For older MCP clients that require Server-Sent Events:
SSE URL:
https://your-morpheus-host/api/mcp/sseMessage URL:
https://your-morpheus-host/api/mcp/messages
Both endpoints require the Authorization: Bearer YOUR_API_TOKEN header.
SSL/TLS Certificates¶
Important
Most MCP clients require a valid, trusted SSL certificate. Self-signed or untrusted certificates will cause TLS verification failures that cannot be easily bypassed in most MCP client implementations.
Using a Trusted Certificate (Recommended)¶
The recommended approach is to configure your Morpheus appliance with a certificate from a trusted Certificate Authority (CA). This ensures all MCP clients can connect without additional configuration.
Self-Signed Certificates¶
If you must use a self-signed certificate, add it to your operating system’s trust store:
macOS:
sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain /path/to/morpheus-cert.pem
Linux:
sudo cp /path/to/morpheus-cert.pem /usr/local/share/ca-certificates/morpheus.crt
sudo update-ca-certificates
Windows (PowerShell):
Import-Certificate -FilePath "C:\path\to\morpheus-cert.pem" -CertStoreLocation Cert:\LocalMachine\Root
Node.js-based clients:
For MCP clients built on Node.js, set the following environment variable:
export NODE_EXTRA_CA_CERTS=/path/to/morpheus-cert.pem
Verifying the Connection¶
Use the following curl commands to verify your MCP server is accessible and responding correctly.
Initialize a session:
curl -X POST "https://your-morpheus-host/api/mcp" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2025-06-18", "clientInfo": {"name": "curl-test", "version": "1.0"}}}'
List available tools:
curl -X POST "https://your-morpheus-host/api/mcp" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 2, "method": "tools/list"}'
List tools filtered by category:
curl -X POST "https://your-morpheus-host/api/mcp?toolCategories=instances,clouds" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 2, "method": "tools/list"}'
Call a tool:
curl -X POST "https://your-morpheus-host/api/mcp" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "whoami", "arguments": {}}}'
Example Usage¶
Once an MCP client is configured and connected, you can interact with Morpheus using natural language. Example prompts:
“List all running instances in my VMware cloud”
“What’s the health status of the appliance?”
“Show me recent failed provisioning processes”
“Search for instances named ‘web-prod’”
“Execute task 42 on instance 100”
“Who am I logged in as?”
“Create a new Ubuntu instance on my VMware cloud”
Architecture¶
The MCP server acts as an API gateway — tool calls are proxied to the existing Morpheus REST API internally using the caller’s Bearer token. This means:
All existing permissions are enforced — the MCP layer does not grant any additional access beyond what the user’s role allows
No new service dependencies — the MCP layer is thin and stateless, running within the Morpheus appliance itself
Full API parity — every tool maps to a documented REST API endpoint, ensuring consistent behavior between MCP tool calls and direct API usage