A2A agent server that provides Context7-style documentation capabilities for your agents
A enterprise-ready Agent-to-Agent (A2A) server that provides AI-powered capabilities through a standardized protocol.
The generated binary is a CLI. start boots the A2A server; --help and
--version work as you'd expect.
# Run the agent
go run . start
# Or build and invoke the CLI directly
task build
./bin/documentation-agent --help
./bin/documentation-agent --version
./bin/documentation-agent start
# Or with Docker
docker build -t documentation-agent .
docker run -p 8080:8080 documentation-agent| Command | Description |
|---|---|
documentation-agent start |
Start the A2A server (blocks until SIGINT/SIGTERM) |
documentation-agent --help |
Show top-level help (and per-subcommand with <cmd> --help) |
documentation-agent --version |
Print the embedded version and exit |
Add this agent to your Inference Gateway CLI:
infer agents add documentation-agent http://localhost:8080 \
--oci ghcr.io/inference-gateway/documentation-agent:latest \
--run- ✅ A2A protocol compliant
- ✅ AI-powered capabilities
- ✅ Streaming support
- ✅ State transition history
- ✅ Enterprise-ready
- ✅ Minimal dependencies
GET /.well-known/agent-card.json- Agent metadata and capabilitiesGET /health- Health check endpointPOST /a2a- A2A protocol endpoint
| Tool | Description | Parameters |
|---|---|---|
Read |
Read a file from disk. Returns its contents, optionally sliced by line offset/limit. Use this to load SKILL.md bodies on demand. | file_path, offset, limit |
resolve_library_id |
Resolves library name to Context7-compatible library ID and returns matching libraries | libraryName, query |
get_library_docs |
Fetches up-to-date documentation for a library using Context7-compatible library ID | libraryId, query |
| Skill | Description | Source |
|---|---|---|
library-documentation-lookup |
Use this when you need up-to-date documentation for a third-party library or framework before writing code against it. First resolves the library name to a Context7-compatible ID via resolve_library_id when the caller does not already know it (format '/org/project' or '/org/project/version'), then fetches focused, topic-scoped documentation via get_library_docs. Good for filling in unknowns about specific APIs, hooks, configuration options, or version-specific behavior. | bare scaffold (skills/library-documentation-lookup.md) |
Configure the agent via environment variables:
The following custom configuration variables are available. Defaults are
derived from spec.config.* in agent.yaml; the env vars below override
them at runtime.
| Category | Variable | Default |
|---|---|---|
| Tools | TOOLS_READ_ENABLED |
true |
| Category | Variable | Description | Default |
|---|---|---|---|
| Server | A2A_PORT |
Server port | 8080 |
| Server | A2A_DEBUG |
Enable debug mode | false |
| Server | A2A_AGENT_URL |
Agent URL for internal references | http://localhost:8080 |
| Server | A2A_STREAMING_STATUS_UPDATE_INTERVAL |
Streaming status update frequency | 1s |
| Server | A2A_SERVER_READ_TIMEOUT |
HTTP server read timeout | 120s |
| Server | A2A_SERVER_WRITE_TIMEOUT |
HTTP server write timeout | 120s |
| Server | A2A_SERVER_IDLE_TIMEOUT |
HTTP server idle timeout | 120s |
| Server | A2A_SERVER_DISABLE_HEALTHCHECK_LOG |
Disable logging for health check requests | true |
| Agent Metadata | A2A_AGENT_CARD_FILE_PATH |
Path to agent card JSON file | .well-known/agent-card.json |
| LLM Client | A2A_AGENT_CLIENT_PROVIDER |
LLM provider (openai, anthropic, azure, ollama, deepseek) |
`` |
| LLM Client | A2A_AGENT_CLIENT_MODEL |
Model to use | `` |
| LLM Client | A2A_AGENT_CLIENT_API_KEY |
API key for LLM provider | - |
| LLM Client | A2A_AGENT_CLIENT_BASE_URL |
Custom LLM API endpoint | - |
| LLM Client | A2A_AGENT_CLIENT_TIMEOUT |
Timeout for LLM requests | 30s |
| LLM Client | A2A_AGENT_CLIENT_MAX_RETRIES |
Maximum retries for LLM requests | 3 |
| LLM Client | A2A_AGENT_CLIENT_MAX_CHAT_COMPLETION_ITERATIONS |
Max chat completion rounds | 10 |
| LLM Client | A2A_AGENT_CLIENT_MAX_TOKENS |
Maximum tokens for LLM responses | 4096 |
| LLM Client | A2A_AGENT_CLIENT_TEMPERATURE |
Controls randomness of LLM output | 0.7 |
| Capabilities | A2A_CAPABILITIES_STREAMING |
Enable streaming responses | true |
| Capabilities | A2A_CAPABILITIES_PUSH_NOTIFICATIONS |
Enable push notifications | false |
| Capabilities | A2A_CAPABILITIES_STATE_TRANSITION_HISTORY |
Track state transitions | true |
| Task Management | A2A_TASK_RETENTION_MAX_COMPLETED_TASKS |
Max completed tasks to keep (0 = unlimited) | 100 |
| Task Management | A2A_TASK_RETENTION_MAX_FAILED_TASKS |
Max failed tasks to keep (0 = unlimited) | 50 |
| Task Management | A2A_TASK_RETENTION_CLEANUP_INTERVAL |
Cleanup frequency (0 = manual only) | 5m |
| Storage | A2A_QUEUE_PROVIDER |
Storage backend (memory or redis) |
memory |
| Storage | A2A_QUEUE_URL |
Redis connection URL (when using Redis) | - |
| Storage | A2A_QUEUE_MAX_SIZE |
Maximum queue size | 100 |
| Storage | A2A_QUEUE_CLEANUP_INTERVAL |
Task cleanup interval | 30s |
| Authentication | A2A_AUTH_ENABLE |
Enable OIDC authentication | false |
# Generate code from ADL
task generate
# Run tests
task test
# Build the application
task build
# Run linter
task lint
# Format code
task fmtThe generator owns the baseline toolchain pins (SDK, server framework,
logging, CLI, sandbox utilities). To extend the project without forking
the templates, declare extras in agent.yaml - every empty list below
is rendered by adl init --defaults precisely so it's discoverable:
| Where | Purpose | Example entry | Rendered into |
|---|---|---|---|
spec.language.go.vendor.deps |
Runtime Go modules | github.com/stretchr/[email protected] |
go.mod require block |
spec.language.go.vendor.devdeps |
Executable dev tools (Go 1.24 tool directive) |
golang.org/x/tools/cmd/[email protected] |
go.mod tool directive |
spec.development.deps |
Cross-cutting sandbox tools (not tied to one language) | [email protected], [email protected], [email protected] |
Flox manifest.toml / devcontainer feature |
Entries use the <package>@<version> form. Built-in pins always win on
conflict; the generator prints a warning and skips the user entry when
shadowing is attempted. After editing agent.yaml, re-run task generate
to refresh the manifests.
Use the A2A Debugger to test and debug your A2A agent during development. It provides a web interface for sending requests to your agent and inspecting responses, making it easier to troubleshoot issues and validate your implementation.
docker run --rm -it --network host ghcr.io/inference-gateway/a2a-debugger:latest --server-url http://localhost:8080 tasks submit "What are your skills?"docker run --rm -it --network host ghcr.io/inference-gateway/a2a-debugger:latest --server-url http://localhost:8080 tasks listdocker run --rm -it --network host ghcr.io/inference-gateway/a2a-debugger:latest --server-url http://localhost:8080 tasks get <task ID>The Docker image can be built with custom version information using build arguments:
# Build with default values from ADL
docker build -t documentation-agent .
# Build with custom version information
docker build \
--build-arg VERSION=1.2.3 \
--build-arg AGENT_NAME="My Custom Agent" \
--build-arg AGENT_DESCRIPTION="Custom agent description" \
-t documentation-agent:1.2.3 .Available Build Arguments:
VERSION- Agent version (default:0.2.32)AGENT_NAME- Agent name (default:documentation-agent)AGENT_DESCRIPTION- Agent description (default:A2A agent server that provides Context7-style documentation capabilities for your agents)
These values are embedded into the binary at build time using linker flags, making them accessible at runtime without requiring environment variables.
Apache 2.0 License - see LICENSE file for details