mcpField
W
workflows-mcp-server

workflows-mcp-server

本地服务
github.com/cyanheadsAI 与智能体313 天前更新

关于 workflows-mcp-server

workflows-mcp-server 是供 LLM Agent 使用的 YAML 工作流库,可复用由 MCP 服务和工具调用组成的步骤序列。它支持带版本的永久工作流和临时草稿,并自动索引文件变更。

主要功能

  1. 01列出并筛选工作流
  2. 02获取带版本的定义
  3. 03创建永久及临时 YAML
  4. 04经用户确认后删除
  5. 05自动监视和索引文件
  6. 06支持 stdio 与 Streamable HTTP

适用场景

  1. 01按类别或标签查找工作流
  2. 02复用带版本的 MCP 调用序列
  3. 03先起草工作流再转为永久版本
  4. 04编辑 YAML 文件以更新工作流库

MCP 相关

提供五种 MCP 工具,用于列出、获取、创建和删除 YAML 工作流。工作流描述 MCP 服务和工具调用序列;服务支持 stdio 和 Streamable HTTP。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cyanheads-workflows": {
"command": "npx",
"args": [
"-y",
"@cyanheads/workflows-mcp-server"
],
"env": {
"WORKFLOWS_DIR": "<WORKFLOWS_DIR>",
"GLOBAL_INSTRUCTIONS_PATH": "<GLOBAL_INSTRUCTIONS_PATH>",
"WATCHER_DEBOUNCE_MS": "<WATCHER_DEBOUNCE_MS>",
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>",
"MCP_TRANSPORT_TYPE": "<MCP_TRANSPORT_TYPE>",
"MCP_HTTP_HOST": "<MCP_HTTP_HOST>",
"MCP_HTTP_PORT": "<MCP_HTTP_PORT>",
"MCP_HTTP_ENDPOINT_PATH": "<MCP_HTTP_ENDPOINT_PATH>",
"MCP_AUTH_MODE": "<MCP_AUTH_MODE>"
}
}
}
}
启动命令npx -y @cyanheads/workflows-mcp-server
需要配置的环境变量
WORKFLOWS_DIRAbsolute or relative path to the workflows root directory.
GLOBAL_INSTRUCTIONS_PATHPath to the global instructions markdown file. Derives from WORKFLOWS_DIR when not set.
WATCHER_DEBOUNCE_MSMilliseconds to debounce filesystem change events before rebuilding the index.
MCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_TRANSPORT_TYPESelects the HTTP transport.
MCP_HTTP_HOSTThe hostname for the HTTP server.
MCP_HTTP_PORTThe port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.
MCP_AUTH_MODE密钥Authentication mode to use: 'none', 'jwt', or 'oauth'.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@cyanheads/workflows-mcp-server0.4.2

工具

5

收录的工具列表 · 更新于 3 天前

参数类型必填说明
tagsarray否筛选出具有所有这些标签的工作流(AND 匹配,不区分大小写;每个标签会去除首尾空白)。省略此项可跳过标签筛选。
querystring否针对每个工作流的名称和描述进行不区分大小写的关键词筛选。名称或描述任一字段包含该查询词即视为匹配。忽略首尾空白。省略此项可跳过关键词筛选。
categorystring否筛选类别包含此字符串的工作流(不区分大小写的子字符串匹配)。忽略开头和结尾的空白。省略则返回所有类别。
includeToolsboolean否为 true 时,每个结果都包含其各步骤中使用的服务器/工具对的唯一列表。

详细介绍

@cyanheads/workflows-mcp-server

通过 MCP 为大模型 Agent 存储、查询和创建 YAML 工作流手册。支持 STDIO 或 Streamable HTTP。

5 个工具

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


概述

一个由本地 YAML 文件支持的声明式工作流库,适用于大模型 Agent。存储、列出和检索命名且带版本的多步骤手册——每个手册都是一系列 MCP 服务/工具调用——供长期复用或一次性临时运行。系统会自动检测 YAML 文件的修改。

工具
工具描述
workflow_list列出索引中的所有永久工作流,可按关键词、类别和标签筛选。
workflow_get按名称检索完整工作流定义,并在前面附加全局指令。
workflow_create将新的永久工作流 YAML 写入库中。
workflow_create_temp写入临时工作流草稿并将其编入索引,但不纳入列表结果;该草稿会保留至删除。
workflow_delete按名称和可选版本删除永久工作流或临时草稿;删除前需由用户确认已解析的目标。

功能参考

workflow_list 工具
  • 可选的 query(名称和描述)、category(子串)和 tags(必须全部匹配)筛选条件均不区分大小写;临时草稿不会列出
  • 按名称排序,同名时按版本从高到低排序;结果为空时会附带 notice,回显已应用的筛选条件
  • 设置 includeTools: true 后,会添加每个工作流中唯一的 server/tool 对

workflow_get 工具
  • 使用 name 和可选的 semver version;省略 version 时返回可用的最高版本,包含草稿
  • 返回完整工作流、其 source(permanent 或 temp),以及来自 global_instructions.md 的 globalInstructions(文件不存在时为 null);失败时返回 not_found 或 version_not_found
  • 模板占位符(如 {{input.foo}})会原样返回——服务端不会对其进行插值

workflow_create 工具
  • name、语义化版本 version、description、author、category 和 steps(以及可选的 tags);每个 name@version 存储为 categories/<category>/ 下的一个文件,并记录创建和更新日期
  • 返回 key(name@version)和 filePath;如果永久工作流或草稿已占用该键,则失败并返回 already_exists,也可能返回 invalid_input 或 write_failed

workflow_create_temp 工具
  • 包含 workflow_create 的字段,但不含 category;存储在 temp/ 下,可通过 workflow_get 获取,从不列出,并一直保留到 workflow_delete 将其删除
  • status 为 created;若替换了同一键的草稿,则为 overwritten(并保留该草稿的 created_date);如果永久工作流已占用该键,则失败并返回 already_exists

workflow_delete 工具
  • name,以及可选的 version(省略时,取永久工作流和草稿中的最高版本);用户必须确认解析出的 name@version、来源和文件,然后才会执行删除,因此不支持征询的客户端无法删除
  • 返回已删除工作流的 source;如果另一个声明相同键的文件现在取代了它,则还会返回 notice;可能因 cancelled、confirmation_invalid(从未发出提示、已答复、超过 10 分钟,或由另一个调用方发出)、target_changed(用户查看后文件或其内容发生了变化)或 not_found 而失败

功能

基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可替换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、结构化日志记录和可选的 OpenTelemetry 跟踪。

工作流库:

  • categories/ 和 temp/ 下的 YAML 文件会在建立索引时进行验证;无效文件会被跳过并记录日志,不会导致服务崩溃
  • 内存索引以 name@version 为键,从各文件内容而非文件名读取数据,并通过经过防抖处理的递归监视器保持最新;同一键对应的永久工作流优先于草稿
  • 版本在所有地方都采用规范的 semver:会去掉前导 v、首尾空格和构建元数据,因此 v1.0.0+build.5 会以 1.0.0 存储、作为键并用于查找
  • 创建和删除操作依次执行,因此每次存在性检查都会持续到写入完成;文件名包含 name@version 的哈希值,因此 slug 相同的键不会共用文件
  • 每次重建索引时都会写入 _index.json 快照,供外部工具使用和调试

便于 Agent 使用的输出:

  • 区分明确的输出 — 每个 workflow_get 响应都包含 source: "permanent" | "temp",失败时会返回类型化的 reason 代码(not_found、version_not_found、already_exists、cancelled、confirmation_invalid、target_changed、index_unavailable、…),调用方可依据数据分支,而不必解析错误字符串
  • 无需额外往返 — workflow_get 始终在同一响应中连同工作流定义一起返回 globalInstructions
  • 响应整形 — workflow_list 的可选 includeTools 标志会预先导出工作流使用的唯一 server/tool 对;如果结果为空,则会返回已应用的筛选条件和扩大筛选范围的提示,而非空响应

开始使用

无需 API 密钥。默认情况下,服务会从本地 workflows-yaml/ 目录读取数据。

将以下内容添加到 MCP 客户端配置文件中:

{
  "mcpServers": {
    "workflows-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/workflows-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "WORKFLOWS_DIR": "/absolute/path/to/your/workflows-yaml"
      }
    }
  }
}

或者使用 npx(无需 Bun):

{
  "mcpServers": {
    "workflows-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/workflows-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "WORKFLOWS_DIR": "/absolute/path/to/your/workflows-yaml"
      }
    }
  }
}

或者使用 Docker:

{
  "mcpServers": {
    "workflows-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_TRANSPORT_TYPE=stdio",
        "-v", "/absolute/path/to/your/workflows-yaml:/workflows-yaml",
        "-e", "WORKFLOWS_DIR=/workflows-yaml",
        "ghcr.io/cyanheads/workflows-mcp-server:latest"
      ]
    }
  }
}

对于 Streamable HTTP,请设置传输方式并启动服务:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
初始化工作流

仓库附带一个 workflows-yaml/ 目录,其中包含按 categories/ 组织的示例工作流,可直接用作起点。workflows-yaml/global_instructions.md 文件包含服务在每个 workflow_get 响应前置的指令 — 编辑该文件即可为 Agent 设置全局指导。

前置条件
  • Bun v1.4.0 或更高版本(或 Node.js v24+)。
  • 一个包含 YAML 工作流文件的本地目录(或使用捆绑的 workflows-yaml/ 示例数据)。
安装
  1. 克隆仓库:
git clone https://github.com/cyanheads/workflows-mcp-server.git
  1. 进入目录:
cd workflows-mcp-server
  1. 安装依赖项:
bun install
  1. 配置环境:
cp .env.example .env
# edit .env if needed — most settings have defaults

配置

变量描述默认值
WORKFLOWS_DIR工作流根目录的绝对或相对路径。./workflows-yaml
GLOBAL_INSTRUCTIONS_PATH全局说明 Markdown 文件的路径。未设置时根据 WORKFLOWS_DIR 推导。<WORKFLOWS_DIR>/global_instructions.md
WATCHER_DEBOUNCE_MS文件系统变更事件触发索引重建前的防抖时间,单位为毫秒(0–2147483647)。500
MCP_TRANSPORT_TYPE传输方式:stdio 或 http。stdio
MCP_HTTP_PORTHTTP 服务的端口。3010
MCP_SESSION_MODEHTTP 会话:auto 或 stateful。workflow_delete 的确认提示词需要活动会话,因此使用 stateless 启动 HTTP 会导致配置错误。使用 stdio 时忽略此项。stateful,在 src/index.ts 中声明
MCP_AUTH_MODE身份验证模式:none、jwt 或 oauth。none
MCP_REQUEST_STATE_KEY用于密封确认轮次携带的 requestState(≥ 32 字节,每个实例必须相同,例如 openssl rand -base64 32);服务器未密封的任何状态都会在处理程序运行前被拒绝。workflow_delete 的轮次携带其确认 ID,因此 HTTP 部署时请设置此项。未设置
MCP_LOG_LEVEL日志级别(RFC 5424)。info
LOG_TOOL_FAILURE_PAYLOADS记录每次失败工具调用的参数和结果,按键名脱敏,并限制为 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(默认值为 16384)字节。自由格式值中的密钥不会被脱敏。false
OTEL_ENABLED启用 OpenTelemetry 插桩(跨度、指标、完成日志)。false

完整的可选覆盖项列表请参见 .env.example。


运行服务

本地开发
  • 构建并运行:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    
  • 运行检查和测试:

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    
Docker
docker build -t workflows-mcp-server .
docker run --rm \
  -v /path/to/workflows-yaml:/workflows-yaml \
  -e WORKFLOWS_DIR=/workflows-yaml \
  -p 3010:3010 \
  workflows-mcp-server

Dockerfile 默认使用 HTTP 传输、有状态会话模式(必需,见上文的 MCP_SESSION_MODE),并将日志写入 /var/log/workflows-mcp-server。默认会安装 OpenTelemetry 对等依赖项;构建时添加 --build-arg OTEL_ENABLED=false 可省略这些依赖项。


项目结构

目录用途
src/index.tscreateApp() 入口点——注册工具并初始化工作流索引服务。
src/config/使用 Zod 解析并验证服务专用环境变量。
src/mcp-server/tools/工具定义(*.tool.ts)。
src/services/workflow-index/WorkflowIndexService——YAML 解析、索引构建、监视器、semver 查找、写入辅助函数。
tests/与 src/ 对应的单元测试和集成测试。
workflows-yaml/示例工作流库——categories/ 用于永久工作流,temp/ 用于临时草稿,global_instructions.md 用于面向 Agent 的全局指导。

开发指南

开发指南和架构规则请参见 CLAUDE.md。简要概括如下:

  • 处理程序抛出异常,框架负责捕获——工具逻辑中不要使用 try/catch
  • 使用 ctx.log 记录请求范围内的日志
  • 通过 src/mcp-server/tools/definitions/index.ts 中的 barrel 文件注册新工具
  • 文件系统操作应通过 WorkflowIndexService 执行,不要直接写在工具处理程序中

贡献

欢迎提交问题。提交前请运行检查和测试:

bun run devcheck
bun run test

许可证

Apache-2.0——详情请参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。