Latent Defense MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LATENT_DEFENSE_URL | No | Portal base URL | https://portal.latentdefense.ai |
| LATENT_DEFENSE_API_KEY | Yes | API key from portal (starts with sk_ld_) | |
| LATENT_DEFENSE_VERIFY_SSL | No | Set to false for self-signed certs | true |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_repositoriesA | List all InfraDB repositories. |
| get_repositoryC | Get details for an InfraDB repository. |
| list_branchesC | List branches in a repository. |
| get_branchC | Get branch details including head commit and graph stats. |
| get_graphC | Get the full materialized graph (nodes + edges) for a branch. |
| list_branch_attack_pathsA | List attack paths stored on a branch in InfraDB (pre-triage, raw JEPA output). |
| 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. |
| list_commitsC | List commits on a branch (newest first). |
| diff_commitsA | Diff two commits — shows added/removed/modified nodes and edges. |
| search_nodesC | Search nodes in a repository by text query. |
| infra_statsA | Get InfraDB stats (repo count, total nodes/edges, storage). |
| 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. |
| list_trigger_eventsC | List recent trigger events (scans, webhooks). |
| trigger_statsA | Get trigger service stats (active runs, rate limiting, failures). |
| list_scan_schedulesA | List all scan schedules (cron-based recurring mapping runs). |
| run_scan_scheduleC | Manually trigger a scan schedule to run now. |
| get_trigger_eventB | Get details of a specific trigger event. |
| get_mapping_runB | Get status and details of a mapping run. |
| list_mapping_runsC | List recent mapping runs with status, trigger type, and graph stats. |
| 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. |
| list_mapping_agentsA | List agents spawned by a mapping run (planner, modality agents, etc.). |
| cancel_mapping_runB | Cancel a running mapping run. |
| run_inferenceC | Trigger a JEPA inference run on a branch to discover attack paths. |
| list_inference_runsC | List recent JEPA inference runs. |
| get_inference_runB | Get status and results of an inference run. |
| 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. |
| list_inference_schedulesA | List all JEPA inference schedules. |
| 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. |
| delete_inference_scheduleC | Delete a JEPA inference schedule. |
| list_attack_pathsB | List attack paths, optionally filtered by status or risk score. Status values: new, acknowledged, validating, validated, escalated, ticketed, closed. |
| get_attack_pathA | Get full details of an attack path including steps, MITRE mappings, and risk score. |
| 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. |
| validate_pathB | Dispatch an attack path for sandbox validation (Parser → Exploit → Grader). |
| escalate_pathC | Escalate a validated attack path to the ticketing system. |
| triage_statsB | Get triage statistics (counts by status, severity, repository). |
| 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. |
| list_webhooksA | List all registered triage webhooks. |
| delete_webhookC | Delete a triage webhook. |
| get_validation_statusA | Get the status of a validation run (step counts, progress). |
| list_ticketsC | List remediation tickets. |
| get_ticketC | Get remediation ticket details. |
| ticket_statsA | Get aggregate ticket statistics (counts by status, provider, and outcome). |
| 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. |
| get_ticket_stepsB | Get per-iteration remediation steps/progress for a ticket. |
| 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. |
| sync_ticketB | Force a one-off sync of a ticket's status from its upstream provider. |
| retry_ticketC | Re-run remediation from a failed ticket. |
| get_ticket_providerA | Get the active ticketing provider and all configured providers with verification state. |
| 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). |
| 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. |
| set_active_ticket_providerB | Switch the active ticketing provider to an already-configured provider. |
| remove_ticket_providerC | Remove a configured ticketing provider. |
| 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 |
| 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). |
| list_connectorsA | List all configured data source connectors. |
| 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. |
| get_connectorC | Get connector details including status and last poll time. |
| 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. |
| delete_connectorC | Delete a data source connector. |
| poll_connectorC | Trigger an immediate poll on a connector (fetch latest data from the source). |
| list_connector_typesA | List available connector types and their required configuration fields. |
| ingest_statsA | Get ingestion stats (total artifacts, connector health, last poll times). |
| test_connectorA | Test a connector's connection without persisting artifacts. Returns record count or error details. |
| connector_healthA | Get health summary across all connectors, sorted unhealthy-first. Shows circuit breaker state and consecutive failures. |
| test_webhookB | Send a synthetic test event to a webhook and return the delivery result with per-attempt status codes. |
| 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. |
| 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"). |
| 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. |
| oracle_load_statusA | Check whether the graph has finished loading after oracle_load_branch returned 'encoding_started'. |
| oracle_graph_infoA | Get node/edge counts, type distribution, and available edge types for the loaded graph. |
| oracle_list_nodesB | Browse nodes in the loaded graph, optionally filtered by type. |
| oracle_get_nodeB | Look up a node by description. Finds the best semantic match with full details. |
| oracle_search_nodesC | Search nodes by text similarity using MiniLM embeddings. |
| oracle_tm_add_nodeC | Add a node to the threat model. |
| oracle_tm_add_edgeC | Add an edge to the threat model. |
| oracle_tm_showA | View the current threat model (nodes and edges). |
| oracle_tm_clearB | Clear the current threat model. |
| 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. |
| 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. |
| 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. |
| 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. |
| oracle_tm_list_templatesC | List available threat model templates. Categories: identity, network, data, supply_chain, cloud_services. |
| oracle_tm_load_templateC | Load a threat model template by name. Replaces the current threat model. |
| 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. |
| oracle_reset_sessionA | Destroy the current oracle session and start fresh on the next tool call. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/latent-defense/mcp-server-public'
If you have feedback or need assistance with the MCP directory API, please join our Discord server