The TigerGate MCP server lets an AI assistant — Claude Code, Claude Desktop, Cursor, or VS Code — read your security findings and act on them, without leaving your editor. Ask “what are my critical cloud findings?” or “open a PR that fixes the top code vuln” in plain language; the assistant calls TigerGate tools under the hood and hands you back normalized results. It speaks the Model Context Protocol over Streamable HTTP at POST /mcp (a local stdio binary is also available). Every call is authenticated with an org API key, scoped to a single organization, and passed through an MCP firewall that neutralizes prompt injection, redacts secrets, and gates writes behind human approval.
Reads hit Postgres and ClickHouse directly through a read-only database role. Writes never touch the database directly — they delegate to the backend and require approval. See Security.

What it is

  • A bridge from your assistant to TigerGate. The findings, Issues, assets, and remediation flows you see in the dashboard become tools the model can call.
  • Read-first. Search and inspect findings, correlated Issues, asset inventory, exposure graphs, and CVE intel. All read-only.
  • Remediation when you want it. Preview an auto-fix (a diff, no PR), open a PR, file a ticket, or update a finding’s status — each behind an explicit write gate.
  • Skills that compose the primitives. Higher-level playbooks like “triage my top risks” or “remediate this finding end-to-end” chain the individual tools for you.

Prerequisites

You need an organization API key (tg_…). Mint one in the dashboard:
1

Open API Keys

Dashboard → Organization → API Keys → New.
2

Pick a scope

Use api-readonly if you only want the assistant to query findings. Use api-readwrite if you also want it to preview/apply fixes, file tickets, or update statuses. Pick the narrowest type that does the job.
3

Copy the token

The tg_… token is shown once. Copy it straight into your MCP client config or secret store — it isn’t shown again.
See API keys for key types, rotation, and IP restrictions. The key is org-scoped, so the MCP server can only ever see one organization’s data.

Connect

Point your MCP client at your region’s MCP endpoint and send your key as a bearer token. Replace tg_... with your key in every snippet. The config schema differs per client — VS Code uses servers, Antigravity uses serverUrl, Codex uses TOML, and Claude Desktop needs the mcp-remote bridge.

Find your region first

Match the host in your browser’s address bar, while signed in, against the Dashboard column:
The endpoint in every snippet below, https://mcp.tigergate.dev/mcp, is the one for us1 — the default region. Every region has its own MCP endpoint and its own keys, and a key from one region is rejected by the others.If your organization is in another region, don’t edit the host by hand. Open Setup Guide → AI Assistant (MCP) in the dashboard: it emits each of these client configs pre-filled with your region’s endpoint and the correct key.
CLI (recommended):
claude mcp add --transport http tigergate https://mcp.tigergate.dev/mcp \
  --header "Authorization: Bearer tg_..."
Or add it to .mcp.json (project) / ~/.claude.json (user) — the type is required:
{
  "mcpServers": {
    "tigergate": {
      "type": "http",
      "url": "https://mcp.tigergate.dev/mcp",
      "headers": { "Authorization": "Bearer tg_..." }
    }
  }
}
You can also set all of this up visually in the dashboard at Setup Guide → AI Assistant (MCP).
Treat the tg_… token like a password. Prefer an api-readonly key unless you specifically want the assistant to open PRs or change finding statuses. Rotate keys on your normal cadence and revoke immediately if one leaks.

The tool catalog

Finding-returning read tools use one normalized shape, so results look the same whatever product they came from:
{
  "id": "…",
  "product": "cloud | code | container | pentest | kspm | runtime",
  "finding_type": "sca | sast | secret | iac | …",
  "severity": "critical | high | medium | low | info",
  "status": "open | in_progress | resolved | false_positive | accepted | wont_fix | muted | fixed",
  "title": "…",
  "resource": { "type": "…", "name": "…", "uid": "…", "region": "…", "account": "…", "repository": "…", "file": "…", "line": 0 },
  "cve_id": "CVE-…",
  "cvss": 0.0,
  "epss": 0.0,
  "kev": false,
  "remediation": { "text": "…", "fixed_version": "…", "url": "…", "auto_fix_available": true },
  "first_seen": "…",
  "last_seen": "…"
}

Read tools (read-only)

ToolPurposeKey parameters
tigergate_findings_searchList findings for one product (default page 15, max 50)product (cloud|code|container|pentest|kspm|runtime), finding_type?, severity?, status?, search?, provider?, account?, region?, resource_type?, repository?, namespace?, kev_only?, min_epss?, limit?, offset?
tigergate_finding_getFull detail for one finding, incl. description + remediationproduct, finding_type?, id
tigergate_findings_summaryDefinitive counts for a product — total, affected resources, severity breakdown, optional group-byproduct, finding_type?, group_by?
tigergate_findings_trendNew vs resolved findings over a time windowproduct (cloud|kspm|code), days?
tigergate_issues_searchCorrelated cross-product Issues, risk-rankedseverity?, status?, type?, product?, search?, limit?, offset?
tigergate_issue_getOne Issue incl. evidence (contributing findings) + graphid
tigergate_get_remediationRemediation text / fixed version / URL + auto-fix availabilityproduct, finding_type?, id
tigergate_assets_searchCloud asset inventory (worst posture first)provider?, region?, resource_type?, account_uid?, search?, limit?, offset?
tigergate_asset_getOne asset with its posture score + finding countsid
tigergate_asset_exposure_graphBlast-radius / 1-hop exposure graph for a resourceresource
tigergate_k8s_inventoryKubernetes resource inventory — counts by kind/namespacecluster?, namespace?, kind?
tigergate_compliance_summaryCompliance pass-rate for a framework — total / passed / failed / pass_rateframework, provider?
tigergate_connectionsWhat’s connected — cloud accounts, repos, registries, clusters (status, counts, last scan)(none)
tigergate_scan_statusLatest scan per product — status, time, findings, duration, errorproduct?
tigergate_workflow_searchFinding workflow state — status, assignee, due date, SLA breach, linked ticketproduct?, status?, overdue_only?, has_ticket?, limit?
tigergate_attack_pathsToxic attack paths (entry → target → crown jewel) with risk score, MITRE techniques, blast radiusseverity?, status?, limit?
tigergate_cve_lookupEPSS score/percentile + CISA KEV status for a CVEcve_id
Two support tools are always available (independent of product entitlement): tigergate_agents lists the Red/Blue/Green Tiger agent personas, and tigergate_setup_guide returns step-by-step setup for any TigerGate product or integration (topic?).
For product=code, set finding_type to sca, sast, secret, or iac (defaults to sca). Search tools return the matching list plus count and has_more.

Remediation tools (write — gated)

Write tools are only exposed when writes are enabled server-side, and each apply is annotated destructive so your client asks for confirmation.
ToolPurposeKey parameters
tigergate_finding_update_statusChange a finding’s statusproduct, finding_type, id, status, assignee?, notes?
tigergate_finding_create_ticketFile a Jira / GitHub / Linear ticketproduct, finding_type, id, provider?, title?, severity?
tigergate_issue_updateUpdate a correlated Issueid, status?, assignee?, due?
tigergate_fix_previewDry-run auto-fix for one code finding — creates a preview attempt (poll tigergate_fix_status for the diff); opens no PRfinding_type (sca|sast), id
tigergate_fix_applyOpen a PR in your repo with the fix for one or more code findingsids[]
tigergate_fix_statusPoll a fix attempt (queuedpreview_readypr_created)attempt_id

Skills (higher-level playbooks)

Skills chain the primitives above into an end-to-end flow — useful when you want an outcome rather than a specific tool.
SkillWhat it doesKey parameters
tigergate_triage_top_risksRank open critical/high across all products — what to fix firstlimit?
tigergate_remediate_findingEnd-to-end: get → remediation → preview → [approval] → apply → statusproduct, finding_type, id, apply?
tigergate_compliance_gapFailing controls mapped to a frameworkframework (CIS/PCI/HIPAA/SOC2…), provider?
tigergate_blast_radiusExposure graph + correlated Issues touching a resourceresource

Security and the MCP firewall

Every request and every result flows through an MCP firewall. It is on by default and cannot be disabled per-request.
  • Read-only database role. Read tools query Postgres/ClickHouse through a role that has no write grants. A read tool physically cannot mutate your data.
  • Write gate. Write tools are only registered when writes are enabled server-side, and each destructive apply requires human approval in your client before it runs. Nothing opens a PR or changes a status silently.
  • Delegated writes. Writes never touch the database directly — they go through the backend’s normal, audited code path, so an MCP-initiated change behaves exactly like a dashboard-initiated one.
  • Prompt-injection neutralization. Findings and Issues contain attacker-controlled text (a commit message, a resource name, a page title). The firewall neutralizes injected instructions in results before they reach the model, so a malicious finding can’t hijack your assistant.
  • Secret redaction. If a finding’s evidence contains a secret, it’s redacted on the way out — the assistant sees that a secret exists, not its value.
  • Org scoping. The API key binds every call to one organization. There is no cross-org tool and no way to widen scope from a request.
  • Allow / deny + rate limiting. Tools can be allow-listed or denied, and calls are rate-limited per key.
  • Audit. Every tool call is recorded — tool, parameters, key, and outcome — the same way API key usage is audited.

Example: triage and fix in one conversation

A typical session — “list my critical cloud findings and fix the top code vuln”:
You: List my critical cloud findings.
The assistant calls:
{
  "tool": "tigergate_findings_search",
  "arguments": { "product": "cloud", "severity": "critical", "status": "open", "limit": 10 }
}
It reads back the titles, resources, and regions. Then:
You: What's my highest-risk open code vulnerability, and can you fix it?
The assistant triages, then previews a fix before touching anything:
{ "tool": "tigergate_findings_search",
  "arguments": { "product": "code", "finding_type": "sca", "severity": "critical", "status": "open", "limit": 5 } }
{ "tool": "tigergate_get_remediation",
  "arguments": { "product": "code", "finding_type": "sca", "id": "<finding-id>" } }
{ "tool": "tigergate_fix_preview",
  "arguments": { "finding_type": "sca", "id": "<finding-id>" } }
It returns a preview attempt; poll tigergate_fix_status for the diff. When you approve, it applies — this step prompts for confirmation because it’s destructive:
{ "tool": "tigergate_fix_apply",
  "arguments": { "ids": ["<finding-id>"] } }
{ "tool": "tigergate_fix_status", "arguments": { "attempt_id": "<attempt-id>" } }
tigergate_fix_apply opens a PR in your repository, and tigergate_fix_status polls until it reports pr_created. You review and merge the PR as usual — the MCP server never merges for you.
Prefer the tigergate_remediate_finding skill to run the whole get → remediation → preview → approve → apply → status flow in one step. Pass apply: false to stop at the preview diff.

FAQ

No. Read tools use a read-only database role and physically can’t write. Write tools are only available when writes are enabled server-side, and every apply is annotated destructive so your client asks you to approve before it runs.
Only when you explicitly approve tigergate_fix_apply (or a skill’s apply step). tigergate_fix_preview returns a diff and opens no PR, so you can always look before you leap. And even after a PR is opened, you review and merge it yourself.
No. Your tg_… key is org-scoped, so every call is confined to one organization. There is no cross-org tool.
The MCP firewall neutralizes injected instructions in results before they reach the model, and redacts secrets found in evidence. The assistant learns a secret exists without seeing its value.
Use an api-readonly key for query-only use. Use api-readwrite if you want the assistant to preview/apply fixes, file tickets, or update statuses. See API keys.
Yes — the server ships as a local stdio binary in addition to the hosted Streamable HTTP endpoint. Point your client at the binary instead of the URL; authentication still uses your tg_… key.
Yes. Every tool call is recorded — tool, parameters, key, and outcome — alongside your API key’s usage audit trail.