项目简介

Conduit 是一个创新的应用,它将 Model Context Protocol (MCP) 服务器和客户端直接运行在用户的浏览器中。通过结合 Web Worker 作为 MCP 通信传输层、File System Access API 提供的本地文件系统访问能力,以及 Rust 编译为 WASM 实现的核心逻辑,Conduit 使得 AI 代理能够在不安装任何原生应用或无需逐文件上传的情况下,直接在浏览器中安全地操作用户本地文件。服务器在专用 Web Worker 中运行,确保不阻塞用户界面,并且其客户端可以通过添加更多工具来扩展功能。

主要功能点

  • 浏览器内运行的MCP服务器: 在 Web Worker 中运行 MCP 服务器,提供标准化的 JSON-RPC 接口供 LLM 客户端调用。
  • 本地文件系统访问: 利用 File System Access API 实现对用户本地文件的直接读取、搜索和编辑能力,无需云端同步。
  • Rust + WASM 核心: 核心文件系统操作逻辑(如文件索引、正则表达式搜索、替换等)由 Rust 实现并编译为 WebAssembly,提供高性能和安全性。
  • 工具与资源管理: 作为 MCP 服务器,它能够注册和执行多种工具(例如文件搜索、编辑工具),并管理本地文件作为可供 LLM 访问的资源。
  • 可扩展性: 客户端可轻松扩展,集成更多工具以提供更广泛的能力。
  • 安全与隔离: 通过浏览器沙箱和 Web Worker 机制,确保代理对文件系统的操作是受控和隔离的。

安装步骤

Conduit 是一个 Web 应用,你可以直接访问在线版本 https://conduit.amrit.sh 进行体验。

如果你希望在本地进行开发或部署,需要安装以下先决条件:

  1. Rust (stable) + Cargo: Rust 编程语言及其包管理器。
  2. Node.js 18+ (npm 或 pnpm): JavaScript 运行时环境和包管理器。
  3. 'wasm32-unknown-unknown' target: Rust 的 WebAssembly 编译目标。

本地开发环境设置:

# 第一次设置 Rust WASM 目标
rustup target add wasm32-unknown-unknown

# 克隆仓库
git clone https://github.com/abaveja313/conduit.git
cd conduit

# 安装 JavaScript 依赖 (选择一个)
pnpm i || npm i

# 构建 Rust crates
cargo build -p conduit-core
cargo build -p conduit-wasm --target wasm32-unknown-unknown --release

# 启动开发应用
pnpm dev || npm run dev

之后,你可以在浏览器中访问相应的开发服务器地址。

服务器配置

MCP 客户端需要配置服务器才能建立连接。Conduit 服务器在浏览器环境中通过 Web Worker 启动,其配置信息通常由客户端在启动时提供,指向 Web Worker 脚本。

以下是一个假设的 MCP 客户端配置示例(JSON 格式),用于连接到 Conduit 服务器:

{
  "serverName": "Conduit Browser Agent",
  "command": "webworker",
  "args": {
    "workerScriptPath": "/_next/static/chunks/worker.js",
    "initMessageType": "init",
    "readyMessageType": "ready"
  },
  "description": "连接到在浏览器 Web Worker 中运行的 Conduit MCP服务器。该服务器允许AI代理安全地访问本地文件系统资源和工具。"
}

参数注释:

  • 'serverName': 服务器的名称,例如 "Conduit Browser Agent"。
  • 'command': 指示 MCP 客户端使用 Web Worker 传输协议。
  • 'args': 启动 Web Worker 所需的参数。
    • 'workerScriptPath': Web Worker 脚本的相对路径。在 Next.js 构建的应用中,通常位于 '/_next/static/chunks/' 目录下。
    • 'initMessageType': 客户端向 Worker 发送的初始化消息类型,例如 "init"。
    • 'readyMessageType': Worker 成功初始化后向客户端发送的就绪消息类型,例如 "ready"。
  • 'description': 服务器的简要描述。

请注意:实际的 'workerScriptPath' 可能因项目构建配置而异,上述路径是一个常见示例。

基本使用方法

一旦 Conduit 服务器在 Web Worker 中启动并连接到 MCP 客户端,LLM 客户端即可通过 JSON-RPC 调用服务器提供的工具和访问资源。

例如,LLM 可能会通过 MCP 客户端调用一个文件系统工具来:

  1. 扫描目录: 请求服务器扫描用户授权的本地目录,获取文件列表及其元数据。
  2. 读取文件内容: 指定文件路径,请求服务器读取文件的部分或全部内容。
  3. 搜索文件: 使用正则表达式或 glob 模式在文件内容或路径中进行搜索。
  4. 编辑文件: 执行查找和替换操作来修改文件内容(需要用户授权)。

这些操作的调用都是通过标准化的 JSON-RPC 请求完成,并由 Conduit 服务器的 Rust+WASM 核心处理。

示例调用 (逻辑概念,非实际代码): 假设有一个 'echo' 工具(已在代码中实现): LLM客户端发送 JSON-RPC 请求:

{
  "jsonrpc": "2.0",
  "method": "tool/echo",
  "params": {
    "message": "Hello from LLM!",
    "repeat": 2
  },
  "id": 1
}

服务器执行操作并返回响应:

{
  "jsonrpc": "2.0",
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"echoed\":\"Hello from LLM! Hello from LLM!\",\"count\":2}"
      }
    ]
  },
  "id": 1
}

文件系统相关的工具逻辑在 'crates/conduit-core' 中,未来可能会在 'packages/server/src/mcp/tools' 中注册为可调用的 MCP 工具。

信息

分类

数据库与文件