欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > MCP Python SDK构建的**SQLite浏览器**的完整操作指南

MCP Python SDK构建的**SQLite浏览器**的完整操作指南

2025/4/29 20:10:27 来源:https://blog.csdn.net/weixin_41905135/article/details/147497729  浏览:    关键词:MCP Python SDK构建的**SQLite浏览器**的完整操作指南

以下是使用MCP Python SDK构建的SQLite浏览器的完整操作指南:


一、环境准备

  1. 安装依赖
# 安装MCP SDK及SQLite支持
pip install mcp sqlite3
  1. 创建测试数据库
sqlite3 test.db <<EOF
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT);
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
EOF

二、服务端开发

# sqlite_explorer.py
import sqlite3
from mcp.server.fastmcp import FastMCP, Context# 初始化MCP服务器
mcp = FastMCP("SQLite Explorer")@mcp.resource("schema://{database}")
def get_schema(database: str) -> str:"""获取数据库模式"""try:conn = sqlite3.connect(f"{database}.db")result = conn.execute("SELECT sql FROM sqlite_master").fetchall()return "\n".join(row[0] for row in result if row[0])except Exception as e:return f"Error: {str(e)}"@mcp.tool()
def execute_query(sql: str, ctx: Context) -> str:"""安全执行SQL查询"""try:# 限制DELETE/UPDATE操作if any(cmd in sql.upper() for cmd in ["DELETE", "UPDATE", "DROP"]):return "Error: Write operations are disabled"conn = sqlite3.connect("test.db")cursor = conn.execute(sql)# 返回格式化的结果if cursor.description:headers = [desc[0] for desc in cursor.description]rows = cursor.fetchall()return f"{headers}\n" + "\n".join(str(row) for row in rows)return "Query executed successfully"except Exception as e:return f"Error: {str(e)}"if __name__ == "__main__":mcp.run()

三、服务启动与测试

  1. 启动服务器
mcp dev sqlite_explorer.py
  1. 通过客户端交互
# client.py
from mcp.client.stdio import stdio_client
from mcp import ClientSessionasync def main():async with stdio_client() as (read, write):async with ClientSession(read, write) as session:# 获取数据库模式schema = await session.read_resource("schema://test")print("Schema:\n", schema)# 执行查询result = await session.call_tool("execute_query", {"sql": "SELECT * FROM users LIMIT 2"})print("Query Result:\n", result)asyncio.run(main())

四、核心功能说明

  1. 安全防护机制
  • 自动拦截危险操作(DELETE/UPDATE/DROP)
  • 限制最大返回行数(可在代码中添加LIMIT子句)
  • 使用参数化查询(示例中可扩展实现)
  1. 数据展示优化
# 在execute_query工具中优化输出格式
if cursor.description:headers = [desc[0] for desc in cursor.description]rows = cursor.fetchall()max_width = 20return ("| " + " | ".join(h.ljust(max_width) for h in headers) + " |\n" +"|-" + "-|-".join("-"*max_width for _ in headers) + "-|\n" +"\n".join("| " + " | ".join(str(v).ljust(max_width)[:max_width] for v in row) + " |"for row in rows)
)

五、高级功能扩展

  1. 数据库切换支持
@mcp.tool()
def switch_database(db_name: str) -> str:global current_dbif not os.path.exists(f"{db_name}.db"):return "Database not found"current_db = f"{db_name}.db"return f"Switched to {db_name}"
  1. 查询历史记录
from datetime import datetime
query_history = []@mcp.resource("history://last10")
def get_history() -> str:return "\n".join(f"{ts} | {query}" for ts, query in query_history[-10:])# 在execute_query中记录历史
query_history.append((datetime.now().strftime("%Y-%m-%d %H:%M"), sql))

六、使用场景示例

  1. 自然语言查询转换
用户请求 -> "显示最近注册的5个用户"
转换SQL -> "SELECT * FROM users ORDER BY id DESC LIMIT 5"
  1. 数据可视化对接
@mcp.tool()
def generate_chart(sql: str) -> Image:data = execute_query(sql)plt.figure()# 生成图表逻辑return Image(data=plot_to_bytes(), format="png")

通过以上实现,您已构建了一个具备完整CRUD功能、安全审计、历史追溯的SQLite浏览器服务。该服务可通过MCP协议无缝集成到各类LLM应用中,实现自然语言到结构化查询的安全转换。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词