mcpField
S
Secure Schema MCP

Secure Schema MCP

本地服务
github.com/Siddharth-coder13数据库017 周前更新

关于 Secure Schema MCP

Secure Schema MCP 是面向编码工具的只读数据库结构服务,不暴露行数据。它以紧凑格式提供模式元数据,并支持表白名单以限制访问。

主要功能

  1. 01列出表和视图
  2. 02检查列、类型和键
  3. 03呈现外键关系
  4. 04支持 SQLite、PostgreSQL 和 MySQL
  5. 05提供紧凑或 Markdown 格式

适用场景

  1. 01为编码 Agent 提供结构信息而不暴露记录
  2. 02通过表白名单限制生产环境的元数据访问

MCP 相关

向 MCP 客户端提供 schema_overview、list_tables 和 inspect_table 工具,不提供行查询或写入工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"siddharth-coder13-secure-schema": {
"command": "uvx",
"args": [
"mcp-secure-schema"
],
"env": {
"DATABASE_URL": "<DATABASE_URL>",
"DATABASE_SCHEMA": "<DATABASE_SCHEMA>",
"ALLOWED_TABLES": "<ALLOWED_TABLES>",
"SECURE_SCHEMA_ENV": "<SECURE_SCHEMA_ENV>",
"FASTMCP_CHECK_FOR_UPDATES": "<FASTMCP_CHECK_FOR_UPDATES>",
"FASTMCP_SHOW_SERVER_BANNER": "<FASTMCP_SHOW_SERVER_BANNER>"
}
}
}
}
启动命令uvx mcp-secure-schema
需要配置的环境变量
DATABASE_URL密钥SQLAlchemy database URL used for schema inspection.
DATABASE_SCHEMAOptional default schema or catalog namespace. In production it is locked and tool arguments cannot override it.
ALLOWED_TABLESOptional comma-separated table/view allowlist. When set, only listed tables and views are visible.
SECURE_SCHEMA_ENVSet to production to require ALLOWED_TABLES during startup.
FASTMCP_CHECK_FOR_UPDATESSet to off to disable FastMCP startup update checks.
FASTMCP_SHOW_SERVER_BANNERSet to false to suppress the FastMCP startup banner.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-secure-schema1.0.1

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
formatenum否输出格式。使用 compact 可减少大模型的令牌用量;使用 markdown 可生成便于人阅读的输出。compact | markdown
schemaany否可选的架构/目录命名空间。仅在非生产环境中覆盖 DATABASE_SCHEMA。

详细介绍

Secure Schema MCP

一个只读 MCP 服务,向 AI 编码工具提供数据库结构,但不暴露行数据。它以紧凑格式返回表和视图名称、列、类型、键和关系,旨在减少 LLM 令牌用量。

暴露的内容

暴露不暴露
表和视图名称行值或查询结果
列名称和 SQL 类型行数或样本
主键和唯一键数据库凭据
外键关系写入或查询工具

架构元数据仍可能包含敏感信息。即使没有值,像 ssn 这样的列名也会泄露信息,因此生产部署应始终使用表白名单和专用数据库账户。

要求

  • 兼容 MCP 的客户端,例如 Cursor 或 Codex
  • 可访问的 SQLite、PostgreSQL 或 MySQL 数据库
  • 不使用 uvx 安装时,需要 Python 3.12 或更高版本

SQLite 支持使用 Python 内置驱动。PostgreSQL 和 MySQL 驱动已包含在内。其他 SQLAlchemy 方言在 v1 中未经测试,也未随包提供。

配置 IDE

推荐的设置方式使用 uvx 下载并在隔离环境中运行已发布的 Python 包。无需克隆此仓库,也无需单独启动服务。IDE 会在需要时通过 stdio 启动它。

Cursor

将此服务添加到 Cursor MCP 配置中:

{
  "mcpServers": {
    "secure-schema": {
      "command": "uvx",
      "args": ["mcp-secure-schema"],
      "env": {
        "DATABASE_URL": "postgresql+psycopg2://schema_reader:password@localhost:5432/appdb",
        "DATABASE_SCHEMA": "public",
        "ALLOWED_TABLES": "users,orders,products",
        "SECURE_SCHEMA_ENV": "production",
        "FASTMCP_CHECK_FOR_UPDATES": "off",
        "FASTMCP_SHOW_SERVER_BANNER": "false"
      }
    }
  }
}

更改 MCP 配置后,重启或重新加载 Cursor。

Codex

将以下内容添加到 ~/.codex/config.toml 或受信任项目的 .codex/config.toml 中:

[mcp_servers.secure-schema]
command = "uvx"
args = ["mcp-secure-schema"]
enabled_tools = ["schema_overview", "list_tables", "inspect_table"]
startup_timeout_sec = 30
tool_timeout_sec = 30

[mcp_servers.secure-schema.env]
DATABASE_URL = "postgresql+psycopg2://schema_reader:password@localhost:5432/appdb"
DATABASE_SCHEMA = "public"
ALLOWED_TABLES = "users,orders,products"
SECURE_SCHEMA_ENV = "production"
FASTMCP_CHECK_FOR_UPDATES = "off"
FASTMCP_SHOW_SERVER_BANNER = "false"
改为一次性安装

如果你更喜欢持久安装:

pipx install mcp-secure-schema

然后在 IDE 配置中使用 "command": "mcp-secure-schema",并将 args 列表设为空。

数据库 URL

Secure Schema MCP 接受 SQLAlchemy 连接 URL:

# SQLite (absolute path)
sqlite:////Users/me/project/app.db

# PostgreSQL
postgresql+psycopg2://user:password@localhost:5432/appdb

# Remote PostgreSQL with certificate verification
postgresql+psycopg2://user:[email protected]:5432/appdb?sslmode=verify-full&sslrootcert=/path/to/ca.pem

# MySQL
mysql+pymysql://user:password@localhost:3306/appdb

对 URL 中的用户名和密码里的特殊字符进行百分号编码。例如,密码中的 @ 应写作 %40。

本地和远程数据库使用相同的 MCP 配置。对于远程数据库,运行 IDE 的机器还必须具备正常的 DNS、网络访问、防火墙权限和有效的 TLS 设置。

配置

变量必需说明
DATABASE_URL是SQLAlchemy 连接 URL。在注册表清单中视为机密。
DATABASE_SCHEMA否默认架构或目录命名空间。建议用于 PostgreSQL。在生产环境中禁止通过工具覆盖。
ALLOWED_TABLES生产环境以逗号分隔、区分大小写的表和视图白名单。生产模式下未设置此项时将拒绝启动。
SECURE_SCHEMA_ENV否设置为 production 或 prod,以启用严格的启动验证。默认为 development。
FASTMCP_CHECK_FOR_UPDATES否设置为 off,以确保 stdio 启动行为可预测。
FASTMCP_SHOW_SERVER_BANNER否设置为 false,以隐藏启动横幅。
多个架构

DATABASE_SCHEMA 用于选择默认命名空间。解析规则如下:

  • 在生产环境中,已配置的 DATABASE_SCHEMA 是一道安全边界,工具参数不能覆盖它。
  • 在非生产环境中,显式的工具 schema 参数会覆盖 DATABASE_SCHEMA。
  • 两者都未设置时,将使用数据库驱动的默认架构。

如需在生产环境中严格访问多个架构,请为每个架构配置一个 MCP 服务条目,并分别设置 DATABASE_SCHEMA 和 ALLOWED_TABLES。表白名单使用未限定名称,而非 schema.table 值。

工具

  • schema_overview:获准访问的表、视图、主键和外键关系的紧凑映射
  • list_tables:获准访问的表和视图清单
  • inspect_table:单个实体的列、SQL 类型、是否可为空、主键、唯一约束和外键

所有工具默认使用 format="compact",以减少令牌用量:

tables:orders,users | pk:orders(order_id);users(user_id) | fk:orders.user_id->users.user_id

需要更便于人阅读的表格时,请传入 format="markdown"。

安全说明

  • 服务仅公开 SQLAlchemy 检查操作;不提供行查询或写入工具。
  • 启用允许列表时,不存在的表名和不允许的表名会返回相同消息,以避免泄露表是否存在。
  • 面向客户端的错误信息经过清理。操作详情会写入服务的标准错误流。
  • IDE 会启动 MCP 进程并提供其环境,因此请将 IDE 及其配置视为可信对象。
  • 请勿提交包含凭据的配置。如需更强的隔离,请通过包装脚本启动,并从操作系统密钥链或密钥管理器获取 DATABASE_URL。
  • 远程连接请使用遵循最小权限原则的专用数据库账户,并验证 TLS 证书。

PostgreSQL 角色示例:

CREATE ROLE schema_reader LOGIN PASSWORD 'use-a-secret-manager';
GRANT CONNECT ON DATABASE appdb TO schema_reader;
GRANT USAGE ON SCHEMA public TO schema_reader;

元数据的可见性因 PostgreSQL 提供商和数据库策略而异。仅授予检查所需的额外目录或对象权限;除非环境有要求,否则避免授予行级 SELECT 权限。

故障排除

服务立即退出

检查 IDE 的 MCP 日志。DATABASE_URL 为必填项,生产模式还要求 ALLOWED_TABLES 的值非空。

未发现任何表或视图

确认 DATABASE_SCHEMA、表名的大小写是否完全一致、数据库权限,以及允许列表是否包含预期名称。

连接 URL 使用有效密码却仍然失败

对 URL 中的保留字符进行百分号编码,或使用密钥注入包装脚本。请勿在问题或日志中粘贴真实凭据。

找不到 uvx

按照 uv 的官方说明进行安装,或使用 pipx 安装此软件包,并将 mcp-secure-schema 用作命令。

启动命令时似乎卡住

这是 stdio MCP 服务的正常行为。它会等待标准输入中的 MCP 客户端,通常由 IDE 启动。

开发

仅在开发或测试服务时克隆仓库:

git clone https://github.com/Siddharth-coder13/secure_schema_mcp.git
cd secure_schema_mcp
uv sync --extra dev
uv run python tests/demo_database.py
DATABASE_URL="sqlite:///$PWD/test_schema.db" uv run mcp-secure-schema

运行测试套件:

uv run pytest

针对一次性数据库运行选择性启用的 PostgreSQL 集成测试。该测试会创建并删除一个随机命名的架构:

POSTGRES_TEST_DATABASE_URL='postgresql+psycopg2://user@localhost:5432/testdb' \
  uv run pytest tests/test_postgres_smoke.py -v

测试会验证行数据隔离、允许列表行为、已清理的错误信息、紧凑输出、关系、架构选择,以及锁定的生产命名空间。

发布检查清单

维护者应更新 pyproject.toml 和 server.json 中对应的版本,运行完整的 SQLite 和 PostgreSQL 测试套件,使用 uv build --no-sources 构建,验证从 wheel 安装,然后发布到 PyPI,最后再将 server.json 发布到 MCP Registry。

许可证

根据 Apache License 2.0 授权。请参阅 LICENSE 和 NOTICE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。