agenticdome-python-sdk 1.2.21__tar.gz → 1.2.22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/PKG-INFO +34 -29
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/README.md +21 -16
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_python_sdk.egg-info/PKG-INFO +34 -29
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_python_sdk.egg-info/requires.txt +11 -11
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/__init__.py +4 -7
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/_framework_firewall.py +4 -4
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/agno.py +25 -25
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/autogen.py +3 -3
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/aws_bedrock.py +8 -8
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/claude.py +2 -2
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/client.py +10 -14
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/copilot_ir.py +103 -13
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/copilot_ir_collector.cjs +84 -5
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/crewai.py +30 -30
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/demo.py +4 -4
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/google_adk.py +13 -13
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/hook_catalog.py +98 -46
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/langgraph.py +16 -16
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/llamaindex.py +10 -10
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/mcp_host.py +20 -20
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/microsoft_agent_framework.py +12 -12
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/microsoft_ai_foundry.py +8 -8
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/onboarding_cli.py +37 -10
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/openai_agents.py +9 -9
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/pydantic.py +13 -13
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/smolagents.py +2 -2
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/customer-onboarding.md +9 -4
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/custom-python.md +2 -2
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/mcp-integration.md +19 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/attack_demo.py +6 -6
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/pyproject.toml +13 -13
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/CONTRIBUTING.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/LICENSE +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/MANIFEST.in +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/NOTICE +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/SECURITY.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_python_sdk.egg-info/SOURCES.txt +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_python_sdk.egg-info/dependency_links.txt +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_python_sdk.egg-info/entry_points.txt +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_python_sdk.egg-info/top_level.txt +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/_mode.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/identity.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/proof.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/agenticdome_sdk/simulation.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/README.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/agno.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/autogen.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/aws-bedrock.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/claude-agent-sdk.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/crewai.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/google-adk.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/langgraph.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/llamaindex.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/microsoft-agent-framework.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/microsoft-ai-foundry.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/openai-agents.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/pydanticai.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/frameworks/smolagents.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/performance-evidence.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/docs/runtime-deployment.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/PRODUCTION_INTEGRATION.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/README.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/crewai_agenticdome_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/README.md +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/_shared.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/agno.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/autogen.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/aws_bedrock.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/claude_agent_sdk.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/crewai.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/custom_python.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/google_adk.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/langgraph.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/llamaindex.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/mcp.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/microsoft_agent_framework.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/microsoft_ai_foundry.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/openai_agents.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/pydanticai.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/frameworks/smolagents.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/langgraph_agenticdome_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/local_simulation_gallery.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/examples/mcp_gateway_action_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/setup.cfg +0 -0
- {agenticdome_python_sdk-1.2.21 → agenticdome_python_sdk-1.2.22}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agenticdome-python-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.22
|
|
4
4
|
Summary: Official Python SDK for AgenticDome security guardrails, DLP, tool authorization, and multi-agent delegation enforcement.
|
|
5
5
|
Author: AgenticDome
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -12,7 +12,7 @@ Project-URL: MCP Integration Guide, https://github.com/agenticdome/agenticdome-p
|
|
|
12
12
|
Project-URL: Issues, https://github.com/agenticdome/agenticdome-python-sdk/issues
|
|
13
13
|
Project-URL: Examples, https://github.com/agenticdome/agenticdome-python-sdk/tree/main/examples
|
|
14
14
|
Project-URL: Security, https://github.com/agenticdome/agenticdome-python-sdk/security/policy
|
|
15
|
-
Keywords:
|
|
15
|
+
Keywords: action-firewall,agenticdome,ai-security,agent-security,guardrails,a2a,mcp,zero-trust,runtime-security
|
|
16
16
|
Classifier: Development Status :: 5 - Production/Stable
|
|
17
17
|
Classifier: Intended Audience :: Developers
|
|
18
18
|
Classifier: Intended Audience :: Information Technology
|
|
@@ -38,10 +38,10 @@ Requires-Dist: redis>=4.5.0; extra == "redis"
|
|
|
38
38
|
Provides-Extra: pop
|
|
39
39
|
Requires-Dist: cryptography>=42.0.0; extra == "pop"
|
|
40
40
|
Provides-Extra: pydanticai
|
|
41
|
-
Requires-Dist: pydantic-ai<=2.
|
|
41
|
+
Requires-Dist: pydantic-ai<=2.33.0,>=2.16.0; extra == "pydanticai"
|
|
42
42
|
Requires-Dist: anyio>=4.0.0; extra == "pydanticai"
|
|
43
43
|
Provides-Extra: pydantic
|
|
44
|
-
Requires-Dist: pydantic-ai<=2.
|
|
44
|
+
Requires-Dist: pydantic-ai<=2.33.0,>=2.16.0; extra == "pydantic"
|
|
45
45
|
Requires-Dist: anyio>=4.0.0; extra == "pydantic"
|
|
46
46
|
Provides-Extra: langgraph
|
|
47
47
|
Requires-Dist: langgraph<=1.2.11,>=1.2.9; extra == "langgraph"
|
|
@@ -54,7 +54,7 @@ Requires-Dist: autogen-agentchat==0.7.5; extra == "autogen"
|
|
|
54
54
|
Provides-Extra: microsoft-autogen
|
|
55
55
|
Requires-Dist: autogen-agentchat==0.7.5; extra == "microsoft-autogen"
|
|
56
56
|
Provides-Extra: foundry
|
|
57
|
-
Requires-Dist: azure-ai-projects<=2.
|
|
57
|
+
Requires-Dist: azure-ai-projects<=2.5.0,>=2.3.0; extra == "foundry"
|
|
58
58
|
Requires-Dist: azure-identity==1.25.3; extra == "foundry"
|
|
59
59
|
Provides-Extra: agno
|
|
60
60
|
Requires-Dist: agno<=2.9.0,>=2.8.0; extra == "agno"
|
|
@@ -63,9 +63,9 @@ Requires-Dist: openai-agents<=0.22.0,>=0.18.3; extra == "openai-agents"
|
|
|
63
63
|
Provides-Extra: mcp
|
|
64
64
|
Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "mcp"
|
|
65
65
|
Provides-Extra: bedrock
|
|
66
|
-
Requires-Dist: boto3<=1.43.
|
|
66
|
+
Requires-Dist: boto3<=1.43.78,>=1.43.54; extra == "bedrock"
|
|
67
67
|
Provides-Extra: aws-bedrock
|
|
68
|
-
Requires-Dist: boto3<=1.43.
|
|
68
|
+
Requires-Dist: boto3<=1.43.78,>=1.43.54; extra == "aws-bedrock"
|
|
69
69
|
Provides-Extra: llamaindex
|
|
70
70
|
Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "llamaindex"
|
|
71
71
|
Provides-Extra: llama-index
|
|
@@ -75,30 +75,30 @@ Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "google-adk"
|
|
|
75
75
|
Provides-Extra: adk
|
|
76
76
|
Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "adk"
|
|
77
77
|
Provides-Extra: claude
|
|
78
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
78
|
+
Requires-Dist: claude-agent-sdk<=0.2.144,>=0.2.126; extra == "claude"
|
|
79
79
|
Provides-Extra: claude-agent-sdk
|
|
80
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
80
|
+
Requires-Dist: claude-agent-sdk<=0.2.144,>=0.2.126; extra == "claude-agent-sdk"
|
|
81
81
|
Provides-Extra: smolagents
|
|
82
82
|
Requires-Dist: smolagents==1.26.0; extra == "smolagents"
|
|
83
83
|
Provides-Extra: all
|
|
84
84
|
Requires-Dist: crewai<=1.15.17,>=1.15.5; extra == "all"
|
|
85
85
|
Requires-Dist: redis>=4.5.0; extra == "all"
|
|
86
86
|
Requires-Dist: cryptography>=42.0.0; extra == "all"
|
|
87
|
-
Requires-Dist: pydantic-ai<=2.
|
|
87
|
+
Requires-Dist: pydantic-ai<=2.33.0,>=2.16.0; extra == "all"
|
|
88
88
|
Requires-Dist: anyio>=4.0.0; extra == "all"
|
|
89
89
|
Requires-Dist: langgraph<=1.2.11,>=1.2.9; extra == "all"
|
|
90
90
|
Requires-Dist: langchain-core<=1.6.0,>=1.5.0; extra == "all"
|
|
91
91
|
Requires-Dist: langchain-openai==1.3.5; extra == "all"
|
|
92
92
|
Requires-Dist: autogen-agentchat==0.7.5; extra == "all"
|
|
93
93
|
Requires-Dist: agno<=2.9.0,>=2.8.0; extra == "all"
|
|
94
|
-
Requires-Dist: azure-ai-projects<=2.
|
|
94
|
+
Requires-Dist: azure-ai-projects<=2.5.0,>=2.3.0; extra == "all"
|
|
95
95
|
Requires-Dist: azure-identity==1.25.3; extra == "all"
|
|
96
96
|
Requires-Dist: openai-agents<=0.22.0,>=0.18.3; extra == "all"
|
|
97
97
|
Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "all"
|
|
98
|
-
Requires-Dist: boto3<=1.43.
|
|
98
|
+
Requires-Dist: boto3<=1.43.78,>=1.43.54; extra == "all"
|
|
99
99
|
Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "all"
|
|
100
100
|
Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "all"
|
|
101
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
101
|
+
Requires-Dist: claude-agent-sdk<=0.2.144,>=0.2.126; extra == "all"
|
|
102
102
|
Requires-Dist: smolagents==1.26.0; extra == "all"
|
|
103
103
|
Provides-Extra: dev
|
|
104
104
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
@@ -171,14 +171,17 @@ keeps source code on your machine:
|
|
|
171
171
|
|
|
172
172
|
```bash
|
|
173
173
|
agenticdome init
|
|
174
|
-
agenticdome
|
|
174
|
+
agenticdome inspect --output agenticdome-inspection.json
|
|
175
175
|
```
|
|
176
176
|
|
|
177
|
-
`init` writes the secret-free inspection and local configuration.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
177
|
+
`init` writes the secret-free inspection and local configuration. For the
|
|
178
|
+
certified onboarding path, obtain the assigned sidecar and a dedicated
|
|
179
|
+
`integration_copilot` key, run the tenant-bound `agenticdome plan`, attach
|
|
180
|
+
and test the selected boundaries, then run
|
|
181
|
+
`agenticdome verify --run-tests --output .agenticdome/verification.json`.
|
|
182
|
+
The private plan is required because production verification consumes its
|
|
183
|
+
signed, catalog-bound semantic analysis. `agenticdome scaffold` remains
|
|
184
|
+
optional and writes an unapplied patch for review.
|
|
182
185
|
|
|
183
186
|
When `.agenticdome/inspection.json` is imported into Developer Integration,
|
|
184
187
|
the Control Panel adds its detected frameworks to the workload. Frameworks,
|
|
@@ -772,9 +775,9 @@ from agenticdome_sdk.crewai import (
|
|
|
772
775
|
DecisionTokenStore,
|
|
773
776
|
InMemoryDecisionTokenStore,
|
|
774
777
|
RedisDecisionTokenStore,
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
+
agenticdome_before_tool_call,
|
|
779
|
+
agenticdome_after_tool_call,
|
|
780
|
+
agenticdome_before_llm_call,
|
|
778
781
|
sanitize_streaming_response,
|
|
779
782
|
attach_firewall,
|
|
780
783
|
unregister_firewall,
|
|
@@ -2287,7 +2290,7 @@ from agenticdome_sdk.aws_bedrock import (
|
|
|
2287
2290
|
|
|
2288
2291
|
### MCP Host / Gateway
|
|
2289
2292
|
|
|
2290
|
-
The host is the right place to protect MCP: it can inspect `tools/call` requests before side effects happen and
|
|
2293
|
+
The host is the right place to protect MCP: it can inspect `tools/call` requests before side effects happen and review configured tool results before they return to the planner, agent, or client. The adapter accepts plain JSON-RPC request dictionaries, so it can be wired into an application-controlled MCP host, proxy, gateway, or router without replacing its transport.
|
|
2291
2294
|
|
|
2292
2295
|
Start with the dedicated [MCP Host and Gateway Action Firewall guide](https://github.com/agenticdome/agenticdome-python-sdk/blob/main/docs/mcp-integration.md), including the network-free allowed, blocked, and poisoned-result rehearsal.
|
|
2293
2296
|
|
|
@@ -2295,6 +2298,8 @@ Start with the dedicated [MCP Host and Gateway Action Firewall guide](https://gi
|
|
|
2295
2298
|
pip install "agenticdome-python-sdk[mcp]"
|
|
2296
2299
|
```
|
|
2297
2300
|
|
|
2301
|
+
**MCP package compatibility:** the `[mcp]` extra currently installs the externally certified PyPI range `mcp>=1.26.0,<=1.28.1`. That is the supported range of the third-party `mcp` package, not the version of AgenticDome's SDK. MCP 2.0 removed the certified `mcp.server.fastmcp` import surface, and CrewAI 1.15.5 declares `mcp~=1.28.1` for combined installs. Keep the ceiling until an isolated MCP 2.x certification passes the native imports, adapter checks, preserved 1.x floor, and package gates. The AgenticDome firewall itself is plain-JSON-RPC and dependency-light, but installing the base SDK beside an independently managed MCP 2.x transport does not constitute a formally certified MCP 2.x support claim.
|
|
2302
|
+
|
|
2298
2303
|
**Wrap the forwarding boundary** — the full host flow is `JSON-RPC request → rate limit / upstream prompt screen → method authorization → optional delegation-token verification → third-party MCP server → list filtering / result sanitization → client`:
|
|
2299
2304
|
|
|
2300
2305
|
```python
|
|
@@ -2357,7 +2362,7 @@ await firewall.authorize_manager_handoff(
|
|
|
2357
2362
|
<details>
|
|
2358
2363
|
<summary>MCP capabilities, configuration, notes, and imports</summary>
|
|
2359
2364
|
|
|
2360
|
-
Supports: optional upstream prompt screening from host context · `tools/call` authorization via `mcp_guardrail_validate()` · authorization for tool, resource, prompt and sampling methods · tool-list filtering according to policy · resource, prompt, sampling, tool, and streaming-output sanitization · delegated verification through public handoff methods · per-server policy context · sanitized business-argument forwarding · size limits, rate limiting and audit logging · Mesh output sanitization for supported MCP result shapes · fail-closed
|
|
2365
|
+
Supports: optional upstream prompt screening from host context · `tools/call` authorization via `mcp_guardrail_validate()` · authorization for tool, resource, prompt and sampling methods · tool-list filtering according to policy · resource, prompt, sampling, tool, and streaming-output sanitization · delegated verification through public handoff methods · per-server policy context · sanitized business-argument forwarding · size limits, rate limiting and audit logging · Mesh output sanitization for supported MCP result shapes · configurable request/preflight fail-closed or fail-open behavior via `AGENTICDOME_FAIL_CLOSED`.
|
|
2361
2366
|
|
|
2362
2367
|
```bash
|
|
2363
2368
|
export AGENTICDOME_PLATFORM="mcp"
|
|
@@ -2381,7 +2386,7 @@ export AGENTICDOME_MCP_RATE_LIMIT_PER_MINUTE="0"
|
|
|
2381
2386
|
# export AGENTICDOME_REDIS_KEY_PREFIX="AgenticDome:mcp:handoff"
|
|
2382
2387
|
```
|
|
2383
2388
|
|
|
2384
|
-
Notes: call `preflight_request()` or `forward_with_firewall()` in the host, gateway, proxy, or router that forwards JSON-RPC requests — env config alone does not intercept MCP traffic. Disable individual protections with the corresponding `AGENTICDOME_MCP_PROTECT_*` setting when a simple host needs passthrough behavior. AgenticDome protects the local
|
|
2389
|
+
Notes: call `preflight_request()` or `forward_with_firewall()` in the host, gateway, proxy, or router that forwards JSON-RPC requests — env config alone does not intercept MCP traffic. Disable individual protections with the corresponding `AGENTICDOME_MCP_PROTECT_*` setting when a simple host needs passthrough behavior. AgenticDome protects only the routed local boundary and configured returned-result paths; it cannot inspect code inside a remote third-party MCP server you do not control. `forward_with_firewall()` enforces policy blocks, but currently returns the original response after an unexpected non-policy result-sanitization error. Applications requiring fail-closed output handling must catch and block review failures explicitly. Pass `mcp_server_id`, `mcp_server_url`, `mcp_server_vendor`, and trust metadata in `context` for per-server policy decisions. Use stable `session_id` values; set `AGENTICDOME_REQUIRE_SESSION_ID=true` when every host request should be traceable.
|
|
2385
2390
|
|
|
2386
2391
|
```python
|
|
2387
2392
|
from agenticdome_sdk.mcp_host import (
|
|
@@ -2405,9 +2410,9 @@ Use the core client when you own the runtime loop or have a custom gateway — A
|
|
|
2405
2410
|
**End-to-end example** — prompt screen, tool authorization, execution, output review:
|
|
2406
2411
|
|
|
2407
2412
|
```python
|
|
2408
|
-
from agenticdome_sdk.client import
|
|
2413
|
+
from agenticdome_sdk.client import AgenticDomeClient
|
|
2409
2414
|
|
|
2410
|
-
client =
|
|
2415
|
+
client = AgenticDomeClient(
|
|
2411
2416
|
api_base="https://demo-sidecar.agenticdome.io",
|
|
2412
2417
|
api_key="your-api-key",
|
|
2413
2418
|
tenant_id="your-tenant-id",
|
|
@@ -2574,9 +2579,9 @@ client.report_incident(
|
|
|
2574
2579
|
For high-impact tools, authorise at the last responsible moment and bind the decision to the real destination, HTTP method, tool version/digest, and workload identity. The sidecar returns a short-lived, single-use execution receipt; attach it to the actual outbound request that traverses the AgenticDome enforcement gateway.
|
|
2575
2580
|
|
|
2576
2581
|
```python
|
|
2577
|
-
from agenticdome_sdk import
|
|
2582
|
+
from agenticdome_sdk import AgenticDomeClient
|
|
2578
2583
|
|
|
2579
|
-
client =
|
|
2584
|
+
client = AgenticDomeClient(
|
|
2580
2585
|
"https://your-sidecar.example.com",
|
|
2581
2586
|
execution_broker_mode="enforce",
|
|
2582
2587
|
)
|
|
@@ -59,14 +59,17 @@ keeps source code on your machine:
|
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
61
|
agenticdome init
|
|
62
|
-
agenticdome
|
|
62
|
+
agenticdome inspect --output agenticdome-inspection.json
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
`init` writes the secret-free inspection and local configuration.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
`init` writes the secret-free inspection and local configuration. For the
|
|
66
|
+
certified onboarding path, obtain the assigned sidecar and a dedicated
|
|
67
|
+
`integration_copilot` key, run the tenant-bound `agenticdome plan`, attach
|
|
68
|
+
and test the selected boundaries, then run
|
|
69
|
+
`agenticdome verify --run-tests --output .agenticdome/verification.json`.
|
|
70
|
+
The private plan is required because production verification consumes its
|
|
71
|
+
signed, catalog-bound semantic analysis. `agenticdome scaffold` remains
|
|
72
|
+
optional and writes an unapplied patch for review.
|
|
70
73
|
|
|
71
74
|
When `.agenticdome/inspection.json` is imported into Developer Integration,
|
|
72
75
|
the Control Panel adds its detected frameworks to the workload. Frameworks,
|
|
@@ -660,9 +663,9 @@ from agenticdome_sdk.crewai import (
|
|
|
660
663
|
DecisionTokenStore,
|
|
661
664
|
InMemoryDecisionTokenStore,
|
|
662
665
|
RedisDecisionTokenStore,
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
+
agenticdome_before_tool_call,
|
|
667
|
+
agenticdome_after_tool_call,
|
|
668
|
+
agenticdome_before_llm_call,
|
|
666
669
|
sanitize_streaming_response,
|
|
667
670
|
attach_firewall,
|
|
668
671
|
unregister_firewall,
|
|
@@ -2175,7 +2178,7 @@ from agenticdome_sdk.aws_bedrock import (
|
|
|
2175
2178
|
|
|
2176
2179
|
### MCP Host / Gateway
|
|
2177
2180
|
|
|
2178
|
-
The host is the right place to protect MCP: it can inspect `tools/call` requests before side effects happen and
|
|
2181
|
+
The host is the right place to protect MCP: it can inspect `tools/call` requests before side effects happen and review configured tool results before they return to the planner, agent, or client. The adapter accepts plain JSON-RPC request dictionaries, so it can be wired into an application-controlled MCP host, proxy, gateway, or router without replacing its transport.
|
|
2179
2182
|
|
|
2180
2183
|
Start with the dedicated [MCP Host and Gateway Action Firewall guide](https://github.com/agenticdome/agenticdome-python-sdk/blob/main/docs/mcp-integration.md), including the network-free allowed, blocked, and poisoned-result rehearsal.
|
|
2181
2184
|
|
|
@@ -2183,6 +2186,8 @@ Start with the dedicated [MCP Host and Gateway Action Firewall guide](https://gi
|
|
|
2183
2186
|
pip install "agenticdome-python-sdk[mcp]"
|
|
2184
2187
|
```
|
|
2185
2188
|
|
|
2189
|
+
**MCP package compatibility:** the `[mcp]` extra currently installs the externally certified PyPI range `mcp>=1.26.0,<=1.28.1`. That is the supported range of the third-party `mcp` package, not the version of AgenticDome's SDK. MCP 2.0 removed the certified `mcp.server.fastmcp` import surface, and CrewAI 1.15.5 declares `mcp~=1.28.1` for combined installs. Keep the ceiling until an isolated MCP 2.x certification passes the native imports, adapter checks, preserved 1.x floor, and package gates. The AgenticDome firewall itself is plain-JSON-RPC and dependency-light, but installing the base SDK beside an independently managed MCP 2.x transport does not constitute a formally certified MCP 2.x support claim.
|
|
2190
|
+
|
|
2186
2191
|
**Wrap the forwarding boundary** — the full host flow is `JSON-RPC request → rate limit / upstream prompt screen → method authorization → optional delegation-token verification → third-party MCP server → list filtering / result sanitization → client`:
|
|
2187
2192
|
|
|
2188
2193
|
```python
|
|
@@ -2245,7 +2250,7 @@ await firewall.authorize_manager_handoff(
|
|
|
2245
2250
|
<details>
|
|
2246
2251
|
<summary>MCP capabilities, configuration, notes, and imports</summary>
|
|
2247
2252
|
|
|
2248
|
-
Supports: optional upstream prompt screening from host context · `tools/call` authorization via `mcp_guardrail_validate()` · authorization for tool, resource, prompt and sampling methods · tool-list filtering according to policy · resource, prompt, sampling, tool, and streaming-output sanitization · delegated verification through public handoff methods · per-server policy context · sanitized business-argument forwarding · size limits, rate limiting and audit logging · Mesh output sanitization for supported MCP result shapes · fail-closed
|
|
2253
|
+
Supports: optional upstream prompt screening from host context · `tools/call` authorization via `mcp_guardrail_validate()` · authorization for tool, resource, prompt and sampling methods · tool-list filtering according to policy · resource, prompt, sampling, tool, and streaming-output sanitization · delegated verification through public handoff methods · per-server policy context · sanitized business-argument forwarding · size limits, rate limiting and audit logging · Mesh output sanitization for supported MCP result shapes · configurable request/preflight fail-closed or fail-open behavior via `AGENTICDOME_FAIL_CLOSED`.
|
|
2249
2254
|
|
|
2250
2255
|
```bash
|
|
2251
2256
|
export AGENTICDOME_PLATFORM="mcp"
|
|
@@ -2269,7 +2274,7 @@ export AGENTICDOME_MCP_RATE_LIMIT_PER_MINUTE="0"
|
|
|
2269
2274
|
# export AGENTICDOME_REDIS_KEY_PREFIX="AgenticDome:mcp:handoff"
|
|
2270
2275
|
```
|
|
2271
2276
|
|
|
2272
|
-
Notes: call `preflight_request()` or `forward_with_firewall()` in the host, gateway, proxy, or router that forwards JSON-RPC requests — env config alone does not intercept MCP traffic. Disable individual protections with the corresponding `AGENTICDOME_MCP_PROTECT_*` setting when a simple host needs passthrough behavior. AgenticDome protects the local
|
|
2277
|
+
Notes: call `preflight_request()` or `forward_with_firewall()` in the host, gateway, proxy, or router that forwards JSON-RPC requests — env config alone does not intercept MCP traffic. Disable individual protections with the corresponding `AGENTICDOME_MCP_PROTECT_*` setting when a simple host needs passthrough behavior. AgenticDome protects only the routed local boundary and configured returned-result paths; it cannot inspect code inside a remote third-party MCP server you do not control. `forward_with_firewall()` enforces policy blocks, but currently returns the original response after an unexpected non-policy result-sanitization error. Applications requiring fail-closed output handling must catch and block review failures explicitly. Pass `mcp_server_id`, `mcp_server_url`, `mcp_server_vendor`, and trust metadata in `context` for per-server policy decisions. Use stable `session_id` values; set `AGENTICDOME_REQUIRE_SESSION_ID=true` when every host request should be traceable.
|
|
2273
2278
|
|
|
2274
2279
|
```python
|
|
2275
2280
|
from agenticdome_sdk.mcp_host import (
|
|
@@ -2293,9 +2298,9 @@ Use the core client when you own the runtime loop or have a custom gateway — A
|
|
|
2293
2298
|
**End-to-end example** — prompt screen, tool authorization, execution, output review:
|
|
2294
2299
|
|
|
2295
2300
|
```python
|
|
2296
|
-
from agenticdome_sdk.client import
|
|
2301
|
+
from agenticdome_sdk.client import AgenticDomeClient
|
|
2297
2302
|
|
|
2298
|
-
client =
|
|
2303
|
+
client = AgenticDomeClient(
|
|
2299
2304
|
api_base="https://demo-sidecar.agenticdome.io",
|
|
2300
2305
|
api_key="your-api-key",
|
|
2301
2306
|
tenant_id="your-tenant-id",
|
|
@@ -2462,9 +2467,9 @@ client.report_incident(
|
|
|
2462
2467
|
For high-impact tools, authorise at the last responsible moment and bind the decision to the real destination, HTTP method, tool version/digest, and workload identity. The sidecar returns a short-lived, single-use execution receipt; attach it to the actual outbound request that traverses the AgenticDome enforcement gateway.
|
|
2463
2468
|
|
|
2464
2469
|
```python
|
|
2465
|
-
from agenticdome_sdk import
|
|
2470
|
+
from agenticdome_sdk import AgenticDomeClient
|
|
2466
2471
|
|
|
2467
|
-
client =
|
|
2472
|
+
client = AgenticDomeClient(
|
|
2468
2473
|
"https://your-sidecar.example.com",
|
|
2469
2474
|
execution_broker_mode="enforce",
|
|
2470
2475
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agenticdome-python-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.22
|
|
4
4
|
Summary: Official Python SDK for AgenticDome security guardrails, DLP, tool authorization, and multi-agent delegation enforcement.
|
|
5
5
|
Author: AgenticDome
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -12,7 +12,7 @@ Project-URL: MCP Integration Guide, https://github.com/agenticdome/agenticdome-p
|
|
|
12
12
|
Project-URL: Issues, https://github.com/agenticdome/agenticdome-python-sdk/issues
|
|
13
13
|
Project-URL: Examples, https://github.com/agenticdome/agenticdome-python-sdk/tree/main/examples
|
|
14
14
|
Project-URL: Security, https://github.com/agenticdome/agenticdome-python-sdk/security/policy
|
|
15
|
-
Keywords:
|
|
15
|
+
Keywords: action-firewall,agenticdome,ai-security,agent-security,guardrails,a2a,mcp,zero-trust,runtime-security
|
|
16
16
|
Classifier: Development Status :: 5 - Production/Stable
|
|
17
17
|
Classifier: Intended Audience :: Developers
|
|
18
18
|
Classifier: Intended Audience :: Information Technology
|
|
@@ -38,10 +38,10 @@ Requires-Dist: redis>=4.5.0; extra == "redis"
|
|
|
38
38
|
Provides-Extra: pop
|
|
39
39
|
Requires-Dist: cryptography>=42.0.0; extra == "pop"
|
|
40
40
|
Provides-Extra: pydanticai
|
|
41
|
-
Requires-Dist: pydantic-ai<=2.
|
|
41
|
+
Requires-Dist: pydantic-ai<=2.33.0,>=2.16.0; extra == "pydanticai"
|
|
42
42
|
Requires-Dist: anyio>=4.0.0; extra == "pydanticai"
|
|
43
43
|
Provides-Extra: pydantic
|
|
44
|
-
Requires-Dist: pydantic-ai<=2.
|
|
44
|
+
Requires-Dist: pydantic-ai<=2.33.0,>=2.16.0; extra == "pydantic"
|
|
45
45
|
Requires-Dist: anyio>=4.0.0; extra == "pydantic"
|
|
46
46
|
Provides-Extra: langgraph
|
|
47
47
|
Requires-Dist: langgraph<=1.2.11,>=1.2.9; extra == "langgraph"
|
|
@@ -54,7 +54,7 @@ Requires-Dist: autogen-agentchat==0.7.5; extra == "autogen"
|
|
|
54
54
|
Provides-Extra: microsoft-autogen
|
|
55
55
|
Requires-Dist: autogen-agentchat==0.7.5; extra == "microsoft-autogen"
|
|
56
56
|
Provides-Extra: foundry
|
|
57
|
-
Requires-Dist: azure-ai-projects<=2.
|
|
57
|
+
Requires-Dist: azure-ai-projects<=2.5.0,>=2.3.0; extra == "foundry"
|
|
58
58
|
Requires-Dist: azure-identity==1.25.3; extra == "foundry"
|
|
59
59
|
Provides-Extra: agno
|
|
60
60
|
Requires-Dist: agno<=2.9.0,>=2.8.0; extra == "agno"
|
|
@@ -63,9 +63,9 @@ Requires-Dist: openai-agents<=0.22.0,>=0.18.3; extra == "openai-agents"
|
|
|
63
63
|
Provides-Extra: mcp
|
|
64
64
|
Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "mcp"
|
|
65
65
|
Provides-Extra: bedrock
|
|
66
|
-
Requires-Dist: boto3<=1.43.
|
|
66
|
+
Requires-Dist: boto3<=1.43.78,>=1.43.54; extra == "bedrock"
|
|
67
67
|
Provides-Extra: aws-bedrock
|
|
68
|
-
Requires-Dist: boto3<=1.43.
|
|
68
|
+
Requires-Dist: boto3<=1.43.78,>=1.43.54; extra == "aws-bedrock"
|
|
69
69
|
Provides-Extra: llamaindex
|
|
70
70
|
Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "llamaindex"
|
|
71
71
|
Provides-Extra: llama-index
|
|
@@ -75,30 +75,30 @@ Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "google-adk"
|
|
|
75
75
|
Provides-Extra: adk
|
|
76
76
|
Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "adk"
|
|
77
77
|
Provides-Extra: claude
|
|
78
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
78
|
+
Requires-Dist: claude-agent-sdk<=0.2.144,>=0.2.126; extra == "claude"
|
|
79
79
|
Provides-Extra: claude-agent-sdk
|
|
80
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
80
|
+
Requires-Dist: claude-agent-sdk<=0.2.144,>=0.2.126; extra == "claude-agent-sdk"
|
|
81
81
|
Provides-Extra: smolagents
|
|
82
82
|
Requires-Dist: smolagents==1.26.0; extra == "smolagents"
|
|
83
83
|
Provides-Extra: all
|
|
84
84
|
Requires-Dist: crewai<=1.15.17,>=1.15.5; extra == "all"
|
|
85
85
|
Requires-Dist: redis>=4.5.0; extra == "all"
|
|
86
86
|
Requires-Dist: cryptography>=42.0.0; extra == "all"
|
|
87
|
-
Requires-Dist: pydantic-ai<=2.
|
|
87
|
+
Requires-Dist: pydantic-ai<=2.33.0,>=2.16.0; extra == "all"
|
|
88
88
|
Requires-Dist: anyio>=4.0.0; extra == "all"
|
|
89
89
|
Requires-Dist: langgraph<=1.2.11,>=1.2.9; extra == "all"
|
|
90
90
|
Requires-Dist: langchain-core<=1.6.0,>=1.5.0; extra == "all"
|
|
91
91
|
Requires-Dist: langchain-openai==1.3.5; extra == "all"
|
|
92
92
|
Requires-Dist: autogen-agentchat==0.7.5; extra == "all"
|
|
93
93
|
Requires-Dist: agno<=2.9.0,>=2.8.0; extra == "all"
|
|
94
|
-
Requires-Dist: azure-ai-projects<=2.
|
|
94
|
+
Requires-Dist: azure-ai-projects<=2.5.0,>=2.3.0; extra == "all"
|
|
95
95
|
Requires-Dist: azure-identity==1.25.3; extra == "all"
|
|
96
96
|
Requires-Dist: openai-agents<=0.22.0,>=0.18.3; extra == "all"
|
|
97
97
|
Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "all"
|
|
98
|
-
Requires-Dist: boto3<=1.43.
|
|
98
|
+
Requires-Dist: boto3<=1.43.78,>=1.43.54; extra == "all"
|
|
99
99
|
Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "all"
|
|
100
100
|
Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "all"
|
|
101
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
101
|
+
Requires-Dist: claude-agent-sdk<=0.2.144,>=0.2.126; extra == "all"
|
|
102
102
|
Requires-Dist: smolagents==1.26.0; extra == "all"
|
|
103
103
|
Provides-Extra: dev
|
|
104
104
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
@@ -171,14 +171,17 @@ keeps source code on your machine:
|
|
|
171
171
|
|
|
172
172
|
```bash
|
|
173
173
|
agenticdome init
|
|
174
|
-
agenticdome
|
|
174
|
+
agenticdome inspect --output agenticdome-inspection.json
|
|
175
175
|
```
|
|
176
176
|
|
|
177
|
-
`init` writes the secret-free inspection and local configuration.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
177
|
+
`init` writes the secret-free inspection and local configuration. For the
|
|
178
|
+
certified onboarding path, obtain the assigned sidecar and a dedicated
|
|
179
|
+
`integration_copilot` key, run the tenant-bound `agenticdome plan`, attach
|
|
180
|
+
and test the selected boundaries, then run
|
|
181
|
+
`agenticdome verify --run-tests --output .agenticdome/verification.json`.
|
|
182
|
+
The private plan is required because production verification consumes its
|
|
183
|
+
signed, catalog-bound semantic analysis. `agenticdome scaffold` remains
|
|
184
|
+
optional and writes an unapplied patch for review.
|
|
182
185
|
|
|
183
186
|
When `.agenticdome/inspection.json` is imported into Developer Integration,
|
|
184
187
|
the Control Panel adds its detected frameworks to the workload. Frameworks,
|
|
@@ -772,9 +775,9 @@ from agenticdome_sdk.crewai import (
|
|
|
772
775
|
DecisionTokenStore,
|
|
773
776
|
InMemoryDecisionTokenStore,
|
|
774
777
|
RedisDecisionTokenStore,
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
+
agenticdome_before_tool_call,
|
|
779
|
+
agenticdome_after_tool_call,
|
|
780
|
+
agenticdome_before_llm_call,
|
|
778
781
|
sanitize_streaming_response,
|
|
779
782
|
attach_firewall,
|
|
780
783
|
unregister_firewall,
|
|
@@ -2287,7 +2290,7 @@ from agenticdome_sdk.aws_bedrock import (
|
|
|
2287
2290
|
|
|
2288
2291
|
### MCP Host / Gateway
|
|
2289
2292
|
|
|
2290
|
-
The host is the right place to protect MCP: it can inspect `tools/call` requests before side effects happen and
|
|
2293
|
+
The host is the right place to protect MCP: it can inspect `tools/call` requests before side effects happen and review configured tool results before they return to the planner, agent, or client. The adapter accepts plain JSON-RPC request dictionaries, so it can be wired into an application-controlled MCP host, proxy, gateway, or router without replacing its transport.
|
|
2291
2294
|
|
|
2292
2295
|
Start with the dedicated [MCP Host and Gateway Action Firewall guide](https://github.com/agenticdome/agenticdome-python-sdk/blob/main/docs/mcp-integration.md), including the network-free allowed, blocked, and poisoned-result rehearsal.
|
|
2293
2296
|
|
|
@@ -2295,6 +2298,8 @@ Start with the dedicated [MCP Host and Gateway Action Firewall guide](https://gi
|
|
|
2295
2298
|
pip install "agenticdome-python-sdk[mcp]"
|
|
2296
2299
|
```
|
|
2297
2300
|
|
|
2301
|
+
**MCP package compatibility:** the `[mcp]` extra currently installs the externally certified PyPI range `mcp>=1.26.0,<=1.28.1`. That is the supported range of the third-party `mcp` package, not the version of AgenticDome's SDK. MCP 2.0 removed the certified `mcp.server.fastmcp` import surface, and CrewAI 1.15.5 declares `mcp~=1.28.1` for combined installs. Keep the ceiling until an isolated MCP 2.x certification passes the native imports, adapter checks, preserved 1.x floor, and package gates. The AgenticDome firewall itself is plain-JSON-RPC and dependency-light, but installing the base SDK beside an independently managed MCP 2.x transport does not constitute a formally certified MCP 2.x support claim.
|
|
2302
|
+
|
|
2298
2303
|
**Wrap the forwarding boundary** — the full host flow is `JSON-RPC request → rate limit / upstream prompt screen → method authorization → optional delegation-token verification → third-party MCP server → list filtering / result sanitization → client`:
|
|
2299
2304
|
|
|
2300
2305
|
```python
|
|
@@ -2357,7 +2362,7 @@ await firewall.authorize_manager_handoff(
|
|
|
2357
2362
|
<details>
|
|
2358
2363
|
<summary>MCP capabilities, configuration, notes, and imports</summary>
|
|
2359
2364
|
|
|
2360
|
-
Supports: optional upstream prompt screening from host context · `tools/call` authorization via `mcp_guardrail_validate()` · authorization for tool, resource, prompt and sampling methods · tool-list filtering according to policy · resource, prompt, sampling, tool, and streaming-output sanitization · delegated verification through public handoff methods · per-server policy context · sanitized business-argument forwarding · size limits, rate limiting and audit logging · Mesh output sanitization for supported MCP result shapes · fail-closed
|
|
2365
|
+
Supports: optional upstream prompt screening from host context · `tools/call` authorization via `mcp_guardrail_validate()` · authorization for tool, resource, prompt and sampling methods · tool-list filtering according to policy · resource, prompt, sampling, tool, and streaming-output sanitization · delegated verification through public handoff methods · per-server policy context · sanitized business-argument forwarding · size limits, rate limiting and audit logging · Mesh output sanitization for supported MCP result shapes · configurable request/preflight fail-closed or fail-open behavior via `AGENTICDOME_FAIL_CLOSED`.
|
|
2361
2366
|
|
|
2362
2367
|
```bash
|
|
2363
2368
|
export AGENTICDOME_PLATFORM="mcp"
|
|
@@ -2381,7 +2386,7 @@ export AGENTICDOME_MCP_RATE_LIMIT_PER_MINUTE="0"
|
|
|
2381
2386
|
# export AGENTICDOME_REDIS_KEY_PREFIX="AgenticDome:mcp:handoff"
|
|
2382
2387
|
```
|
|
2383
2388
|
|
|
2384
|
-
Notes: call `preflight_request()` or `forward_with_firewall()` in the host, gateway, proxy, or router that forwards JSON-RPC requests — env config alone does not intercept MCP traffic. Disable individual protections with the corresponding `AGENTICDOME_MCP_PROTECT_*` setting when a simple host needs passthrough behavior. AgenticDome protects the local
|
|
2389
|
+
Notes: call `preflight_request()` or `forward_with_firewall()` in the host, gateway, proxy, or router that forwards JSON-RPC requests — env config alone does not intercept MCP traffic. Disable individual protections with the corresponding `AGENTICDOME_MCP_PROTECT_*` setting when a simple host needs passthrough behavior. AgenticDome protects only the routed local boundary and configured returned-result paths; it cannot inspect code inside a remote third-party MCP server you do not control. `forward_with_firewall()` enforces policy blocks, but currently returns the original response after an unexpected non-policy result-sanitization error. Applications requiring fail-closed output handling must catch and block review failures explicitly. Pass `mcp_server_id`, `mcp_server_url`, `mcp_server_vendor`, and trust metadata in `context` for per-server policy decisions. Use stable `session_id` values; set `AGENTICDOME_REQUIRE_SESSION_ID=true` when every host request should be traceable.
|
|
2385
2390
|
|
|
2386
2391
|
```python
|
|
2387
2392
|
from agenticdome_sdk.mcp_host import (
|
|
@@ -2405,9 +2410,9 @@ Use the core client when you own the runtime loop or have a custom gateway — A
|
|
|
2405
2410
|
**End-to-end example** — prompt screen, tool authorization, execution, output review:
|
|
2406
2411
|
|
|
2407
2412
|
```python
|
|
2408
|
-
from agenticdome_sdk.client import
|
|
2413
|
+
from agenticdome_sdk.client import AgenticDomeClient
|
|
2409
2414
|
|
|
2410
|
-
client =
|
|
2415
|
+
client = AgenticDomeClient(
|
|
2411
2416
|
api_base="https://demo-sidecar.agenticdome.io",
|
|
2412
2417
|
api_key="your-api-key",
|
|
2413
2418
|
tenant_id="your-tenant-id",
|
|
@@ -2574,9 +2579,9 @@ client.report_incident(
|
|
|
2574
2579
|
For high-impact tools, authorise at the last responsible moment and bind the decision to the real destination, HTTP method, tool version/digest, and workload identity. The sidecar returns a short-lived, single-use execution receipt; attach it to the actual outbound request that traverses the AgenticDome enforcement gateway.
|
|
2575
2580
|
|
|
2576
2581
|
```python
|
|
2577
|
-
from agenticdome_sdk import
|
|
2582
|
+
from agenticdome_sdk import AgenticDomeClient
|
|
2578
2583
|
|
|
2579
|
-
client =
|
|
2584
|
+
client = AgenticDomeClient(
|
|
2580
2585
|
"https://your-sidecar.example.com",
|
|
2581
2586
|
execution_broker_mode="enforce",
|
|
2582
2587
|
)
|
|
@@ -11,37 +11,37 @@ agno<=2.9.0,>=2.8.0
|
|
|
11
11
|
crewai<=1.15.17,>=1.15.5
|
|
12
12
|
redis>=4.5.0
|
|
13
13
|
cryptography>=42.0.0
|
|
14
|
-
pydantic-ai<=2.
|
|
14
|
+
pydantic-ai<=2.33.0,>=2.16.0
|
|
15
15
|
anyio>=4.0.0
|
|
16
16
|
langgraph<=1.2.11,>=1.2.9
|
|
17
17
|
langchain-core<=1.6.0,>=1.5.0
|
|
18
18
|
langchain-openai==1.3.5
|
|
19
19
|
autogen-agentchat==0.7.5
|
|
20
20
|
agno<=2.9.0,>=2.8.0
|
|
21
|
-
azure-ai-projects<=2.
|
|
21
|
+
azure-ai-projects<=2.5.0,>=2.3.0
|
|
22
22
|
azure-identity==1.25.3
|
|
23
23
|
openai-agents<=0.22.0,>=0.18.3
|
|
24
24
|
mcp<=1.28.1,>=1.26.0
|
|
25
|
-
boto3<=1.43.
|
|
25
|
+
boto3<=1.43.78,>=1.43.54
|
|
26
26
|
llama-index<=0.14.24,>=0.14.23
|
|
27
27
|
google-adk<=2.7.1,>=2.5.0
|
|
28
|
-
claude-agent-sdk<=0.2.
|
|
28
|
+
claude-agent-sdk<=0.2.144,>=0.2.126
|
|
29
29
|
smolagents==1.26.0
|
|
30
30
|
|
|
31
31
|
[autogen]
|
|
32
32
|
autogen-agentchat==0.7.5
|
|
33
33
|
|
|
34
34
|
[aws-bedrock]
|
|
35
|
-
boto3<=1.43.
|
|
35
|
+
boto3<=1.43.78,>=1.43.54
|
|
36
36
|
|
|
37
37
|
[bedrock]
|
|
38
|
-
boto3<=1.43.
|
|
38
|
+
boto3<=1.43.78,>=1.43.54
|
|
39
39
|
|
|
40
40
|
[claude]
|
|
41
|
-
claude-agent-sdk<=0.2.
|
|
41
|
+
claude-agent-sdk<=0.2.144,>=0.2.126
|
|
42
42
|
|
|
43
43
|
[claude-agent-sdk]
|
|
44
|
-
claude-agent-sdk<=0.2.
|
|
44
|
+
claude-agent-sdk<=0.2.144,>=0.2.126
|
|
45
45
|
|
|
46
46
|
[crewai]
|
|
47
47
|
crewai<=1.15.17,>=1.15.5
|
|
@@ -58,7 +58,7 @@ twine>=5.0.0
|
|
|
58
58
|
tomli>=2.0.0
|
|
59
59
|
|
|
60
60
|
[foundry]
|
|
61
|
-
azure-ai-projects<=2.
|
|
61
|
+
azure-ai-projects<=2.5.0,>=2.3.0
|
|
62
62
|
azure-identity==1.25.3
|
|
63
63
|
|
|
64
64
|
[google-adk]
|
|
@@ -91,11 +91,11 @@ openai-agents<=0.22.0,>=0.18.3
|
|
|
91
91
|
cryptography>=42.0.0
|
|
92
92
|
|
|
93
93
|
[pydantic]
|
|
94
|
-
pydantic-ai<=2.
|
|
94
|
+
pydantic-ai<=2.33.0,>=2.16.0
|
|
95
95
|
anyio>=4.0.0
|
|
96
96
|
|
|
97
97
|
[pydanticai]
|
|
98
|
-
pydantic-ai<=2.
|
|
98
|
+
pydantic-ai<=2.33.0,>=2.16.0
|
|
99
99
|
anyio>=4.0.0
|
|
100
100
|
|
|
101
101
|
[redis]
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
from .client import
|
|
1
|
+
from .client import AgenticDomeClient, AgenticDomeError, AgenticDomeHTTPError
|
|
2
2
|
from .identity import IDENTITY_CONTEXT_VERSION, canonicalize_identity_context, enrich_policy_context
|
|
3
3
|
from .proof import create_dpop_proof, generate_rsa_proof_key, jwk_thumbprint
|
|
4
4
|
from ._mode import LIVE_MODE, LOCAL_SIM_MODE, is_local_sim_mode, resolve_mode
|
|
5
5
|
|
|
6
|
-
GuardrailClient = AgentGuardClient
|
|
7
|
-
|
|
8
6
|
__all__ = [
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"AgentGuardHTTPError",
|
|
7
|
+
"AgenticDomeClient",
|
|
8
|
+
"AgenticDomeError",
|
|
9
|
+
"AgenticDomeHTTPError",
|
|
13
10
|
"IDENTITY_CONTEXT_VERSION",
|
|
14
11
|
"canonicalize_identity_context",
|
|
15
12
|
"enrich_policy_context",
|
|
@@ -15,7 +15,7 @@ from dataclasses import dataclass
|
|
|
15
15
|
from threading import Lock, Thread
|
|
16
16
|
from typing import Any, Awaitable, Callable, Deque, Dict, Optional, Tuple, Type
|
|
17
17
|
|
|
18
|
-
from .client import
|
|
18
|
+
from .client import AgenticDomeClient
|
|
19
19
|
from ._mode import credentials_or_local_sim
|
|
20
20
|
|
|
21
21
|
|
|
@@ -184,7 +184,7 @@ class FrameworkFirewallBase:
|
|
|
184
184
|
self,
|
|
185
185
|
config: FrameworkFirewallConfig,
|
|
186
186
|
*,
|
|
187
|
-
client: Optional[
|
|
187
|
+
client: Optional[AgenticDomeClient],
|
|
188
188
|
token_store: Optional[DecisionTokenStore],
|
|
189
189
|
denied_error: Type[Exception],
|
|
190
190
|
configuration_error: Type[Exception],
|
|
@@ -194,7 +194,7 @@ class FrameworkFirewallBase:
|
|
|
194
194
|
if not credentials_or_local_sim(config.api_base, config.api_key, config.tenant_id):
|
|
195
195
|
raise configuration_error("Missing AGENTICDOME_API_BASE, AGENTICDOME_API_KEY, or AGENTICDOME_TENANT_ID.")
|
|
196
196
|
self.config = config
|
|
197
|
-
self.client = client or
|
|
197
|
+
self.client = client or AgenticDomeClient(
|
|
198
198
|
api_base=config.api_base,
|
|
199
199
|
api_key=config.api_key,
|
|
200
200
|
tenant_id=config.tenant_id,
|
|
@@ -253,7 +253,7 @@ class FrameworkFirewallBase:
|
|
|
253
253
|
@staticmethod
|
|
254
254
|
def strip_private_args(value: Dict[str, Any]) -> Dict[str, Any]:
|
|
255
255
|
private = {"_decision_token", "decision_token", "_source_agent_id", "source_agent_id"}
|
|
256
|
-
return {k: v for k, v in value.items() if not str(k).startswith("
|
|
256
|
+
return {k: v for k, v in value.items() if not str(k).startswith("_agenticdome_") and k not in private}
|
|
257
257
|
|
|
258
258
|
@staticmethod
|
|
259
259
|
def envelope(payload: Any) -> Dict[str, Any]:
|