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

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

Cherry Studio 通过 MCP 对接思源笔记

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

image

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

但在寻求办法的过程中,另一个 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

  • 思源笔记

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

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

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

相关帖子

欢迎来到这里!

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

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

    刚才又发现一个大问题,这篇文章的 MCP Server 搜出来的中文是编码形式 ,大模型读不懂 🤣

    各位大佬有办法解决吗 🤣

    2 回复
  • 其他回帖
  • B3000Kcn via Android

    image.png

    是这样的

    我尝试用 cusor 改造这个项目但是失败了 😂 无论怎么调整都是编码形式

    1 回复
  • ZBS 1 评论

    这个错误信息表明你请求的内容超出了模型的最大上下文长度限制。具体来说:

    最大上下文长度:当前模型的最大上下文长度是 65,536 个 token(token 可以理解为单词或字符的片段)。
    你的请求:你请求的内容长度为 117,634 个 token,远远超过了模型的限制。
    可能的原因
    查询的内容过大:你尝试查询的 /每日工作/2025/3 月 路径下的内容可能包含大量文本或数据,导致总 token 数超过了限制。
    查询方式问题:如果查询返回了过多的数据(例如,大量笔记或记录),也可能导致 token 数超标。

    这个咋整啊

    1 回复
    { "message": "400 This model's maximum context length is 65536 tokens. However, you requested 117874 tokens (117874 in the messages, 0 in the completion). Please reduce the length of the messages or completion.", "status": 400, "error": { "message": "This model's maximum context length is 65536 tokens. However, you requested 117874 tokens (117874 in the messages, 0 in the completion). Please reduce the length of the messages or completion.", "type": "invalid_request_error", "param": null, "code": "invalid_request_error" }, "code": "invalid_request_error", "param": null, "type": "invalid_request_error" }
    ZBS
  • B3000Kcn 1

    image.png

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

    1 回复
  • 查看全部回帖