项目简介

Flowlang 是一个基于数据流概念的编程语言运行时和解释器,允许开发者通过连接不同的操作节点来构建程序。它最大的特色是支持在同一个工作流中集成使用 Rust, Python, JavaScript, Java 等多种语言编写的代码。

'flowmcp' 是 Flowlang 项目提供的一个专门的可执行文件,它实现了 Model Context Protocol (MCP) 服务器。通过 'flowmcp',开发者可以将 Flowlang 中定义的数据流工作流(Flow 程序)作为能力或“工具”暴露出去,供支持 MCP 协议的 LLM 客户端调用。这使得构建复杂的、多语言协作的 LLM 应用后端成为可能。

主要功能点

  • 工具执行 (Tool Execution): 接收 MCP 客户端的请求,执行 Flowlang 中定义的工作流(Flow Commands),并将执行结果返回给客户端。
  • 工具发现 (Tool Discovery): 提供接口供客户端查询服务器暴露的可用工具列表及其描述信息(如输入参数和输出)。
  • 能力声明 (Capability Declaration): 在初始化握手时,向客户端声明服务器支持的 MCP 协议版本和能力。
  • 多语言工具支持: 支持将使用 Rust, Python, JavaScript, Java 编写的函数或脚本封装成 Flowlang 工具并在 MCP 服务器中执行。
  • 数据流编排: 利用 Flowlang 强大的数据流编排能力,可以将多个工具调用、LLM 交互、数据处理逻辑等组合成复杂的工作流,并通过一个 MCP 工具入口暴露。
  • 标准化接口: 通过 JSON-RPC 标准协议与客户端通信,提供统一的交互接口。

安装步骤

Flowlang MCP 服务器可以通过构建项目源代码获得。你需要先安装 Rust 及其构建工具 Cargo。

  1. 克隆 GitHub 仓库:
    git clone https://github.com/mraiser/flow.git
    cd flow
  2. 构建项目(默认会生成 'flowmcp' 二进制文件):
    cargo build --release
    (使用 '--release' 参数进行优化构建。如果需要支持 Python, JavaScript 或 Java 编写的 Flow 工具,需要在构建时启用相应的 Cargo Feature,例如 'cargo build --release --features "python_runtime javascript_runtime"')
  3. 构建成功后,可在 'target/release/' 目录下找到 'flowmcp' 可执行文件。

服务器配置

MCP 客户端需要知道如何启动并连接到 MCP 服务器。对于基于 Stdio 协议的 MCP 服务器('flowmcp' 默认模式),客户端通常需要配置以下信息,以便启动 'flowmcp' 进程并通过其标准输入/输出进行通信。

一个典型的 MCP 客户端配置(非代码)可能包含:

  • 'server_name': 服务器的友好名称,例如 "Flowlang MCP Server"
  • 'command': 启动 MCP 服务器进程的命令路径,例如 '/path/to/your/flow/target/release/flowmcp'
  • 'args': 传递给服务器进程的命令行参数列表,例如 '[]' (flowmcp 默认监听 stdin/stdout)
  • 'transport': 使用的传输协议,例如 '"stdio"'

请注意,MCP 客户端需要配置的是 启动服务器进程 的命令和参数,而不是 MCP 协议本身的请求参数。具体的路径 '/path/to/your/flow/target/release/flowmcp' 需要替换为你实际的 'flowmcp' 可执行文件路径。

此外,Flowlang 运行时通常需要访问包含 Flow 定义文件(JSON 格式,通常存放在 'data/' 目录下)的目录。启动 'flowmcp' 的当前工作目录或配置 Flowlang 的数据目录需要指向包含这些定义文件的位置,以便服务器能够加载可用的工具。

基本使用方法

Flowlang MCP 服务器通常不是直接由用户手动操作的,而是由支持 MCP 协议的 LLM 客户端(如某些 AI 代理框架、聊天应用等)自动连接和交互。

客户端连接服务器后,会遵循 MCP 协议发送 JSON-RPC 请求:

  1. 初始化 (Initialize): 客户端发送 'initialize' 请求来与服务器建立连接并交换能力信息。
  2. 列出工具 (List Tools): 客户端发送 'tools/list' 请求获取服务器提供的工具列表及其基本信息。
  3. 获取工具描述 (Describe Tool): 客户端可能会发送额外的请求(在 Flowlang 中可能由 'tools/list' 的结果包含或通过内部 Flow 命令实现)来获取某个工具详细的 JSON Schema 描述。
  4. 调用工具 (Call Tool): 客户端发送 'tools/call' 请求来执行特定的 Flowlang 工具。请求中会包含工具的名称(通常是 'library-control-command' 的格式,例如 'testflow-testflow-test_add')以及调用所需的参数。
  5. 服务器响应: 服务器执行对应的 Flowlang 工作流,并将结果作为 JSON-RPC 响应返回给客户端。如果 Flow 执行出错,服务器会返回一个包含错误信息的响应。

例如,一个 MCP 客户端可能会发送如下 JSON-RPC 请求给正在运行的 'flowmcp' 进程的标准输入:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "testflow-testflow-test_add",
    "arguments": { "a": 10, "b": 20 }
  },
  "id": 123
}

'flowmcp' 服务器会解析这个请求,查找并执行 'testflow' 库中 'testflow' Control 下的 'test_add' 命令,并将参数 '{"a": 10, "b": 20}' 传递给它。如果执行成功,服务器会将 Flowlang 返回的结果封装在 JSON-RPC 响应中发送到标准输出:

{
  "jsonrpc": "2.0",
  "result": {
    "content": [
      { "type": "text", "text": "{\"result\":30}" }
    ]
  },
  "id": 123
}

(注意:MCP 协议中工具调用的结果通常包含在 'content' 数组中,如示例所示。)

Flowlang MCP 服务器的强大之处在于,'test_add' 可以是一个简单的内置操作,也可以是一个复杂的 Flow 工作流,其中包含调用 Python 脚本、访问数据库、与其他服务交互等多种逻辑,而这一切都被抽象为一个可通过 MCP 标准调用的“工具”。

信息

分类

AI与计算