What you get
- Tools from any MCP server that speaks Streamable HTTP
- Name allow and deny lists to keep the tool list small
- Optional resource listing and reading
- A circuit breaker that stops calling a failing server
How it works in EDDI
- Create an
mcpcallsconfiguration with the server URL, the transporthttpand an API key as a${vault:...}reference. - Reference it as a workflow step (
eddi://ai.labs.mcpcalls). - The agent's LLM task picks up the server's tools automatically (
enableMcpCallToolsdefaults to true). - Add the tools to
toolApprovalsso consequential calls wait for a human. - For a stdio-only server, run it in its own container behind an HTTP bridge and point EDDI at the bridge.
Configuration
Taken from the EDDI documentation. Placeholders such as your-agent-id are yours to replace.
{
"mcpServerUrl": "https://mcp.example.com/mcp",
"name": "example",
"transport": "http",
"apiKey": "${vault:example-mcp-token}",
"timeoutMs": 30000
}{
"hitlConfig": {
"toolApprovals": {
"requireApproval": [
"mcp:*"
],
"exempt": [
"mcp:read_*"
],
"approvalTimeout": "PT30M",
"timeoutPolicy": "AUTO_REJECT"
}
}
}Governance
- MCP tool calls take part in the same human-in-the-loop approval gate as every other tool source.
- Tool descriptions are redacted for directive-shaped text and length-capped. Tool results are wrapped with provenance and, by default, directive-shaped content is redacted.
- A tool whitelist is context management, not a security boundary. The boundary is the credential you give the connection plus the approval gate.
- Every gated decision is written to the audit ledger.
Good to know
- EDDI implements one MCP transport, Streamable HTTP. It does not spawn stdio servers itself, because a configuration-editable command would be arbitrary code execution as the EDDI process user. Use a bridge sidecar.
- A circuit breaker opens after 3 failures in 60 seconds, so a missing tool usually means the server is failing.
Related integrations
Configuration and behavior on this page follow the EDDI documentation, checked on 2026-10-14. Field names and defaults can change between releases, so confirm them in the docs for your version.