Agent Utilities for Pydantic AI Agents
Project description
Agent Utilities - Pydantic AI Utilities
Version: 0.2.42
Table of Contents
- Overview
- Key Features
- Intelligence Graph
- Architecture & Orchestration
- Installation
- Quick Start
- Creating an Agent
- Building MCP Servers
- API Documentation
- Documentation
- Contributing
- License
Overview
Agent Utilities provides a robust foundation for building production-ready Pydantic AI Agents. Recently refactored into a high-performance modular architecture, it simplifies agent creation, adds advanced Graph Orchestration, and provides essential "operating system" tools including state persistence, resilience, and high-fidelity streaming.
Key Features
- Native Multi-Modal (Vision) Support: Direct processing of image context within the graph orchestrator. Decodes base64 image data into
pydantic_ai.BinaryContentfor high-fidelity multi-modal reasoning. - Dynamic MCP Tool Distribution: Load an
mcp_config.jsonand the system automatically connects to each MCP server, extracts and tags every tool, partitions them into focused specialist agents (~10-20 tools each), and registers them as graph nodes at runtime. This keeps context windows light - "GitLab Projects" specialist only sees 10 project tools. - Flexible Skill Loading: Unified
skill_typesparameter to dynamically loaduniversalskills,graphs, or custom workspace toolsets. - Advanced Graph Orchestration: Router → Planner → Dispatcher pipeline with parallel fan-out execution. Dynamic step registration for both hardcoded skill agents and MCP-discovered specialists.
- Self-Healing: Circuit breaker for MCP Servers (closed/open/half-open), specialist fallback chain, tool-level retries with exponential backoff, per-node timeout, and automatic re-planning on failure.
- Self-Correcting: Verifier feedback loop with structured
ValidationResultscoring. Low-quality results trigger re-dispatch with feedback injection and preserved message history. - Self-Improving: Execution memory persisted natively to the Knowledge Graph after each run. Past failure patterns automatically inform future routing decisions.
- Agentic Engineering Patterns: Out-of-the-box support for TDD Cycles (Red-Green-Refactor), First Run Tests (baseline establishment), Agentic Manual Testing (exploratory verification), Code Walkthroughs (linear documentation), and Interactive Explanations (HTML/JS artifacts).
- Resilience & Accuracy: Error recovery with local retries, re-planning loops, and result verification via the Verifier quality gate.
- Observability: Real-time Graph Streaming (SSE) and lifecycle events. Per-step state snapshots via
graph.iter(). Early OTEL/logfire gate. - Direct Graph Execution: Protocol adapters (AG-UI, ACP) can bypass the outer LLM agent and invoke
graph.iter()directly, eliminating one full inference round-trip per request. Controlled viaGRAPH_DIRECT_EXECUTIONenv var. - Typed Foundation: Zero-config dependency injection using
AgentDeps. - Specialist Discovery: Automated discovery of domain specialists directly from the Knowledge Graph.
- Autonomous Memory Architecture: MAGMA-inspired orthogonal reasoning views (Semantic, Temporal, Causal, Entity) combined with Agent Lightning-style self-improvement loops. Unifies code awareness, chat memory, and Research Knowledge Bases (Medical, Chemistry, etc.) into a singular, schema-enforced graph. Cross-domain relationships emerge automatically through shared concepts.
- Agent Server: Built-in FastAPI server with standardized
/mcp,/a2a,/acp(Standardized Protocol), and/docs(Swagger UI) endpoints. - Automatic Documentation: Runtime generation of OpenAPI specifications for all agent server APIs.
- Workspace Management: Automated management of agent state through standardized structures. (Note: Legacy files like
IDENTITY.mdandUSER.mdhave been migrated to the Knowledge Graph andmain_agent.mdtemplates). - Spec-Driven Development (SDD): High-fidelity orchestration pipeline that decomposes goals into structured Specifications (
Spec), Implementation Plans, and dependency-aware Tasks. Ensures technical precision and parallel execution safety. - Unified Intelligence Graph: A powerful 14-phase topological pipeline that unifies NetworkX in-memory analysis with Cypher persistence. Enables deep structural codebase awareness, cross-repository symbol mapping, and long-term agent memory. Includes a Hybrid OWL Reasoning Sidecar for deterministic transitive inference.
- Graph Database Abstraction: Out-of-the-box support for multiple Cypher-compatible backends including LadybugDB (default embedded), FalkorDB, and Neo4j.
- Graph-Native Ecosystem State: Flat-file management (
MEMORY.md,USER.md,HEARTBEAT.md,CRON.md) has been fully deprecated. Agent memory, execution logs, client profiles, and background scheduled tasks are now stored natively as highly-relational nodes within the Knowledge Graph. - Automated Graph Maintenance: Built-in Cypher-driven maintenance routines (
maintenance.py) that handle vector embedding enrichment, scheduled cron log pruning, intelligent chat summarization, and Concept Merging/Pruning to ensure sustainable long-term memory. Supports Hub Node Protection for critical foundational knowledge. - Lightweight & Lazy: Core utilities are lightweight. Heavy dependencies are lazy-loaded only when requested via optional extras.
- Autonomous Graph-Native Memory: State-of-the-art architecture combining MAGMA orthogonal retrieval with Agent Lightning self-optimization loops. Supports unified ingestion of MCP, A2A, and Skill-based resources with automated importance scoring and temporal decay.
- JSON-as-Code Prompting: Standardized Pydantic models for structured prompting. Moves away from free-form Markdown to robust, versioned JSON blueprints for high-precision task specification (Content, Code, Strategy, etc.).
- Project-Aware Memory (AGENTS.md): Native support for Claude-style project rules and memory. Backend automatically loads and injects
AGENTS.md(Project Rules) andMEMORY.md(Learned Context) into the system prompt for high-fidelity codebase awareness.
🧠 Intelligence Graph
Agent Utilities implements a sophisticated 14-phase pipeline to map and analyze your workspace. This system unifies NetworkX (for topological algorithms) and LadybugDB (for persistent Cypher queries and hybrid search).
The 14-Phase Unified Intelligence Pipeline
| Phase | Name | Purpose |
|---|---|---|
| 1 | Memory | Hydrates existing state (Nodes/Edges) from LadybugDB to maintain session continuity. |
| 2 | Scan | Performs the initial directory walk, respecting .gitignore, to identify all source code files. |
| 3 | Registry | Ingests prompts/*.md and MCP server definitions into the Knowledge Graph as specialist nodes. |
| 4 | Parse | AST parsing (tree-sitter) to extract symbols (Classes, Functions) and raw import statements. |
| 5 | Resolve | Maps raw import strings into actual graph edges between File and Symbol nodes. |
| 6 | MRO | Calculates Method Resolution Order and inheritance hierarchies for OOP structures. |
| 7 | Reference | Builds the call graph by identifying where specific symbols are referenced or invoked. |
| 8 | Communities | Clusters nodes into tightly-coupled modules using topological algorithms like Louvain. |
| 9 | Centrality | Runs PageRank analysis to identify critical path "God Objects" and core utilities. |
| 10 | Embedding | Generates semantic vector embeddings for all symbols to enable high-fidelity hybrid search. |
| 11 | Sync | Projects the in-memory NetworkX graph into the persistent LadybugDB Cypher store. |
| 12 | OWL Reasoning | Promotes stable nodes to OWL, runs HermiT/Stardog inference, downfeeds inferred facts. |
| 13 | Knowledge Base | Compiles articles, concepts, and facts into the LLM Knowledge Base layer. |
| 14 | Workspace Sync | Clones repos from workspace.yml using repository-manager and triggers auto-ingestion. |
Architecture
graph TD
subgraph Ingestion_Pipeline [14-Phase Intelligence Pipeline]
direction LR
Scan --> Parse --> Resolve --> MRO --> Ref --> Comm --> Cent --> Emb --> Sync --> OWL[OWL Reasoning] --> KB[Knowledge Base] --> WS[Workspace Sync]
end
subgraph Memory_Layer [In-Memory Graph]
NX[(NetworkX MultiDiGraph)]
NX -- "Topological Algorithms" --> NX
end
subgraph Persistence_Layer [Persistent Graph Storage]
LDB[(LadybugDB)]
LDB -- "Cypher & Vectors" --> LDB
end
subgraph Query_Layer [Tool / CLI Interface]
Q_Impact[get_code_impact]
Q_Query[search_knowledge_graph]
end
Ingestion_Pipeline -- "Mutates" --> Memory_Layer
Memory_Layer -- "Syncs To" --> Persistence_Layer
Query_Layer -- "Query" --> Persistence_Layer
subgraph Autonomous_Loop [Autonomous Self-Improvement Loop]
direction TB
Outcome[Outcome Evaluation] --> Critique[Critique / Textual Gradient]
Critique --> Evolution[Prompt/Skill Evolution]
Evolution --> Persistence_Layer
end
MAGMA-Inspired Orthogonal Reasoning Views
The graph engine supports policy-guided retrieval across four orthogonal views:
- Semantic View: Traditional RAG/vector search for conceptual similarity.
- Temporal View: Episodic memory retrieval based on chronological sequences and Ebbinghaus-style temporal decay.
- Causal View: Reasoning traces and "Why" links (e.g.,
ReasoningTrace -> ToolCall -> OutcomeEvaluation). - Entity View: Structural knowledge of People, Organizations, Locations, and Code Symbols.
- Research Knowledge Base: Grounded evidence and sources for domain-specific topics (e.g., Medical Journals).
Architecture & Orchestration
| adguard-home-agent | Graph |
| agent-utilities | Library | Production-grade Orchestration. Supports Parallel execution, Real-time sub-agent streaming, High-fidelity observability, and Session Resumability |
| agent-webui | Library | Cinematic Graph Activity Visualization. |
| agent-terminal-ui | Library | High-performance Terminal User Interface (TUI) achieving feature parity with Claude Code (Slash commands, Keyboard shortcuts, File mentions). |
agent-utilities implements a multi-stage execution pipeline using pydantic-graph for maximum precision and resilience. Protocol adapters (AG-UI, ACP) leverage graph.iter() for direct, step-by-step graph execution — bypassing the outer LLM agent entirely when a graph is present.
Ecosystem Dependency Graph
graph TD
subgraph Packages ["Core Ecosystem Packages"]
direction TB
Utility["<b>agent-utilities</b><br/>(Python)"]
Terminal["<b>agent-terminal-ui</b><br/>(Python/Textual)"]
Web["<b>agent-webui</b><br/>(React/Next.js)"]
end
subgraph Internal_Deps ["Internal Interface Layer"]
direction LR
Terminal -- depends on --> Utility
Web -- interfaces with --> Utility
end
subgraph External_Utility ["agent-utilities Dependencies"]
direction TB
PAI[pydantic-ai]
PGraph[pydantic-graph]
PACP[pydantic-acp]
PAISkills[pydantic-ai-skills]
FastMCP[fastmcp]
FastAPI[fastapi]
Logfire[logfire]
end
subgraph External_Terminal ["agent-terminal-ui Dependencies"]
direction TB
Textual[textual]
Rich[rich]
HTTPX_T[httpx]
end
subgraph External_Web ["agent-webui Dependencies"]
direction TB
ASDK["@ai-sdk/react (Vercel)"]
AI["ai (Vercel SDK)"]
React[react]
Tailwind[tailwindcss]
Vite[vite]
end
Utility --> PAI
Utility --> PGraph
Utility --> PACP
Utility --> PAISkills
Utility --> FastMCP
Utility --> FastAPI
Utility --> Logfire
Terminal --> Textual
Terminal --> Rich
Terminal --> HTTPX_T
Web --> ASDK
Web --> AI
Web --> React
Web --> Tailwind
Web --> Vite
C4 Container Diagram
C4Container
title Container diagram for Agent Orchestration System
Person(user, "User", "Interacts via Web UI")
Container_Boundary(c1, "Agent Ecosystem") {
Container(webui, "Agent WebUI", "React, Tailwind", "Renders streaming responses and graph activity visualization")
Container(tui, "Agent Terminal UI", "Python, Textual", "Provides a high-performance terminal interface for direct CLI interaction")
Container(gateway, "Agent Gateway (FastAPI)", "Python, Pydantic-AI", "Handles ACP sessions and SSE streams, merges graph events into chat annotations")
Container(orchestrator, "Graph Orchestrator", "Pydantic-Graph", "Routes queries, executes parallel domains, validates results")
Container(subagent, "Domain Sub-Agents", "Pydantic-AI", "Specialized agents for Git, Web, Cloud, etc.")
}
System_Ext(mcp, "MCP Servers", "Contextual tools (GitHub, Slack, etc.)")
System_Ext(otel, "OpenTelemetry Collector", "Tracing and monitoring")
Rel(user, webui, "Uses", "HTTPS/WSS")
Rel(user, tui, "Uses", "Terminal/CLI")
Rel(webui, gateway, "Queries", "ACP /acp (SSE/RPC)")
Rel(tui, gateway, "Queries", "ACP /acp (SSE/RPC)")
Rel(gateway, orchestrator, "Dispatches", "Async Python")
Rel(orchestrator, subagent, "Delegates", "Parallel Execution")
Rel(subagent, mcp, "Invokes Tools", "JSON-RPC (stdio/SSE)")
Rel(orchestrator, otel, "Exports Spans", "OTLP")
Human-in-the-Loop (Tool Approval & Elicitation)
agent-utilities provides true pause-and-resume human-in-the-loop for sensitive tool execution and MCP elicitation. When a specialist sub-agent calls a tool flagged with requires_approval=True, the graph suspends at that exact node, streams an approval request to the connected UI, and resumes only after the user responds.
Key Components:
ApprovalManager(approval_manager.py) — asyncio.Future-based registry that pauses coroutines and resumes them when the UI respondsrun_with_approvals()— wraps pydantic-ai's two-callDeferredToolRequests→DeferredToolResultspattern into a single blocking call/api/approveendpoint — REST endpoint that both UIs POST to when the user approves/deniesglobal_elicitation_callback()— MCPctx.elicit()callback using the same pause/resume mechanism
Protocol Support:
| Protocol | Approval Mechanism |
|---|---|
| AG-UI (web + terminal) | Sideband SSE events + POST /api/approve |
| ACP | pydantic-acp's native NativeApprovalBridge (automatic) |
SSE (/stream) |
Same as AG-UI |
Server Endpoints
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check and server metadata |
/ag-ui |
POST | AG-UI streaming with sideband graph events |
/stream |
POST | SSE stream for graph execution |
/acp |
MOUNT | ACP protocol (sessions, planning, approvals) |
/a2a |
MOUNT | Agent-to-Agent JSON-RPC |
/api/approve |
POST | Resolve pending tool approvals and MCP elicitation |
/chats |
GET | List chat sessions |
/chats/{id} |
GET/DELETE | Get or delete a chat session |
/mcp/config |
GET | Current MCP server configuration |
/mcp/tools |
GET | List all connected MCP tools |
/mcp/reload |
POST | Hot-reload MCP servers and rebuild graph |
Spec-Driven Development (SDD) Lifecycle
agent-utilities implements a rigorous SDD workflow to ensure that complex feature requests are handled with absolute technical fidelity and measurable success criteria.
- Project Constitution (
constitution-generator): Establishes the governing principles, tech stack standards, and quality gates for the entire agent workshop. - Requirement Specification (
spec-generator): Decomposes user intent into a formalSpecincluding user scenarios, functional requirements, and measurable success metrics. - Technical Implementation Plan (
task-planner): Generates a step-by-step architectural approach and aTasksmodel with explicit dependencies and file-path affinity for collision-free parallel execution. - Baseline & Manual Testing: Integrates
first_run_testsandrun_manual_testinto the implementation phase to ensure baseline stability and exploratory verification. - Parallel Execution (
SDDManager): Thedispatcherleverages the SDD analysis engine to identify safe parallel execution batches, fanning out implementation tasks to domain specialists (Python, TS, etc.). - Quality Verification & Documentation: Audits results via
spec-verifier, then generatescode-walkthroughandinteractive-explainartifacts to document the final implementation.
Execution Flow: Dynamic Multi-Layer Parallelism
agent-utilities implements a multi-stage execution pipeline with autonomous gap analysis and resilient feedback loops. The system can "fan out" research tasks in parallel before coalescing results. If implementation fails, it can automatically retry locally or loop back to research.
graph TB
Start([User Query + Images]) --> ACPLayer["<b>ACP / AG-UI / SSE </b><br/><i>(Unified Protocol Layer)</i>"]
ACPLayer --> UsageGuard[Usage Guard: Rate Limiting]
UsageGuard -- "Allow" --> router_step[Router: Topology Selection]
UsageGuard -- "Block" --> End([End Result])
router_step -- "Trivial Query" --> End
router_step -- "Full Pipeline" --> dispatcher[Dispatcher: Dynamic Routing]
dispatcher -- "First Entry" --> mem_step[Memory: Context Retrieval]
mem_step --> dispatcher[Dispatcher: Dynamic Routing]
subgraph "Discovery Phase"
direction TB
Researcher["<b>Researcher</b><br/>---<br/><i>u-skill:</i> web-search, web-crawler, web-fetch<br/><i>t-tool:</i> project_search, read_workspace_file"]
Architect["<b>Architect</b><br/>---<br/><i>u-skill:</i> c4-architecture, spec-generator, product-strategy, user-research, brainstorming<br/><i>t-tool:</i> developer_tools"]
KGDiscovery["<b>Unified Discovery</b><br/>---<br/><i>source:</i> Knowledge Graph<br/>"]
res_joiner[Research Joiner: Barrier Sync]
end
dispatcher -- "Research First" --> Researcher
dispatcher -- "Research First" --> Architect
dispatcher -- "Research First" --> KGDiscovery
Researcher --> res_joiner
Architect --> res_joiner
KGDiscovery --> res_joiner
res_joiner -- "Coalesced Context" --> dispatcher
subgraph "Execution Phase"
direction TB
subgraph "Programmers"
direction LR
PyP["<b>Python</b><br/>---<br/><i>u-skill:</i> agent-builder, tdd-methodology, mcp-builder, jupyter-notebook<br/><i>g-skill:</i> python-docs, fastapi-docs, pydantic-ai-docs<br/><i>t-tool:</i> developer_tools"]
TSP["<b>TypeScript</b><br/>---<br/><i>u-skill:</i> react-development, web-artifacts, tdd-methodology, canvas-design<br/><i>g-skill:</i> nodejs-docs, react-docs, nextjs-docs, shadcn-docs<br/><i>t-tool:</i> developer_tools"]
GoP["<b>Go</b><br/>---<br/><i>u-skill:</i> tdd-methodology<br/><i>g-skill:</i> go-docs<br/><i>t-tool:</i> developer_tools"]
RustP["<b>Rust</b><br/>---<br/><i>u-skill:</i> tdd-methodology<br/><i>g-skill:</i> rust-docs<br/><i>t-tool:</i> developer_tools"]
CSP["<b>C Programmer</b><br/>---<br/><i>u-skill:</i> developer-utilities<br/><i>g-skill:</i> c-docs<br/><i>t-tool:</i> developer_tools"]
CPP["<b>C++ Programmer</b><br/>---<br/><i>u-skill:</i> developer-utilities<br/><i>t-tool:</i> developer_tools"]
JSP["<b>JavaScript</b><br/>---<br/><i>u-skill:</i> web-artifacts, canvas-design, developer-utilities<br/><i>g-skill:</i> nodejs-docs, react-docs<br/><i>t-tool:</i> developer_tools"]
end
subgraph "Infrastructure"
direction LR
DevOps["<b>DevOps</b><br/>---<br/><i>u-skill:</i> cloudflare-deploy<br/><i>g-skill:</i> docker-docs, terraform-docs<br/><i>t-tool:</i> developer_tools"]
Cloud["<b>Cloud</b><br/>---<br/><i>u-skill:</i> c4-architecture<br/><i>g-skill:</i> aws-docs, azure-docs, gcp-docs<br/><i>t-tool:</i> developer_tools"]
DBA["<b>Database</b><br/>---<br/><i>u-skill:</i> database-tools<br/><i>g-skill:</i> postgres-docs, mongodb-docs, redis-docs<br/><i>t-tool:</i> developer_tools"]
end
subgraph Specialized ["Specialized & Quality"]
direction LR
Sec["<b>Security</b><br/>---<br/><i>u-skill:</i> security-tools<br/><i>g-skill:</i> linux-docs<br/><i>t-tool:</i> developer_tools"]
QA["<b>QA</b><br/>---<br/><i>u-skill:</i> spec-verifier, tdd-methodology<br/><i>g-skill:</i> testing-library-docs<br/><i>t-tool:</i> developer_tools"]
UIUX["<b>UI/UX</b><br/>---<br/><i>u-skill:</i> theme-factory, brand-guidelines, algorithmic-art<br/><i>g-skill:</i> shadcn-docs, framer-docs<br/><i>t-tool:</i> developer_tools"]
Debug["<b>Debugger</b><br/>---<br/><i>u-skill:</i> developer-utilities, agent-builder<br/><i>t-tool:</i> developer_tools"]
end
subgraph Ecosystem ["Agent Ecosystem"]
direction TB
subgraph Infra_Management ["Infrastructure & DevOps"]
AdGuardHome["<b>AdGuard Home Agent</b><br/>---<br/><i>mcp-tool:</i> adguard-mcp<br/>"]
AnsibleTower["<b>Ansible Tower Agent</b><br/>---<br/><i>mcp-tool:</i> ansible-tower-mcp<br/>"]
ContainerManager["<b>Container Manager Agent</b><br/>---<br/><i>mcp-tool:</i> container-mcp<br/>"]
Microsoft["<b>Microsoft Agent</b><br/>---<br/><i>mcp-tool:</i> microsoft-mcp<br/>"]
Portainer["<b>Portainer Agent</b><br/>---<br/><i>mcp-tool:</i> portainer-mcp<br/>"]
SystemsManager["<b>Systems Manager</b><br/>---<br/><i>mcp-tool:</i> systems-mcp<br/>"]
TunnelManager["<b>Tunnel Manager</b><br/>---<br/><i>mcp-tool:</i> tunnel-mcp<br/>"]
UptimeKuma["<b>Uptime Kuma Agent</b><br/>---<br/><i>mcp-tool:</i> uptime-mcp<br/>"]
RepositoryManager["<b>Repository Manager</b><br/>---<br/><i>mcp-tool:</i> repository-mcp<br/>"]
end
subgraph Media_HomeLab ["Media & Home Lab"]
ArchiveBox["<b>ArchiveBox API</b><br/>---<br/><i>mcp-tool:</i> archivebox-mcp<br/>"]
Arr["<b>Arr (Radarr/Sonarr)</b><br/>---<br/><i>mcp-tool:</i> arr-mcp<br/>"]
AudioTranscriber["<b>Audio Transcriber</b><br/>---<br/><i>mcp-tool:</i> audio-transcriber-mcp<br/>"]
Jellyfin["<b>Jellyfin Agent</b><br/>---<br/><i>mcp-tool:</i> jellyfin-mcp<br/>"]
MediaDownloader["<b>Media Downloader</b><br/>---<br/><i>mcp-tool:</i> media-mcp<br/>"]
Owncast["<b>Owncast Agent</b><br/>---<br/><i>mcp-tool:</i> owncast-mcp<br/>"]
qBittorrent["<b>qBittorrent Agent</b><br/>---<br/><i>mcp-tool:</i> qbittorrent-mcp<br/>"]
end
subgraph Productive_Dev ["Productivity & Development"]
Atlassian["<b>Atlassian Agent</b><br/>---<br/><i>mcp-tool:</i> atlassian-mcp<br/>"]
Genius["<b>Genius Agent</b><br/>---<br/><i>mcp-tool:</i> genius-mcp<br/>"]
GitHub["<b>GitHub Agent</b><br/>---<br/><i>mcp-tool:</i> github-mcp<br/>"]
GitLab["<b>GitLab API</b><br/>---<br/><i>mcp-tool:</i> gitlab-mcp<br/>"]
Langfuse["<b>Langfuse Agent</b><br/>---<br/><i>mcp-tool:</i> langfuse-mcp<br/>"]
LeanIX["<b>LeanIX Agent</b><br/>---<br/><i>mcp-tool:</i> leanix-mcp<br/>"]
Plane["<b>Plane Agent</b><br/>---<br/><i>mcp-tool:</i> plane-mcp<br/>"]
Postiz["<b>Postiz Agent</b><br/>---<br/><i>mcp-tool:</i> postiz-mcp<br/>"]
ServiceNow["<b>ServiceNow API</b><br/>---<br/><i>mcp-tool:</i> servicenow-mcp<br/>"]
StirlingPDF["<b>StirlingPDF Agent</b><br/>---<br/><i>mcp-tool:</i> stirlingpdf-mcp<br/>"]
end
subgraph Data_Lifestyle ["Data & Lifestyle"]
DocumentDB["<b>DocumentDB Agent</b><br/>---<br/><i>mcp-tool:</i> documentdb-mcp<br/>"]
HomeAssistant["<b>Home Assistant Agent</b><br/>---<br/><i>mcp-tool:</i> home-assistant-mcp<br/>"]
Mealie["<b>Mealie Agent</b><br/>---<br/><i>mcp-tool:</i> mealie-mcp<br/>"]
Nextcloud["<b>Nextcloud Agent</b><br/>---<br/><i>mcp-tool:</i> nextcloud-mcp<br/>"]
Searxng["<b>Searxng Agent</b><br/>---<br/><i>mcp-tool:</i> searxng-mcp<br/>"]
Vector["<b>Vector Agent</b><br/>---<br/><i>mcp-tool:</i> vector-mcp<br/>"]
Wger["<b>Wger Agent</b><br/>---<br/><i>mcp-tool:</i> wger-mcp<br/>"]
end
end
end
dispatcher -- "Parallel Dispatch" --> Programmers
dispatcher -- "Parallel Dispatch" --> Infrastructure
dispatcher -- "Parallel Dispatch" --> Specialized
dispatcher -- "Parallel Dispatch" --> Ecosystem
Programmers --> exe_joiner[Execution Joiner: Barrier Sync]
Infrastructure --> exe_joiner
Specialized --> exe_joiner
Ecosystem --> exe_joiner
exe_joiner -- "Implementation Results" --> dispatcher
dispatcher -- "Plan Complete" --> verifier[Verifier: Quality Gate]
verifier -- "Score >= 0.7" --> synthesizer[Synthesizer: Response Composition]
verifier -- "Score 0.4-0.7" --> dispatcher
verifier -- "Score < 0.4" --> planner_step[Planner: Re-plan with Feedback]
planner_step --> dispatcher
synthesizer -- "Final Response" --> End
dispatcher -- "Terminal Failure" --> End
%% Styling
style Researcher fill:#e1d5e7,stroke:#9673a6,stroke-width:2px
style Architect fill:#e1d5e7,stroke:#9673a6,stroke-width:2px
style A2ADiscovery fill:#e1d5e7,stroke:#9673a6,stroke-width:2px
style MCPDiscovery fill:#e1d5e7,stroke:#9673a6,stroke-width:2px
style Programmers fill:#dae8fe,stroke:#6c8ebf,stroke-width:2px
style PyP fill:#dae8fe,stroke:#6c8ebf,stroke-width:1px
style TSP fill:#dae8fe,stroke:#6c8ebf,stroke-width:1px
style GoP fill:#dae8fe,stroke:#6c8ebf,stroke-width:1px
style RustP fill:#dae8fe,stroke:#6c8ebf,stroke-width:1px
style CSP fill:#dae8fe,stroke:#6c8ebf,stroke-width:1px
style CPP fill:#dae8fe,stroke:#6c8ebf,stroke-width:1px
style JSP fill:#dae8fe,stroke:#6c8ebf,stroke-width:1px
style Infrastructure fill:#fad9b8,stroke:#d6b656,stroke-width:2px
style DevOps fill:#fad9b8,stroke:#d6b656,stroke-width:1px
style Cloud fill:#fad9b8,stroke:#d6b656,stroke-width:1px
style DBA fill:#fad9b8,stroke:#d6b656,stroke-width:1px
style Specialized fill:#e0d3f5,stroke:#82b366,stroke-width:2px
style Sec fill:#e0d3f5,stroke:#82b366,stroke-width:1px
style QA fill:#e0d3f5,stroke:#82b366,stroke-width:1px
style UIUX fill:#e0d3f5,stroke:#82b366,stroke-width:1px
style Debug fill:#e0d3f5,stroke:#82b366,stroke-width:1px
style Ecosystem fill:#f5f1d3,stroke:#d6b656,stroke-width:2px
style Infra_Management fill:#fef9e7,stroke:#d6b656,stroke-width:1px
style Media_HomeLab fill:#fef9e7,stroke:#d6b656,stroke-width:1px
style Productive_Dev fill:#fef9e7,stroke:#d6b656,stroke-width:1px
style Data_Lifestyle fill:#fef9e7,stroke:#d6b656,stroke-width:1px
style verifier fill:#fff2cc,stroke:#d6b656,stroke-width:2px
style synthesizer fill: #d5e8d4,stroke:#82b366,stroke-width:2px
style planner_step fill: #dae8fe,stroke:#6c8ebf,stroke-width:2px
style End fill:#f8cecc,stroke:#b85450,stroke-width:2px
style res_joiner fill:#f5f5f5,stroke:#666,stroke-dasharray: 5 5
style exe_joiner fill:#f5f5f5,stroke:#666,stroke-dasharray: 5 5
style dispatcher fill:#f5f5f5,stroke:#666,stroke-width:2px
style Start color:#000000,fill:#38B6FF
style subGraph0 color:#000000,fill:#f5ebd3
style subGraph5 color:#000000,fill:#f5f1d3
style dispatcher fill:#d5e8d4,stroke:#666,stroke-width:2px
style Ecosystem fill:#f5d0ef,stroke:#d6b656,stroke-width:2px
style LocalAgents fill:#f5d0ef,stroke:#d6b656,stroke-width:1px
style RemotePeers fill:#f5d0ef,stroke:#d6b656,stroke-width:1px
style ACPLayer color:#000000,fill:#38B6FF,stroke-width:2px
style Start color:#000000,fill:#38B6FF
style subGraph0 color:#000000,fill:#f5ebd3
style subGraph5 color:#000000,fill:#f5f1d3
style dispatcher fill:#d5e8d4,stroke:#666,stroke-width:2px
style Ecosystem fill:#f5d0ef,stroke:#d6b656,stroke-width:2px
style LocalAgents fill:#f5d0ef,stroke:#d6b656,stroke-width:1px
style RemotePeers fill:#f5d0ef,stroke:#d6b656,stroke-width:1px
MCP Loading & Registry Architecture
This diagram illustrates how MCP servers are discovered, specialized, and persisted in the graph.
graph TD
subgraph Registry_Phase ["1. Registry Synchronization (Deployment)"]
Config["<b>mcp_config.json</b><br/><i>(Source of Truth)</i>"] --> Manager["<b>mcp_agent_manager.py</b><br/><i>sync_mcp_agents()</i>"]
KG_Registry["<b>Knowledge Graph</b><br/><i>(Unified Specialist Registry)</i>"] -.->|Read Hash| Manager
Manager -->|Config Hash Match?| Branch{Decision}
Branch -- "Yes (Cache Hit)" --> Skip["Skip Tool Extraction"]
Branch -- "No (Cache Miss)" --> Parallel["<b>Parallel Dispatch</b><br/>(Semaphore 30)"]
Parallel -->|Deploy STDIO| Servers["<b>N MCP Servers</b><br/>(Git, DB, Cloud, etc.)"]
Servers -->|JSON-RPC list_tools| Parallel
Parallel -->|Metadata| KG_Registry
end
subgraph Initialization_Phase ["2. Graph Initialization (Runtime)"]
Config -->|Per-server resilient load| Loader["<b>builder.py</b><br/><i>MCPServerStdio per server</i><br/>⚠️ Skips missing env-vars<br/>❌ Logs failed servers clearly"]
KG_Registry --> Builder["<b>builder.py</b><br/><i>initialize_graph_from_workspace()</i>"]
Loader -->|mcp_toolsets| 'graph'
Builder -->|Register Nodes| Specialists["<b>Specialist Superstates</b><br/>(Python, TS, GitLab, etc.)"]
Specialists -->|Compile| 'graph'["<b>Pydantic Graph Agent</b>"]
end
subgraph Operation_Phase ["3. Persistent Operation (Execution)"]
'graph' --> Lifespan["<b>runner.py</b><br/><i>run_graph() AsyncExitStack</i>"]
Lifespan -->|"Sequential connect<br/>per-server error reporting"| ConnPool["<b>Active Connection Pool</b><br/>(Warm Toolsets)<br/>❌ failing servers skipped & logged"]
ConnPool -->|Zero-Latency Call| Servers
end
%% Styling
style Config fill:#dae8fe,stroke:#6c8ebf,stroke-width:2px
style KG_Registry fill:#dae8fe,stroke:#6c8ebf,stroke-width:2px
style Manager fill:#e1d5e7,stroke:#9673a6,stroke-width:2px
style Parallel fill:#f8cecc,stroke:#b85450,stroke-width:2px
style ConnPool fill:#d5e8d4,stroke:#82b366,stroke-width:2px
style 'graph' fill:#fff2cc,stroke:#d6b656,stroke-width:2px
style Loader fill:#d5e8d4,stroke:#82b366,stroke-width:2px
Quick Start
# Start a Graph Agent server with Universal Skills
agent-utilities --provider openai --model-id gpt-4o --skill-types universal,graphs
# Start with a custom MCP configuration
agent-utilities --mcp-config mcp_config.json --web --port 8000
# Run in validation mode (no API keys required)
VALIDATION_MODE=true agent-utilities --debug
from agent_utilities import create_agent, create_graph_agent_server
# Quick agent creation
agent = create_agent(name="MyAgent", skill_types=["universal", "graphs"])
# Full server with protocols (ACP, A2A, MCP, AG-UI)
create_graph_agent_server(provider="openai", model_id="gpt-4o", port=8000)
See docs/creating-an-agent.md for the complete walkthrough.
Installation
# Core utilities only
pip install agent-utilities
# With full agent support (recommended)
pip install agent-utilities[agent]
# With MCP server support
pip install agent-utilities[mcp]
# With embedding/vector support
pip install agent-utilities[embeddings]
# With OWL reasoning support (Owlready2 + HermiT)
# Note: Requires Java Runtime Environment (sudo apt install default-jre)
pip install agent-utilities[owl]
# With Stardog OWL backend
pip install agent-utilities[stardog]
API Documentation
Every agent server automatically hosts an interactive Swagger UI for its APIs.
- URL:
http://localhost:8000/docs - Spec:
http://localhost:8000/openapi.json
This interface allows you to test the /health, /acp, and /mcp endpoints directly from your browser.
Creating an Agent
All agents in the ecosystem follow the same pattern powered by agent-utilities. Here's the reference template used by genius-agent:
#!/usr/bin/python
import logging, os, sys
from agent_utilities import (
build_system_prompt_from_workspace,
create_agent_parser,
create_graph_agent_server,
initialize_workspace,
load_identity,
)
__version__ = "1.0.0"
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
initialize_workspace()
meta = load_identity()
DEFAULT_AGENT_NAME = os.getenv("DEFAULT_AGENT_NAME", meta.get("name", "My Agent"))
DEFAULT_AGENT_SYSTEM_PROMPT = os.getenv(
"AGENT_SYSTEM_PROMPT", meta.get("content") or build_system_prompt_from_workspace()
)
def agent_server():
print(f"{DEFAULT_AGENT_NAME} v{__version__}", file=sys.stderr)
parser = create_agent_parser()
args = parser.parse_args()
create_graph_agent_server(
mcp_url=args.mcp_url, mcp_config=args.mcp_config or "mcp_config.json",
host=args.host, port=args.port, provider=args.provider,
model_id=args.model_id, base_url=args.base_url, api_key=args.api_key,
enable_web_ui=args.web, debug=args.debug,
)
if __name__ == "__main__":
agent_server()
Full guide: See docs/creating-an-agent.md for the complete walkthrough including project structure,
main_agent.json,mcp_config.json,pyproject.toml, and all CLI flags.
Building MCP Servers & API Wrappers
Use create_mcp_server() to bootstrap a fully configured FastMCP server with authentication, middleware, and CLI parsing:
from agent_utilities.mcp.utilities import create_mcp_server, ctx_progress, ctx_log, ctx_confirm_destructive
from fastmcp import Context
from pydantic import Field
args, mcp, middlewares = create_mcp_server(name="My Service MCP", version="1.0.0")
@mcp.tool(annotations={"title": "Delete Resource", "destructiveHint": True}, tags={"resources"})
async def delete_resource(
resource_id: str = Field(description="Resource ID to delete."),
ctx: Context = Field(description="MCP context.", default=None),
) -> dict:
"""Delete a resource. Expected return object type: dict"""
if not await ctx_confirm_destructive(ctx, f"delete resource {resource_id}"):
return {"status": "cancelled"}
await ctx_progress(ctx, 0, 100)
# ... perform deletion ...
await ctx_progress(ctx, 100, 100)
return {"status": "success", "deleted": resource_id}
Context helpers (ctx_*) are the standard way to interact with MCP context across the ecosystem:
ctx_progress(ctx, progress, total)— Report progressctx_confirm_destructive(ctx, action)— Elicitation guard for destructive operationsctx_log(ctx, logger, level, msg)— Dual-log to server and MCP clientctx_set_state/ctx_get_state— Namespaced session statectx_sample(ctx, prompt)— Ask the client LLM to generate a response
Full guide: See docs/building-mcp-servers.md for complete coverage including API wrappers, authentication options, OpenAPI import, and running instructions.
Documentation
Comprehensive system documentation is available in the docs/ directory:
New to the project? Start with the Concept Overview Map to get oriented.
| Guide | Description |
|---|---|
| Overview Map | The Conceptual Map connecting the 12 core concepts |
| Configuration | Unified reference for all environment variables and CLI flags |
| Structured Prompts | JSON prompt schema, Pydantic models, and prompt catalog |
| RLM / REPL | Recursive Language Model patterns, smart auto-triggers, AHE integration, KG/OWL helpers |
| Capabilities | Self-healing modules: checkpointing, circuit breakers, retry |
| SDD Orchestrator | Spec-Driven Development pipeline and task decomposition |
| Tools Registry | 18 tool modules across 5 categories |
Contributing
Contributions are welcome. Please follow these guidelines:
- Fork the repository and create a feature branch.
- Write tests for new functionality — all tests must include assertions.
- Follow existing patterns — use the established Pydantic models, structured prompts, and concept markers.
- Run the test suite before submitting:
uv run pytest tests/ -q - Update documentation in
docs/if your changes affect public APIs.
See AGENTS.md for project-specific conventions and architecture rules.
License
This project is licensed under the terms specified in the LICENSE file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_utilities-0.2.42.tar.gz.
File metadata
- Download URL: agent_utilities-0.2.42.tar.gz
- Upload date:
- Size: 686.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5959d3cc29c9e128affd29cff640f8d0dd27575e4a7a64cccd6d7fb6d72ed606
|
|
| MD5 |
d2004a08bae10816f74ed7edfe873ec9
|
|
| BLAKE2b-256 |
715ed67065b4e7b8450f720ee593a6b01f2a459f61222e10a26e65cb733cb714
|
File details
Details for the file agent_utilities-0.2.42-py3-none-any.whl.
File metadata
- Download URL: agent_utilities-0.2.42-py3-none-any.whl
- Upload date:
- Size: 833.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46eeb56372805d4e97f8fc610f9757401ed38970fa4d49f6c470b928b705a504
|
|
| MD5 |
1f63e8fb5dd2cc85995bb7d532718b6b
|
|
| BLAKE2b-256 |
3316647deae692770a44f6a9192072478e06b2757227ae3d1df7ab5732b1464a
|