NLP数据库连接服务

NLP Database是一个安全、只读的桥梁,允许AI代理通过自然语言探索数据库模式和查询数据,适用于需要数据库访问的AI应用场景。

  • by Lisito11
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 Lisito11/nlp-database-mcp

使用说明

🗄️ NLP数据库MCP服务器

使用模型上下文协议(MCP)安全直观地将LLM连接到SQL数据库。 NLP数据库 充当一个安全的只读桥梁,允许AI代理使用自然语言探索模式和查询数据。


🚀 主要特点

  • 只读安全:严格的正则表达式验证仅确保 SELECT 和 WITH 语句被执行。
  • 智能护栏:自动 LIMIT 500 在所有查询上,以防止系统膨胀。
  • 通用兼容性:原生支持PostgreSQL、MySQL、SQL Server和SQLite。
  • 代理优化:旨在提供描述性错误,帮助LLM自我纠正。
  • 演出:5分钟模式缓存,以减少数据库开销。

用法示例

一旦服务器连接到您的LLM(Claude、Gemini等),代理就可以访问两个主要工具: get_schema 和 execute_query.

典型工作流程

  1. 探索:用户会问这样的问题: “上个月有多少用户注册?”
  2. 架构检查:LLM会自动调用 get_schema 了解表名和列。
  3. 查询执行:LLM生成SQL查询并调用 execute_query.
  4. 自然反应LLM接收数据并将其翻译成简单的英语或西班牙语。

交互示例

用户:

“按总销售收入列出前三名产品。”

LLM(内部思维过程):

  1. 呼叫 get_schema 查找相关表(查找 products 和 orders).
  2. 生成SQL: SELECT p.name, SUM(o.amount) FROM products p JOIN orders o ON p.id = o.product_id GROUP BY p.name ORDER BY 2 DESC LIMIT 3.
  3. 呼叫 execute_query 使用生成的SQL。

LLM回复:

“收入排名前三的产品是:

  1. 企业订阅 ($50,200)
  2. 专业许可证 ($32,150)
  3. 基础方案 ($12,400)"

可用工具

工具 参数 说明
get_schema (无) 返回所有表、其列和数据类型的列表。
execute_query sql_query 执行保险 SELECT 语句,并以JSON格式返回结果。

🛠️ 1.安装和驱动程序

步骤1:克隆存储库

git clone https://github.com/your-repo/nlp-database.git
cd nlp-database

步骤2:安装依赖项

您可以直接安装依赖项或使用虚拟环境(建议隔离)。

选项A:使用虚拟环境(推荐)

python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -r requirements.txt

选项B:直接安装

pip install -r requirements.txt

步骤3:安装数据库驱动程序

仅安装特定数据库所需的驱动程序:

  • PostgreSQL: pip install psycopg2-binary
  • MySQL: pip install pymysql
  • SQL Server: pip install pyodbc
  • SQLite:已包含在Python标准库中。

🔗 2.连接字符串(DATABASE_URL)

数据库 连接字符串格式
PostgreSQL postgresql://user:pass@localhost:5432/dbname
MySQL mysql+pymysql://user:pass@localhost:3306/dbname
SQL Server mssql+pyodbc://user:pass@server/db?driver=ODBC+Driver+17+for+SQL+Server
SQLite sqlite:///C:/absolute/path/to/database.db

⚙️ 3.客户端配置

A.克劳德代码(CLI)

claude mcp add nlp-database -- python C:/path/to/nlp_database.py --env DATABASE_URL="your_connection_string"

B.Gemini CLI

将此添加到您的 ~/.gemini/settings.json:

{
  "mcpServers": {
    "nlp-database": {
      "command": "python",
      "args": ["C:/path/to/nlp_database.py"],
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost/db"
      }
    }
  }
}

C.谷歌反重力

找到您的 mcp_config.json (通常在 ~/.gemini/antigravity/):

{
  "mcpServers": {
    "nlp-database": {
      "command": "python",
      "args": ["C:/path/to/nlp_database.py"],
      "env": {
        "DATABASE_URL": "mssql+pyodbc://user:pass@server/db?driver=ODBC+Driver+17+for+SQL+Server"
      }
    }
  }
}

D.开放式代码

编辑 %USERPROFILE%\.opencode\opencode.jsonc:

{
  "mcp": {
    "nlp-database": {
      "type": "local",
      "command": "python",
      "args": ["C:/path/to/nlp_database.py"],
      "enabled": true,
      "environment": {
        "DATABASE_URL": "mysql+pymysql://user:pass@localhost/db"
      }
    }
  }
}

E.克劳德桌面

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "nlp-database": {
      "command": "python",
      "args": ["C:/path/to/nlp_database.py"],
      "env": {
        "DATABASE_URL": "sqlite:///C:/data/prod.db"
      }
    }
  }
}


这是一个旨在强调隐私和易于使用的本地模型的部分。您可以将其插入到 安全.


使用本地模型运行(100%私有)

为了最大限度地保护隐私,您可以配对 NLP数据库 拥有当地法学硕士学位。这确保了您的数据库模式和查询结果 永远不要离开你的机器.

使用Ollama+Claude桌面/OpenCode

  1. 安装Ollama:从下载 ollama.com.
  2. 拉一个模型:SQL生成的推荐模型有 llama3.1, codellama,或 qwen2.5-coder.
ollama run llama3.1

  1. 配置您的客户端:将MCP客户端指向本地Python脚本,如 客户端配置 部分。
  2. 选择本地模型:在您的客户端(如OpenCode或本地就绪编辑器)中,选择您的Ollama端点(通常 http://localhost:11434)作为提供者。

为什么要去当地?

特征 本地模型 云模型(OpenAI/Anthropic)
数据隐私 🔒 总计。数据保留在磁盘上。 🌐 数据发送到第三方服务器。
成本 💰 自由。使用自己的GPU/CPU。 💳 按代币支付。
互联网 🔌 非必需。脱机工作。 🌐 必修的。
延迟 ⚡ 这取决于你的硬件。 ☁️ 取决于API响应时间。

🔒 安全性:专用只读用户

始终使用受限制的数据库用户。以下是如何创建一个:

PostgreSQL示例:

CREATE USER nlp_readonly WITH PASSWORD 'secure_password';
GRANT CONNECT ON DATABASE my_db TO nlp_readonly;
GRANT USAGE ON SCHEMA public TO nlp_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO nlp_readonly;


📝 配置选项

环境变量 默认值 描述
DATABASE_URL 必需 SQLAlchemy连接字符串
MAX_RESULT_ROWS 500 最大行数返回到LLM。
QUERY_TIMEOUT 30 最大执行时间(秒)。
DB_ECHO_SQL false 允许将原始SQL查询记录到控制台。

🤝 贡献

这是一个开源项目,我希望你能帮助它变得更好!无论你是Python专家、数据工程师,还是刚开始学习MCP,我们都欢迎你的贡献。

如何提供帮助:

  • 通过以下方式报告错误或建议功能 问题.
  • 改进文档。
  • 添加对更多数据库引擎的支持。
  • 提交 拉取请求 随着你的进步。