动态MCP服务器

一个基于FastMCP的动态灵活Ruby MCP服务器,用于快速部署和动态暴露资源、工具和提示给AI代理。

  • by WriterZephos
  • Ruby
  • 本地部署
  • 更新于
在 GitHub 查看 writerzephos/dynamic_mcp

使用说明

动态mcp

一个动态灵活的Ruby MCP服务器 FastMCP.

这个gem是一个装在盒子里的Ruby MCP服务器。它旨在让您在几分钟内启动并运行一个新的MCP服务器,并尽可能少地添加工具、资源和提示。

一旦将DynamicMCP部署到您希望它工作的目录中,它就会构建必要的代码,以动态地向AI代理公开资源和提示。你所需要做的就是放入你想要公开的markdown或ruby文件,剩下的就由RubyMCP来完成了。

对于工具,DynamicMCP允许您简单地放入包含FastMCP工具类的ruby文件,它将自动要求它们并注册它们以供AI代理使用。对于资源,您可以放入带有适当前端内容的markdown文件,或者放入使用FastMCP实现资源的Ruby类。对于提示,目前只支持markdown文件,它们将作为工具公开,但一旦FastMCP支持提示,DynamicMCP也将支持它们。

安装

gem install dynamic_mcp

然后在您希望mcp服务器存在的目录中:

deploy_dynamic_mcp

上述命令将把文件安装到 ./mcp 目录,询问您是否要覆盖它们(如果它们已经存在)。完成后,它将输出MCP服务器启动文件的路径,以便您可以配置AI代理使用它。

例如,要配置gemini以使用新的MCP服务器,您可以在您的 .gemini/settings.json 文件:

{
  "mcpServers": [
    {
      "name": "dynamic_mcp_server",
      "command": "ruby",
      "args": ["path/to/mcp/server.rb"],
      "cwd": "path/to/mcp",
      "timeout": 30000,
      "trust": false
    }
  ]
}

启动Shim

启动MCP服务器的另一种方法是使用 dynamic_mcp_startup_shim。如果您想从部署服务器的目录之外启动AI客户端,这可能是必要的。在这种情况下,您将使用这样的配置:

{
  "mcpServers": [
    {
      "name": "dynamic_mcp_server",
      "command": "dynamic_mcp_startup_shim",
      "args": ["path/to/mcp/server.rb"],
      "cwd": "path/to/mcp",
      "timeout": 30000,
      "trust": false
    }
  ]
}

唯一的区别是 command 您告诉客户端使用来启动服务器。这 dynamic_mcp_startup_shim 可执行文件只是从它自己的目录启动服务器,然后允许它正确地找到所有工具、资源和提示。

用法

安装了MCP服务器并将代理配置为使用它后,您现在可以删除 .md 或 .rb 文件进入 ./mcp/resources 和 ./mcp/prompts 和 .rb 文件进入 ./mcp/tools 并且它们将通过服务器自动暴露给代理。请务必按照以下指南操作每种类型的文件。

工具

工具文件必须 .rb 定义继承窗体的类的文件 ::FastMCP::Tool。在安装过程中,会生成一个示例文件 ./mcp/tools 目录。请参阅 FastMCP github页面 了解更多关于如何在Ruby中实现工具的信息。

资源

资源可以是从以下对象继承的ruby类 ::FastMCP::Resource 或者markdown文件,在这种情况下,ruby类将被动态定义,以向代理提供文件的内容。

资源Markdown文件

资源只是markdown文件,它有一个frontmatter部分来帮助在MCP服务器上注册它们。前面的内容应该是这样的:

---
resource_name: "example"
uri: "dynamic_mcp:///example"
mime_type: "text/markdown"
---

这 uri 属性应该是唯一的,因为这是AI代理调用特定资源的方式。

提示

FastMCP 尚不支持提示,因此它们只是作为工具实现,并将作为工具显示给代理。要使用DynamicMCP添加提示,只需将一个带有适当前端内容的markdown文件放入 ./mcp/prompts.正面应该是这样的:

---
description: "This prompt instructs the AI agent to meow three times"
name: "Meow"
---

这 name 属性应该是唯一的,因为这是AI代理调用特定提示的方式。

整合

这 ./mcp 目录旨在提交到存储库和/或共享。其中的服务器是一个独立的ruby应用程序,它只需要在运行它的系统上提供依赖关系。全局安装的gem对它创建的服务器一无所知。

Gemini CLI

Gemini CLI客户端当前具有 影响MacOS的错误此错误正在影响所有mcp服务器,并要求在部署mcp服务器时在同一根目录中启动Gemini客户端。

目前,建议将MCP服务器部署到一个顶级目录中,该目录包含您在使用它时希望处理的所有项目。