configure-zymtrace-mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited configure-zymtrace-mcp (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Helps the user connect their coding agent — Claude Code, OpenAI Codex, or Cursor — to their zymtrace backend's MCP server. Once connected, the user can analyze their CPU and GPU flamegraphs with natural-language queries — see optimize-cpu-workloads (CPU-only) or optimize-gpu-workloads (GPU) for the analytical workflow.
The MCP server is part of the zymtrace backend itself — it lives at<gateway-host>/mcp. If the backend isn't installed and reachable yet, route toinstall-zymtrace-backendandexpose-zymtrace-backendfirst.
Which client? The URL, token, and reachability steps are identical for every client; only the add-the-server command differs (Step 3–4). Detect the client from context — which agent is running this, or what the user says ("connect Codex", "Cursor") — and use that client's block. If unsure, ask: "Claude Code, Codex, or Cursor?"
👋 Let's connect your agent to the zymtrace MCP so you can analyze flamegraphs in natural language. I'll need your zymtrace URL and — if your install has service-token auth on — a token. Five minutes max.
>
Doc reference: <https://docs.zymtrace.com/mcp/configure-mcp>
Skip the greeting if the user has already volunteered the URL and token.
Check whether zymtrace is already connected in the user's client:
| Client | Check | |
|---|---|---|
| Claude Code | `claude mcp list 2>&1 \ | head -20 (and claude --version` — older than v2.x: MCP support varies, recommend updating) |
| Codex | `codex mcp list 2>&1 \ | head -20` |
| Cursor | open ~/.cursor/mcp.json (or project .cursor/mcp.json); or Settings → MCP/Tools |
If zymtrace already appears, the connection exists — jump straight to verification (Step 5).
| Variable | Resolve by | |
|---|---|---|
| Backend gateway URL | Ask the user. Typically https://zymtrace.<their-domain> or the ALB / Ingress hostname. If installed in-cluster only, see "Port-forward fallback" below. | |
| MCP endpoint | <gateway-url>/mcp — append /mcp to whatever they give you. | |
| Auth required? | If the backend has auth.serviceToken.enabled: true (check with `kubectl get cm -n <NS> -o yaml \ | grep -i serviceToken`), the user needs a token. Otherwise skip. |
| Existing MCP servers | the client's MCP list (Pre-flight table) — to avoid name collision. |
Things you must ask:
| Backend setting | What's needed |
|---|---|
auth.serviceToken.enabled: false (default) | No token. Connection is open within the network that can reach the gateway. |
auth.serviceToken.enabled: true | Token required. Ask the user to generate a service token in the zymtrace UI: Settings → Service Tokens → New Token. Full doc: <https://docs.zymtrace.com/authentication/service-tokens>. |
For production exposures behind ALB / NGINX / mTLS, service-token auth is recommended.
##### Claude runs
curl -fsI <gateway-url>/health 2>&1 | head -3Should return HTTP 200/204. If unreachable → the gateway isn't exposed externally; route to expose-zymtrace-backend or use the port-forward fallback below.
If the MCP (or the REST API) requires authentication, ask the user to generate a zymtrace service token — the skill never creates or sees it. Reference: <https://docs.zymtrace.com/authentication/service-tokens>.
##### What you need to do in a terminal (user-driven)
The token is generated through the zymtrace UI, not by this skill:
<gateway-url> (e.g. https://zymtrace.acme.com).mcp (or whatever scope the org uses).$ZYMTRACE_MCP_TOKEN env var.If your install doesn't have service-token auth on, skip this step.
Print the exact command/edit for their client (Step 4) and wait for explicit confirmation. In every case the token stays in an env var the user exports first ($ZYMTRACE_MCP_TOKEN) — never inline the literal token in the conversation or in files.
The user runs/edits this themselves (the token is in their env, not the skill's). Replace <gateway-url> with their URL; drop the auth header/line entirely if service-token auth is off.
Claude Code
export ZYMTRACE_MCP_TOKEN="<paste-token>" # only if auth is on
claude mcp add zymtrace --transport http <gateway-url>/mcp \
--header "Authorization: Bearer $ZYMTRACE_MCP_TOKEN" # drop this line if auth is offFor project scope instead of user scope, add --scope project (config lands in .claude/settings.json).
OpenAI Codex
export ZYMTRACE_MCP_TOKEN="<paste-token>" # only if auth is on
codex mcp add zymtrace --url <gateway-url>/mcp \
--bearer-token-env-var ZYMTRACE_MCP_TOKEN # drop this line if auth is offCodex stores it as a streamable_http server in ~/.codex/config.toml.
Cursor — no CLI; add an entry to ~/.cursor/mcp.json (global) or .cursor/mcp.json (this project):
{
"mcpServers": {
"zymtrace": {
"url": "https://<gateway-url>/mcp",
"headers": { "Authorization": "Bearer ${env:ZYMTRACE_MCP_TOKEN}" }
}
}
}Drop the "headers" field entirely if auth is off. Cursor resolves ${env:ZYMTRACE_MCP_TOKEN} from the environment, so the literal token still never lands in the file.
Confirm the server is registered in the user's client:
| Client | Verify | |
|---|---|---|
| Claude Code | `claude mcp list \ | grep -i zymtrace → Connected; in a fresh session /mcp lists zymtrace`. |
| Codex | `codex mcp list \ | grep -i zymtrace; restart Codex and confirm zymtrace appears in /mcp`. |
| Cursor | Settings → MCP/Tools shows zymtrace with a green/active indicator. |
Quick functional test (any client), in a new session:
"Using zymtrace MCP, list the top 5 hottest CPU functions from the last 1 hour."
If it returns data, the connection works. unauthorized → token wrong, regenerate. connection refused → URL wrong or unreachable.
Direct the user to the analytical workflow — optimize-cpu-workloads for CPU-only deployments, optimize-gpu-workloads for GPU workloads (it adds the GPU↔CPU cross-view and inference-server pattern catalogues), or optimize-memory-allocation for JVM memory-allocation / GC analysis (Java only). That's where the connected MCP actually gets used.
If the user also connects the GitHub MCP, Claude can pair the flamegraph analysis with the actual codebase — locating the hot function in their repo and proposing a specific edit (PR-ready), not just a generic recommendation.
##### What you need to do in a terminal
Add the GitHub MCP (https://api.githubcopilot.com/mcp/, bearer $GITHUB_TOKEN) with the same Step 4 mechanism as your client — e.g. Claude Code:
claude mcp add github --transport http https://api.githubcopilot.com/mcp/ \
--header "Authorization: Bearer $GITHUB_TOKEN"(Codex: codex mcp add github --url https://api.githubcopilot.com/mcp/ --bearer-token-env-var GITHUB_TOKEN; Cursor: a second entry in mcp.json.)
Then in a session: "Analyze my GPU workload over the last hour, use the github MCP to find the code path in `myorg/myrepo`, and suggest a fix." The agent pulls the flamegraph from zymtrace, locates the hot frame in the repo via GitHub MCP, and proposes the edit. The two MCPs compose without any extra configuration on the skill side.
If the gateway has no external exposure (still ClusterIP), the user can MCP through a port-forward.
##### What you need to do in a terminal
kubectl port-forward -n <backend-NS> svc/<PREFIX>-gateway 8080:80
# Leave this running, then add http://localhost:8080/mcp via your client's Step 4 command
# (Claude: claude mcp add … http://localhost:8080/mcp; Codex: codex mcp add … --url http://localhost:8080/mcp;
# Cursor: "url": "http://localhost:8080/mcp" in mcp.json). Auth is usually off for a local port-forward.This is fine for dev / one-off investigations. For team-wide use, run expose-zymtrace-backend to give the gateway a real hostname.
zymtrace connected.If both check, hand off to optimize-cpu-workloads (CPU-only), optimize-gpu-workloads (GPU), or optimize-memory-allocation (JVM memory/GC).
--scope project, it only shows in that repo — re-add with --scope user (or no flag). Codex/Cursor: restart the app so it re-reads the config./mcp suffix, or backend not exposed externally. Test with curl -I <gateway-url>/health first.expose-zymtrace-backend. MCP can stay on the same URL.mcp.json, or any MCP-add command arguments. Always reference an env var ($ZYMTRACE_MCP_TOKEN, or ${env:ZYMTRACE_MCP_TOKEN} in Cursor's mcp.json) the user exports.mcp.json) without explicit confirmation of the exact command/edit + gateway URL.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.