scout_apm-mcp
Ruby gem提供ScoutAPM API客户端和MCP(模型上下文协议)服务器工具,用于获取跟踪、端点、度量、错误和见解。与MCP兼容的客户端集成,如Cursor IDE、Claude Desktop和其他启用MCP的工具。
赞助 好吧。.
需求
- Ruby 3.1或更高版本 (不支持Ruby 3.0及更早版本)
快速开始
- 在scoutapm中,在“组织设置”下创建API密钥:https://scoutapm.com/settings
- 在1Password中创建一个名为“Scout APM API”的项,并将API密钥存储在名为API_key的新字段中
- 配置您最喜欢的服务以使用本地MCP服务器,确保OP_ENV_ENTRY_PATH具有正确的保管库和项目名称(两者都在1Password UI中可见)
安装
gem install scout_apm_mcp光标IDE配置
对于Cursor IDE,创建或更新 .cursor/mcp.json 在您的项目中:
{
"mcpServers": {
"scout-apm": {
"command": "gem",
"args": ["exec", "scout_apm_mcp"],
"env": {
"OP_ENV_ENTRY_PATH": "op://Vault Name/Item Name",
"RUBY_VERSION": "3.4.7"
}
}
}
}Claude桌面配置
对于Claude Desktop,编辑MCP配置文件:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json\ 视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"scout-apm": {
"command": "gem",
"args": ["exec", "scout_apm_mcp"],
"env": {
"OP_ENV_ENTRY_PATH": "op://Vault Name/Item Name",
"RUBY_VERSION": "3.4.7"
}
}
}
}安全最佳实践
请勿将API密钥或令牌存储在MCP配置文件中。相反,使用以下方法之一:
- 1密码集成:设置
OP_ENV_ENTRY_PATH环境变量(例如。,op://Vault/Item)通过opdotenv自动加载凭据 - 1Password命令行界面:如果opdotenv不可用,gem将自动回退到1Password CLI
- 环境变量:设置
API_KEY或SCOUT_APM_API_KEY在您的shell环境中(不建议用于生产环境-使用secret vault进行内存配置)
gem将自动检测并使用来自您的环境或1Password集成的凭据。
MCP检验员测试
您可以使用以下工具测试MCP服务器 MCP检查员 工具:
# Set your 1Password entry path (or use API_KEY/SCOUT_APM_API_KEY)
export OP_ENV_ENTRY_PATH="op://Vault/Scout APM"
# Run the MCP inspector with the server
npx @modelcontextprotocol/inspector bundle exec scout_apm_mcp检查员将:
- 启动代理服务器并打开浏览器界面
- 通过STDIO连接到MCP服务器
- 允许您以交互方式测试所有可用工具
- 显示请求/响应消息和任何错误
这有助于:
- 在与MCP客户端集成之前测试工具功能
- 调试MCP协议通信
- 正在验证API密钥配置
- 探索可用工具及其参数
手动运行MCP服务器
安装后,您可以立即启动MCP服务器:
# With bundler
gem install scout_apm_mcp && bundle exec scout_apm_mcp
# Or if installed globally
scout_apm_mcp服务器将使用MCP协议通过STDIN/STDOUT启动和通信。请确保您已配置ScoutAPM API密钥(请参阅下面的API密钥管理部分)。
升级
要升级到gem的最新版本,请执行以下操作:
gem update scout_apm_mcp如果您正在使用Bundler,请更新您的 Gemfile.lock:
bundle update scout_apm_mcp备注:从0.1.3版起,客户端方法返回提取的数据(数组、哈希),而不是完整的API响应结构。与之前的版本相比,这是一个突破性的变化。请参阅 更改日志.md 有关重大更改和新功能的详细信息。
特性
- ScoutAPM API客户端:ScoutAPM REST API的完整客户端
- MCP服务器集成:与Cursor IDE、Claude Desktop和其他启用MCP的工具兼容的即用型MCP服务器
- API密钥管理:支持环境变量和1Password集成(通过可选
opdotenv宝石) - URL解析:用于解析ScoutAPM URL和提取ID的辅助方法
- 时间实用程序:格式化、解析和使用ISO 8601时间字符串的辅助方法
- 输入验证:在API调用之前验证度量值类型、洞察类型和时间范围
- 自定义错误处理:专用的异常类,用于更好的错误处理和调试
- API全面覆盖:支持所有ScoutAPM API端点(应用程序、指标、端点、跟踪、错误、见解)
- 数据提取:客户端方法返回提取的数据,而不是完整的API响应结构,以便于使用
基本用法
API客户端
备注:从0.1.3版起,所有客户端方法都返回提取的数据(数组、哈希),而不是完整的API响应结构。与之前的版本相比,这是一个突破性的变化。
require "scout_apm_mcp"
# Get API key (from environment or 1Password)
api_key = ScoutApmMcp::Helpers.get_api_key
# Create client
client = ScoutApmMcp::Client.new(api_key: api_key)
# List applications (returns Array)
apps = client.list_apps
# List applications filtered by active_since
apps = client.list_apps(active_since: "2025-11-01T00:00:00Z")
# Get application details (returns Hash)
app = client.get_app(123)
# List endpoints
endpoints = client.list_endpoints(123)
# Fetch trace
trace = client.fetch_trace(123, 456)
# Get metrics (returns Hash with series data)
metrics = client.get_metric(123, "response_time", from: "2025-01-01T00:00:00Z", to: "2025-01-02T00:00:00Z")
# List error groups
errors = client.list_error_groups(123, from: "2025-01-01T00:00:00Z", to: "2025-01-02T00:00:00Z")
# Get insights
insights = client.get_all_insights(123, limit: 20)URL解析
# Parse a ScoutAPM trace URL
url = "https://scoutapm.com/apps/123/endpoints/.../trace/456"
parsed = ScoutApmMcp::Helpers.parse_scout_url(url)
# => { app_id: 123, endpoint_id: "...", trace_id: 456, decoded_endpoint: "...", query_params: {...} }时间和持续时间帮助因素
# Format Time object to ISO 8601 string
time_str = ScoutApmMcp::Helpers.format_time(Time.now)
# => "2025-11-21T12:00:00Z"
# Parse ISO 8601 string to Time object
time = ScoutApmMcp::Helpers.parse_time("2025-11-21T12:00:00Z")
# => #
# Create duration hash from two ISO 8601 strings
duration = ScoutApmMcp::Helpers.make_duration("2025-11-21T00:00:00Z", "2025-11-21T12:00:00Z")
# => { start: #, end: # }
# Extract endpoint ID from endpoint hash
endpoint_id = ScoutApmMcp::Helpers.get_endpoint_id(endpoint_hash)
# => "base64-encoded-endpoint-id"API密钥管理
gem支持多种方法用于API密钥检索(按顺序检查):
- 直接参数:通行证
api_key:通话时Helpers.get_api_key - 环境变量:设置
API_KEY或SCOUT_APM_API_KEY - 1通过OP_ENV_ENTRY_PATH发送密码:设置
OP_ENV_ENTRY_PATH环境变量(例如。,op://Vault/Item) - 通过opdoteny输入1个密码:如果满足以下条件,则自动从1Password加载
opdotenvgem可用op_vault/op_item提供 - 1Password命令行界面:回退到直接
opCLI命令
# From environment variable (recommended: use in-memory vault or shell environment)
# Set API_KEY or SCOUT_APM_API_KEY in your environment
api_key = ScoutApmMcp::Helpers.get_api_key
# From 1Password using OP_ENV_ENTRY_PATH (recommended for 1Password users)
# Set OP_ENV_ENTRY_PATH in your environment (e.g., op://Vault/Item)
ENV["OP_ENV_ENTRY_PATH"] = "op://YourVault/YourItem"
api_key = ScoutApmMcp::Helpers.get_api_key
# From 1Password with explicit vault/item (requires opdotenv gem or op CLI)
api_key = ScoutApmMcp::Helpers.get_api_key(
op_vault: "YourVault",
op_item: "Your ScoutAPM API",
op_field: "API_KEY"
)安全说明:切勿在代码或配置文件中硬编码API密钥。始终使用环境变量、内存保管库或1Password等安全凭据管理系统。
API方法
应用程序
list_apps(active_since:)-列出所有应用程序(可选择按上次报告的时间筛选)get_app(app_id)-获取应用程序详细信息
指标
list_metrics(app_id)-列出可用的度量类型get_metric(app_id, metric_type, from:, to:)-获取时间序列度量数据
端点
list_endpoints(app_id, from:, to:)-列出所有端点get_endpoint_metrics(app_id, endpoint_id, metric_type, from:, to:)-获取端点指标list_endpoint_traces(app_id, endpoint_id, from:, to:)-列出端点跟踪
注意:API不提供直接的端点详细信息端点。使用 list_endpoints 并根据endpoint_id进行过滤,以获得特定的端点信息。
痕迹
fetch_trace(app_id, trace_id)-获取详细的跟踪信息
错误
list_error_groups(app_id, from:, to:, endpoint:)-列出错误组get_error_group(app_id, error_id)-获取错误组详细信息get_error_group_errors(app_id, error_id)-获取组内的错误
洞察
get_all_insights(app_id, limit:)-获取所有见解类型get_insight_by_type(app_id, insight_type, limit:)-获取特定的见解类型get_insights_history(app_id, from:, to:, limit:, pagination_cursor:, pagination_direction:, pagination_page:)-获取历史见解get_insights_history_by_type(app_id, insight_type, from:, to:, limit:, pagination_cursor:, pagination_direction:, pagination_page:)-按类型获取历史见解
OpenAPI架构
fetch_openapi_schema-获取ScoutAPM OpenAPI模式
MCP服务器集成
此gem包括一个可以直接运行的即用型MCP服务器:
# After installing the gem
bundle exec scout_apm_mcp或者,如果全局安装:
gem install scout_apm_mcp
scout_apm_mcp服务器将使用MCP协议通过STDIN/STDOUT进行通信。在MCP客户端中配置它(例如,Cursor IDE、Claude Desktop或其他启用MCP的工具)。
错误处理
客户端使用自定义异常类来更好地处理错误:
ScoutApmMcp::Error-所有ScoutAPM SDK错误的基本异常类ScoutApmMcp::AuthError-身份验证失败时引发(401未经授权)ScoutApmMcp::APIError-为API错误引发(包括status_code和response_data属性)
客户端还验证输入参数并提出 ArgumentError 用于:
- 度量类型无效(必须是以下类型之一:
apdex,response_time,response_time_95th,errors,throughput,queue_time) - 无效的洞察类型(必须是以下类型之一:
n_plus_one,memory_bloat,slow_query) - 时间范围无效(from_time必须早于_time,范围不能超过2周)
- 跟踪超过7天的查询(适用于
list_endpoint_traces)
begin
client.get_metric(123, "invalid_metric", from: "2025-01-01T00:00:00Z", to: "2025-01-02T00:00:00Z")
rescue ScoutApmMcp::AuthError => e
puts "Authentication failed: #{e.message}"
rescue ScoutApmMcp::APIError => e
puts "API error (#{e.status_code}): #{e.message}"
puts "Response data: #{e.response_data}"
rescue ArgumentError => e
puts "Invalid parameter: #{e.message}"
rescue ScoutApmMcp::Error => e
puts "Error: #{e.message}"
end发展
# Install dependencies
bundle install
# Run tests
bundle exec rspec
# Run tests across multiple Ruby versions
bundle exec appraisal install
bundle exec appraisal rspec
# Run linting
bundle exec standardrb --fix
# Validate RBS type signatures
bundle exec rbs validate贡献
欢迎在GitHub上提交Bug报告和拉取请求,网址为https://github.com/amkisko/scout_apm_mcp.rb.
出资政策:
- 新功能不一定添加到gem中
- Pull请求应包含受影响部件的测试范围
- 拉取请求应具有更改日志条目
审查政策:
- 审查和合并关键修复可能需要长达2个日历周的时间
- 审查和合并拉取请求可能需要长达6个日历月的时间
- 审查一个问题可能需要长达1个日历年的时间
有关更多信息,请参见 贡献.md.
安全
如果您发现安全漏洞,请负责任地报告。看 安全.md 了解详情。
许可证
根据以下条款,gem可作为开源软件使用 MIT许可证.
