eqixiacEquinix Infrastructure as Code

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#

Shell
mvn -q package -DskipTests
# writes target/equinix-sdk-java-<version>-mcp-server.jar

The 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:

Shell
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.jar

The configuration for Claude Desktop (claude_desktop_config.json) and Cursor (.cursor/mcp.json):

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):

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#

VariableDefaultPurpose
EQUINIX_ACCESS_KEY, EQUINIX_SECRET_KEYnone, requiredAPI application credentials
EQUINIX_MCP_TOOLSETSevery read-only toolsetComma-separated list of design, fabric, portal, ne, ibx, mutate. Also the --toolsets launch argument.
EQUINIX_SANDBOXfalsetrue targets the Equinix sandbox
EQUINIX_MCP_LOG_LEVELinfoLog level of the stderr diagnostics
EQUINIX_PEERINGDB_KEYnonePeeringDB API key for design_analyze_peering
GCP_BILLING_API_KEYnoneEnables the live Google Cloud price adapter in design_compare_cloud_egress
EQUINIX_MCP_PRICING_TIMEOUT_MS12000Timeout per live price lookup. A slow provider is reported by name and the tool still answers.
EQUINIX_MCP_ELICIT_TIMEOUT_MS300000Timeout of the confirmation prompt of fabric_confirm_change
EQUINIX_MCP_ALLOW_UNCONFIRMED_MUTATIONSunsetSee 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#

ToolEngineReturns
design_optimize_placementMetro OptimizerRanked metros with per-objective scores, reasons, a risk assessment and a cost estimate with price provenance
design_plan_deploymentMetro Optimizer and Deployment Wizard, plan onlyThe plan (Cloud Routers, provider connections, backbone links, routing protocols) with pricing, and a plan_id kept for 30 minutes. It never executes.
design_export_terraformTerraform exporterHCL for a plan_id
design_estimate_latencySpeed-of-light latencyDistance and the fibre latency floor between two metros or IBXs
design_estimate_tcoTCO calculatorCost breakdown per archetype with line items and provenance
design_compare_cloud_egressLive cloud price adaptersInternet egress against private egress per provider, with per-provider degradation
design_compare_cloud_to_cloud BetaCloud-to-cloudThree paths between two clouds, the break-even rate and the unpriced components
design_list_multicloud_environments BetaEnvironment catalogThe bundled region pairs with status, sizes and sources, at most 50 per call
design_analyze_peeringPeering IntelligencePresence per ASN, peering opportunities, resiliency assessment

The fabric toolset name selects the same nine tools.

portal, ne, ibx#

ToolReturns
portal_list_open_ticketsOpen trouble tickets across the account from order history, optionally for one IBX. Reports truncation.
portal_get_billing_summaryInvoice summaries with totals per currency
ne_list_devicesNetwork Edge device inventory: UUID, name, type, metro, status
ibx_get_environmentalsTemperature and humidity per sensor for one IBX
ibx_list_power_eventsPower events, active by default, for a list of IBXs

mutate#

ToolPurpose
fabric_propose_changeValidates a create with the real dryRun=true call and returns a single-use confirm token
fabric_confirm_changeExecutes 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_deployment returned an error when the client could not show the question.
  • A figure that could not be priced is returned as null with a reason.
  • serverInfo.version is the SDK version, read from the jar manifest.
  • The server constructs a domain client only for a selected toolset. With EQUINIX_MCP_TOOLSETS=design,ibx it 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.

Java
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 serverThis server
OperatorEquinix, hosted, private beta when last checked on 2026-07-20You, locally
CoverageTools that mirror the Fabric v4 APIDesign engines, plus reads from Customer Portal, Network Edge and IBX SmartView
AuthenticationOAuth 2.1 authorization code with browser consentClient credentials from environment variables
TransportRemote HTTPstdio
MutationsAs defined by EquinixRead-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.