Rails集成工具

一个演示如何集成和使用ActionMCP gem的Ruby on Rails应用,包含多种工具和组件。

  • by seuros
  • Ruby
  • 本地部署
  • 42 星标
  • 更新于
在 GitHub 查看 seuros/mcp_rails_template

使用说明

动作MCP示例🚀

一个简单的Ruby on Rails应用程序,演示如何集成和使用 行动MCP 宝石。gem源代码可以在GitHub上找到,网址为 https://github.com/seuros/mcp.

此应用程序展示了如何在Rails项目中定义和使用MCP组件。


需求

  • Ruby(参见 .ruby-version 对于推荐版本)
  • PostgreSQL(或Docker)

入门指南

1.克隆和设置

git clone https://github.com/seuros/mcp_rails_template.git
cd mcp_rails_template
bin/setup

2.环境配置

复制提供的 .env.example 文件:

cp .env.example .env

编辑 .env 并根据您的设置填写必要的值(尤其是像这样的工具所需的任何API密钥 fetch_weather_by_location_tool).

3.数据库设置

您可以使用Docker快速启动一个临时PostgreSQL实例:

make up

这将在端口上启动PostgreSQL 5466.

或者,通过编辑配置自己的PostgreSQL数据库 config/database.yml.

4.运行应用程序

启动Rails服务器:

bin/rails s

该应用程序将在 http://localhost:3002.


ActionMCP服务器

ActionMCP作为 独立服务器 在港口 62770 (通过 mcp.ru).Nginx代理 /mcp 请求到此服务器。

Client → nginx:8080/mcp → ActionMCP:62770

认证

此应用程序通过以下方式使用基于JWT的身份验证 ApplicationGateway 类。

测试用户(来自夹具)

电子邮件 密码 角色
test@example.com 密码123 测试用户
admin@example.com 密码123 管理员用户

装载夹具

bin/rails db:fixtures:load FIXTURES=users

生成JWT令牌

# In Rails console
user = User.find_by(email: 'test@example.com')
token = user.generate_jwt(expires_in: 10.years)  # Long-lived for demo

MCP客户端配置

A. .mcp.json 文件提供了一个预配置的长期令牌:

{
  "mcpServers": {
    "mcp_rails_template": {
      "url": "http://localhost:8080/mcp",
      "headers": {
        "Authorization": "Bearer <token>"
      }
    }
  }
}

或者用curl手动测试:

curl -H "Authorization: Bearer <token>" http://localhost:8080/mcp

网关配置

网关已在中配置 config/mcp.yml:

development:
  authentication: ["jwt"]
  gateway_class: "ApplicationGateway"

在工具中访问用户

class MyTool < ApplicationMCPTool
  def perform
    render text: "Hello #{current_user.name}!"
  end
end

MCP组件(app/mcp/)

此应用程序包括ActionMCP组件的几个示例:

提示(app/mcp/prompts/)

  • epic_adventure_prompt.rb:根据提供的英雄姓名和冒险类型(幻想、科幻、神秘)生成一个简短的叙事冒险故事。它可以选择性地包含一个占位符图像数据串。

资源模板(app/mcp/resource_templates/)

  • gemfile_template.rb:以JSON资源的形式提供对项目Gemfile依赖关系的访问。它使用Bundler根据指定的环境获取宝石(production, test, development,或 default).资源URI遵循以下模式 gemfile://{environment}.

工具(app/mcp/tools/)

工具定义了语言模型可以请求执行的特定操作。

  • dependency_info_tool.rb:使用Bundler从中检索依赖关系信息 Gemfile 和 Gemfile.lock。它还检查是否存在 .gemspec 运行时依赖关系的文件。它为输出单独的JSON资源 production, test,以及 runtime 依赖性。
  • fetch_weather_by_location_tool.rb:从Open-Meteo API获取天气预报数据(https://api.open-meteo.com)基于所提供的纬度和经度坐标。它返回来自API的原始JSON响应。
  • rubocop_tool.rb:使用RuboCop gem的API分析提供的Ruby代码片段。它报告任何检测到的样式或代码质量违规,包括规则名称、消息、行号和列号。
  • ruby_code_analyzer_tool.rb:对项目目录中的Ruby代码执行基本的静态分析。它通过解析对类、模块和方法进行索引 .rb 文件夹。可以查询它以列出所有找到的类、模块或方法,或获取特定类/模块的详细信息(包括源代码片段)(constant)或方法(method_details).

用法

要交互式测试和检查MCP功能,您可以使用MCP检查器:

npx @modelcontextprotocol/inspector --url http://localhost:8080/mcp

确保Docker正在运行(docker compose up)在执行检查器命令之前。


贡献

请随时贡献!打开问题或提交pull请求以帮助改进此示例。


快乐编码! ✨🚀