Use this skill when exposing a Docker Agent as a server (MCP, HTTP API, A2A, ACP, or OpenAI-compatible chat), distributing an agent via an OCI registry with `docker agent share`, or measuring agent quality with `docker agent eval`. Even if the user just says they want to "turn my agent into an MCP server", "let Claude Desktop use my agent", "publish my agent to Docker Hub", "push my agent like an image", or "test my agent in CI", this skill applies. Covers `serve mcp/api/a2a/acp/chat` listen addresses and auth flags, `share push/pull`, eval session JSON format, scoring metrics, and the `--baseline` regression gate.
npx skills add https://github.com/docker/skills --skill docker-agent-deploy
This skill owns the integration surface of Docker Agent: making an agent
reachable by other software (docker agent serve), distributing it through
an OCI registry the way container images are distributed (`docker agent
share), and proving it still behaves after a change (docker agent eval`).
It assumes the agent config already exists — see docker-agent-config for
authoring it, and docker-agent-run for interactive/local invocation.
Activate this skill when:
Do not use this skill when:
docker-agent-config.--safety/--sandbox, or aliases — use docker-agent-run.never expose any of them beyond loopback without authentication:
| Mode | Default listen | Auth flag | Has --safety? |
| --- | --- | --- | --- |
| serve mcp | 127.0.0.1:8081 | --auth-token (only with --http) | Yes (only with --http) |
| serve api | 127.0.0.1:8080 | --auth-token | No |
| serve chat | 127.0.0.1:8083 | --api-key / --api-key-env | Yes |
| serve a2a | 127.0.0.1:8082 | --auth-token | Yes |
| serve acp | (stdio only) | n/a | No |
docker agent serve mcp ./agent.yaml --http --listen 127.0.0.1:9090 --auth-token "$TOKEN"
serve mcp defaults to stdio transport (for local clients like ClaudeDesktop); pass --http only when you need a network-reachable MCP
endpoint, and set --auth-token whenever you do.
token/key is refused; --insecure-no-auth exists to force it and must be
treated as a deliberate, documented exception, never a default.
serve mcp (with --http), serve chat, and serve a2a expose--safety (strict/balanced/restricted/autonomous); Docker's docs
state it defaults to restricted for these modes when unset. serve api
and serve acp expose no --safety flag at all. Never raise --safety
to autonomous on a network-reachable listener; if a served agent must
approve more, prefer balanced and keep auth enabled.
serve api accepts a directory instead of a single file: every.yaml/.yml/.hcl in it is exposed under /api/agents. Use
--session-workingdir-root to confine session working directories when
the server is reachable by more than one user.
registry, same docker login auth:
docker agent share push ./agent.yaml docker.io/username/my-agent:latest
docker agent share pull docker.io/username/my-agent:latest
instruction_file contents are inlined into the pushed artifactautomatically, so a published agent stays self-contained — you do not need
to bundle the referenced files separately.
sub_agents that reference the pushed artifact to a digest(name@sha256:...) once published, to avoid a per-run registry lookup and
to guarantee the exact config a consumer gets.
--force on share pull only when you intend to overwrite a localcopy that already exists; without it, an existing local config is left
untouched.
evals/ directory next to the agent config by default;each eval is one JSON session file capturing a user message, the recorded
tool calls, and an evals object with the scoring criteria.
JSON: run the agent interactively, then use the /eval slash command in
the TUI to save the session, and edit in relevance/size/assertions
criteria afterward.
Relevance (LLM-judge, --judge-model, default anthropic/claude-opus-5),
Size (S/M/L/XL response-length bucket), and Assertions (deterministic
checks; see the complete assertion-type list in references/eval-format.md).
Prefer assertions over relevance when a check can be exact: they need no
judge model and are deterministic, not approximation-prone.
runtime is required. Dedicated provider API keys
(ANTHROPIC_API_KEY/OPENAI_API_KEY) are forwarded automatically.
GITHUB_TOKEN/GH_TOKEN are not forwarded automatically (they're
broad host credentials, not model keys) — pass them explicitly with
-e GITHUB_TOKEN when an agent's provider needs one (e.g.
github-copilot).
--baseline: docker agent eval ./agent.yaml --baseline results/2026-08-01-run.json --regression-tolerance 0.05
A previously-passing eval that now fails always gates regardless of
tolerance; cost changes are reported but never gate. A baseline or run
with zero evaluations (e.g. an --only pattern matching nothing) is
rejected rather than reported as passing.
--keep-containers plus your runtime's exec to inspect a failedeval's container; the eval's .db session file holds the full
conversation for offline debugging.
explicit --safety value used in the deployment before restarting the
listener — this catches an approval-policy regression before it reaches
traffic. If a rollout must be rolled back, restore the prior config and
safety flag; never restore an unauthenticated listener as a rollback
shortcut.
agent.yaml, use docker-agent-config.docker-agent-run.references/eval-format.md — full eval session JSON schema and CLI flag table.references/sources.md — provenance of every rule in this skill.assets/eval-session-example.json — a minimal eval session file to copy and adapt.checks/verification.md — Verification runbook for serving, sharing, and evaluating an agent.Take docker/docker-agent-deploy from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.