From 2eea0ca746f34d54626a1036c6f5ea9dc84f0e2a Mon Sep 17 00:00:00 2001 From: "Chen, Li" Date: Fri, 9 Oct 2026 10:36:17 +0800 Subject: [PATCH] add docker --- .dockerignore | 7 +++++++ Dockerfile | 24 ++++++++++++++++++++++++ README.md | 16 ++++++++++++++++ compose.yaml | 11 +++++++++++ src/mini_db_mcp/domain/domain_model.py | 20 ++++++++++---------- 5 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 compose.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..15a5274 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.env +.git +.pytest_cache +.venv +__pycache__ +*.py[cod] +tests \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..34e2a82 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM python:3.12-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + UV_COMPILE_BYTECODE=1 \ + UV_LINK_MODE=copy + +WORKDIR /app + +COPY --from=ghcr.io/astral-sh/uv:0.9.17 /uv /uvx /bin/ + +COPY pyproject.toml uv.lock ./ +RUN uv sync --frozen --no-dev --no-install-project + +COPY src ./src +RUN uv sync --frozen --no-dev + +RUN useradd -m -s /bin/bash appuser +USER appuser +ENV PATH="/app/.venv/bin:$PATH" + +EXPOSE 8000 + +CMD ["mcp"] \ No newline at end of file diff --git a/README.md b/README.md index a540b9b..f491ef6 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,22 @@ uv run mcp MCP 端点为 `http://127.0.0.1:8000/mcp`。 +### Docker Compose + +先按上文创建并填写 `.env`,然后启动服务: + +```powershell +docker compose up --build -d +``` + +Compose 会强制使用 HTTP 传输,并将 MCP 端点暴露为 `http://127.0.0.1:8000/mcp`。 + +停止服务: + +```powershell +docker compose down +``` + ## MCP 客户端配置 使用 `stdio` 的客户端可参考以下配置。请将项目路径替换为本机的绝对路径: diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..670764b --- /dev/null +++ b/compose.yaml @@ -0,0 +1,11 @@ +services: + mini-db-mcp: + build: . + env_file: + - .env + environment: + MCP_TRANSPORT: http + MCP_HOST: 0.0.0.0 + ports: + - "${MCP_PORT:-8000}:8000" + restart: unless-stopped \ No newline at end of file diff --git a/src/mini_db_mcp/domain/domain_model.py b/src/mini_db_mcp/domain/domain_model.py index 372e61a..0384ca0 100644 --- a/src/mini_db_mcp/domain/domain_model.py +++ b/src/mini_db_mcp/domain/domain_model.py @@ -85,6 +85,16 @@ class DomainBaseModel(BaseModel): ) +class ChildToolDefinition(DomainBaseModel): + """Exact child tool of a domain.""" + + tool_name: Identity + tool_title: NonEmptyText + tool_description: NonEmptyText + input_schema: JsonObject + output_schema: JsonObject + + class DomainDefinition(DomainBaseModel): """Top-level domain definition.""" @@ -109,16 +119,6 @@ class DomainDefinition(DomainBaseModel): return self -class ChildToolDefinition(DomainBaseModel): - """Exact child tool of a domain.""" - - tool_name: Identity - tool_title: NonEmptyText - tool_description: NonEmptyText - input_schema: JsonObject - output_schema: JsonObject - - class DomainToolRequest(DomainBaseModel): """Common request shape for discovery and exact child execution."""