SQLite支持的CRUD服务

一个基于SQLite数据库的MCP服务器,提供完整的CRUD功能,适用于AI/代理系统数据暴露和模块化后端服务开发。

  • by prsingh1982
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 prsingh1982/mcp-server

使用说明

MCP服务器——支持SQLite的CRUD服务

灵感来自Felix Pappe的Medium文章

这个项目演示了如何构建一个简单而强大的 MCP(模型上下文协议)服务器 它连接到SQLite数据库并提供完整的 CRUD(创建、读取、更新、删除) 功能。
它被设计为一个教学示例,涵盖了工具公开服务和数据访问的概念模型和实际实现。


🎯 为什么这个项目很重要

现代应用程序通常需要以标准化、机器可读的方式公开数据和操作。通过组合:

  • 这 MCP协议 (允许客户端在统一界面中请求工具/数据),以及
  • 用于持久性的轻量级嵌入式数据库(SQLite),

你会得到一个易于采用、扩展和集成的模式。

用例包括:

  • 将内部数据模型暴露给AI/代理系统
  • 构建提供数据和操作的模块化后端服务
  • 学习如何在一个内聚包中实现服务接口+数据层+工具层

🧠 关键概念

模型上下文协议(MCP)

在较高层次上,MCP定义了主机(例如AI代理、助手或UI)如何与提供工具和/或资源的服务器交互。服务器公开端点或方法,主机可以调用它们来获取数据、执行操作等。
在这个项目中,服务器提供了通过CRUD操作与持久数据交互的工具。

CRUD(创建、读取、更新、删除)

持久数据存储的基本操作:

  • 创建:插入新记录
  • 阅读:查询或获取现有记录
  • 更新:修改现有记录
  • 删除:删除记录
    SQLite数据库为这些操作提供了后备存储。

SQLite

一个轻量级的嵌入式关系数据库引擎。非常适合简单的服务、演示、概念验证,或整个数据库服务器过度使用的情况。
在该项目中,数据库可能存储在本地文件中(例如。, data.db)并通过标准SQLite库访问。


项目结构

mcp-server/
├── .gitignore
├── .python-version
├── README.md
├── main.py           # application entrypoint
├── pyproject.toml    # project metadata / build tool config
├── server.py         # MCP server implementation (CRUD + DB access)
└── uv.lock           # lockfile (tool-specific)

注意:上述文件名直接取自存储库。有关应用程序的启动方式,请参阅main.py,有关服务器和CRUD逻辑,请参阅server.py。


每个文件的作用(快速参考)

  • main.py——存储库入口点。运行此文件以启动MCP服务器(它引导应用程序、配置和服务器循环)。
  • server.py——包含服务器实现:MCP工具注册、请求处理、数据访问功能和CRUD操作。这是服务器连接到SQLite并公开工具/端点的地方。
  • pyproject.toml——声明项目元数据和依赖关系(由Poetry/PEP 517工具等现代Python工具使用)。使用此功能查看所需的包和工具配置。
  • .python version——表示项目环境的预期python运行时版本(与pyenv一起使用时有用)。
  • .gitignore——不应提交的文件和文件夹(虚拟环境、数据库文件、缓存等)。
  • uv.lock——存储库中包含的特定于工具的锁文件;与创建它的工具保持同步。
  • README.md--此文档文件。

开始(运行代码)

  1. 克隆仓库
git clone https://github.com/prsingh1982/mcp-server.git
cd mcp-server
  1. 创建虚拟环境(推荐)
python -m venv .venv
source .venv/bin/activate    # macOS / Linux
.venv\Scripts\activate       # Windows
  1. 安装依赖项

检查pyproject.toml以获取依赖关系说明。如果pyproject.toml列出了Poetry等工具的依赖项,请通过该工具进行安装;否则,如果存在requirements.txt或可安装列表,请使用pip安装需求。 示例(如果pyproject使用Poetry):

poetry install

或者,如果你更喜欢pip,并且项目有一个简单的依赖列表,你可以手动pip安装所需的包。

  1. 启动服务器
python main.py

服务器应启动并绑定到代码中定义的地址/端口。检查main.py的控制台输出,以获取确切的主机/端口。


服务器的工作原理(概念概述)

  • MCP服务器:代码库实现了一个小型MCP风格的服务器(模型/方法/工具注册表),该服务器注册并公开了一组工具或处理程序。客户端调用这些工具来执行操作。
  • SQLite持久性:服务器使用本地SQLite数据库来持久化数据。SQLite是嵌入式的(基于文件),不需要单独的数据库服务器——数据库文件通常存储在磁盘上(代码将创建或打开它)。
  • CRUD操作:服务器对SQLite备份存储执行创建、读取、更新和删除操作。这些是客户端用来操纵数据的主要“工具”。
  • 入口点和服务器循环:main.py引导配置并启动服务器循环。server.py包含传入请求的处理程序以及将工具调用转换为DB操作和响应的逻辑。

用法(检查代码中的确切端点/工具)

存储库在server.py中公开了工具和处理程序。要了解可用的工具/端点及其有效载荷格式:

  1. 打开server.py,查找注册工具或定义路由/处理程序的函数。典型线索:
  • 装饰器、注册调用或工具字典/注册表。
  • 函数名,如create_,得到_,更新_,删除_.
  1. 阅读main.py,了解服务器是如何启动的,以及它是否设置了主机、端口或任何安全/配置标志。

示例(通用):服务器可能为以下对象提供功能或端点:

  • 创建记录(例如,接受JSON有效载荷)
  • 读取/列出记录
  • 更新现有记录(按id)
  • 删除记录(按id)

因为准确的函数名和有效载荷模式存在于server.py中,请查阅该文件以获取准确的使用示例和有效载荷契约。


数据库注释

  • SQLite文件:DB文件(通常是data.DB或类似文件)可能会在服务器首次运行时自动创建。检查server.py以获取DB文件名和任何模式创建逻辑。
  • 模式创建:在server.py中查找初始化模式的CREATE TABLE SQL或ORM/迁移逻辑。如果存在,服务器将自动设置表或提供辅助函数来初始化数据库。
  • 备份和迁移:对于生产或多开发人员工作流程,如果您不再使用SQLite,请考虑添加模式迁移工具(例如Alembic)和数据库备份计划。

开发技巧

  • 使用.Python版本中的Python版本来匹配repo作者的环境(pyenv用户可以依赖它)。
  • 要快速迭代:
    • 运行python main.py,并使用curl或REST客户端(如果服务器公开HTTP)或通过服务器期望的MCP客户端调用服务器工具。
    • 在server.py中添加日志语句以监视传入的工具调用和SQL语句。
  • 如果更新依赖关系,请使uv.lock和pyproject.toml与您的环境保持同步。

扩展项目

您可以从多个方向扩展存储库:

  • 添加明确的API文档-如果服务器公开HTTP端点,则创建API.md或集成OpenAPI/Swagger文档。
  • 添加测试——围绕CRUD函数和数据库初始化添加单元测试和集成测试(使用pytest)。
  • 添加CI——创建GitHub Actions工作流,以在推送/PR上运行测试并验证代码质量/格式。
  • 添加迁移——添加Alembic(或类似工具)来处理随着时间的推移而发生的模式更改。
  • 添加身份验证——如果暴露给不受信任的客户端,则使用身份验证/授权层保护CRUD工具。

故障排除和提示

  • 如果服务器无法启动,请检查main.py中的控制台输出是否有异常。典型的问题包括创建SQLite文件时缺少依赖关系或权限问题。
  • 如果找不到DB模式,请在server.py中搜索CREATE TABLE等SQL字符串或ORM构造函数的调用。
  • 如果你计划运行多个实例或远程部署,SQLite不适合并发多编写器设置——考虑迁移到PostgreSQL或另一个客户端/服务器RDBMS。