关于 Action MCP Example 🚀
Action MCP Example 是一个基于 Ruby on Rails 的 MCP 服务示例模板,演示如何使用 ActionMCP gem 定义工具、提示词与资源。它适合希望在 Rails 项目中构建 MCP 服务的开发者。
主要功能
- 01基于 ActionMCP gem 的 Rails 模板
- 02JWT 认证与网关配置
- 03天气查询与依赖信息等示例工具
- 04Epic 冒险提示词与 Gemfile 资源模板
适用场景
- 01学习如何在 Rails 项目中定义 MCP 组件
- 02基于模板搭建带 JWT 认证的 MCP 服务
- 03使用 MCP Inspector 调试本地 MCP 端点
MCP 相关
该项目是一个 MCP 服务,通过 /mcp 端点向 MCP 客户端暴露工具、提示词和资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Action MCP 示例 🚀
一个简单的 Ruby on Rails 应用,演示如何集成和使用 ActionMCP gem。你可以在 GitHub 上的 https://github.com/seuros/mcp 找到该 gem 的源代码。
此应用展示了如何在 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,根据你的设置填写必要的值(尤其是 fetch_weather_by_location_tool 等工具所需的 API 密钥)。
3. 数据库设置
你可以使用 Docker 快速启动一个临时 PostgreSQL 实例:
make up
这将在端口 5466 上启动 PostgreSQL。
或者,编辑 config/database.yml 来配置你自己的 PostgreSQL 数据库。
4. 运行应用
启动 Rails 服务器:
bin/rails s
应用可通过 http://localhost:3002 访问。
ActionMCP 服务
ActionMCP 作为独立服务运行在端口 62770 上(通过 mcp.ru)。Nginx 会将 /mcp 请求代理到此服务。
Client → nginx:8080/mcp → ActionMCP:62770
身份验证
此应用通过 ApplicationGateway 类使用基于 JWT 的身份验证。
测试用户(来自 fixtures)
| 电子邮件 | 密码 | 角色 |
|---|---|---|
| [email protected] | password123 | 测试用户 |
| [email protected] | password123 | 管理员用户 |
加载 Fixtures
bin/rails db:fixtures:load FIXTURES=users
生成 JWT 令牌
# In Rails console
user = User.find_by(email: '[email protected]')
token = user.generate_jwt(expires_in: 10.years) # Long-lived for demo
MCP 客户端配置
已提供 .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)获取 gem。资源 URI 遵循gemfile://{environment}模式。
工具(app/mcp/tools/)
工具定义大模型可以请求执行的特定操作。
dependency_info_tool.rb:使用 Bundler 从Gemfile和Gemfile.lock中获取依赖信息。它还会检查.gemspec文件中的运行时依赖项。它会为production、test和runtime依赖项分别输出 JSON 资源。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 Inspector 交互式测试和检查 MCP 功能:
npx @modelcontextprotocol/inspector --url http://localhost:8080/mcp
执行 Inspector 命令前,请确保 Docker 正在运行(docker compose up)。
贡献
欢迎贡献!请提交问题或拉取请求,帮助改进此示例。
祝编码愉快!✨🚀
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。