# EDDI

Config-driven server that runs AI agents from versioned JSON, driven by MCP, REST or A2A.

A Java and Quarkus server that runs AI agents defined in versioned JSON configuration: behavior rules, LLM tasks, HTTP calls and output templates. It adds multi-agent group discussions, persistent user memory, schedules and human approval gates, with a built-in admin dashboard and chat UI. The open source is Apache-2.0 and self-hosted with Docker or Helm; EDDI Solutions sells managed plans with no published prices.

Alternative to: Dify, n8n, Flowise

- Capabilities: adaptable, operable
- Vertical: agent-infrastructure
- Shape: product
- Form factor: api
- Execution model: hybrid
- Provenance: mixed (recorded, never ranked)
- Repo: https://github.com/labsai/EDDI (Apache-2.0), 389 stars, last commit 2026-11-03
- Last activity: 2026-11-03
- Page: apps/labsai--eddi.html
- JSON: apps/labsai--eddi.json

## Use it when

- I want agents defined in versioned config that my coding agent can create and deploy over MCP instead of writing framework code
- I need agents that stop for human approval and keep an audit trail in a self-hosted deployment
- I want several agents to debate a question and hand back a synthesized answer
- I want my agents to call agents on other platforms over A2A and to answer those platforms too

## Gotchas

- Infrastructure-grade: a Java 25 server plus MongoDB or PostgreSQL, with optional Keycloak and NATS for authentication and clustering
- The shipped default has OIDC off, so no endpoint needs a token, A2A JSON-RPC included; the compose files bind to 127.0.0.1, so turn authentication on before exposing it
- A2A agents are opt-in: set a2aEnabled per agent. eddi.a2a.enabled is on by default but only switches the endpoints
- The root Agent Card describes only the first A2A-enabled agent; other agents use /a2a/agents/{agentId}/.well-known/agent-card.json
- A2A ListTasks, SubscribeToTask, push notifications and the extended card are refused, and clustered deployments need a shared IA2ATaskStore
- Set EDDI_VAULT_MASTER_KEY or secret references such as ${vault:name} fail; store provider keys there, not in agent JSON
- Most creating MCP tools are not idempotent: after a transport error, check with a list tool before retrying or you get a duplicate

## Editions

- Open source: Free, open source
  - source: https://github.com/labsai/EDDI
  - container: docker pull labsai/eddi
  - installable: curl -fsSL https://raw.githubusercontent.com/labsai/EDDI/main/install.sh | bash
- EDDI Solutions managed plans: Free, closed source
  - hosted: https://eddi.solutions/pricing/

## Adaptable: make it yours

Effort: config-only (20 things to edit)

Agent behavior is versioned JSON: behavior rules, LLM tasks with their system prompts, HTTP calls and output templates. These documents live in the database and are edited in the Manager, over REST or MCP, or moved as ZIP exports, so there is no single file in the repo to change; docs/agent-configs/ holds a reference set. Group templates in src/main/resources/group-templates set discussion formats, and the eddi.branding.* properties set the product name, colors and logo. Any property can be set as an env var by uppercasing it and replacing every non-alphanumeric character with an underscore; a misspelled variable is silently ignored.

- Env vars: EDDI_BRANDING_PRODUCT_NAME, EDDI_DATASTORE_TYPE, EDDI_VAULT_MASTER_KEY, EDDI_PORT, EDDI_BIND, EDDI_SECURITY_ALLOW_UNAUTHENTICATED, EDDI_MCP_ALLOW_UNAUTHENTICATED, EDDI_SECRETSTORE_ALLOW_UNAUTHENTICATED, EDDI_A2A_ENABLED, EDDI_A2A_BASE_URL, QUARKUS_OIDC_TENANT_ENABLED, QUARKUS_OIDC_AUTH_SERVER_URL
- Config files: src/main/resources/application.properties, .env.example, docker-compose.yml, helm/eddi/values.yaml, src/main/resources/group-templates/research-pod.json, src/main/resources/group-templates/decision-board.json, src/main/resources/llm/openai-compatible-providers.json, docs/agent-configs/rule-based-reference/
- Prompt files: none
- Accounts you'll need: An LLM provider account, unless you run a local model through Ollama or Jlama

## Operable: what an agent can drive

Operability: official. Interface: mcp at https://github.com/labsai/EDDI/blob/main/docs/mcp-server.md (published by the builder, both).

### Reach (partial coverage)

- Create, change and deploy agents: reachable. setup_agent, create_api_agent, update_resource, apply_agent_changes and deploy_agent in docs/mcp-server.md; the approval gate cannot be set through create_api_agent
- Talk to deployed agents and route by intent: reachable. talk_to_agent, chat_with_agent, chat_managed and discover_agents in docs/mcp-server.md
- Run multi-agent group discussions: reachable. 18 group tools, including create_group, discuss_with_group and create_group_from_template
- Schedule cron jobs and heartbeats: reachable. create_schedule, fire_schedule_now and retry_failed_schedule in docs/mcp-server.md
- Review human approvals: reachable. 10 HITL tools, including list_pending_approvals, resume_conversation and approve_group_phase
- Read and write persistent user memory: reachable. 8 memory tools in McpMemoryTools, including upsert_user_memory and search_user_memories
- Erase and export a user's data for GDPR: reachable. delete_user_data and export_user_data in McpGdprTools
- Read audit trails and pipeline logs: reachable. read_audit_trail and read_agent_logs; unscoped log reads require eddi-admin
- Create knowledge bases and ingest documents for RAG: not reachable. docs/mcp-server.md: read_resource reads rag, which has no create, update or delete case; ingestion is REST and Manager only (docs/rag.md)
- Manage the secrets vault, import agents and sync instances: not reachable. McpToolFilter.MCP_TOOLS lists no vault, agent import or agent sync tool; these are REST and Manager features

## A2A Protocol

Role: both (other agents can call it; calls other agents). Status: supported. Version: 1.0. Bindings: JSONRPC.
Agent Card: /.well-known/agent-card.json on each deployment. Source: https://github.com/labsai/EDDI/blob/main/docs/a2a-protocol.md (published by the builder). src/main/java/ai/labs/eddi/engine/a2a/ serves Agent Cards and SendMessage over JSONRPC at version 1.0 with 0.3 and legacy dialects, and modules/llm/impl/A2AToolProviderManager.java fetches peer cards and sends SendMessage, message/send or tasks/send, wired into AgentOrchestrator; the Builder applies no experimental label and the same files are in the 6.6.0 tag.

Reach describes the stated interface, not A2A.

## Code stack

- Languages: Java, TypeScript
- Frameworks: Quarkus, LangChain4j, React
- Package manager: maven
- Database: MongoDB, PostgreSQL
- Hosting target: Docker, Kubernetes (Helm), OpenShift

## Model stack

- Providers: OpenAI, Anthropic, Google Gemini, Mistral AI, Azure OpenAI, Amazon Bedrock, Oracle GenAI, Google Vertex AI, Ollama, Jlama, Hugging Face, any OpenAI-compatible endpoint
- Models: claude-sonnet-4-6 is the setup_agent default
- Keys you need (names only): EDDI_VAULT_MASTER_KEY
- Prompts live in: systemMessage in each LLM task configuration, stored in the database, prompt snippets referenced as {snippets.name}, integrations/claude-plugin/skills/
- Tools: 96 MCP server tools, built-in web search, calculator, web scraper, PDF reader, weather and user memory tools, HTTP calls, MCP servers and A2A agents as tools

## Skills

bundled: A Claude Code plugin with two skills that drive the MCP tools: eddi for using agents and eddi-admin for building and operating them. A separate .claude/skills/ship-pr is contributor tooling.
- Paths: integrations/claude-plugin/skills/eddi/SKILL.md, integrations/claude-plugin/skills/eddi-admin/SKILL.md, .claude-plugin/marketplace.json
- Install: /plugin marketplace add labsai/EDDI

## Evidence and confidence

- formFactor: Quarkus server exposing REST, MCP and A2A; README calls it middleware, and the Manager and chat UIs are built into the same image (confidence 0.7)
- executionModel: Lifecycle pipeline of Input, Parse, Behavior Rules, Actions, Tasks and Output (AGENTS.md) with LLM calls as bounded tasks; rule-based agents run with no model (confidence 0.85)
- operability: docs/mcp-server.md published by labsai; src/main/java/ai/labs/eddi/engine/mcp holds 96 tools, and McpToolContractTest asserts that count (confidence 0.95)
- effort: docs/configuration-reference.md, docs/white-labeling.md and docs/agent-config-authoring.md; eddi.branding.* and agent JSON change business behavior, not only deployment values (confidence 0.8)
- editions: LICENSE is Apache-2.0; eddi.solutions/pricing lists Proof of Concept, Professional and Enterprise plans, all 'Contact Us' (confidence 0.85)
- active: GitHub API: default-branch commit 2026-11-03 (1e8ecd3); release 6.6.0 on 2026-10-20; 389 stars, 129 forks, 84 open issues and pull requests
- provenance: Repo dates from 2016 with human contributors, and now carries AGENTS.md, CLAUDE.md, .cursor, .amazonq and a ship-pr skill for coding agents
- alternativeTo: The Builder's eddi.technology/compare page compares EDDI with Dify, n8n and Flowise among others
- a2aRole: Server: RestA2AEndpoint and A2AWireFormat. Client: LlmConfiguration.Task.a2aAgents read by A2AToolProviderManager, which posts through OutboundHttp; covered by A2AToolProviderManagerDialectTest
- reach:  (confidence 0.8)

## Open questions

- Reach and A2A were read from docs and source; EDDI was not run, no MCP tool was called, and no live Agent Card was fetched. eddi.technology returns 404 for an Agent Card, and each deployment serves its own
- docs/a2a-protocol.md and docs/changelog/2026-10.md say the a2a-sdk 1.2.1 Python client was tested live against a jar; no test in scripts, src/test or .github uses that SDK, so the check cannot be reproduced from the repo
- EDDI_A2A_ENABLED and EDDI_A2A_BASE_URL are derived from the documented property names by the documented rule; no shipped compose or Helm file uses them
- Prices for the EDDI Solutions plans are not published
- formFactor could be web-app, since the Manager is built in; api was chosen because the Builder calls it middleware
- Compliance claims (GDPR, HIPAA, EU AI Act) and the 20,000+ tests badge are the Builder's and were not checked

## Sources

- https://github.com/labsai/EDDI (sourcing:agent-infrastructure:a2a-topic)
- https://eddi.technology (analysis:agent-infrastructure)
- https://eddi.solutions/pricing/ (analysis:agent-infrastructure)
- https://github.com/labsai/EDDI/blob/main/docs/a2a-protocol.md (analysis:agent-infrastructure)
