mcp-observer-server 是一个MCP(模型上下文协议)服务器,用于监控文件系统事件,并向MCP客户端提供实时通知。它充当了本地文件系统与AI助手(如Claude Inspector)之间的桥梁,使它们能够自动响应文件更改。
注意: 这是我正在开发的一个文件监控MCP服务器的演示/概念验证。我看到有很多关于此类问题的问题、评论、问题和讨论,因此我想发布这个最小实现来分享我的方法。
MCP协议定义了一种资源订阅的概念,其中客户端可以请求在资源发生任何更改时收到通知,而服务器可以选择发送这些通知。以下是流程图:

协议规定客户端应随后向服务器发送读取请求以读取更改。(所有这些都是可选的)。但我发现这有点繁琐,涉及额外的步骤,我更希望我的资源更新通知描述更改内容。幸运的是,SDK提供了meta/_meta字段,你可以几乎发送任何想要的内容。所以我可能想发送更改的行数、更改的差异等。目前在这个演示中我没有实现这一点,我只是发送时间戳。(基本上除了最小的概念验证外,我已经把服务器中的其他东西都移除了。)此外,它只是运行在标准IO传输上,没有什么特别之处。
重要提示! 我还没有用任何“真实的”MCP客户端测试过——据我所知,很少有客户端实际上支持资源订阅,因为它本来就是可选的。然而,幸运的是,Inspector是一个非常好的客户端,你可以使用它来测试这个服务器。
演示说明:
uv安装依赖项(或者,用某种其他方式)。make start(使用uv)或运行npx @modelcontextprotocol/inspector uv run src/mcp_observer_server/server.py启动服务器。subscribe工具监控目录或文件,(或者,你可以运行“列出资源”,点击一个资源,然后点击“订阅”按钮来订阅它)。src/mcp_observer_server/watched.txt暴露一个名为watched.txt的文件(该文件被.gitignore忽略,所以你需要创建它),但你也可以订阅其他文件。你可以使用subscribe_default工具订阅此文件。watched.txt文件(或你订阅的任何文件),你应该在Inspector右下角面板中看到服务器的通知。这就是概念验证的建立。





🎉
MCP观察者服务器跟踪系统上的文件和目录更改,允许MCP客户端订阅这些事件并在文件创建、修改、删除或移动时采取行动(当前演示处理修改事件)。此服务器实现了完整的模型上下文协议规范,提供:
我试图解决的主要痛点是,除非Claude Code等自己接触文件并写入更改,否则它不知道你的仓库/项目中发生了什么。(你知道那些通知——“自上次读取以来文件已更改”?)拥有一个实际监控你在项目中做什么的客户端或编码助手,而你不必将每个任务委托给Claude,以便它知道发生了什么,对我来说非常有用。一些实际应用包括:
服务器实现具有精简的架构,优先考虑简单性、可靠性和可维护性。
简化结构
高效的状态管理
watched字典进行直接路径到会话的映射MCP协议集成
事件处理
call_soon_threadsafe实现线程安全通信通知系统
数据结构
watched将Path对象映射到ServerSession对象集工具API
subscribe和unsubscribe资源处理
事件处理
通知交付
实现达到了功能与简单性的良好平衡,从而产生了一个可靠且易于维护的代码库。