一个提供工具连接并操作各种数据库系统的模型上下文协议(MCP)服务器。
psycopg2-binarymysql-connector-pythonpyodbc# 克隆仓库
git clone <repository-url>
# 安装包
pip install -e .
服务器可以通过环境变量、配置文件或运行时提供的连接详情进行配置。
DB_CONFIG_PATH:指向JSON配置文件的路径DB_CONNECTIONS:连接ID的逗号分隔列表或包含连接详情的JSON字符串{
"connections": {
"sqlite_conn": {
"type": "sqlite",
"db_path": "/path/to/database.db"
},
"postgres_conn": {
"type": "postgres",
"host": "localhost",
"port": 25432,
"database": "mydatabase",
"user": "myuser",
"password": "mypassword"
}
}
}
# 使用默认设置运行
python -m db_mcp_server
# 指定配置文件
python -m db_mcp_server --config /path/to/config.json
# 设置日志级别
python -m db_mcp_server --log-level DEBUG
# 以Web服务器形式运行
python -m db_mcp_server.web_server
# 指定主机和端口
python -m db_mcp_server.web_server --host 0.0.0.0 --port 8000
# 指定配置文件和日志级别
python -m db_mcp_server.web_server --config /path/to/config.json --log-level DEBUG
add_connection:添加新的数据库连接test_connection:测试数据库连接list_connections:列出所有数据库连接remove_connection:移除数据库连接execute_query:执行SQL查询get_records:获取表中的记录insert_record:向表中插入记录update_record:更新表中的记录delete_record:删除表中的记录list_tables:列出数据库中的所有表get_table_schema:获取表的模式create_table:创建新表drop_table:删除表create_index:在表上创建索引drop_index:删除索引alter_table:修改表结构begin_transaction:开始事务commit_transaction:提交事务rollback_transaction:回滚事务{
"connection_id": "my_sqlite_db",
"type": "sqlite",
"db_path": "/path/to/database.db"
}
{
"connection_id": "my_sqlite_db",
"query": "SELECT * FROM users WHERE age > ?",
"params": [21]
}
{
"connection_id": "my_sqlite_db",
"table": "users",
"columns": [
{
"name": "id",
"type": "INTEGER",
"primary_key": true,
"nullable": false
},
{
"name": "name",
"type": "TEXT",
"nullable": false
},
{
"name": "email",
"type": "TEXT",
"nullable": true
}
]
}
{
"connection_id": "my_sqlite_db",
"table": "users",
"data": {
"name": "John Doe",
"email": "john@example.com"
}
}
# 运行所有测试
python -m unittest discover
# 运行特定测试文件
python -m unittest tests.test_sqlite
当作为独立的Web服务器运行时,其他LLM(如Llama 3)可以通过HTTP连接到数据库MCP服务器。服务器暴露以下端点:
/list_tools - GET或POST:返回所有可用工具及其描述和输入模式的列表/call_tool - POST:执行特定的数据库工具要使用此服务器与另一个LLM,让LLM生成对服务器的HTTP请求。这里是一个如何为像Llama 3这样的LLM构建提示的例子:
你可以通过向位于http://localhost:8000的数据库服务发送HTTP请求来与数据库交互。
该服务提供了以下端点:
1. 要获取可用工具列表:
发送一个POST请求到:http://localhost:8000/list_tools
2. 要执行数据库工具:
发送一个POST请求到:http://localhost:8000/call_tool
带有如下JSON主体:
{
"name": "tool_name",
"arguments": {
"param1": "value1",
"param2": "value2"
}
}
例如,要执行一个SQL查询,你会发送如下请求:
POST http://localhost:8000/call_tool
Content-Type: application/json
{
"name": "execute_query",
"arguments": {
"connection_id": "my_db",
"query": "SELECT * FROM users"
}
}
import requests
import json
# 数据库MCP服务器的基本URL
BASE_URL = "http://localhost:8000"
# 列出可用工具
def list_tools():
response = requests.post(f"{BASE_URL}/list_tools")
return response.json()
# 执行数据库工具
def call_tool(tool_name, arguments):
payload = {
"name": tool_name,
"arguments": arguments
}
response = requests.post(f"{BASE_URL}/call_tool", json=payload)
return response.json()
# 示例:列出数据库中的表
def list_tables(connection_id):
return call_tool("list_tables", {"connection_id": connection_id})
# 示例:执行SQL查询
def execute_query(connection_id, query, params=None):
return call_tool("execute_query", {
"connection_id": connection_id,
"query": query,
"params": params
})
# 示例:添加新的连接
def add_connection(connection_id, db_type, **kwargs):
args = {"connection_id": connection_id, "type": db_type}
args.update(kwargs)
return call_tool("add_connection", args)
MIT许可证 </中文翻译>