Skip to main content
Glama
spx-mcp-server

spx-mcp-server

by szepeviktor

SPX MCP Server

Web-only MCP server for php-spx reports. It calls the embedded SPX web endpoints, parses the full report, and returns LLM-sized JSON summaries instead of raw event streams.

Prerequisites

  • Node.js 20 or newer

  • An application with the spx PHP extension enabled for HTTP profiling

  • SPX HTTP access configured, for example:

spx.http_enabled=1
spx.http_key="dev"
spx.http_ip_whitelist="127.0.0.1"

Related MCP server: otel-mcp

Build

npm install
npm run build

The built stdio entry point is:

/path/to/spx-mcp-server/dist/index.js

Set these environment variables in your agent config, or pass them per tool call:

SPX_BASE_URL=http://localhost
SPX_KEY=dev

Install In Codex CLI

Edit ~/.codex/config.toml and add:

[mcp_servers.spx]
command = "node"
args = ["/path/to/spx-mcp-server/dist/index.js"]
env = { SPX_BASE_URL = "http://localhost", SPX_KEY = "dev" }

Restart Codex CLI after editing the file.

Install In Claude Code

Local project config:

claude mcp add --transport stdio --scope project \
  --env SPX_BASE_URL=http://localhost \
  --env SPX_KEY=dev \
  spx -- node /path/to/spx-mcp-server/dist/index.js

User-wide config:

claude mcp add --transport stdio --scope user \
  --env SPX_BASE_URL=http://localhost \
  --env SPX_KEY=dev \
  spx -- node /path/to/spx-mcp-server/dist/index.js

Verify:

claude mcp list
claude mcp get spx

Equivalent .mcp.json project config:

{
  "mcpServers": {
    "spx": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/spx-mcp-server/dist/index.js"],
      "env": {
        "SPX_BASE_URL": "http://localhost",
        "SPX_KEY": "dev"
      }
    }
  }
}

Install In Cline

Cline is a popular open-source VS Code agent with MCP support.

For Cline CLI, run:

cline mcp

Then add a local stdio server with:

name: spx
command: node
args: /path/to/spx-mcp-server/dist/index.js
env:
  SPX_BASE_URL=http://localhost
  SPX_KEY=dev

For the VS Code extension, open the Cline MCP Servers settings and add this JSON:

{
  "mcpServers": {
    "spx": {
      "command": "node",
      "args": ["/path/to/spx-mcp-server/dist/index.js"],
      "env": {
        "SPX_BASE_URL": "http://localhost",
        "SPX_KEY": "dev"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Install In OpenClaw

OpenClaw is an open-source personal agent/gateway that can manage outbound MCP servers under mcp.servers.

Edit ~/.openclaw/openclaw.json or the file pointed to by OPENCLAW_CONFIG_PATH:

{
  mcp: {
    servers: {
      spx: {
        command: "node",
        args: ["/path/to/spx-mcp-server/dist/index.js"],
        env: {
          SPX_BASE_URL: "http://localhost",
          SPX_KEY: "dev",
        },
      },
    },
  },
}

Check the saved config:

openclaw mcp status --verbose
openclaw mcp probe spx

Basic Workflow

  1. Call profile_url for the web URL you want to profile.

  2. Call list_reports.

  3. Pick the newest matching report.

  4. Call analyze_report or get_hot_paths.

Tools

  • profile_url: sends one HTTP request with SPX cookies enabled.

  • list_reports: reads ?SPX_UI_URI=/data/reports/metadata.

  • get_report_metadata: reads one report metadata JSON.

  • analyze_report: downloads and parses ?SPX_UI_URI=/data/reports/get/<key>.

  • get_hot_paths: returns the most expensive call paths.

  • get_function_profile: returns one function's aggregate and callers/callees.

  • get_raw_events: returns a paginated debug slice of raw events.

The analyzer limits output by default. Large SPX reports can contain millions of events, so full raw report output is intentionally not exposed as a normal tool result. get_raw_events is capped at 1000 events per call and is intended for debugging parser or analyzer behavior.

References

Available Tools

7 tools
analyze_reportC

Download, decompress if needed, parse, and aggregate one SPX full report.

Inputs: key (required), limit, metric, spxKey, +3 more.

get_function_profileC

Return aggregate, callers, callees, and hot paths for a function name substring.

Inputs: key (required), functionQuery (required), limit, metric, +4 more.

get_hot_pathsD

Return only the hottest call paths for one SPX report.

Inputs: key (required), limit, metric, spxKey, +3 more.

get_raw_eventsA

Return a paginated debug slice of raw SPX events. This never returns the full report.

Inputs: key (required), limit, offset, spxKey, +3 more.

get_report_metadataC

Get metadata JSON for one SPX report key.

Inputs: key (required), spxKey, baseUrl, timeoutMs.

list_reportsB

List SPX report metadata from the embedded web UI data endpoint.

Inputs: spxKey, baseUrl, timeoutMs.

profile_urlB

Profile one web request by sending SPX cookies to the target URL.

Inputs: url (required), depth, method, spxKey, +6 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 7 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: profile_url initiates profiling, list_reports lists metadata, get_report_metadata retrieves specific metadata, analyze_report aggregates full data, get_hot_paths extracts hot paths, get_function_profile provides function-level analysis, and get_raw_events returns raw events. There is no ambiguity between them.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in lowercase snake_case (e.g., profile_url, list_reports, get_hot_paths). The verbs are clear and the naming is predictable throughout.

    Tool Count5/5

    With 7 tools, the server is well-scoped for a profiling/analysis domain. Each tool covers a necessary operation without bloat, and the count is ideal for an agent to manage.

    Completeness4/5

    The tool set covers the core workflow: starting a profile, listing reports, retrieving metadata, performing full analysis, and extracting specific insights. Minor gaps exist (e.g., no explicit tool to stop a profile or delete reports), but these are likely outside the server's intended scope, and the remaining tools form a cohesive surface.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      An MCP server that converts Windows WPR .etl performance traces into structured JSON summaries and flamegraph-ready data for LLM analysis. It bridges Windows Performance Analyzer automation with LLM reasoning capabilities for performance troubleshooting.
      1
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP server that gives AI agents access to your application's OpenTelemetry traces for querying, analysis, and debugging.
      5
      11 npm
      2
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Remote MCP server that normalizes OpenTelemetry GenAI spans by mapping fields, provider attributes, and missing attributes, and exports dashboard schemas.
      MIT