模块化服务器工具集

一个基于ESM的模块化服务器工具集,支持Fastify HTTP传输和标准输入输出,提供GitHub操作、文件管理、Discord消息发送等功能,适用于开发自动化流程和代码审查场景。

  • by octave-commons
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 riatzukiza/mcp

使用说明

@普罗米修斯os/mcp

单个MCP服务器模块,带有可组合的纯工具。仅ESM,加速HTTP传输+stdio。

跑

配置加载

MCP系统使用复杂的配置加载器,支持多个来源并提供强大的验证。有关配置选项、模式验证和安全功能的完整文档,请参阅[[mcp-config-loader.md]]。

统一配置

@promethean-os/mcp 读取单个JSON清单,并在HTTP传输处于活动状态时可选地合并EDN代理目录。这 加载器按以下顺序解析配置(最高优先级优先):

  1. --config / -c CLI标志(从解析的路径 cwd).
  2. 最近的 promethean.mcp.json 从那里走上来发现 cwd.
  3. 遗产 MCP_CONFIG_JSON 包含内联JSON的环境变量。

当 transport 设置为 "http",运行时绑定JSON清单中声明的每个端点 和 启动stdio代理 在可选项中进行了描述 stdioProxyConfig EDN文件。每个EDN条目都映射到在 宣布 :http-path (违约 /<name>/mcp).

示例 promethean.mcp.json

{
  "transport": "http",
  "tools": [
    "github_request",
    "github_graphql",
    "github_rate_limit",
    "files_list_directory",
    "files_tree_directory",
    "files_view_file",
    "files_write_content",
    "files_write_lines",
    "files_search",
    "discord_send_message",
    "discord_list_messages"
  ],
  "endpoints": {
    "github": { "tools": ["github_request", "github_graphql"] }
  },
  "stdioProxyConfig": "./packages/mcp/examples/mcp_servers.edn"
}

使用此清单运行将暴露JSON中定义的GitHub端点和中声明的任何stdio服务器 packages/mcp/examples/mcp_servers.edn 在同一个禁食实例上。将示例复制到 config/mcp_servers.edn 和 根据需要调整机器的路径(配置路径被忽略)。编辑EDN文件并重新生成清单,而不是 感人的 promethean.mcp.json 手工:

bb -m mk.mcp-cli push-all --edn config/mcp_servers.edn
pnpm --filter @promethean-os/mcp dev -- --config ./promethean.mcp.json

每台服务器将在 http://<host>:<port>/<name>/mcp 除非你设置 :http-path 在EDN条目中。使用 --prefix 预先添加基础路径(例如。, /mcp).

开发用户界面

HTTP传输公开了一个使用编译的Web组件开发UI shadow-cljs.在运行服务器之前构建一次(或在迭代时使用监视模式):

pnpm --filter @promethean-os/mcp-dev-ui build
# or
pnpm --filter @promethean-os/mcp-dev-ui watch

该束被发射到 packages/mcp/static/dev-ui 并从 /ui/assets/main.js.

标准EDN表示法

编辑器和工具共享一个规范的EDN文档,该文档现在同时包含stdio 服务器定义和HTTP清单数据。新的 :http 地图镜像 字段在 promethean.mcp.json 以便所有传输都可以从一个目录进行编辑 文件:

{:mcp-servers {:github {:command "./bin/github.sh"}
               :files {:command "./bin/files.sh" :args ["--stdio"]}}
 :http {:transport :http
        :tools ["files_view_file" "files_write_content"]
        :include-help? true
        :stdio-meta {:title "Default MCP Endpoint"
                     :workflow ["mcp_toolset" "mcp_validate_config"]
                     :expectations {:usage ["Call mcp_toolset before editing"]}}
        :endpoints {:files {:tools ["files_view_file" "files_write_content"]
                            :include-help? true
                            :meta {:description "Filesystem utilities"
                                   :expectations {:pitfalls ["Avoid binary writes"]}}}
                    :github/review {:tools ["github_pr_get" "github_review_push"]
                                    :include-help? true}}
        :proxy {:config "./config/mcp_servers.edn"}}
 :outputs [{:schema :mcp.json :path "./promethean.mcp.json"}]}
  • :transport, :tools,以及 :include-help? 反映否时使用的默认值 请求显式HTTP端点。
  • :stdio-meta 描述回退 /mcp 端点元数据(标题, 工作流程、期望等)。
  • :endpoints 将HTTP路径映射到它们公开的工具集,包括每个端点 元数据。
  • :proxy 带有stdio代理发现选项; :config 直接映射到 JSON stdioProxyConfig 现场。

统一HTTP端点

Fastify传输现在绑定了中声明的两个注册表端点 promethean.mcp.json 从以下位置解析stdio代理 packages/mcp/examples/mcp_servers.edn 同一HTTP服务器。每个端点描述符 提供一个路径:注册表描述符挂载从创建的MCP服务器 配置工具,而代理描述符直接委托给底层 StdioHttpProxy。当传输启动时,它会启动之前的任何stdio代理 监听和关闭会在关闭前等待这些代理退出 禁食。

Exec命令分配列表

exec_run 只执行在满列表中声明的命令。装载机检查:

  1. MCP_EXEC_CONFIG → 显式JSON文件路径。
  2. MCP_EXEC_COMMANDS_JSON → 内联JSON有效载荷。
  3. 最近的 promethean.mcp.exec.json 当从 cwd.

每个配置文件看起来像:

{
  "defaultCwd": ".",
  "defaultTimeoutMs": 60000,
  "commands": [
    {
      "id": "git.status",
      "description": "Short git status from repo root",
      "command": "git",
      "args": ["status", "--short", "--branch"]
    }
  ]
}

使用 exec_list 在运行时反思活动的allowlist。

安全与授权

MCP系统包括一个全面的基于角色的访问控制(RBAC)框架,用于解决安全漏洞。有关完整文档,请参阅[[authorization.md]]。

快速设置

  1. 通过环境变量设置用户角色:

    export MCP_USER_ID=user123
    export MCP_USER_ROLE=developer  # guest | user | developer | admin
    
  2. 配置授权设置:

    export MCP_DEFAULT_ROLE=guest
    export MCP_STRICT_MODE=true
    export MCP_REQUIRE_AUTH_DANGEROUS=true
    
  3. 角色层次结构:

    • 宾客:安全操作的只读访问
    • 用户:对非破坏性操作的读写访问
    • 开发者:读+写+删除访问权限
    • 管理员:完全访问权限,包括系统级操作

关键安全功能

  • 纵深防御:角色层次结构、工具分类、危险操作标记
  • 全面审计:所有工具调用都以完整上下文记录
  • 故障安全默认值:默认情况下拒绝、访客限制、管理员隔离

有关详细的配置选项、测试过程和安全最佳实践,请参阅完整的[[authorization.md]]文档。

设计

  • 功能齐全的纯工具工厂((ctx) => { spec, invoke }).
  • 没有突变。DI通过 ToolContext.
  • ESM仅适用于 .js 在TS源中导入后缀。
  • 加速HTTP传输和stdio传输。
  • 工具在运行时通过配置文件、自动检测或 MCP_CONFIG_JSON.

状态

这是一个提取的脚手架,用于将多个MCP服务器整合到一个包中。GitHub工具位于 src/tools/github/*.

工具

  • exec_list--枚举已分配的shell命令和元数据。
  • exec_run--启用时运行一个带有可选参数的分配shell命令。
  • file_search——类似grep的内容搜索返回路径/行/代码段三元组。
  • kanban_get_board——将所有列/任务加载到已配置的看板中。
  • kanban_get_column--从板中获取一列。
  • kanban_find_task/kanban_find_tack_by_title--通过UUID或确切的标题定位任务。
  • kanban_update_status/kanban_move_task--在列之间移动任务或对其进行重新排序。
  • kanban_sync_board——将板顺序与任务标记文件进行协调。
  • kanban_search——对棋盘任务运行模糊/精确搜索。
  • GitHub公关*--高级拉取请求实用程序,包括元数据查找 (github_pr_get),diff文件检查(github_pr_files),内联位置 决心github_pr_resolve_position),并查看生命周期帮助工具 待审查(github_pr_review_start / comment_inline / submit).这些 包装GitHub REST/GraphQL边缘案例,如差异映射和建议围栏。
  • GitHub审查*--GitHub拉取请求管理助手(打开PR、获取评论、, 提交评论、检查检查并运行支持的git命令)。包含 github_review_request_changes_from_codex,发布问题级PR评论 始终标记 @codex 因此,当请求更改时,会通知代理。
  • github_apply_patch——通过提交将统一的diff应用于github分支 GraphQL createCommitOnBranch 突变。当代理无法写信时有用 工作树,但可以制作补丁向上游推进。

拉取请求审核工作流

代理商可以将新工具组合在一起,运行完整的评论,而无需制作原始评论 有效载荷:

// 1) Create a pending review (optional body summarizing goals)
{ "tool": "github_pr_review_start", "pullRequestId": "PR_NODE_ID" }

// 2) Inline comment at new line 42 with an optional suggestion
{
  "tool": "github_pr_review_comment_inline",
  "owner": "octocat",
  "repo": "hello-world",
  "number": 123,
  "path": "src/app.ts",
  "line": 42,
  "body": "Nit: consider extracting this constant.",
  "suggestion": { "after": ["const value = computeValue();"] }
}

// 3) Submit the pending review as a request for changes
{
  "tool": "github_pr_review_submit",
  "reviewId": "PENDING_REVIEW_ID",
  "event": "REQUEST_CHANGES",
  "body": "See inline comments for details."
}

HTTP端点

默认值 promethean.mcp.json 定义了多个HTTP端点。新的 /github/review endpoint为GitHub代码审查自动化工具提供支持 GraphQL API:

{
  "tools": [
    "github_review_open_pull_request",
    "github_review_get_comments",
    "github_review_get_review_comments",
    "github_pr_get",
    "github_pr_files",
    "github_pr_resolve_position",
    "github_pr_review_start",
    "github_pr_review_comment_inline",
    "github_pr_review_submit",
    "github_review_submit_comment",
    "github_review_submit_review",
    "github_review_get_action_status",
    "github_review_commit",
    "github_review_push",
    "github_review_checkout_branch",
    "github_review_create_branch",
    "github_review_revert_commits"
  ]
}

所有GitHub审查工具都需要 GITHUB_TOKEN (可选 GITHUB_GRAPHQL_URL)通过GitHub的GraphQL API进行身份验证。

  • confirm_send_message--使用配置的租户+空间URN向discord通道发送消息。
  • confirm_list_messages--从discord频道获取分页消息。
  • pnpm_install--运行 pnpm install 可选 --filter 针对特定套餐。
  • pnpm_add——添加依赖项,支持工作区或过滤包范围。
  • pnpm_remove--从工作区或筛选包中删除依赖项。
  • pnpm_run_script--执行 pnpm run <script> 带有可选的额外参数和过滤器。

文档

  • [[authority.md]] -完整的RBAC安全框架文档
  • [[mcp-config-loader.md]] -配置加载、验证和安全功能
  • [docs/authorization.md]] -安全实施细节和最佳实践