dominion-observatory-autogen
Microsoft AutoGen (v0.4+) integration for the Dominion Observatory — the runtime behavioural trust layer for MCP servers.
Drop-in wrapper for any autogen_core.tools.BaseTool — including MCP-bridged tools from autogen-ext-mcp — that adds:
- Runtime trust telemetry published to a cross-ecosystem registry of 4,500+ MCP servers.
- Honest, agent-reported data — not GitHub stars, not registry manifests.
- Zero payload leakage — six fields per report, nothing more.
AutoGen v0.4 standardises on autogen_core.tools.BaseTool. Wrapping run_json is the one intercept point that covers both native Python tools and MCP-bridged tools, regardless of whether you're driving them from autogen_agentchat.AssistantAgent, a raw ToolAgent, or your own runtime loop.
Install
pip install dominion-observatory-autogen
Python 3.10 – 3.13. Requires autogen-core >= 0.4.0 (installed by your project, listed under the autogen extra) and dominion-observatory-sdk >= 0.2.0 (pulled in automatically).
One-line wiring
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.tools.mcp import StdioServerParams, mcp_server_tools
from dominion_observatory_autogen import instrument_tool
# Load MCP tools from a server (autogen-ext-mcp style).
raw_tools = await mcp_server_tools(
StdioServerParams(command="uvx", args=["my-mcp-server"])
)
# Wrap each tool so every call emits a single anonymised Observatory report.
tools = [
instrument_tool(
t,
agent_id="acme-scheduler@1.2.0",
server_url="https://my-mcp-server.example.com/mcp",
)
for t in raw_tools
]
agent = AssistantAgent(
name="planner",
model_client=model_client,
tools=tools,
)
Works identically for tools you hand-roll as BaseTool subclasses — anything with an async run_json is instrumentable.
What gets sent
Exactly these six fields per tool invocation, and nothing else:
| Field | Example |
|---|---|
agent_id |
acme-scheduler@1.2.0 |
server_url |
https://my-mcp-server.example.com/mcp |
success |
true / false |
latency_ms |
142 |
tool_name |
get_holidays |
http_status |
200 on success, 500 on raised exception |
Not sent: tool arguments, tool outputs, user IDs, prompts, IP addresses, auth tokens. Satisfies Singapore PDPA and is compatible with EU AI Act Article 12 logging.
On raised exceptions, success=false and http_status=500; the original exception is re-raised unchanged so your agent's error handling is unaffected.
Choosing a stable agent_id
Required by dominion-observatory-sdk >= 0.2.0. Must be non-empty and not "anonymous" or "observatory_probe".
Recommended patterns:
"my-app@1.0.0"— package-name + version (stable across restarts).str(uuid.uuid4())persisted to disk on first run (stable per install).f"{environ['HOSTNAME']}/my-service"— per-deployment.
Do not use per-request IDs — you will fragment your own trust history.
Design notes
- Defensive: every Observatory call is wrapped in a broad
exceptso a network hiccup, import failure, or SDK validation error never disturbs the agent loop. - Zero side effects on import: both the
autogen_coreanddominion_observatoryimports are deferred or optional; this package stays importable without either installed. - Transparent wrapper:
ObservatoryInstrumentedToolforwards every attribute (name,description,schema,args_type,return_type) to the inner tool, so any AutoGen code path that introspects a tool keeps working. - No telemetry without attribution: wrapping a tool with
server_url=Noneruns the tool normally but emits no report. This is the safe default for local Python tools that have no MCP server identity. - Scope: v0.1.0 covers tool-level instrumentation. A future v0.2.0 will add a streaming helper that consumes
autogen_agentchat.messages.ToolCallExecutionEventand derivesserver_urlfrom tool metadata.
Development
# From the adapter directory:
pip install -e ".[autogen,test]"
pytest
Part of the Dominion Agent Economy Engine
This adapter is maintained by the DAEE-HITMAN distribution sub-agent. Source lives at vdineshk/daee-hitman under the MIT licence. File issues there.
Metadata
Release files for dominion-observatory-autogen 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dominion_observatory_autogen-0.1.0.tar.gz | 7.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dominion_observatory_autogen-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.8 kB
Release files / dominion_observatory_autogen-0.1.0.tar.gz
| Download URL | dominion_observatory_autogen-0.1.0.tar.gz |
|---|---|
| Size | 7.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0ce32a77f7a9aca934f1078a6000df1755885362491ac146c0f1ec42ef61e36d
|
|
BLAKE2b-256 checksum How to use checksums |
9b0b381db2fdf330ac056025f57a0bdcc4d5ef77a1633fe04ef3ec926d4d38e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / dominion_observatory_autogen-0.1.0-py3-none-any.whl
| Download URL | dominion_observatory_autogen-0.1.0-py3-none-any.whl |
|---|---|
| Size | 8.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fd5a21bcafe9b99c9f05aa7aceaa4132a40e46fbfb9d119ad1a7f9f7471cb69a
|
|
BLAKE2b-256 checksum How to use checksums |
0934a69973da79616c91335a512e10daa70aa159e4c65c520b4ede10ca41407b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|