Cherry Studio 通过只读 SQLite MCP 对接思源笔记

这篇帖子是上篇帖子的续集:

Cherry Studio 通过 MCP 对接思源笔记

评论区的朋友提醒了我一个大问题:

image

这两天想了很多办法,最终确认,至少在 Cherry Studio 里,官方给的 SQLite MCP 示例(就是上篇帖子里那个)没办法从根源上禁止修改和增删行为。

但在寻求办法的过程中,另一个 MCP Server 引起了我的注意:

https://github.com/hannesrudolph/sqlite-explorer-fastmcp-mcp-server

image

它只提供了三个工具:

  • read_query(查询)
  • list_tables(列出表名)
  • describe_table(描述表)

根本就没有修改和增删内容的功能。

这不开搞?

然后一通搞就搞通了。

先看效果:

image

我让它加一个字段,它却用的是查询工具,然后反馈没有权限。

这下彻底放心用了!

下面是教程部分。


1. 安装 uv 和 node.js

具体参考上篇,就不赘述了。

虽然 node.js 在这个 MCP 里不是必须的,但顺便装了吧,除非你不想用别的 MCP 了。

2. 安装 fastmcp

这个项目只多一个依赖:fastmcp==0.4.1

直接 pip 就行了:

# 1. 打开 Powershell # 2. 输入下面的命令 pip install fastmcp==0.4.1

注意!这里必须开代理,否则拉不下来!

3. 准备 MCP Server 本体

这个 MCP Server 和上篇里的不一样,要事先准备。

点这个链接应该就能下载了:

https://github.com/hannesrudolph/sqlite-explorer-fastmcp-mcp-server/archive/refs/heads/main.zip

下载不了就去项目仓库(开头提到的 GitHub 链接)里下载:

image

然后解压出来,找到里面的 sqlite_explorer.py,记下它的路径。

4. 添加 MCP 服务器

有了上篇的基础,这篇就讲简单点。

4.1 命令框

uv

上篇说只支持 uvx,这次发现好像 uv 也支持。

然后上篇要用绝对路径的原因找到了,其实是 Cherry Studio 的环境变量没更新,重启 Cherry Studio 就好了。

4.2 参数框

run --with fastmcp --with uvicorn fastmcp run sqlite_explorer.py 路径 # 这行填你之前记下的路径

4.3 环境变量框

SQLITE_DB_PATH=思源数据库路径 # 等于号后面换成你思源数据库路径,上篇讲了在哪

最后长这样:

image

点确定,应该就成了。

使用部分就不讲了,和上篇一样,把上篇的 MCP Server 换成这篇的就行了。

最后感谢热心网友的提醒 🙏

2025.03.19 更新

感谢评论区大神提供的方法!将 sqlite_explorer.py 中的第 96 行的 return [dict(row) for row in results if row is not None] 改成 return [str(dict(row)) for row in results if row is not None] 可以解决搜索结果里中文以编码形式呈现的问题。

改动前:

image.png

改动后:

image.png

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24982 引用 • 102914 回帖 • 1 关注
  • MCP
    5 引用 • 53 回帖
2 操作
B3000Kcn 在 2025-03-19 14:20:40 更新了该帖
B3000Kcn 在 2025-03-16 01:28:36 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • B3000Kcn 1

    image.png

    我这是 1.1.3 的,你看看是不是没升级的原因

    1 回复
  • 其他回帖
  • artcoreW

    @B3000Kcn 先感谢下作者做了这个方案,不过我尽可能地复制了过程之后发现依旧报错:
    更新服务器失敗:Error invoking remote method'mcp:update-server:McpErr:MCP error-32000:Connection closed

    • 以下步骤我都验证过,没有问题
      • uv 安装
      • nodejs 安装
      • 命令那个框我试过好几种填法,uvx 和 uv 都一样报错,填上 uvx 文件的路径也报错
      • 参数区按照上面的内容填上了服务器文件位置
      • 环境变量填上了数据库位置
      • cherry studio 更新到 1.1.8
    • 20250322154746456.png
    1 回复
  • Muu 2 赞同 1 评论

    这个是 sql 构建的问题(LLM) 那个 Py 代码只是执行了下 LLM 生成的 sql, 我改的那行只不过是将返回格式转义了下

    如果 LLM 生成的是 select * .... 那就有那一堆属性 如果 LLM 生成的是 select content 则就只有 content 的信息喽

    好的,明白了。
    openAI
  • 我问豆包,它是这样回答的。我也不是很懂哈。

    image.png

  • 查看全部回帖