From 667ece7c20e7fb55d84931ece574d6762fe62b89 Mon Sep 17 00:00:00 2001 From: Pavel Fedin Date: Thu, 14 May 2026 13:30:55 +0300 Subject: [PATCH] + mariadb mcp --- .cursor/mcp.json | 7 +++++++ .env.example | 9 +++++++++ .env.mcp-mariadb.example | 12 ++++++++++++ .gitignore | 1 + docker-compose.mcp-mariadb.yml.example | 31 +++++++++++++++++++++++++++++++ dockerfiles/mariadb-mcp/Dockerfile | 31 +++++++++++++++++++++++++++++++ 6 files changed, 91 insertions(+) create mode 100644 .cursor/mcp.json create mode 100644 .env.mcp-mariadb.example create mode 100644 docker-compose.mcp-mariadb.yml.example create mode 100644 dockerfiles/mariadb-mcp/Dockerfile diff --git a/.cursor/mcp.json b/.cursor/mcp.json new file mode 100644 index 0000000..18536e1 --- /dev/null +++ b/.cursor/mcp.json @@ -0,0 +1,7 @@ +{ + "mcpServers": { + "intai-mariadb": { + "url": "http://127.0.0.1:8765/sse" + } + } +} diff --git a/.env.example b/.env.example index 56aff03..c2c12bb 100644 --- a/.env.example +++ b/.env.example @@ -28,3 +28,12 @@ PHP_OPT_POST_MAX_SIZE=800M PHP_OPT_UPLOAD_MAX_FILESIZE=200M PHP_OPT_MAX_EXECUTION_TIME=600 + +### MCP MariaDB (Cursor IDE) ############################ +# Имя Docker-сети, в которой запущен сервис db (docker network ls | grep default). +# Пример: intai-docker_default — имя зависит от каталога проекта и COMPOSE_PROJECT_NAME. +INTAI_DOCKER_NETWORK=intai-docker_default +# Порт на хосте для MCP (SSE); тот же порт должен быть в .cursor/mcp.json (url). +MCP_MARIADB_PORT=8765 +# Опционально: зафиксировать ревизию MariaDB/mcp при сборке образа (ветка или тег). +# MARIADB_MCP_GIT_REF=main \ No newline at end of file diff --git a/.env.mcp-mariadb.example b/.env.mcp-mariadb.example new file mode 100644 index 0000000..5faf9ba --- /dev/null +++ b/.env.mcp-mariadb.example @@ -0,0 +1,12 @@ +# Копия: cp .env.mcp-mariadb.example .env.mcp-mariadb +# Пароль должен совпадать с MYSQL_ROOT_PASSWORD у сервиса db (docker-compose.base.yml). + +DB_HOST=db +DB_PORT=3306 +DB_USER=root +DB_PASSWORD=123456 +# Необязательно: дефолтная БД для запросов +# DB_NAME=myapp + +MCP_READ_ONLY=true +MCP_MAX_POOL_SIZE=5 diff --git a/.gitignore b/.gitignore index f0ff8c7..819b128 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /.idea /.env +/.env.mcp-mariadb /docker-compose* !/docker-compose.base.yml !/docker-compose*.example diff --git a/docker-compose.mcp-mariadb.yml.example b/docker-compose.mcp-mariadb.yml.example new file mode 100644 index 0000000..d8af1e7 --- /dev/null +++ b/docker-compose.mcp-mariadb.yml.example @@ -0,0 +1,31 @@ +# MariaDB MCP для Cursor: контейнер в той же Docker-сети, что и сервис db. +# +# 1) Узнайте имя сети стека с MariaDB: docker network ls | grep default +# (часто <имя_папки_проекта>_default, например intai-docker_default) +# 2) Скопируйте .env.mcp-mariadb.example в .env.mcp-mariadb и поправьте пароль/БД. +# 3) В корневом .env задайте INTAI_DOCKER_NETWORK (см. .env.example). +# 4) Запуск (файл с суффиксом .example можно указать напрямую): +# docker compose -f docker-compose.mcp-mariadb.yml.example up -d --build +# +# Cursor читает .cursor/mcp.json (SSE на 127.0.0.1:${MCP_MARIADB_PORT}). + +services: + mcp-mariadb: + build: + context: ./dockerfiles/mariadb-mcp + args: + MARIADB_MCP_GIT_REF: ${MARIADB_MCP_GIT_REF:-main} + restart: unless-stopped + env_file: + - .env.mcp-mariadb + environment: + LOG_FILE: /tmp/mcp_server.log + ports: + - "127.0.0.1:${MCP_MARIADB_PORT:-8765}:9001" + networks: + - intai_db + +networks: + intai_db: + external: true + name: ${INTAI_DOCKER_NETWORK:?Set INTAI_DOCKER_NETWORK in .env — see .env.example} diff --git a/dockerfiles/mariadb-mcp/Dockerfile b/dockerfiles/mariadb-mcp/Dockerfile new file mode 100644 index 0000000..d53db2c --- /dev/null +++ b/dockerfiles/mariadb-mcp/Dockerfile @@ -0,0 +1,31 @@ +# MariaDB MCP Server (SSE) — upstream: https://github.com/MariaDB/mcp +# Build clones MariaDB/mcp at MARIADB_MCP_GIT_REF (branch or tag). + +FROM python:3.11-slim AS builder + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential curl ca-certificates git \ + && rm -rf /var/lib/apt/lists/* + +RUN curl -fsSL https://astral.sh/uv/install.sh | sh +ENV PATH="/root/.local/bin:${PATH}" + +WORKDIR /app + +ARG MARIADB_MCP_GIT_REF=main +RUN git clone --depth 1 --branch "${MARIADB_MCP_GIT_REF}" https://github.com/MariaDB/mcp.git . \ + || (git clone --depth 1 https://github.com/MariaDB/mcp.git . && git fetch --depth 1 origin "${MARIADB_MCP_GIT_REF}" && git checkout FETCH_HEAD) + +RUN uv sync --no-dev + +FROM python:3.11-slim + +WORKDIR /app +ENV PATH="/app/.venv/bin:${PATH}" + +COPY --from=builder /app/.venv /app/.venv +COPY --from=builder /app/src /app/src + +EXPOSE 9001 + +CMD ["python", "src/server.py", "--host", "0.0.0.0", "--transport", "sse"]