diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..51c31de --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +# Glama-friendly MCP server image. +# Builds the standalone `queryshield-mcp` stdio MCP server (the same one +# that's published to PyPI). Glama's introspection check launches the +# container, sends an MCP `initialize` over stdio, and verifies tool +# discovery works — no QUERYSHIELD_API_KEY is needed for that handshake. +FROM python:3.12-slim AS runtime + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PIP_NO_CACHE_DIR=1 + +# Install only the dependencies the MCP client needs — keep the image small. +RUN pip install --no-cache-dir queryshield-mcp==1.0.1 + +# Stdio MCP servers expect the process to read from stdin / write to stdout. +# Glama runs the container with `-i` so this just works. +ENTRYPOINT ["queryshield-mcp"] diff --git a/README.md b/README.md index 531d114..19b5e65 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,8 @@ Then drop this into your Claude Desktop / Cursor / agent config: Source for the standalone PyPI package lives in `packages/queryshield-mcp/`. +For MCP directory evaluators such as Glama, the repository root also includes a slim `Dockerfile` that launches the published `queryshield-mcp` stdio server for tool introspection. The container does not need `QUERYSHIELD_API_KEY` for MCP initialization/tool discovery; the key is only required when a discovered tool is actually invoked against a QueryShield API tenant. + ## MCP integration (legacy) Drop this into any MCP-aware client (Claude Desktop, Cursor, custom agents):