使用说明
New Relic NerdGraph MCP服务器
此存储库提供 模型上下文协议(MCP) 用于与交互的服务器 新Relic NerdGraph API它允许MCP客户端(如Claude Desktop)使用自然语言或特定命令查询您的New Relic帐户数据和功能并与之交互。
使用 fastmcp 框架。
特性
此MCP服务器将各种New Relic功能作为工具和资源公开,包括:
- 帐户详细信息: 获取已配置帐户的基本信息。
- 通用NerdGraph查询: 执行任意NerdGraph查询。
- NRQL查询: 对您的帐户数据运行特定的NRQL查询。
- 实体管理: 搜索实体(应用程序、主机、监视器等)并按GUID检索详细信息。
- APM: 列出应用程序性能监控(APM)应用程序。
- 合成药物: 列出合成监视器并创建简单的浏览器监视器。
- 警报: 列出警报策略、查看未结事件和确认事件。
先决条件
- python Python 3.10+推荐(根据需要
fastmcp). - pip: Python包安装程序。
- 新文物帐户: 访问New Relic帐户。
- 新Relic用户API密钥: 身份验证需要用户API密钥。您可以生成一个 这里. 保管好这把钥匙!
- 新文物帐户ID: 大多数操作都需要您的New Relic帐户ID。您可以在New Relic UI中找到它(通常在URL或帐户设置中)。
设置和安装
-
克隆存储库:
git clone <repository_url> # Replace <repository_url> with the actual URL cd mcp-server-newrelic -
安装依赖关系:
pip install -r requirements.txt这将安装
fastmcp,requests,以及它们的依赖关系。
配置
服务器需要您的New Relic API密钥和帐户ID才能正常工作。使用环境变量配置这些 之前 运行服务器:
# Replace YOUR_API_KEY and YOUR_ACCOUNT_ID with your actual credentials
export NEW_RELIC_API_KEY="YOUR_API_KEY"
export NEW_RELIC_ACCOUNT_ID="YOUR_ACCOUNT_ID"
安全说明: 不要在源代码中硬编码API密钥。建议使用环境变量。您还可以使用以下工具 direnv 或放置这些 export shell配置文件中的命令(.zshrc, .bashrc等)以实现持久性,但要注意安全影响。
运行服务器
配置后,使用启动服务器 fastmcp 命令行工具:
fastmcp run server.py:mcp
server.py:主要入口点脚本。mcp:名称FastMCP在内部创建的实例server.py.
服务器将启动、打印注册消息并监听传入的MCP连接(默认情况下通常在端口8000上,由管理 fastmcp).您应该看到类似于以下内容的输出:
Using New Relic Account ID: YOUR_ACCOUNT_ID
Registering common features...
Registering entity features...
Registering APM features...
Registering Synthetics features...
Registering Alerts features...
Feature registration complete.
INFO: Started server process [XXXXX]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
让此终端窗口保持运行。
与MCP客户端一起使用
-
启动MCP服务器 (如上所述)。
-
重新启动MCP客户端 (例如克劳德桌面)。
-
客户端应自动检测正在运行的服务器并连接到它。您可能会看到一个指示器(如🔨 Claude Desktop中的图标)显示外部工具可用。
-
现在,您可以使用自然语言或直接调用下面列出的工具与您的New Relic帐户进行交互。
- 自然语言示例: “显示我的APM应用程序”或“列出帐户1234567中未解决的关键事件”
- 直接调用(如果支持):
list_apm_applications()或list_open_incidents(priority='CRITICAL', target_account_id=1234567)
可用工具和资源
服务器提供可通过模型上下文协议访问的以下功能:
常见(features/common.py)
-
工具:
query_nerdgraph- 说明: 执行任意NerdGraph查询。用于特定工具未涵盖的操作。
- 论据:
nerdgraph_query(str):GraphQL查询字符串。variables(可选[Dict]):查询的JSON变量字典。
- 退货: 查询结果的JSON字符串。
-
工具:
run_nrql_query- 说明: 执行NRQL查询。
- 论据:
nrql(str):NRQL查询字符串(例如。,"SELECT count(*) FROM Transaction TIMESERIES").target_account_id(可选[int]):要查询的帐户ID(如果省略,则使用env中的默认值)。
- 退货: NRQL结果的JSON字符串。
-
资源:
get_account_details- 说明: 提供配置的New Relic帐户的基本详细信息(ID、名称)。
- URI:
newrelic://account_details - 退货: 包含帐户详细信息的JSON字符串(
{"data": {"id": ..., "name": ...}})或者错误。
实体(features/entities.py)
-
工具:
search_entities- 说明: 根据条件搜索New Relic实体。
- 论据:
name(可选[str]):按名称过滤(模糊匹配)。entity_type(可选[str]):按类型过滤(例如。,'APPLICATION','HOST').domain(可选[str]):按域过滤(例如。,'APM','INFRA').tags(可选[List[Dict]]):按标签过滤(例如。,[{"key": "env", "value": "prod"}]).target_account_id(可选[int]):要在其中搜索的显式帐户ID。limit(int):最大结果(默认值50)。
- 退货: 搜索结果的JSON字符串。
-
资源:
get_entity_details- 说明: 检索特定实体的详细信息。包括APM、浏览器、Infra、Synthetics、仪表板等的常见字段和特定类型的详细信息。
- URI:
newrelic://entity/{guid}(替换{guid}具有实体GUID) - 退货: 实体详细信息的JSON字符串。
-
提示:
generate_entity_search_query- 说明: 生成
query字符串条件部分entitySearchNerdGraph字段,可用于构建搜索查询。 - 论据:
entity_name(str):要搜索的名称(在提示生成中使用的完全匹配)。entity_domain(可选[str]):要包含在查询条件中的域。entity_type(可选[str]):键入要包含在查询条件中的内容。target_account_id(可选[int]):要包含在查询条件中的帐户ID。
- 退货: 表示搜索条件的字符串(例如。,
"accountId = 123 AND name = 'My App' AND domain = 'APM'").
- 说明: 生成
APM(features/apm.py)
- 工具:
list_apm_applications- 说明: 列出APM应用程序。
- 论据:
target_account_id(可选[int]):要查询的帐户ID(如果省略,则使用默认值)。
- 退货: 包含APM应用程序列表的JSON字符串。
合成药物(features/synthetics.py)
-
工具:
list_synthetics_monitors- 说明: 列出合成监视器。
- 论据:
target_account_id(可选[int]):要查询的帐户ID(如果省略,则使用默认值)。
- 退货: 包含合成监视器列表的JSON字符串。
-
工具:
create_simple_browser_monitor- 说明: 创建基本的Synthetics简单浏览器监视器。
- 论据:
monitor_name(str):新监视器的名称。url(str):要监视的URL。locations(List[str]):公共位置标签列表(例如。,["AWS_US_EAST_1"]).period(str):检查频率(例如。,"EVERY_15_MINUTES").违约:"EVERY_15_MINUTES".status(str):初始状态("ENABLED"或"DISABLED").违约:"ENABLED".target_account_id(可选[int]):用于创建的帐户ID(如果省略,则使用默认值)。tags(可选[List[Dict]]):可选标签(例如。,[{"key": "team", "value": "ops"}]).
- 退货: 包含结果的JSON字符串,包括新监视器的GUID。
-
资源: 可以使用以下命令检索合成监视器详细信息
get_entity_details具有监视器GUID的资源(newrelic://entity/{monitor_guid}).
警报(features/alerts.py)
-
工具:
list_alert_policies- 说明: 列出警报策略,可选择按名称进行筛选。
- 论据:
target_account_id(可选[int]):要查询的帐户ID(如果省略,则使用默认值)。policy_name_filter(可选[str]):筛选name包含此字符串的策略。
- 退货: 包含警报策略列表的JSON字符串。
-
工具:
list_open_incidents- 说明: 列出当前打开的警报事件。
- 论据:
target_account_id(可选[int]):要查询的帐户ID(如果省略,则使用默认值)。priority(可选[str]):按优先级筛选('CRITICAL','WARNING').
- 退货: 包含打开事件列表的JSON字符串。
-
工具:
acknowledge_alert_incident- 说明: 确认开放警报事件。
- 论据:
incident_id(int):要确认的事件的ID。target_account_id(可选[int]):发生事件的帐户ID(如果省略,则使用默认值)。message(可选[str]):用于确认的可选消息。
- 退货: 带有确认结果的JSON字符串。
贡献
欢迎投稿!请随时提交问题或拉取请求。
- 分叉存储库。
- 创建新分支(
git checkout -b feature/your-feature). - 进行更改。
- 提交您的更改(
git commit -am 'Add some feature'). - 推到分支(
git push origin feature/your-feature). - 打开拉取请求。
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息(如果存在LICENSE文件)。
