From 9b38ec65f6eb9c1541156cdf63850556c5eca4bc Mon Sep 17 00:00:00 2001 From: Shiva Guntoju Date: Wed, 22 Apr 2026 14:29:18 +0530 Subject: [PATCH 1/2] docs(integrations): add Cisco AI Defense integration page Add documentation for the Cisco AI Defense plugin for Google ADK, providing runtime LLM and MCP tool inspection with monitor and enforce modes. Includes logo asset and code examples for both plugin and callback approaches. Resolves #1665 Made-with: Cursor --- docs/integrations/assets/cisco-ai-defense.png | Bin 0 -> 17570 bytes docs/integrations/cisco-ai-defense.md | 177 ++++++++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 docs/integrations/assets/cisco-ai-defense.png create mode 100644 docs/integrations/cisco-ai-defense.md diff --git a/docs/integrations/assets/cisco-ai-defense.png b/docs/integrations/assets/cisco-ai-defense.png new file mode 100644 index 0000000000000000000000000000000000000000..5425016436584294530e1ede987f382d626d2d03 GIT binary patch literal 17570 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 + Supported in ADKPython + + +[Cisco AI Defense](https://www.cisco.com/site/us/en/products/security/ai-defense/index.html) is an ADK plugin that integrates runtime LLM and MCP tool inspection directly into the ADK Runner lifecycle. It inspects user prompts before model calls, model outputs after generation, and MCP tool call requests/responses — then allows or blocks based on configurable security policies. + +## Use cases + +- **Runtime protection for Gemini calls**: Inspect user prompts before model calls and model outputs after generation, then allow or block based on policy (Monitor or Enforce). +- **Tool and MCP call inspection**: Inspect tool call requests before execution and tool responses after execution, and block unsafe tool behavior in Enforce mode with clear metadata. +- **Auditable decision trace and alerts**: Capture decision context (action, severity, classifications, request_id/event_id) and optionally trigger an `on_violation` callback for monitoring and incident response. + +## Prerequisites + +- [Cisco AI Defense](https://www.cisco.com/site/us/en/products/security/ai-defense/index.html) account and API key +- Python >= 3.10 +- [Google ADK](https://google.github.io/adk-docs/) >= 1.0.0 + +## Installation + +```bash +pip install cisco-aidefense-google-adk +``` + +Set the `AI_DEFENSE_API_KEY` environment variable (and `AI_DEFENSE_MCP_API_KEY` for tool inspection). + +## Quick start + +The fastest way to add Cisco AI Defense to any ADK agent — one line: + +```python +from aidefense_google_adk import defend + +agent = defend(agent, mode="enforce") +``` + +Or get a plugin for the entire app: + +```python +from aidefense_google_adk import defend + +plugin = defend(mode="enforce") +app = App(name="my_app", root_agent=agent, plugins=[plugin]) +``` + +## Use with agent — Plugin approach + +Use `CiscoAIDefensePlugin` to apply inspection globally to all agents in a Runner: + +```python +from google.adk.agents import LlmAgent +from google.adk.apps import App +from google.adk.runners import Runner +from google.adk.sessions import InMemorySessionService + +from aidefense_google_adk import CiscoAIDefensePlugin + +agent = LlmAgent( + model="gemini-2.5-flash", + name="assistant", + instruction="You are a helpful assistant.", +) + +app = App( + name="my_app", + root_agent=agent, + plugins=[ + CiscoAIDefensePlugin(mode="enforce"), + ], +) +runner = Runner(app=app, session_service=InMemorySessionService()) +``` + +## Use with agent — Callback approach + +Use `make_aidefense_callbacks` to wire inspection into a specific agent: + +```python +from google.adk.agents import LlmAgent +from aidefense_google_adk import make_aidefense_callbacks + +cbs = make_aidefense_callbacks(mode="enforce") + +agent = LlmAgent( + model="gemini-2.5-flash", + name="assistant", + instruction="You are a helpful assistant.", +) +cbs.apply_to(agent) # wires all 4 callbacks +``` + +## Modes + +Mode | Behavior +---- | -------- +`monitor` | Inspect all traffic, log violations, never block (default) +`enforce` | Inspect all traffic, block requests/responses that violate policy +`off` | Skip inspection entirely + +Modes can be set globally or per-channel: + +```python +CiscoAIDefensePlugin( + mode="monitor", # default for both + llm_mode="enforce", # override for LLM only + mcp_mode="off", # override for tools only +) +``` + +## Callbacks covered + +ADK Callback | What it inspects +------------ | ---------------- +`before_model_callback` | User prompt before LLM call +`after_model_callback` | LLM response after generation +`before_tool_callback` | Tool call request before execution +`after_tool_callback` | Tool call result after execution + +## Violation callback + +Receive notification of every violation regardless of mode: + +```python +def handle_violation(result): + print(f"Violation: {result.action} / {result.severity}") + +CiscoAIDefensePlugin( + mode="monitor", + on_violation=handle_violation, +) +``` + +## Inspector-based variant (agentsec) + +For automatic retry with exponential backoff, fail-open/fail-closed semantics, and structured `Decision` objects, use the Inspector-based variant: + +```python +from aidefense_google_adk import AgentsecPlugin + +app = App( + name="my_app", + root_agent=agent, + plugins=[ + AgentsecPlugin( + mode="enforce", + fail_open=True, + retry_total=3, + retry_backoff=0.5, + ), + ], +) +``` + +Or at the per-agent level: + +```python +from aidefense_google_adk import make_agentsec_callbacks + +cbs = make_agentsec_callbacks(mode="enforce", fail_open=True) +cbs.apply_to(agent) +``` + +## Resources + +- [GitHub Repository](https://github.com/cisco-ai-defense/ai-defense-google-adk) +- [PyPI Package](https://pypi.org/project/cisco-aidefense-google-adk/) +- [Cisco AI Defense](https://www.cisco.com/site/us/en/products/security/ai-defense/index.html) +- [cisco-aidefense-sdk on PyPI](https://pypi.org/project/cisco-aidefense-sdk/) From cd93a987fb98f36458e7df66a1198eaea654591e Mon Sep 17 00:00:00 2001 From: Kristopher Overholt Date: Mon, 27 Apr 2026 17:32:42 -0500 Subject: [PATCH 2/2] Formatting and copy edits --- docs/integrations/cisco-ai-defense.md | 76 ++++++++++++++++----------- 1 file changed, 44 insertions(+), 32 deletions(-) diff --git a/docs/integrations/cisco-ai-defense.md b/docs/integrations/cisco-ai-defense.md index 59d236b98f..c088019077 100644 --- a/docs/integrations/cisco-ai-defense.md +++ b/docs/integrations/cisco-ai-defense.md @@ -1,29 +1,42 @@ --- catalog_title: Cisco AI Defense -catalog_description: Runtime LLM and MCP tool inspection for ADK agents with monitor and enforce modes +catalog_description: Security guardrails to monitor or block agent prompts and tool calls catalog_icon: /integrations/assets/cisco-ai-defense.png -catalog_tags: ["security"] --- -# Cisco AI Defense for ADK +# Cisco AI Defense plugin for ADK
Supported in ADKPython
-[Cisco AI Defense](https://www.cisco.com/site/us/en/products/security/ai-defense/index.html) is an ADK plugin that integrates runtime LLM and MCP tool inspection directly into the ADK Runner lifecycle. It inspects user prompts before model calls, model outputs after generation, and MCP tool call requests/responses — then allows or blocks based on configurable security policies. +[Cisco AI +Defense](https://www.cisco.com/site/us/en/products/security/ai-defense/index.html) +is an enterprise AI security platform that provides runtime guardrails to +protect against threats like prompt injection, data leakage, and harmful +content. The [ADK +plugin](https://github.com/cisco-ai-defense/ai-defense-google-adk) integrates +these guardrails directly into the ADK Runner lifecycle: it inspects prompts, +model responses, and tool calls, then allows or blocks them based on configurable +security policies. ## Use cases -- **Runtime protection for Gemini calls**: Inspect user prompts before model calls and model outputs after generation, then allow or block based on policy (Monitor or Enforce). -- **Tool and MCP call inspection**: Inspect tool call requests before execution and tool responses after execution, and block unsafe tool behavior in Enforce mode with clear metadata. -- **Auditable decision trace and alerts**: Capture decision context (action, severity, classifications, request_id/event_id) and optionally trigger an `on_violation` callback for monitoring and incident response. +- **Runtime protection for model calls**: Inspect user prompts before model + calls and model outputs after generation, then allow or block based on policy + (`monitor` or `enforce`). +- **Tool and MCP call inspection**: Inspect tool call requests before execution + and tool responses after execution, and block unsafe tool behavior in + `enforce` mode with clear metadata. +- **Auditable decision trace and alerts**: Capture decision context (action, + severity, classifications, request_id/event_id) and optionally trigger an + `on_violation` callback for monitoring and incident response. ## Prerequisites - [Cisco AI Defense](https://www.cisco.com/site/us/en/products/security/ai-defense/index.html) account and API key - Python >= 3.10 -- [Google ADK](https://google.github.io/adk-docs/) >= 1.0.0 +- [ADK](https://adk.dev) >= 1.0.0 ## Installation @@ -31,11 +44,14 @@ catalog_tags: ["security"] pip install cisco-aidefense-google-adk ``` -Set the `AI_DEFENSE_API_KEY` environment variable (and `AI_DEFENSE_MCP_API_KEY` for tool inspection). +Set the `AI_DEFENSE_API_KEY` environment variable (and `AI_DEFENSE_MCP_API_KEY` +for tool inspection). -## Quick start +## Use with agent -The fastest way to add Cisco AI Defense to any ADK agent — one line: +### Quickstart + +Add Cisco AI Defense to any ADK agent with a single line: ```python from aidefense_google_adk import defend @@ -52,9 +68,10 @@ plugin = defend(mode="enforce") app = App(name="my_app", root_agent=agent, plugins=[plugin]) ``` -## Use with agent — Plugin approach +### Global plugin -Use `CiscoAIDefensePlugin` to apply inspection globally to all agents in a Runner: +Use `CiscoAIDefensePlugin` to apply inspection globally to all agents in a +Runner: ```python from google.adk.agents import LlmAgent @@ -65,7 +82,7 @@ from google.adk.sessions import InMemorySessionService from aidefense_google_adk import CiscoAIDefensePlugin agent = LlmAgent( - model="gemini-2.5-flash", + model="gemini-flash-latest", name="assistant", instruction="You are a helpful assistant.", ) @@ -80,7 +97,7 @@ app = App( runner = Runner(app=app, session_service=InMemorySessionService()) ``` -## Use with agent — Callback approach +### Per-agent callbacks Use `make_aidefense_callbacks` to wire inspection into a specific agent: @@ -91,7 +108,7 @@ from aidefense_google_adk import make_aidefense_callbacks cbs = make_aidefense_callbacks(mode="enforce") agent = LlmAgent( - model="gemini-2.5-flash", + model="gemini-flash-latest", name="assistant", instruction="You are a helpful assistant.", ) @@ -100,6 +117,8 @@ cbs.apply_to(agent) # wires all 4 callbacks ## Modes +The plugin supports three operating modes: + Mode | Behavior ---- | -------- `monitor` | Inspect all traffic, log violations, never block (default) @@ -110,24 +129,16 @@ Modes can be set globally or per-channel: ```python CiscoAIDefensePlugin( - mode="monitor", # default for both - llm_mode="enforce", # override for LLM only - mcp_mode="off", # override for tools only + mode="monitor", # default for both + llm_mode="enforce", # override for LLM only + mcp_mode="off", # override for tools only ) ``` -## Callbacks covered - -ADK Callback | What it inspects ------------- | ---------------- -`before_model_callback` | User prompt before LLM call -`after_model_callback` | LLM response after generation -`before_tool_callback` | Tool call request before execution -`after_tool_callback` | Tool call result after execution - ## Violation callback -Receive notification of every violation regardless of mode: +Use the `on_violation` callback to receive notifications for every violation in +both `monitor` and `enforce` modes: ```python def handle_violation(result): @@ -139,9 +150,10 @@ CiscoAIDefensePlugin( ) ``` -## Inspector-based variant (agentsec) +## Retry and fail-open support -For automatic retry with exponential backoff, fail-open/fail-closed semantics, and structured `Decision` objects, use the Inspector-based variant: +For automatic retry with exponential backoff, fail-open/fail-closed semantics, +and structured `Decision` objects, use the `AgentsecPlugin` variant: ```python from aidefense_google_adk import AgentsecPlugin @@ -169,7 +181,7 @@ cbs = make_agentsec_callbacks(mode="enforce", fail_open=True) cbs.apply_to(agent) ``` -## Resources +## Additional resources - [GitHub Repository](https://github.com/cisco-ai-defense/ai-defense-google-adk) - [PyPI Package](https://pypi.org/project/cisco-aidefense-google-adk/)