Skip to content

Meta

From docs/MCP_TOOLS.md on GitHub

Static answers with no tenant data. They are public, need no capability and no dataset, so even the most restrictive policy keeps them.

list_capabilities

Category meta · sensitivity public · capabilities none · readOnly true, destructive false, idempotent true, openWorld false · outputSchema no · timeout: layer default (300 s)

What this caller may use: the visible tools grouped by category (each with name as exposed, prefix included, title, read_only, open_world, sensitivity, capabilities and summary, the first sentence of its description up to 160 characters), tool_count, the number of resources and resource_templates, the prompts names, recommended workflows and the conventions. Everything is filtered through the policy for the calling principal.

Arguments: none.

Called with the arguments below, list_capabilities returned this structuredContent.

{}
{
  "server": "cloudg",
  "version": "0.6.0",
  "categories": {
    "compliance": [
      {
        "name": "compliance_gaps",
        "title": "Compliance gaps",
        "read_only": true,
        "open_world": false,
        "sensitivity": "confidential",
        "capabilities": [
          "read_state"
        ],
        "summary": "Assets that fail compliance, worst first: per asset the frameworks\nand controls it fails, open findings, max severity an..."
      },
      {
        "name": "compliance_summary",
        "title": "Compliance summary",
        "read_only": true,
        "open_world": false,
        "sensitivity": "internal",
        "capabilities": [
          "read_state"
        ],
        "summary": "Compliance posture per framework: controls evaluated / failing /\npassing, pass rate, open findings by severity and affec..."
      },
      "... 2 more"
    ],
    "export": [
      {
        "name": "export_report",
        "title": "Export report",
        "read_only": false,
        "open_world": false,
        "sensitivity": "confidential",
        "capabilities": [
          "read_state",
          "write_fs"
        ],
        "summary": "Write the dataset as a cloudg report file set into the output\ndirectory and return the file paths."
      },
      {
        "name": "export_terraform",
        "title": "Export Terraform",
        "read_only": false,
        "open_world": false,
        "sensitivity": "confidential",
        "capabilities": [
          "read_state",
          "write_fs"
        ],
        "summary": "Write a Terraform (.tf.json) recreation of the assets (provider,\nvariables, main and an import_commands.sh) into the out..."
      },
      "... 1 more"
    ],
    "...": "8 more categories"
  },
  "tool_count": 74,
  "resources": 13,
  "resource_templates": 11,
  "prompts": [
    "security_posture_review",
    "executive_summary",
    "... 7 more"
  ],
  "workflows": {
    "orient": [
      "workspace_status",
      "dataset_summary",
      "... 2 more"
    ],
    "triage risk": [
      "top_risks",
      "get_asset",
      "... 2 more"
    ],
    "attack surface": [
      "internet_exposure",
      "attack_paths",
      "... 2 more"
    ],
    "change impact": [
      "dependents",
      "dependency_tree",
      "... 2 more"
    ],
    "compliance": [
      "compliance_summary",
      "list_controls",
      "... 2 more"
    ],
    "drift": [
      "snapshot_dataset",
      "map_inventory / load_dataset",
      "... 1 more"
    ],
    "semantic": [
      "ontology_stats",
      "relation_groups",
      "... 2 more"
    ]
  },
  "conventions": {
    "dataset": "empty = active dataset",
    "ref": "asset id, ARN, unique name or unique ARN tail",
    "pagination": "pass next_cursor back as cursor; cursors expire when the dataset changes"
  }
}

describe_schema

Category meta · sensitivity public · capabilities none · readOnly true, destructive false, idempotent true, openWorld false · outputSchema no · timeout: layer default (300 s)

cloudg's vocabulary. asset_types maps a family heading (taken from the comments in the AssetType enum source) to its type values; edge_types maps each edge type to how it reads; severities; relation_groups maps each relation group to its relation types (with section: "relation_groups" only the group names); compliance_statuses; providers. Use these exact values in filters.

Argument Type Default Constraints Description
section string "all" one of all, asset_types, edge_types, severities, relation_types, relation_groups, compliance_statuses, providers Which part of the vocabulary to return.

Called with the arguments below, describe_schema returned this structuredContent.

{"section": "edge_types"}
{
  "edge_types": {
    "SECURITY_GROUP_RULE": "allows traffic",
    "NACL_RULE": "allows traffic",
    "ROUTE": "routes through / forwards to",
    "IAM_TRUST": "may assume",
    "IAM_POLICY_ATTACHMENT": "has policy",
    "CONTAINS": "contains",
    "PEERING": "peers with",
    "LOAD_BALANCER_TARGET": "sends traffic to",
    "INTERNET_EXPOSED": "exposes",
    "ATTACHED_TO": "is attached to",
    "REFERENCES": "uses / points at",
    "INVOKES": "triggers / calls",
    "USES_IMAGE": "runs the image of",
    "ASSUMES_ROLE": "runs as",
    "GRANTS_ACCESS": "is granted access to",
    "LOGS_TO": "sends logs to",
    "PROTECTS": "protects",
    "MONITORS": "monitors",
    "MANAGES": "manages",
    "GOVERNS": "governs"
  }
}

Called with the arguments below, describe_schema returned this structuredContent.

{"section": "relation_groups"}
{
  "relation_groups": [
    "NETWORK",
    "CONTAINMENT",
    "IAM",
    "DATA_FLOW",
    "SECURITY",
    "COMPUTE",
    "GOVERNANCE"
  ]
}

With section: "all" the sample run returned 22 asset families, 20 edge types, 5 severities, 7 relation groups, 4 compliance statuses (PASS, FAIL, NOT_APPLICABLE, MANUAL) and 3 providers (AWS, AZURE, GCP).

explain_asset_type

Category meta · sensitivity public · capabilities none · readOnly true, destructive false, idempotent true, openWorld false · outputSchema no · timeout: layer default (300 s)

How cloudg models one asset type: family, note (the enum comment, when there is one), ontology_class, terraform_type, sensitive_data_store (the reachability analyser's list), crown_jewel_weight (0 when not a crown jewel), internet_exposure_expected, and in_active_dataset (count) when a dataset is loaded.

Argument Type Default Constraints Description
asset_type string required min length 1 An AssetType value, e.g. LAMBDA_FUNCTION.

Called with the arguments below, explain_asset_type returned this structuredContent.

{"asset_type": "rds_instance"}
{
  "asset_type": "RDS_INSTANCE",
  "family": "Database",
  "note": null,
  "ontology_class": "cm:RelationalDatabase",
  "terraform_type": "aws_db_instance",
  "sensitive_data_store": true,
  "crown_jewel_weight": 10,
  "internet_exposure_expected": false,
  "in_active_dataset": 1
}
{
  "tool": "explain_asset_type",
  "arguments": {
    "asset_type": "LAMBDA"
  },
  "isError": true,
  "text": "Unknown asset type. Did you mean LAMBDA_FUNCTION, ALARM? Valid values: EC2, VIRTUAL_MACHINE, GCE_INSTANCE, LAMBDA_FUNCTION, CLOUD_FUNCTION, ECS_CLUSTE...",
  "_meta": {
    "cloudg/error_code": -32602,
    "cloudg/error_data": {
      "value": "LAMBDA",
      "valid": [
        "EC2",
        "VIRTUAL_MACHINE",
        "GCE_INSTANCE",
        "... 153 more"
      ],
      "close_matches": [
        "LAMBDA_FUNCTION",
        "ALARM"
      ]
    }
  }
}

explain_edge_type

Category meta · sensitivity public · capabilities none · readOnly true, destructive false, idempotent true, openWorld false · outputSchema no · timeout: layer default (300 s)

How to read one edge type: reads_as ("source verb target"), typical endpoints, note from the enum source, dependency_direction (forward, reverse or none, see Graph) and ontology_relations, the relation types inferred directly from the edge type, or a string saying the relation depends on ports, CIDRs and endpoint types.

Argument Type Default Constraints Description
edge_type string required min length 1 An EdgeType value, e.g. ASSUMES_ROLE.

Called with the arguments below, explain_edge_type returned this structuredContent.

{"edge_type": "contains"}
{
  "edge_type": "CONTAINS",
  "reads_as": "source contains target",
  "typical": "VPC -> subnet, subnet -> instance, account -> resource",
  "note": "VPC contains Subnet",
  "dependency_direction": "reverse",
  "ontology_relations": "inferred from both endpoint types (VPC_CONTAINS_SUBNET, SUBNET_CONTAINS_INSTANCE, CLUSTER_CONTAINS_SERVICE, ORG_CONTAINS_ACCOUNT), else the generic CONTAINS"
}

Called with the arguments below, explain_edge_type returned this structuredContent.

{"edge_type": "ASSUMES_ROLE"}
{
  "edge_type": "ASSUMES_ROLE",
  "reads_as": "source runs as target",
  "typical": "function, task, node group, instance profile -> role / service account",
  "note": "compute or service account -> IAM role it runs as",
  "dependency_direction": "forward",
  "ontology_relations": [
    "RUNS_ON"
  ]
}
{
  "tool": "explain_edge_type",
  "arguments": {
    "edge_type": "LIKES"
  },
  "isError": true,
  "text": "Unknown edge type. Did you mean INVOKES? Valid values: SECURITY_GROUP_RULE, NACL_RULE, ROUTE, IAM_TRUST, IAM_POLICY_ATTACHMENT, CONTAINS, PEERING, LOA...",
  "_meta": {
    "cloudg/error_code": -32602,
    "cloudg/error_data": {
      "value": "LIKES",
      "valid": [
        "SECURITY_GROUP_RULE",
        "NACL_RULE",
        "ROUTE",
        "... 17 more"
      ],
      "close_matches": [
        "INVOKES"
      ]
    }
  }
}