Deployment¶
Local stdio child¶
Use the reference-only mcp_config.json with an alias-aware launcher. It installs the
MCP extra through uvx, selects the condensed surface, and expects runtime aliases for
the endpoint and credential. A non-alias-aware launcher must inject those values through
its own secret mechanism.
Containers¶
docker/mcp.compose.yml runs only the MCP server. docker/agent.compose.yml adds the
current A2A runtime. Image names are externalized through GRAMPS_MCP_IMAGE and
GRAMPS_AGENT_IMAGE; the agent also requires runtime MCP_URL, PROVIDER, and
MODEL_ID values.
The multi-stage image installs the checked-out package source and drops to an unprivileged runtime user. Compose injects endpoint, credential or secret reference, and TLS-profile selectors from the launch environment; it does not read a repository dotenv file.
Published ports bind to loopback by default. Keep telemetry and the web UI disabled unless explicitly approved. The compose files do not deploy a Gramps database, identity provider, graph database, or observability backend.
Network MCP¶
When using streamable HTTP or SSE:
- Terminate TLS at an approved ingress or configure the server transport directly.
- Require MCP client authentication and authorization.
- Limit the listener and ingress to intended callers.
- Apply request, response, and rate limits appropriate for genealogy exports and media.
- Keep provider credentials and TLS profiles behind runtime references.
Do not expose the container listener broadly merely because the internal process binds to all container interfaces.
Readiness¶
Container health checks are local and content-free. For an authorized deployed A2A
service, run scripts/validate_a2a_agent.py --url <https-endpoint>; it uses the shared
TLS profile, disables redirects, sends a bounded readiness prompt, and prints no endpoint
or response content.