跳转至

Docker MCP Toolkit + SQLite MCP 服务器

一份可复现的操作手册,用于将 SQLite MCP 服务器 安装到 Docker MCP Toolkit 中,使任何 已连接的 MCP 客户端(Claude Code、Claude Desktop、Cursor、VS Code 等)都能获得 六个 SQLite 工具:read_query、write_query、create_table、list_tables、 describe_table 和 append_insight。

本文档并非使用 graphify 所必需——它作为一份已验证可用的方案放在这里,供那些希望 将轻量、持久化的 SQL 工作区暴露给 AI 客户端,并与 graphify 的知识图谱工具一同 使用的用户参考。

为什么用 SQLite(而不是 sqlite-mcp-server)

在撰写本文时,目录中附带两个 SQLite MCP 镜像:

目录名称 镜像 状态
SQLite mcp/sqlite 在目录元数据中被标记为 “Archived”,但 可以正常启动并提供服务
sqlite-mcp-server mcp/sqlite-mcp-server 已损坏:已发布层中不存在入口点 /app/.venv/bin/mcp-server-sqlite

在新镜像于上游修复之前,请使用 SQLite(mcp/sqlite)。

前提条件

  • Docker Desktop 正在运行且状态健康
  • docker info 返回 Server Version
  • 公共套接字存在于 /var/run/docker.sock(或其指向 ~/.docker/run/docker.sock 的符号链接)
  • Docker MCP Toolkit CLI 插件(docker mcp)
  • 随近期 Docker Desktop 版本捆绑提供;docker mcp --version 应打印出版本字符串

安装

# Add the working SQLite server to the default MCP profile
docker mcp profile server add default \
  --server catalog://mcp/docker-mcp-catalog/SQLite

# Pre-pull the image so the first tool call is fast
docker pull mcp/sqlite:latest

验证配置文件现在同时包含 fetch(内置)和 SQLite:

docker mcp profile show default | grep -E '^[[:space:]]+name:'

预期输出:

            name: fetch
            name: SQLite

Docker MCP 网关现在应额外暴露 6 个工具:

docker mcp tools count
# → 15 tools (was 9 before adding SQLite)

冒烟测试

CLI 可以直接调用 MCP 工具(每次调用都会启动全新的网关,每次调用约 5 秒开销):

docker mcp tools call list_tables
docker mcp tools call create_table \
  query='CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY AUTOINCREMENT, body TEXT NOT NULL, created_at TEXT DEFAULT CURRENT_TIMESTAMP)'
docker mcp tools call write_query \
  query="INSERT INTO notes(body) VALUES ('first row'), ('second row')"
docker mcp tools call read_query \
  query='SELECT * FROM notes ORDER BY id'
docker mcp tools call describe_table table_name=notes
docker mcp tools call append_insight insight='3 rows inserted; aggregates work.'

read_query 应返回带时间戳的已插入行。

存储布局

数据库文件位于 Docker 命名卷 mcp-sqlite 中,容器内挂载于 /mcp:

mcp-sqlite (named volume) → /mcp/db.sqlite

从宿主机检查:

docker volume inspect mcp-sqlite
docker run --rm -v mcp-sqlite:/mcp:ro alpine ls -la /mcp
docker run --rm -v mcp-sqlite:/mcp:ro keinos/sqlite3 \
  sqlite3 /mcp/db.sqlite '.schema'

该卷在 SQLite MCP 容器的多次 docker run --rm 调用之间持续存在,因此一次 MCP 工具调用的写入内容对下一次调用可见。

接入 MCP 客户端

每个客户端只需连接一次;网关会暴露活动配置文件中的每个服务器:

docker mcp client connect claude-code   # already connected for many users
docker mcp client connect cursor
docker mcp client connect vscode
docker mcp client connect claude-desktop
# Supported: claude-code, claude-desktop, cline, codex, continue, crush,
#            cursor, gemini, goose, gordon, kiro, lmstudio, opencode, sema4,
#            vscode, zed

验证连接:

docker mcp client ls

卸载 / 重置

# Remove server from the profile
docker mcp profile server remove default SQLite

# Drop the database volume (irreversible)
docker volume rm mcp-sqlite

# Remove the image
docker rmi mcp/sqlite:latest

故障排查

  • starting client: calling "initialize": EOF — 请求的服务器未通过 MCP 握手。直接运行该镜像以查看错误:
    printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"0.0"}}}\n' \
      | docker run --rm -i -v mcp-sqlite:/mcp <image-ref> --db-path /mcp/db.sqlite
    
    常见原因:镜像中缺少入口点二进制文件(即 sqlite-mcp-server 的故障模式), 或缺少所需的环境变量/密钥。
  • cannot use --enable-all-servers with --servers flag — 这些网关参数互斥;请选择其一。
  • 安装后 docker mcp tools count 中未出现新工具 — 网关可能以启用 dynamic-tools 的方式运行,在配置文件于会话中途被激活之前,仅暴露元工具(mcp-add、mcp-find 等)。请调用 docker mcp tools(它会针对默认配置文件启动一个临时网关),或在 MCP 会话内调用 mcp-activate-profile。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 graph/graphify