SQLite MCP服务器项目(FastMCP)
一个学习如何通过MCP服务器查询LLM的SQLite数据库的项目。使用FastMCP进行简单的Python实现。
这是MCP吗?
这 模型上下文协议(MCP) 它是一个开放的标准,允许大语言模型(LLM)与外部数据源和工具进行通信。在这个项目中,我们使用MCP让LLM访问SQLite数据库。
概述:系统如何运作?
申请人(即运行AI(LLM)的程序)可以
- 请求 MCP 服务器的工具概述:客户端会询问服务器提供哪些工具。Protocol Message 的方法是
tools/list
- 使用工具:之后,客户端可以通过使用工具
tools/call使用的方法。
- (列出更改)
tools/list_changed
MCP 协议 https://modelcontextprotocol.io/specification/2025-03-26/server/tools#message-流量)
探索过程
sequenceDiagram
participant Client as Client (z.B. Claude)
participant Server as Server
Note over Client,Server: Erkundung
Client->>Server: tools/list
Server-->>Client: Liste der tools
Note over Client,Server: Updates
Server-->>Client: tools/list_changed
Client->>Server: tools/list
Server-->>Client: Updated tools调用过程
sequenceDiagram
participant User as Benutzer
participant LLM as LLM
(z.B. Sonnet 4.5)
participant Client as Client
(z.B. Claude Desktop)
participant Server as Server
participant App as Programm
(z.B. Datenbank)
User->>LLM: Anfrage in
natürlicher Sprache
LLM->>LLM: wählt tool anhand Kommentar aus
LLM->>Client: tool Name??
Note over Client,Server: Aufruf per stdio
Client->>Server: tools/call
Note over Server,App: Aufruf per REST API
Server->>App: HTTP GET
App-->>Server: HTTP RESPONSE
Server-->>Client: Tool result als JSON RPC
Client-->>LLM: ??
LLM-->>User: für Menschen
aufbereitetes Ergebnis
服务器的响应通过JSON RPC作为工具结果传输。 这些可以是文本,音频,图像或嵌入式。
以下是文本示例 https://modelcontextprotocol.io/specification/2025-03-26/server/tools#text-内容
{
"type": "text",
"text": "Tool result text"
}我们举个具体的数据库示例。
graph TB
User[👤 Benutzer] -->|Frage in natürlicher Sprache| Claude[🤖 Claude Desktop]
Claude -->|MCP Protokoll| Server[🔧 MCP Server
FastMCP]
Server -->|SQL Query| DB[(📊 schule.db
SQLite)]
DB -->|Ergebnis| Server
Server -->|JSON Daten| Claude
Claude -->|Antwort| User
style Claude fill:#e8e8e8,stroke:#000,stroke-width:3px,color:#000
style Server fill:#c0c0c0,stroke:#000,stroke-width:3px,color:#000
style DB fill:#888,stroke:#000,stroke-width:3px,color:#fff详细的沟通流程
sequenceDiagram
participant U as 👤 Benutzer
participant C as 🤖 Claude
participant M as 🔧 MCP Server
participant D as 📊 Datenbank
U->>C: "Zeige alle Schüler aus Klasse XY"
C->>C: Analysiere Anfrage
C->>M: Tool-Aufruf: query_database()
Note over C,M: MCP Protokoll (JSON-RPC)
M->>M: Validiere Query (nur SELECT)
M->>D: SELECT * FROM schueler WHERE klasse='XY'
D->>M: Ergebnis-Rows
M->>M: Konvertiere zu JSON
M->>C: JSON Antwort
C->>C: Antwort in Chat-Nachricht umsetzen
C->>U: "Hier sind die Schüler aus XY: ..."项目结构
sqlite-mcp/
├── src/
│ └── index.py # Der MCP-Server Code (Python)
├── create_database.py # Script zum Initialisieren der Datenbank
├── requirements.txt # Python Abhängigkeiten
├── pyproject.toml # Python Projekt-Konfiguration
└── schule.db # Die SQLite-Datenbank (wird erstellt)示例数据库
数据库 schule.db 包含四个表格:
1. 舒勒
- 包含有关学生的信息(姓名,班级,出生日期,电子邮件)
- 10个不同班级的学生
2. 老师
- 关于教师的信息(姓名,专业,房间)
- 5 不同学科的教师
3. 课程
- 课程信息(姓名,老师,房间,时间表)
- 5个不同的课程
4. 笔记
- 学生在不同课程的成绩
- 各种类型:闭语,口头笔记,家庭作业
安装说明:SQLite MCP Server (FastMCP)
快速启动指南
0.Git回购克隆
在项目文件夹中打开 PowerShell 有管理员权限 并导出:
git clone https://github.com/FlowTheTensor/SQLite-mit-MCP.git
cd SQLite-mit-MCP创建虚拟环境(推荐)
python -m venv venv
.\venv\Scripts\Activate.ps12、安装依赖关系
pip install -r requirements.txt这将安装FastMCP和所有必要的Python软件包。
创建数据库(如果没有 schueler.db 则可选)
python create_database.py您应该看到消息:“✓数据库创建成功”
3.1 手动查询数据库
import sqlite3
conn = sqlite3.connect("schule.db")
cursor = conn.cursor()
# Abfrage ausführen
cursor.execute("SELECT * FROM schueler LIMIT 10")
# Alle Zeilen holen
rows = cursor.fetchall()
# Spaltennamen aus dem Cursor
spalten = [description[0] for description in cursor.description]
print(spalten)
# Ergebnisse ausgeben
for row in rows:
print(row)
conn.close()4. 集成到 Claude Desktop
自动配置(推荐):
只需运行配置脚本:
python generate_config.py该脚本将显示您的配置并将其保存到 claude_desktop_config.json.
然后:
- 进入 Claude 桌面 下方的链接到您的用户图标 (如果需要, 最大化窗口)
- 那里
Einstellungen - 在
Entwickler在Config bearbeiten - 打开文件
claude_desktop_config.json使用文本编辑器 - 从生成的内容复制
claude_desktop_config.json进入
______________________________________________________________________
重要 : Claude Desktop 需要 绝对Pfade 相对路径不起作用。
5. 重新启动 Claude 桌面
- 通过任务管理器关闭 Claude Desktop 并重新启动 Claude Desktop。
- 现在,Claude 中的 MCP 服务器应该可用,并在
running站起来。
6.测试
问Claude一个问题,比如:
Welche Schüler gibt es in der Datenbank?Claude现在应该可以查询数据库了!
试用问题示例
很简单:
- “显示所有学生”
- “有哪些老师?”
- “列出所有课程”
资金:
- “显示所有10A级学生”
- “Max Mustermann有什么成绩?”
- “谁教计算机科学?”
高级 :
- 《安娜·施密特的平均分》
- “哪些学生在数学中有一个逗号前面的1?”
- “显示所有学生名称和课程名称的成绩单”
了解数据库结构
数据库有四个表:
📚 舒勒学生信息
- ID, 名字, 姓氏, 类, 出生日期, 电子邮件
👨🏫 老师教师信息
- id,名字,姓氏,门,空间
📖 课程课程信息
- ID,课程名称,教师ID,空间,工作日,时间
📝 笔记: 音符
- id、schuel_id、kurs_id、注释、数据、艺术
常见问题
克劳德回答,但没有数据库访问权限? 服务器配置不正确或 Claude 没有重新启动
“ModuleNotFoundError:没有名为'fastmcp'”Fehler的模块? → pip install -r requirements.txt 执行 → 确保 venv 已启用,或在配置中使用 venv-Python 路径
数据库是空的? → python create_database.py 执行
找不到 Python 命令? →尝试 py 而非 python 确保Python已安装
背景发生了什么?
- 你问Claude一个问题
- Claude意识到需要数据库信息
- Claude 调用其中一个工具:
- list_tables 有哪些表格? - describe_table 一张表怎么样? - query_database 执行 SQL 查询
- MCP 服务器执行查询
- 克劳德得到结果并回答你
实验任务
- 向数据库提问5个问题
- 显示所有表格的结构
- 问一个科目中最好的学生
- 让 Claude 创建包含多个表的复杂查询
- 实验聚合(平均值,数量等)
祝你好运! 🚀
