id: cisco_fmc
name: Cisco Firepower Management Center
version: 1.0.0
description: "Cisco Secure Firewall Management Center (FMC REST API) — firewall containment: list and create/delete network host objects, list access policies and rules, and add a block access rule. Token authentication (generatetoken); stdlib-only, no extra Python dependencies."
changelog: "1.0.0 — Initial release: list/create/delete host objects, list access policies/rules, create block access rule."
category: network

# Per-instance configuration. Auth calls generatetoken with HTTP Basic and reuses
# the returned X-auth-access-token and DOMAIN_UUID (default domain).
config_schema:
  properties:
    base_url:
      type: string
      description: "FMC base URL (e.g. https://fmc.example.com)"
    username:
      type: string
      description: "FMC username"
    password:
      type: string
      description: "FMC password"
      x-soar-sensitive: true
    insecure:
      type: boolean
      description: "Trust any TLS certificate (not secure)"
      default: false
  required:
    - base_url
    - username
    - password

commands:
  - id: list_host_objects
    name: fmc-list-host-objects
    description: "List network host objects."
    risk: read
    inputs_schema:
      properties:
        limit: { type: number, description: "Max objects (default 50)" }
      required: []
    outputs_schema: { properties: {} }
  - id: create_host_object
    name: fmc-create-host-object
    description: "Create a network host object."
    inputs_schema:
      properties:
        name: { type: string, description: "Object name" }
        value: { type: string, description: "Host IP address" }
        description: { type: string, description: "Optional description" }
      required: [name, value]
    outputs_schema: { properties: {} }
  - id: delete_host_object
    name: fmc-delete-host-object
    description: "Delete a network host object by ID."
    inputs_schema:
      properties:
        object_id: { type: string, description: "Host object ID" }
      required: [object_id]
    outputs_schema: { properties: {} }
  - id: list_access_policies
    name: fmc-list-access-policies
    description: "List access control policies."
    risk: read
    inputs_schema:
      properties:
        limit: { type: number, description: "Max policies (default 50)" }
      required: []
    outputs_schema: { properties: {} }
  - id: list_access_rules
    name: fmc-list-access-rules
    description: "List the access rules of an access control policy."
    risk: read
    inputs_schema:
      properties:
        policy_id: { type: string, description: "Access control policy ID" }
        limit: { type: number, description: "Max rules (default 50)" }
      required: [policy_id]
    outputs_schema: { properties: {} }
  - id: create_access_rule
    name: fmc-create-access-rule
    description: "Add an access rule to a policy (e.g. a BLOCK rule for source/destination network objects)."
    inputs_schema:
      properties:
        policy_id: { type: string, description: "Access control policy ID" }
        name: { type: string, description: "Rule name" }
        action: { type: string, description: "ALLOW, TRUST, or BLOCK (default BLOCK)" }
        source_object_ids: { type: string, description: "Comma-separated source network object IDs (optional)" }
        destination_object_ids: { type: string, description: "Comma-separated destination network object IDs (optional)" }
        enabled: { type: boolean, description: "Enable the rule (default true)" }
      required: [policy_id, name]
    outputs_schema: { properties: {} }

  - id: test_connection
    name: fmc-test-connection
    description: "Verify connectivity and credentials via generatetoken (used by the Test button)."
    risk: read
    inputs_schema:
      properties: {}
      required: []
    outputs_schema: { properties: {} }
