Intelligence MCP Server
A local stdio MCP server that exposes the design engines and cross-domain reads as sixteen tools.
Scope#
The SDK ships a Model Context Protocol server as a second, runnable jar. An MCP host such as Claude Desktop, Claude Code, Cursor or VS Code starts it as a child process and talks to it over stdio. The server runs under the operator's own API application credentials, opens no network listener and has no hosted component. Its only outbound calls are the SDK's calls to the Equinix APIs, to PeeringDB for the peering tool, and to the cloud providers' public price APIs for the egress comparison.
The server is a community project and has no connection to the Fabric MCP server that Equinix operates. The comparison at the end of this page describes how the two differ.
The catalog has sixteen tools. Each one runs a design engine or combines reads from more than one API domain, and none of them wraps a single REST endpoint.
Build and connect#
mvn -q package -DskipTests
# writes target/equinix-sdk-java-<version>-mcp-server.jarThe jar is also attached to each GitHub release and needs Java 21 to run.
Credentials are the client ID and client secret of an API application, passed as EQUINIX_ACCESS_KEY and EQUINIX_SECRET_KEY. They can be environment variables in the host configuration, or KEY=VALUE lines in a .env.local file in the server's working directory. Only the two credential keys are read from .env.local.
The command for Claude Code:
claude mcp add equinix --env EQUINIX_ACCESS_KEY=your-client-id --env EQUINIX_SECRET_KEY=your-client-secret -- java -jar /path/to/equinix-sdk-java-<version>-mcp-server.jarThe configuration for Claude Desktop (claude_desktop_config.json) and Cursor (.cursor/mcp.json):
{
"mcpServers": {
"equinix": {
"command": "java",
"args": ["-jar", "/path/to/equinix-sdk-java-<version>-mcp-server.jar"],
"env": {
"EQUINIX_ACCESS_KEY": "your-client-id",
"EQUINIX_SECRET_KEY": "your-client-secret",
"EQUINIX_MCP_TOOLSETS": "design,ibx"
}
}
}
}The configuration for VS Code (.vscode/mcp.json):
{
"servers": {
"equinix": {
"type": "stdio",
"command": "java",
"args": ["-jar", "/path/to/equinix-sdk-java-<version>-mcp-server.jar"],
"env": {
"EQUINIX_ACCESS_KEY": "your-client-id",
"EQUINIX_SECRET_KEY": "your-client-secret"
}
}
}
}On Windows, connect-claude-desktop.ps1 in the repository root registers the server in the Claude Desktop configuration from .env.local and backs the file up first.
Environment variables#
| Variable | Default | Purpose |
|---|---|---|
EQUINIX_ACCESS_KEY, EQUINIX_SECRET_KEY | none, required | API application credentials |
EQUINIX_MCP_TOOLSETS | every read-only toolset | Comma-separated list of design, fabric, portal, ne, ibx, mutate. Also the --toolsets launch argument. |
EQUINIX_SANDBOX | false | true targets the Equinix sandbox |
EQUINIX_MCP_LOG_LEVEL | info | Log level of the stderr diagnostics |
EQUINIX_PEERINGDB_KEY | none | PeeringDB API key for design_analyze_peering |
GCP_BILLING_API_KEY | none | Enables the live Google Cloud price adapter in design_compare_cloud_egress |
EQUINIX_MCP_PRICING_TIMEOUT_MS | 12000 | Timeout per live price lookup. A slow provider is reported by name and the tool still answers. |
EQUINIX_MCP_ELICIT_TIMEOUT_MS | 300000 | Timeout of the confirmation prompt of fabric_confirm_change |
EQUINIX_MCP_ALLOW_UNCONFIRMED_MUTATIONS | unset | See Safe Mutation Broker |
The server writes the MCP protocol to stdout and all diagnostics to stderr. In live validation on 2026-11-11 stdout contained JSON-RPC messages only, and the client secret did not appear in stderr at debug level.
Tool catalog#
The sixteen tools are grouped into five toolsets. The two tools in mutate can create resources, and the other fourteen only read.
design#
| Tool | Engine | Returns |
|---|---|---|
design_optimize_placement | Metro Optimizer | Ranked metros with per-objective scores, reasons, a risk assessment and a cost estimate with price provenance |
design_plan_deployment | Metro Optimizer and Deployment Wizard, plan only | The plan (Cloud Routers, provider connections, backbone links, routing protocols) with pricing, and a plan_id kept for 30 minutes. It never executes. |
design_export_terraform | Terraform exporter | HCL for a plan_id |
design_estimate_latency | Speed-of-light latency | Distance and the fibre latency floor between two metros or IBXs |
design_estimate_tco | TCO calculator | Cost breakdown per archetype with line items and provenance |
design_compare_cloud_egress | Live cloud price adapters | Internet egress against private egress per provider, with per-provider degradation |
design_compare_cloud_to_cloud Beta | Cloud-to-cloud | Three paths between two clouds, the break-even rate and the unpriced components |
design_list_multicloud_environments Beta | Environment catalog | The bundled region pairs with status, sizes and sources, at most 50 per call |
design_analyze_peering | Peering Intelligence | Presence per ASN, peering opportunities, resiliency assessment |
The fabric toolset name selects the same nine tools.
portal, ne, ibx#
| Tool | Returns |
|---|---|
portal_list_open_tickets | Open trouble tickets across the account from order history, optionally for one IBX. Reports truncation. |
portal_get_billing_summary | Invoice summaries with totals per currency |
ne_list_devices | Network Edge device inventory: UUID, name, type, metro, status |
ibx_get_environmentals | Temperature and humidity per sensor for one IBX |
ibx_list_power_events | Power events, active by default, for a list of IBXs |
mutate#
| Tool | Purpose |
|---|---|
fabric_propose_change | Validates a create with the real dryRun=true call and returns a single-use confirm token |
fabric_confirm_change | Executes the validated create after a human confirmation |
The server loads the mutate toolset only when EQUINIX_MCP_TOOLSETS names it. Safe Mutation Broker describes the two tools.
Behaviour to expect#
- When a design tool needs a billing account and the credential can see several, the tool asks the user through MCP elicitation. On the test account, which has 13 billable accounts,
design_plan_deploymentreturned an error when the client could not show the question. - A figure that could not be priced is returned as
nullwith a reason. serverInfo.versionis the SDK version, read from the jar manifest.- The server constructs a domain client only for a selected toolset. With
EQUINIX_MCP_TOOLSETS=design,ibxit creates no Customer Portal or Network Edge client.
Embedding#
A Java application can host the server in-process, on an existing session, and add its own tools. The MCP Java SDK is an optional dependency of the library, so add io.modelcontextprotocol.sdk:mcp-core and mcp-json-jackson2 (2.0.0) to the application.
import com.eqixiac.equinix.mcp.server.EquinixMcpServer;
import com.eqixiac.equinix.mcp.server.Toolset;
EquinixMcpServer server = EquinixMcpServer.builder()
.session(eq) // shares the session's token and connection pool
.toolsets(Toolset.DESIGN, Toolset.IBX)
.build(); // registers the tools and starts serving stdio
Runtime.getRuntime().addShutdownHook(new Thread(server::close));additionalTools(ToolRegistration...) registers extension tools through the same interface the built-in tools use.
Comparison with the Equinix Fabric MCP server#
Equinix operates its own Fabric MCP server, and one MCP host can run both servers.
| Equinix Fabric MCP server | This server | |
|---|---|---|
| Operator | Equinix, hosted, private beta when last checked on 2026-07-20 | You, locally |
| Coverage | Tools that mirror the Fabric v4 API | Design engines, plus reads from Customer Portal, Network Edge and IBX SmartView |
| Authentication | OAuth 2.1 authorization code with browser consent | Client credentials from environment variables |
| Transport | Remote HTTP | stdio |
| Mutations | As defined by Equinix | Read-only by default; creates only through the broker; no deletes |
The Equinix server suits an account that has access to it and needs tool coverage of the whole Fabric API. This server suits planning, costing, reads across domains and creates through the broker, under client credentials.
The SDK contained an MCP client for the Equinix server until 3.0.0 removed it. The client duplicated the SDK's own Fabric coverage, and the Equinix server accepts only interactive OAuth tokens, which a headless library cannot obtain.