add docker
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
.env
|
||||||
|
.git
|
||||||
|
.pytest_cache
|
||||||
|
.venv
|
||||||
|
__pycache__
|
||||||
|
*.py[cod]
|
||||||
|
tests
|
||||||
+24
@@ -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"]
|
||||||
@@ -118,6 +118,22 @@ uv run mcp
|
|||||||
|
|
||||||
MCP 端点为 `http://127.0.0.1:8000/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 客户端配置
|
## MCP 客户端配置
|
||||||
|
|
||||||
使用 `stdio` 的客户端可参考以下配置。请将项目路径替换为本机的绝对路径:
|
使用 `stdio` 的客户端可参考以下配置。请将项目路径替换为本机的绝对路径:
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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):
|
class DomainDefinition(DomainBaseModel):
|
||||||
"""Top-level domain definition."""
|
"""Top-level domain definition."""
|
||||||
|
|
||||||
@@ -109,16 +119,6 @@ class DomainDefinition(DomainBaseModel):
|
|||||||
return self
|
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):
|
class DomainToolRequest(DomainBaseModel):
|
||||||
"""Common request shape for discovery and exact child execution."""
|
"""Common request shape for discovery and exact child execution."""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user