轨道mcp
设置这个? 将您的编码代理(Cursor、Claude Code等)指向 llms.txt 并要求它在您的项目中自行配置rails mcp。一个Ruby gem,在现有运行的应用程序服务器的上下文中为AI助手提供Ruby代码执行功能。想象一下,它让AI助手能够快速访问ruby控制台,而无需编写脚本、重新加载或重新启动。
适用于Rails、Sinatra、Hanami、Roda和任何其他基于Rack的框架。代码在应用程序的上下文中执行,用于调试和调查。
YouTube链接
使用于
在Apollo.io上使用,针对包含20k+Ruby文件的Rails代码库。
用例
- 快速学习新的代码库或代码区域。使用您的AI客户端和正在运行的服务器,您可以在执行实际应用程序代码的片段时要求它进行研究。它有效地充当了一个循环代码验证块。
- 使用生产环境的只读副本对客户升级进行快速、初步的调查。它可以执行您的应用程序代码,定位模型,并从代码库中运行相关的类方法或代码路径,以进行初步的根本原因分析(RCA)。如果您的应用程序使用事件源框架(即更改日志),那就更好了。AI客户端以及通过rails mcp的代码执行功能可以快速提供初步的RCA。
- 使用它进行快速数据分析并将报告导出为CSV。
安装
将此行添加到应用程序的Gemfile中:
gem "rails-mcp"或者在本地安装以进行开发:
bundle install用法
安装MCP服务器
轨道 (config/routes.rb):
require "rails_mcp/mcp/server"
Rails.application.routes.draw do
mount RailsMcp::MCP::Server.new => "/mcp"
end机架 (config.ru):
require "rails_mcp"
require "rails_mcp/mcp/server"
map "/mcp" do
run RailsMcp::MCP::Server.new
end辛纳屈:
require "rails_mcp/mcp/server"
mount RailsMcp::MCP::Server.new, at: "/mcp"启动服务器
# Standalone with Rackup
bundle exec rackup -p 9292
# With Rails
bundle exec rails server环境范围安装
此gem不带身份验证,MCP端点将接受任何到达它的请求。您有责任确保它只在适当的地方挂载。一个典型的Rails设置会将其引入环境:
Rails.application.routes.draw do
mount RailsMcp::MCP::Server.new => "/mcp" if Rails.env.development?
end对于临时或生产访问,请将其与网络级限制(防火墙、VPC、SSH端口转发、VPN)相结合,这样就永远无法从开放的互联网访问端点。
MCP协议
端点
MCP服务器公开了一个JSON-RPC端点:
- POST/mcp/rpc -JSON-RPC请求和响应
可用工具
evaluate_ruby_code
- 描述:评估Ruby代码并返回捕获的stdout/stderr结果
- 参数:
- code (string,必填):要执行的Ruby代码
连接AI助手
光标/克劳德桌面
添加到MCP客户端配置(.cursor/mcp.json 对于光标或 claude_desktop_config.json 克劳德桌面版):
{
"mcpServers": {
"rails-mcp": {
"url": "http://localhost:3001/mcp/rpc"
}
}
}对于Claude Code,请从命令行添加它:
claude mcp add rails-mcp --transport http http://localhost:3001/mcp/rpc其他MCP客户端
任何兼容MCP的客户端都可以通过向服务器发出JSON-RPC请求来连接到服务器 /mcp/rpc 终点。
卷曲示例:
curl -X POST "http://localhost:3001/mcp/rpc" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'可选:客户端验证
如果您希望在环境范围的挂载和网络门控之外建立第二层防御,请在构建服务器时启用客户端验证。启用后,每个请求都必须携带 X-Rails-Mcp-Token 值匹配的标头 ENV["RAILS_MCP_TOKEN"] (最少8个字符);否则服务器会响应 401 Unauthorized.
这故意使用自定义标头(不是 Authorization: Bearer)并返回no WWW-Authenticate 因此,它远离标准的MCP/Outh-当宿主Rails应用程序已经通过DCR/众所周知的发现公开了一个单独的、面向产品的MCP服务器时,这一点很重要。
mount RailsMcp::MCP::Server.new(use_client_verification: true) => "/mcp"在主机环境中设置令牌:
export RAILS_MCP_TOKEN=""克劳德代码:
claude mcp add rails-mcp --transport http \
--header "X-Rails-Mcp-Token: $RAILS_MCP_TOKEN" \
http://localhost:3001/mcp/rpc光标(.cursor/mcp.json):
{
"mcpServers": {
"rails-mcp": {
"url": "http://localhost:3001/mcp/rpc",
"headers": {
"X-Rails-Mcp-Token": ""
}
}
}
}测试
运行测试套件:
bundle exec rspec安全警告
⚠️ 这个gem执行任意Ruby代码。
重要的安全注意事项:
- 没有内置身份验证。 在环境(例如。,
if Rails.env.development?)因此,端点不会在生产中意外暴露 - 仅用于开发环境或安全、隔离的生产环境
- 依靠网络级别的限制(防火墙、VPC、SSH端口转发、VPN)来限制访问
- 考虑在沙盒或容器化环境中运行
- 监控并记录所有代码执行请求
并发注意事项
此宝石使用全局 $stdout/$stderr 评估期间的重定向,这在多线程服务器中可能会发生冲突。对于并发的生产使用,请考虑:
- 在单工作/线程模式下运行
- 根据请求进行隔离评估(例如,通过
fork) - 使用专用作业员执行代码
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
