Skip to main content
Glama
Latent Defense MCP Server

Latent Defense MCP Server

Official

Latent Defense MCP Server

MCP server that connects Claude Code to your Latent Defense deployment. Map GitHub repositories into an infrastructure graph, discover attack paths with the JEPA energy model, and triage findings — all from your terminal.

Quick start

# 1. Install
pip install git+https://github.com/latent-defense/mcp-server-public.git

# 2. Scaffold config and skills into your project
cd your-project
latent-defense-mcp-init

# 3. Edit .mcp.json — set your API key and portal URL
# 4. Start Claude Code (or restart if already running)
# 5. Type: "Map all repositories in our GitHub org"

Related MCP server: GitHub MCP Server

Setup

Step 1 — Install the MCP server

pip install git+https://github.com/latent-defense/mcp-server-public.git

Step 2 — Get your portal URL and API key

  1. Log in to your Latent Defense portal

  2. Go to Settings → API Keys

  3. Click Generate API Key — it starts with sk_ld_

  4. Copy the key (it's only shown once)

Your portal URL is the base URL you use to access the portal (e.g. https://portal.acme.latentdefense.ai).

Step 3 — Add a GitHub PAT to the credential broker

The mapper needs a GitHub Personal Access Token to clone your repositories.

  1. Create a GitHub PAT with repo scope (or fine-grained with read access to your target repos)

  2. In the portal, go to Settings → Credentials

  3. Select a profile from the dropdown (e.g. github) or create a new one

  4. Under Source Code, add a GitHub PAT credential and paste your token

  5. Click Verify All — it should show a green verified status

Remember the profile name (e.g. github) — you'll need it when mapping.

Step 4 — Configure Claude Code

Run latent-defense-mcp-init in your project directory:

latent-defense-mcp-init

This creates:

  • .mcp.json — MCP server configuration

  • .claude/skills/map/ — guided mapping workflow skill

  • .claude/skills/research/ — interactive JEPA inference skill

Now edit .mcp.json and replace the placeholder values:

{
  "mcpServers": {
    "latent-defense": {
      "command": "latent-defense-mcp",
      "env": {
        "LATENT_DEFENSE_API_KEY": "sk_ld_your_key_here",
        "LATENT_DEFENSE_URL": "https://portal.your-deployment.com"
      }
    }
  }
}

If your portal uses a self-signed certificate, add "LATENT_DEFENSE_VERIFY_SSL": "false" to the env block.

If latent-defense-mcp is not on your PATH, use the full path — run which latent-defense-mcp to find it.

Step 5 — Start Claude Code

Start Claude Code (or restart if already running). You should see latent-defense appear in the MCP server list. If it doesn't, check the API key and portal URL in .mcp.json.

Mapping your infrastructure

Start a mapping run

Tell Claude what to map:

Map all repositories in the acme-corp GitHub org

Or use the /map skill for a guided workflow — it will ask you for repositories, credential profile, and scope.

Claude will:

  1. Ask which credential profile to use (the one you set up in Step 3, e.g. github)

  2. Create the mapping run and show you the run ID

  3. Monitor progress — you'll see agent counts and completion status

  4. Report results when done — node count, edge count, and the repository/branch IDs

What gets mapped

The mapper clones each repository and builds a semantic graph of your infrastructure:

  • IaC (Terraform, CloudFormation, Helm charts) → cloud resources, networking, IAM

  • Kubernetes manifests → deployments, services, RBAC, network policies

  • CI/CD pipelines (GitHub Actions, GitLab CI) → workflows, secrets, deployment targets

  • Application code → HTTP endpoints, service-to-service calls, auth checks

  • Dockerfiles → container images, base images, exposed ports

  • Configuration files → environment variables, secret references, database connections

A mapping of ~50 repositories takes 15-30 minutes.

Troubleshooting mapping

Error

Cause

Fix

"Repository not accessible without a VCS credential"

No GitHub PAT in the credential profile

Add a PAT in Settings → Credentials and verify it

"No scope target is accessible"

Wrong credential profile name

Check the profile dropdown in Settings → Credentials for the correct name

401 Unauthorized

Bad or expired API key

Generate a new key in Settings → API Keys

Run stuck in routing for >10 min

Large scope, planner is working

Normal for 50+ repos — wait for it

Finding attack paths

Once you have a mapped graph, use the /research skill to discover attack paths.

Start a research session

Find attack paths in our infrastructure

Or use /research for the guided workflow. Claude will:

  1. Load your graph into the JEPA engine (takes 2-5 minutes for large graphs — Claude will tell you when it's ready)

  2. Survey the attack surface — find entry points, high-value targets, credential stores

  3. Build threat models — hypothetical attack chains targeting your infrastructure

  4. Match against real infrastructure — the JEPA model scores each hop based on the full graph structure

  5. Validate against compensating controls — high-energy hops indicate the model detected a security control blocking that transition

  6. Submit confirmed paths to triage — only paths that survive validation

Understanding results

The JEPA model assigns energy scores to each hop in an attack path:

Energy

Meaning

< 0.5

Easy — minimal barriers, attacker can traverse freely

0.5 - 2.0

Medium — some controls present but traversable

> 2.0

Hard — significant compensating control detected (network policy, RBAC boundary, security group, etc.)

Lower energy = easier for an attacker = higher risk.

When Claude finds a high-energy hop, it inspects the nodes on both sides to identify the specific control — a network policy, a pod security context, an RBAC binding — and names it in the analysis.

Research modes

Mode

When to use

Example prompt

Proactive scan

Find the most dangerous paths that exist

"Find attack paths in our infrastructure"

Detection triage

Investigate a specific CVE or alert

"Is CVE-2024-1234 exploitable in our infrastructure?"

Query

Answer a security posture question

"Is our production database reachable from the public internet?"

Example: full workflow

1. "Map all repositories in our GitHub org"
   → Claude creates a mapping run, monitors progress, reports results

2. "Find attack paths in our infrastructure"
   → Claude loads the graph into JEPA, surveys entry points and targets

3. Claude builds threat models and matches them:
   → "CI/CD pipeline → GitHub Actions secrets → Terraform → K8s secret → production database"
   → Path energy: -0.85 (easy traversal)
   → 3/3 nodes matched, all hops confirmed

4. Claude validates each hop:
   → "The deploy workflow writes ANTHROPIC_API_KEY to secrets.tfvars — no environment gate"
   → "K8s secret bundles 4 keys in one object — compromise of any consumer yields all"

5. Claude submits the validated path to triage with remediation guidance

Skills

This repo includes two Claude Code skills:

Skill

Command

What it does

Map

/map

Guided mapping — asks for repos, credential profile, monitors progress, reports results

Research

/research

Interactive JEPA inference — loads graph, builds threat models, matches, validates, submits paths

Skills are installed by latent-defense-mcp-init into .claude/skills/. They guide Claude through each workflow step by step.

Environment variables

Variable

Required

Default

Description

LATENT_DEFENSE_API_KEY

Yes

—

API key from portal (starts with sk_ld_)

LATENT_DEFENSE_URL

No

https://portal.latentdefense.ai

Portal base URL

LATENT_DEFENSE_VERIFY_SSL

No

true

Set to false for self-signed certs

Tool reference

Mapping

Tool

Description

create_mapping_run

Create a mapping run — accepts repos, cloud accounts, k8s clusters, domains, CIDRs, web endpoints

get_mapping_run

Get run status: routing → planning → running → committing → completed. Shows agent counts and progress

list_mapping_runs

List recent mapping runs with status and trigger type

list_mapping_agents

List agents spawned by a run (planner, modality agents) with per-agent status

cancel_mapping_run

Cancel a running or stuck mapping run

trigger_scan

Trigger a scan via map-trigger (adds dedup + rate limiting — use for production scheduled scans)

list_trigger_events

List recent trigger events (manual scans, webhooks, scheduled)

trigger_stats

Active runs, rate limiting state, failure counts

list_scan_schedules

List cron-based recurring scan schedules

run_scan_schedule

Manually trigger a scheduled scan now

Infrastructure graph

Tool

Description

list_repositories

List all InfraDB repositories with node/edge counts

get_repository

Get repository details

list_branches

List branches in a repository (each branch is an independent graph state)

get_branch

Get branch details — head commit, graph stats

get_graph

Get the full materialized graph (all nodes + edges) for a branch

create_branch

Create a new branch (fork from existing for analysis)

list_commits

List commits on a branch (newest first) — each commit is a graph delta

diff_commits

Diff two commits — shows added/removed/modified nodes and edges

search_nodes

Full-text search for nodes in a repository

list_branch_attack_paths

List raw JEPA attack paths stored on a branch (pre-triage)

infra_stats

Overall InfraDB stats — repo count, total nodes/edges, storage

JEPA inference

Tool

Description

run_inference

Trigger a batch JEPA inference run on a branch — discovers attack paths automatically

list_inference_runs

List recent inference runs

get_inference_run

Get inference run status and results

ingest_detection

Ingest a security detection from an external tool (scanner, SIEM) to trigger targeted inference

list_inference_schedules

List JEPA inference schedules (cron-based recurring runs)

create_inference_schedule

Create a recurring inference schedule (e.g. nightly on all branches)

delete_inference_schedule

Delete an inference schedule

Triage

Tool

Description

list_attack_paths

List attack paths — filter by status (new/acknowledged/validated/escalated) and min risk score

get_attack_path

Get full path details — steps, MITRE ATT&CK mappings, risk score, energy breakdown

update_path_status

Update triage status (acknowledge, close, etc.)

validate_path

Dispatch a path for sandbox validation (Parser → Exploit → Grader agents in an isolated container)

escalate_path

Escalate a validated path to the ticketing system

triage_stats

Triage statistics — counts by status, severity, repository

Webhooks

Tool

Description

register_webhook

Register a webhook for triage events (e.g. Slack notification on new attack paths)

list_webhooks

List registered webhooks

delete_webhook

Delete a webhook

test_webhook

Send a synthetic test event to verify delivery

webhook_deliveries

Get delivery history — success/failure per attempt

validate_webhook_template

Validate a Jinja2 webhook template against sample data

Connectors

Tool

Description

list_connectors

List data source connectors (GuardDuty, Inspector, Qualys, Tenable, etc.)

create_connector

Create a new connector for automated artifact ingestion

get_connector

Get connector details — status, last poll time, config

update_connector

Update connector config or enable/disable

delete_connector

Delete a connector

poll_connector

Trigger an immediate poll (fetch latest data from the source now)

test_connector

Test connectivity without persisting artifacts

connector_health

Health summary across all connectors — sorted unhealthy-first

list_connector_types

List available connector types and their required config fields

ingest_stats

Ingestion stats — total artifacts, connector health, last poll times

Validation & ticketing

Tool

Description

get_validation_status

Get validation run status — step counts, progress, verdict

list_tickets

List remediation tickets

get_ticket

Get ticket details — linked attack path, status, external ticket URL

Graph-oracle (interactive JEPA tools)

These tools power the /research skill. They auto-manage an oracle session — no manual session creation needed.

Tool

Description

oracle_load_branch

Load a branch graph into the JEPA engine. Returns immediately — encoding runs in background (2-5 min for large graphs)

oracle_load_status

Check if graph encoding is complete (encoding → loaded)

oracle_graph_info

Get loaded graph stats — node/edge counts, type distribution, available edge types

oracle_list_nodes

Browse nodes by type (e.g. all k8s_ingress nodes)

oracle_get_node

Semantic node lookup — returns best match with full neighbor details

oracle_search_nodes

Search nodes by text similarity using MiniLM embeddings

oracle_tm_add_node

Add a node to the threat model

oracle_tm_add_edge

Add an edge to the threat model

oracle_tm_show

View the current threat model (nodes and edges)

oracle_tm_clear

Clear the threat model and start fresh

oracle_tm_match

Match threat model against real infrastructure — returns Mermaid diagram with node matches (cosine scores), BFS paths (energy scores), and implicit edges

oracle_tm_match_refine

Iterative energy-scored refinement — returns per-iteration Mermaid diagrams with entry candidates, per-hop transition energy, and convergence status

oracle_submit_attack_path

Submit a discovered attack path as a chain of node descriptions (e.g. "API gateway → auth service → database")

oracle_submit_matched_path

Submit all matched paths from the current threat model to triage

oracle_tm_list_templates

List built-in threat model templates (identity, network, data, supply chain, cloud)

oracle_tm_load_template

Load a template into the threat model (replaces current)

oracle_tm_save

Save the current threat model as a reusable template

oracle_reset_session

Destroy the oracle session and start fresh

Available Tools

85 tools
cancel_mapping_runB

Cancel a running mapping run.

Inputs: run_id (required). Returns: result

configure_ticket_providerA

Register or update a ticketing provider configuration.

One tool configures any supported provider (jira, linear, github, servicenow, pagerduty, airtable, asana, custom) — the REST surface is provider-agnostic. Secrets must be written out-of-band via the credential broker; pass secret_keys to point at which Secret key holds each credential. Do NOT pass raw secret values.

Args: provider: Provider name (jira, linear, github, servicenow, pagerduty, airtable, asana, custom). config: JSON object with provider-specific non-secret config (base_url, project, etc.). secret_keys: Optional JSON object mapping credential roles to Secret keys. set_active: Make this the active provider after configuring (default true).

Inputs: provider (required), config, secret_keys, set_active. Returns: result

connector_healthA

Get health summary across all connectors, sorted unhealthy-first. Shows circuit breaker state and consecutive failures.

Inputs: no named parameters. Returns: result

create_branchA

Create a new branch in a repository.

Args: repo_id: Repository ID. name: Branch name. source_branch_id: Branch to fork from. If empty, forks from the repo's default branch.

Inputs: repo_id (required), name (required), source_branch_id. Returns: result

create_connectorA

Create a data source connector for automated artifact ingestion.

Args: name: Connector display name. connector_type: Type (use list_connector_types to see available). E.g. "aws_guardduty", "aws_inspector", "qualys", "tenable". connection_config: JSON object with type-specific connection params (credentials, regions, etc.). poll_config: Optional JSON object with polling settings (interval_minutes, enabled, etc.). mapping_config: Optional JSON object with field mapping overrides.

Inputs: name (required), connector_type (required), connection_config (required), poll_config, +1 more. Returns: result

create_inference_scheduleA

Create a recurring JEPA inference schedule.

Args: name: Schedule name. cron: Cron expression (e.g. "0 2 * * *" for 2 AM daily). branch_labels: JSON array of branch label strings to target. Ignored if all_branches is true. all_branches: Run on all branches if true.

Inputs: name (required), cron (required), branch_labels, all_branches. Returns: result

create_mapping_runA

Create a mapping run directly on the mapper, bypassing map-trigger.

Use this instead of trigger_scan when you need full control over scope or when map-trigger is returning errors.

Args: description: What to map and why. repositories: JSON array of repository URL strings. cloud_accounts: JSON array of {"provider", "account_id", "regions"} objects. kubernetes_clusters: JSON array of kubeconfig context strings. domains: JSON array of domain strings to probe. web_endpoints: JSON array of web endpoint URLs to probe. cidrs: JSON array of CIDR strings to probe. exclude_patterns: JSON array of glob patterns to exclude. credentials_profile: Credential broker profile (default: "default"). model: LLM model for mapping agents (default: "claude-sonnet-4-6"). dry_run: If true, validate the request without executing.

Inputs: description (required), repositories, cloud_accounts, kubernetes_clusters, +7 more. Returns: result

create_remediation_ticketA

Create a remediation ticket for an attack path and start two-step remediation.

Creates the upstream ticket on the active provider immediately (~seconds), then runs the LLM+JEPA remediation loop in the background and updates the ticket. Poll get_ticket_steps for per-iteration progress. Provider-agnostic: the ticket lands on whichever provider is currently active (see get_ticket_provider).

Args: path_id: Attack path ID (from triage / validation tools). repository_id: InfraDB repository ID the path belongs to. branch_id: InfraDB branch ID. entry_node: Path entry node ID. target_node: Path target node ID. steps: JSON array of path-step objects (source_node/target_node/...). step_count: Number of steps in the path. risk_score: Path risk score (0.0-1.0). mitre_techniques: JSON array of MITRE ATT&CK technique IDs. difficulty: Path difficulty ("low"/"medium"/"high"). source: Optional origin tag for the ticket. validation_verdict: Optional JSON object with the validation verdict.

Inputs: path_id (required), repository_id (required), branch_id (required), entry_node (required), +8 more. Returns: result

delete_connectorC

Delete a data source connector.

Inputs: connector_id (required). Returns: result

delete_inference_scheduleC

Delete a JEPA inference schedule.

Inputs: schedule_id (required). Returns: result

delete_webhookC

Delete a triage webhook.

Inputs: webhook_id (required). Returns: result

diff_commitsA

Diff two commits — shows added/removed/modified nodes and edges.

Inputs: commit_a_id (required), commit_b_id (required). Returns: result

escalate_pathC

Escalate a validated attack path to the ticketing system.

Inputs: path_id (required). Returns: result

get_attack_pathA

Get full details of an attack path including steps, MITRE mappings, and risk score.

Inputs: path_id (required). Returns: result

get_branchC

Get branch details including head commit and graph stats.

Inputs: repo_id (required), branch_id (required). Returns: result

get_connectorC

Get connector details including status and last poll time.

Inputs: connector_id (required). Returns: result

get_graphC

Get the full materialized graph (nodes + edges) for a branch.

Inputs: branch_id (required). Returns: result

get_inference_runB

Get status and results of an inference run.

Inputs: run_id (required). Returns: result

get_mapping_runB

Get status and details of a mapping run.

Inputs: run_id (required). Returns: result

get_repositoryC

Get details for an InfraDB repository.

Inputs: repo_id (required). Returns: result

get_ticketC

Get remediation ticket details.

Inputs: ticket_id (required). Returns: result

get_ticket_providerA

Get the active ticketing provider and all configured providers with verification state.

Inputs: no named parameters. Returns: result

get_ticket_stepsB

Get per-iteration remediation steps/progress for a ticket.

Inputs: ticket_id (required). Returns: result

get_ticket_template_variablesA

List the variables a ticket template can reference (Jinja2 cheatsheet).

Returns every {{ variable }} available to a TicketTemplate — dotted path, type, and description — plus the template schema_version. Fetch this before authoring or previewing a template with preview_ticket_template.

Inputs: no named parameters. Returns: result

get_trigger_eventB

Get details of a specific trigger event.

Inputs: event_id (required). Returns: result

get_validation_statusA

Get the status of a validation run (step counts, progress).

Inputs: run_id (required). Returns: result

infra_statsA

Get InfraDB stats (repo count, total nodes/edges, storage).

Inputs: no named parameters. Returns: result

ingest_detectionB

Ingest a security detection from an external tool (scanner, SIEM, etc.).

Args: source: Detection source (e.g. "vulnerability_scanner", "config_audit"). severity: One of "critical", "high", "medium", "low", "info". affected_resource_type: Resource type (e.g. "ec2_instance", "pod"). affected_resource_id: Resource identifier. title: Detection title. cve: CVE identifier if applicable.

Inputs: source (required), severity (required), affected_resource_type (required), affected_resource_id (required), +2 more. Returns: result

ingest_statsA

Get ingestion stats (total artifacts, connector health, last poll times).

Inputs: no named parameters. Returns: result

list_attack_pathsB

List attack paths, optionally filtered by status or risk score.

Status values: new, acknowledged, validating, validated, escalated, ticketed, closed.

Inputs: status, min_risk_score, limit, offset. Returns: result

list_branch_attack_pathsA

List attack paths stored on a branch in InfraDB (pre-triage, raw JEPA output).

Inputs: branch_id (required). Returns: result

list_branchesC

List branches in a repository.

Inputs: repo_id (required). Returns: result

list_commitsC

List commits on a branch (newest first).

Inputs: branch_id (required), limit. Returns: result

list_connectorsA

List all configured data source connectors.

Inputs: no named parameters. Returns: result

list_connector_typesA

List available connector types and their required configuration fields.

Inputs: no named parameters. Returns: result

list_inference_runsC

List recent JEPA inference runs.

Inputs: limit. Returns: result

list_inference_schedulesA

List all JEPA inference schedules.

Inputs: no named parameters. Returns: result

list_mapping_agentsA

List agents spawned by a mapping run (planner, modality agents, etc.).

Inputs: run_id (required). Returns: result

list_mapping_runsC

List recent mapping runs with status, trigger type, and graph stats.

Inputs: limit. Returns: result

list_repositoriesA

List all InfraDB repositories.

Inputs: no named parameters. Returns: result

list_scan_schedulesA

List all scan schedules (cron-based recurring mapping runs).

Inputs: no named parameters. Returns: result

list_ticketsC

List remediation tickets.

Inputs: status, limit. Returns: result

list_trigger_eventsC

List recent trigger events (scans, webhooks).

Inputs: limit. Returns: result

list_webhooksA

List all registered triage webhooks.

Inputs: no named parameters. Returns: result

oracle_get_nodeB

Look up a node by description. Finds the best semantic match with full details.

Inputs: query (required). Returns: result

oracle_graph_infoA

Get node/edge counts, type distribution, and available edge types for the loaded graph.

Inputs: no named parameters. Returns: result

oracle_list_nodesB

Browse nodes in the loaded graph, optionally filtered by type.

Inputs: node_type, limit. Returns: result

oracle_load_branchA

Load an InfraDB branch graph into the oracle session. Must be called before any graph exploration or threat-model matching.

For large graphs (1000+ nodes), encoding takes 2-5 minutes. This tool returns immediately once encoding has started. Use oracle_graph_info() to check when loading is complete.

Inputs: branch_id (required). Returns: result

oracle_load_statusA

Check whether the graph has finished loading after oracle_load_branch returned 'encoding_started'.

Inputs: no named parameters. Returns: result

oracle_reset_sessionA

Destroy the current oracle session and start fresh on the next tool call.

Inputs: no named parameters. Returns: result

oracle_search_nodesC

Search nodes by text similarity using MiniLM embeddings.

Inputs: node_description (required), node_type, top_k. Returns: result

oracle_submit_attack_pathA

Submit a discovered attack path as a chain of node descriptions (separated by ' -> '). The path is energy-scored and forwarded to triage.

Args: nodes: Node descriptions separated by ' -> '. Example: "public API gateway -> auth service -> database credentials -> production DB" description: Optional description of the attack path.

Inputs: nodes (required), description. Returns: result

oracle_submit_matched_pathA

Submit attack paths from the current threat model's matched nodes. Requires tm_match or tm_match_refine to have been run first.

Inputs: description. Returns: result

oracle_tm_add_edgeC

Add an edge to the threat model.

Inputs: source (required), target (required), edge_type (required), description (required). Returns: result

oracle_tm_add_nodeC

Add a node to the threat model.

Inputs: name (required), description (required), node_type (required). Returns: result

oracle_tm_clearB

Clear the current threat model.

Inputs: no named parameters. Returns: result

oracle_tm_list_templatesC

List available threat model templates. Categories: identity, network, data, supply_chain, cloud_services.

Inputs: category. Returns: result

oracle_tm_load_templateC

Load a threat model template by name. Replaces the current threat model.

Inputs: name (required). Returns: result

oracle_tm_matchB

Match the threat model against the real infrastructure graph. Returns a Mermaid diagram with node matches (cosine scores), BFS paths (energy scores), and implicit edges.

Inputs: top_k. Returns: result

oracle_tm_match_refineC

Iterative energy-scored refinement of the threat model match. Returns Mermaid diagrams per iteration showing entry candidates, path transitions, and convergence.

Inputs: top_k, max_iterations. Returns: result

oracle_tm_saveC

Save the current threat model as a reusable template.

Args: name: Template name (kebab-case, e.g. 'refined-iam-escalation-aws-prod'). description: What this attack pattern does. category: One of: identity, network, data, supply_chain, cloud_services. source_template: Name of the seed template this was refined from, if any.

Inputs: name (required), description (required), category (required), source_template. Returns: result

oracle_tm_showA

View the current threat model (nodes and edges).

Inputs: no named parameters. Returns: result

poll_connectorC

Trigger an immediate poll on a connector (fetch latest data from the source).

Inputs: connector_id (required). Returns: result

preview_ticket_templateA

Dry-render a ticket template against synthetic content — no state touched.

Shows what a TicketTemplate will produce before it's saved on a provider. Returns rendered_title / rendered_description, plus fell_back + warning when a template fails to render (the hard-coded body is used instead), and a provider transform_hint (e.g. Jira flattens markdown into ADF). Does NOT modify the saved template on the active provider.

Args: template: JSON object for the TicketTemplate. Common fields: description_template, title_template (Jinja2 source strings); optional per-stage overrides description_template_{initial,final,failure} and title_template_{initial,final,failure}; field_defaults (dict of scalar custom-field defaults). enabled is forced on for the preview render. stage: Lifecycle slice to render — "initial" (creation), "final" (resolution), or "failure". Defaults to "final". provider: Optional provider name; when set, the response includes a transform hint for how that provider will mutate the rendered body.

Inputs: template (required), stage, provider. Returns: result

register_webhookA

Register a triage webhook to receive notifications on attack path events.

Args: url: Webhook endpoint URL. events: JSON array of event types (e.g. '["new_path", "status_change", "validated"]'). template: Optional Jinja2 template for the POST body. Variables: path, event, timestamp. secret: Optional HMAC-SHA256 secret for request signing. headers: Optional JSON object of extra headers to send.

Inputs: url (required), events (required), template, secret, +1 more. Returns: result

remove_ticket_providerC

Remove a configured ticketing provider.

Inputs: provider (required). Returns: result

retry_ticketC

Re-run remediation from a failed ticket.

Inputs: ticket_id (required). Returns: result

run_inferenceC

Trigger a JEPA inference run on a branch to discover attack paths.

Inputs: branch_id (required). Returns: result

run_scan_scheduleC

Manually trigger a scan schedule to run now.

Inputs: schedule_id (required). Returns: result

search_nodesC

Search nodes in a repository by text query.

Inputs: repo_id (required), query (required). Returns: result

set_active_ticket_providerB

Switch the active ticketing provider to an already-configured provider.

Inputs: provider (required). Returns: result

sync_ticketB

Force a one-off sync of a ticket's status from its upstream provider.

Inputs: ticket_id (required). Returns: result

test_connectorA

Test a connector's connection without persisting artifacts. Returns record count or error details.

Inputs: connector_id (required). Returns: result

test_ticket_providerA

Test a ticketing provider's auth without making it active.

Args: provider: Provider name to test. Leave empty to test the currently-configured provider. config: Optional JSON object with config overrides to test.

Inputs: provider, config. Returns: result

test_webhookB

Send a synthetic test event to a webhook and return the delivery result with per-attempt status codes.

Inputs: webhook_id (required). Returns: result

ticket_statsA

Get aggregate ticket statistics (counts by status, provider, and outcome).

Inputs: no named parameters. Returns: result

triage_statsB

Get triage statistics (counts by status, severity, repository).

Inputs: repository_id. Returns: result

trigger_scanA

Trigger a manual infrastructure mapping scan.

Args: description: What to scan and why. credentials_profile: Credential profile to use (default: "default"). cloud_accounts: JSON array of {"provider", "account_id", "regions"} objects. repositories: JSON array of repo URL strings. domains: JSON array of domain strings.

Inputs: description (required), credentials_profile, cloud_accounts, repositories, +1 more. Returns: result

trigger_statsA

Get trigger service stats (active runs, rate limiting, failures).

Inputs: no named parameters. Returns: result

update_connectorA

Update a connector's configuration.

Args: connector_id: Connector ID. connection_config: JSON object with updated connection params (merged, not replaced). poll_config: JSON object with updated polling settings. enabled: Set to "true" or "false" to enable/disable. Leave empty to keep current.

Inputs: connector_id (required), connection_config, poll_config, enabled. Returns: result

update_path_statusB

Update an attack path's triage status.

Args: path_id: Attack path ID. status: Target status (acknowledged, closed, etc.). reason: Optional reason for the status change.

Inputs: path_id (required), status (required), reason. Returns: result

update_ticket_statusA

Update a ticket's status.

Args: ticket_id: Ticket ID. status: New status. One of: pending, analyzing, remediating, verifying, creating_ticket, created, failed.

Inputs: ticket_id (required), status (required). Returns: result

validate_pathB

Dispatch an attack path for sandbox validation (Parser → Exploit → Grader).

Inputs: path_id (required). Returns: result

validate_webhook_templateA

Validate a Jinja2 webhook template against a synthetic event. Returns rendered output or parse error.

Args: template: Jinja2 template string. sample_event_type: Event type for the sample data (default "new_path").

Inputs: template (required), sample_event_type. Returns: result

webhook_deliveriesA

Get recent delivery history for a webhook.

Args: webhook_id: Webhook ID. limit: Max records to return (default 20). status: Filter by "success" or "failed". Leave empty for all.

Inputs: webhook_id (required), limit, status. Returns: result

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 85 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose, with consistent prefixes (create_, get_, list_, oracle_) and specific domain targets. Even similar-sounding tools like 'list_attack_paths' vs 'list_branch_attack_paths' are differentiated by scope.

    Naming Consistency5/5

    All tools follow a consistent verb_noun pattern in snake_case. The oracle_ prefix is used uniformly for oracle operations, and stats tools use noun_verb but remain consistent among themselves.

    Tool Count4/5

    85 tools is high but well-justified given the broad domain coverage (mapping, attack paths, threat modeling, ticketing, webhooks, connectors). Some consolidation might be possible (e.g., combining oracle operations), but the count is reasonable for the complexity.

    Completeness4/5

    The tool suite covers CRUD for most entities (connectors, branches, tickets, webhooks, etc.) and includes advanced operations (validation, escalation, previewing). Minor gaps exist, such as missing update operations for inference schedules and webhooks, and no delete for branches or repositories.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Connects Claude Desktop to GitHub repositories, enabling users to perform git operations and GitHub API interactions through natural conversation.
      443 npm
      -
    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Connects Claude Desktop directly to GitHub repositories and git commands, enabling users to clone repos, check status, commit changes, push code, create repositories, and manage GitHub resources through natural conversation.
      443 npm
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Connects Claude to GitHub repositories for querying repos, reviewing PRs, managing issues, searching code, and automating workflows.
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Lets Codex delegate coding and repository work to an installed Claude Code CLI with permission-aware inspect/write access, model and effort selection, resumable and cloud-attached sessions, and durable synchronous or asynchronous jobs.
      MIT