Skip to main content
Glama
rhit-folayaod

systemlink-mcp

systemlink-mcp

一个 MCP 服务器,通过测试与测量原生的工具将 NI SystemLink 暴露给 AI 客户端:按产品版本统计的良率、失效 DUT 步骤与规格限值的对比、测量迹线摘要,以及校准到期资产。

这是 daq-mcp 的机群/数据层配套项目。daq-mcp 与单个 DAQ 设备通信。systemlink-mcp 则跨实验室查询并关联结果、资产和系统。

这是一个由单人维护的个人项目。它不是 NI 产品,与 NI / Emerson 无关联、未获其认可,也不受其支持。

为什么用测试领域工具而不是通用包装器

商业中间件目录可以把 SystemLink 列在数千个工业系统之中,然后暴露出一套 CMMS/ERP 形态的界面:工单、站点、空间、销售订单。这种抽象无法回答测试工程师真正会问的问题:

  • 本季度产品版本 B 的通过/失败率

  • 失效 DUT 上哪个测量值超出了限值

  • 哪个 PXI 模块已超过校准到期日

这里的每个工具都围绕这些问题来设计。响应是摘要加有界预览,而不是原始的 Test Monitor 或 DataFrame 负载。即使 API 调用本身正确,把数千行结果或 2000 点的波形倾倒进模型上下文也会让服务器无法使用。

Related MCP server: Auto-Manager MCP

默认只读

变更类工具(update_result_propertiesexecute_notebook)在未设置 SYSTEMLINK_MCP_ALLOW_WRITE=1 时会拒绝执行。读取类工具无需额外标志即可工作。

当前的 nisystemlink-clients AssetManagementClient 提供创建、查询、删除、文件链接和利用率方法,但没有资产更新方法。因此,受门控的写入面更新 Test Monitor 结果元数据,并将笔记本执行加入队列,而不是更新资产记录。

技术栈

Python 3.11+、uv、FastMCP(stdio 或 Streamable HTTP)、Pydantic v2,以及官方的 nisystemlink-clients 包。工具从不导入 SDK;它们调用 SystemLinkBackend。设置 SYSTEMLINK_MCP_SIMULATE=1 即可使用一个不需要 SystemLink 服务器的纯 Python 假实现。

uv sync
SYSTEMLINK_MCP_SIMULATE=1 uv run server.py

PowerShell:

$env:SYSTEMLINK_MCP_SIMULATE="1"; uv run server.py

模拟后端仅在 SYSTEMLINK_MCP_SIMULATE=1 时使用,或者当实时连接失败且未设置 SYSTEMLINK_MCP_REQUIRE_REAL 时使用。实时响应包含 "backend": "systemlink""simulated": false

  1. 在 SystemLink 中创建 API 密钥(Enterprise:先创建策略,再创建 API 密钥;SDK 发送的 HTTP 头是 x-ni-api-key)。SLE 不接受用户名和密码进行编程访问。

  2. .env.example 复制为 .env(已被 gitignore)并设置:

SYSTEMLINK_SERVER_URI=https://your-systemlink-host
SYSTEMLINK_API_KEY=...
SYSTEMLINK_MCP_REQUIRE_REAL=1

保持 SYSTEMLINK_MCP_SIMULATE 不设置。仍允许基本认证的本地 SystemLink Server 可以使用 SYSTEMLINK_USERNAME / SYSTEMLINK_PASSWORD 代替密钥。SystemLink Cloud 可以单独使用 API 密钥(无需 URI);后端随后会构造 CloudHttpConfiguration

  1. 在启动 MCP 之前先探测,这样登录失败就不会悄悄变成假机群:

uv run server.py --probe

你应该会看到来自服务器的 "simulated": false 和一段简短的 query_systems 预览。然后在不带 simulate 标志的情况下启动 MCP,或者让 Cursor 指向 .cursor/mcp.json.live.example

如果 --probe 失败,JSON 错误来自 SDK(ApiException / 连接),而不是来自模拟数据。

工具

工具

访问权限

回答的问题

summarize_yield

读取

通过/失败良率,可选按部件、程序或序列号分组

query_results

读取

过滤后的结果计数,外加有界的近期预览

get_failing_steps

读取

单个结果的失败步骤,含测量值与限值对比

summarize_measurement

读取

表格统计,外加降采样迹线(在实时 API 上抽取)

list_calibration_due

读取

已过或即将到达校准期的资产

query_assets

读取

库存清单,含在位状态和校准状态

query_systems

读取

已注册系统及连接健康状态

query_products

读取

产品 / 部件号 / 系列

query_specs

读取

产品的规格限值

list_files

读取

结果或资产的文件元数据(不含内容)

update_result_properties

受控写入

测试结果上的关键字/属性

execute_notebook

受控写入

排队执行 Jupyter 笔记本

MCP Inspector

在仓库根目录下,强制启用模拟:

SYSTEMLINK_MCP_SIMULATE=1 npx -y @modelcontextprotocol/inspector uv run server.py

PowerShell:

$env:SYSTEMLINK_MCP_SIMULATE="1"
npx -y @modelcontextprotocol/inspector uv run server.py

打开打印出的 URL(通常是 http://127.0.0.1:6274)。确认十二个工具出现,然后以 group_by=part_number 调用 summarize_yield

使用 Streamable HTTP 代替 stdio:

SYSTEMLINK_MCP_SIMULATE=1 uv run server.py --http

MCP 端点是 http://127.0.0.1:8000/mcp。不要使用 transport="sse";该传输方式已弃用。

Cursor

使用 .cursor/mcp.json.example(模拟器)或 .cursor/mcp.json.live.example(真实服务器)。机器本地的 .cursor/mcp.json 已被 gitignore。

{
  "mcpServers": {
    "systemlink-mcp": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "C:/Users/folayaod/personal/systemlink-mcp",
        "server.py"
      ],
      "env": {
        "SYSTEMLINK_MCP_SIMULATE": "1"
      }
    }
  }
}

Claude Desktop

claude_desktop_config.json 中使用相同的 JSON 块:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows:%APPDATA%\Claude\claude_desktop_config.json

保存后重启 Claude Desktop。

用于演练模拟机群的提示词

  1. “部件号 PN-5164-B 与其他版本分组对比的通过/失败良率是多少?”

  2. “DUT-1001 在 BoardFunctional.seq 中失败。哪个步骤失败了?Gain 与其限值相比如何?请总结附带的测量迹线。”

  3. “哪些 PXI 资产已逾期或即将到达校准期?PXI Rack 1 是否已连接?”

测试

SYSTEMLINK_MCP_SIMULATE=1 uv run pytest

测试只访问模拟后端。它们不会打开到 SystemLink 的网络连接。

状态

个人项目,单人维护。模拟后端是日常受支持的路径。真实后端是针对 python-docs.systemlink.io 中记录的 nisystemlink-clients 2.32.x API 以及 ni/nisystemlink-clients-python 源码编写的。它尚未在本仓库的 CI 中针对真实的 SystemLink Enterprise 实例运行过。用于校准状态的资产 Dynamic LINQ 属性名遵循官方 AssetIdentifier 示例的 PascalCase 风格;如果真实服务器拒绝该过滤器,这是 DEVLOG.md 中记录的一个已知集成风险。

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes enterprise KPIs, health scores, forecasting, and anomaly detection as MCP tools, resources, and prompts for use by any MCP-compatible agent.
    2
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language analysis of mechanical test data files (CSV, TDMS, MDF) by providing tools for channel statistics, spectrum analysis, rainflow fatigue counting, thermal state detection, and report generation.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to analyze plant-floor data using OEE, Pareto, SPC, and yield-loss calculations, providing continuous-improvement insights from manufacturing data.
    1

View all related MCP servers

Related MCP Connectors

  • A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud

  • A paid remote MCP for AI SDK benchmark dashboard, built to return verdicts, receipts, usage logs, an

  • A paid remote MCP for AI SDK eval dashboard, built to return verdicts, receipts, usage logs, and aud

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rhit-folayaod/systemlink-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server