systemlink-mcp
systemlink-mcp
NI SystemLink을 AI 클라이언트에 노출하는 MCP 서버로, 시험·계측(Test-and-Measurement) 특화 도구를 제공합니다: 제품 리비전별 수율(yield), 규격 한계 대비 불량 DUT 스텝, 측정 트레이스 요약, 교정 기한 도래 자산 등을 다룹니다.
이 프로젝트는 daq-mcp의 플릿(fleet)/데이터 계층 동반자입니다. daq-mcp는 단일 DAQ 장치와 통신하고, systemlink-mcp는 랩 전체의 결과, 자산, 시스템을 조회하고 상호 연관시킵니다.
이 프로젝트는 관리자 1인이 운영하는 개인 프로젝트입니다. NI 제품이 아니며, NI / Emerson과 제휴, 보증, 지원 관계가 없습니다.
일반 래퍼 대신 시험 도메인 도구를 사용하는 이유
상용 미들웨어 카탈로그는 SystemLink를 수천 개의 산업용 시스템 중 하나로 나열한 뒤 CMMS/ERP 형태의 표면(작업 지시, 사이트, 공간, 판매 주문)을 노출할 수 있습니다. 그러나 그러한 추상화는 시험 엔지니어가 실제로 묻는 질문에 답할 수 없습니다:
이번 분기 제품 리비전 B의 합격/불합격 비율
불량 DUT에서 한계를 초과한 측정 항목
교정 기한이 지난 PXI 모듈
여기의 모든 도구는 그러한 질문에 맞춰 설계되었습니다. 응답은 요약과 제한된 미리보기 형태이며, 원시 Test Monitor 또는 DataFrame 페이로드가 아닙니다. 수천 개의 결과 행이나 2000포인트 파형을 모델 컨텍스트에 던져 넣으면 API 호출이 올바르더라도 서버를 사용할 수 없게 됩니다.
Related MCP server: Auto-Manager MCP
기본적으로 읽기 전용
변경 도구(update_result_properties, execute_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 페이크를 사용합니다.
빠른 시작 (SystemLink 서버 없이)
uv sync
SYSTEMLINK_MCP_SIMULATE=1 uv run server.pyPowerShell:
$env:SYSTEMLINK_MCP_SIMULATE="1"; uv run server.py실제 SystemLink
시뮬레이션 백엔드는 SYSTEMLINK_MCP_SIMULATE=1이 설정된 경우에만 사용되며, 라이브 연결이 실패하고 SYSTEMLINK_MCP_REQUIRE_REAL이 설정되지 않은 경우에도 사용됩니다. 라이브 응답에는 "backend": "systemlink" 및 "simulated": false가 포함됩니다.
SystemLink에서 API 키를 생성합니다 (Enterprise: 정책 생성 후 API 키; SDK가 보내는 HTTP 헤더는
x-ni-api-key입니다). SLE는 프로그래매틱 액세스에 사용자 이름과 비밀번호를 허용하지 않습니다..env.example을.env(gitignore 대상)로 복사하고 다음을 설정합니다:
SYSTEMLINK_SERVER_URI=https://your-systemlink-host
SYSTEMLINK_API_KEY=...
SYSTEMLINK_MCP_REQUIRE_REAL=1SYSTEMLINK_MCP_SIMULATE는 설정하지 않은 채로 둡니다. 기본 인증을 여전히 허용하는 온프레미스 SystemLink Server는 키 대신 SYSTEMLINK_USERNAME / SYSTEMLINK_PASSWORD를 사용할 수 있습니다. SystemLink Cloud는 API 키만으로 사용할 수 있습니다(URI 불필요). 그러면 백엔드가 CloudHttpConfiguration을 구성합니다.
MCP 실행 전에 프로브를 수행하여 로그인 실패가 조용히 페이크 플릿으로 바뀌지 않도록 합니다:
uv run server.py --probe"simulated": false와 서버의 짧은 query_systems 미리보기가 표시되어야 합니다. 그런 다음 simulate 플래그 없이 MCP를 실행하거나 Cursor에서 .cursor/mcp.json.live.example을 가리킵니다.
--probe가 실패하면 JSON 오류는 더미 데이터가 아닌 SDK(ApiException / 연결)에서 온 것입니다.
도구
도구 | 액세스 | 답변하는 질문 |
| 읽기 | 합격/불합격 수율, 선택적으로 부품, 프로그램 또는 시리얼별 그룹화 |
| 읽기 | 필터링된 결과 개수 및 제한된 최근 미리보기 |
| 읽기 | 단일 결과의 실패 스텝, 측정값 대 한계 비교 |
| 읽기 | 테이블 통계 및 다운샘플링된 트레이스(라이브 API에서 decimate) |
| 읽기 | 교정 기한이 지났거나 임박한 자산 |
| 읽기 | 존재 상태 및 교정 상태를 포함한 인벤토리 |
| 읽기 | 등록된 시스템 및 연결 상태 |
| 읽기 | 제품 / 부품 번호 / 패밀리 |
| 읽기 | 제품의 규격 한계 |
| 읽기 | 결과 또는 자산의 파일 메타데이터(내용 제외) |
| 게이트된 쓰기 | 테스트 결과의 키워드/속성 |
| 게이트된 쓰기 | Jupyter 노트북 실행 대기열에 추가 |
MCP Inspector
리포지토리 루트에서 시뮬레이션을 강제로 실행:
SYSTEMLINK_MCP_SIMULATE=1 npx -y @modelcontextprotocol/inspector uv run server.pyPowerShell:
$env:SYSTEMLINK_MCP_SIMULATE="1"
npx -y @modelcontextprotocol/inspector uv run server.py표시된 URL(일반적으로 http://127.0.0.1:6274)을 엽니다. 12개 도구가 나타나는지 확인한 후 group_by=part_number로 summarize_yield를 호출합니다.
stdio 대신 Streamable HTTP:
SYSTEMLINK_MCP_SIMULATE=1 uv run server.py --httpMCP 엔드포인트는 http://127.0.0.1:8000/mcp입니다. transport="sse"는 사용하지 마십시오. 해당 전송 방식은 더 이상 사용되지 않습니다(deprecated).
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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
저장 후 Claude Desktop을 재시작합니다.
시뮬레이션 플릿을 활용하는 프롬프트
"부품 번호 PN-5164-B의 합격/불합격 수율은 얼마이며, 다른 리비전과 그룹 비교하면 어떻습니까?"
"DUT-1001이 BoardFunctional.seq에서 실패했습니다. 어떤 스텝이 실패했고, Gain은 한계와 어떻게 비교됩니까? 첨부된 측정 트레이스를 요약해 주세요."
"기한이 지났거나 교정이 임박한 PXI 자산은 무엇이며, PXI Rack 1은 연결되어 있습니까?"
테스트
SYSTEMLINK_MCP_SIMULATE=1 uv run pytest테스트는 시뮬레이션 백엔드만 대상으로 합니다. SystemLink에 대한 네트워크 연결을 열지 않습니다.
상태
개인 프로젝트, 관리자 1인. 시뮬레이션 백엔드가 지원되는 일상 사용 경로입니다. 실제 백엔드는 python-docs.systemlink.io에 문서화된 nisystemlink-clients 2.32.x API와 ni/nisystemlink-clients-python 소스를 기준으로 작성되었습니다. 이 리포지토리의 CI에서는 라이브 SystemLink Enterprise 인스턴스에 대해 실행되지 않았습니다. 교정 상태에 대한 Asset Dynamic LINQ 속성 이름은 공식 AssetIdentifier 예제의 PascalCase 스타일을 따릅니다. 라이브 서버가 해당 필터를 거부하면 이는 DEVLOG.md에 문서화된 알려진 통합 위험입니다.
Available Tools
12 toolsexecute_notebookA
Start a SystemLink Jupyter notebook execution. Requires SYSTEMLINK_MCP_ALLOW_WRITE=1.
Uses NotebookClient.create_executions. This queues work on the server; it does not wait for completion or return notebook output.
notebook_id: Notebook id to run. workspace_id: Workspace the execution belongs to. parameters: Optional notebook parameters (values are stringified for the SDK).
| Name | Required | Description | Default |
|---|---|---|---|
| parameters | No | ||
| notebook_id | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the required environment variable (SYSTEMLINK_MCP_ALLOW_WRITE=1), the internal API (NotebookClient.create_executions), async queuing behavior, and parameter stringification. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is six sentences, with the purpose and prerequisite in the first sentence and parameter details at the end. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All key aspects are covered: purpose, permission, async behavior, and parameter semantics. The output schema handles return values, so no need to describe them here. Adequate for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no parameter descriptions, so the explanation of notebook_id, workspace_id, and parameters adds crucial meaning. It clarifies the optional parameters are stringified for the SDK, which is not inferable from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Start a SystemLink Jupyter notebook execution,' a specific verb+resource that clearly states the action. It further clarifies it queues work rather than returning output, distinguishing it from sibling query/listing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes it does not wait for completion or return notebook output, implying that agents needing results should use a different tool (e.g., query_results). However, it does not explicitly name alternative tools or provide a when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_failing_stepsA
Return failing steps for one test result, with measurements versus limits.
This is the DUT-debug view: which step failed and how the measurement compared to the spec window. Step payloads are summarized; only failing steps are previewed.
result_id: Test Monitor result id. preview_limit: Max failing steps to include (capped at 50).
| Name | Required | Description | Default |
|---|---|---|---|
| result_id | Yes | ||
| preview_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it notes that 'Step payloads are summarized' and only failing steps are previewed, and it documents the 50-cap on preview_limit. It misses minor details like side-effect absence or error handling, but covers key behaviors effectively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose in the first line. Every sentence adds value, from the DUT-context to the summarized payload warning, and ends with clean parameter documentation. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two parameters and an output schema, the description covers purpose, parameter semantics, and a key behavioral constraint (cap). It doesn't address empty-result behavior, but that is minor for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only types and defaults, so the description must add meaning, and it does: result_id is clearly defined as 'Test Monitor result id' and preview_limit as 'Max failing steps to include (capped at 50)', adding the critical cap information absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence explicitly states the tool returns failing steps for one test result with measurements versus limits, using a specific verb and resource. The phrase 'DUT-debug view' adds important context that differentiates it from sibling tools like summarize_yield or query_results, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool ('This is the DUT-debug view') and implies its role in debugging failing steps. However, it does not explicitly name alternatives or provide exclusion criteria, which prevents a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calibration_dueA
List instruments whose calibration is overdue or approaching due.
This is the PXI-fleet question a generic CMMS wrapper cannot ask: which chassis or module needs cal, and when. Default statuses are PAST_RECOMMENDED_DUE_DATE and APPROACHING_RECOMMENDED_DUE_DATE.
include_out_for_calibration: Also include OUT_FOR_CALIBRATION assets. preview_limit: Max assets to include (capped at 50).
| Name | Required | Description | Default |
|---|---|---|---|
| preview_limit | No | ||
| include_out_for_calibration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing default statuses (PAST_RECOMMENDED_DUE_DATE and APPROACHING_RECOMMENDED_DUE_DATE) and the cap on preview_limit. It does not cover every edge case, but what is disclosed is valuable and goes beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by necessary context and parameter details—all in under 80 words. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two optional parameters and an output schema, the description covers all necessary context: what it does, default statuses, parameter semantics, and limits. No additional details are needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description thoroughly explains each parameter: include_out_for_calibration toggles OUT_FOR_CALIBRATION assets and preview_limit is a max with a cap. This fully compensates for the lack of schema descriptions and adds meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately states a clear verb+resource+scope: 'List instruments whose calibration is overdue or approaching due.' It also provides specific default statuses and ties the purpose to a PXI-fleet context, distinguishing it from generic wrappers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool ('which chassis or module needs cal, and when') and contrasts it with a generic CMMS wrapper, giving strong contextual guidance. However, it does not explicitly state when not to use it or name alternative sibling tools, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesA
List file metadata attached to a result or asset. Does not download contents.
file_ids: Explicit file ids. result_id: Test result whose file_ids should be listed. asset_id: Asset whose linked files should be listed. preview_limit: Max files to include (capped at 50).
| Name | Required | Description | Default |
|---|---|---|---|
| asset_id | No | ||
| file_ids | No | ||
| result_id | No | ||
| preview_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It does disclose two meaningful behaviors: it does not download file contents, and preview_limit is capped at 50. However, it does not mention what happens when no identifiers are provided, whether multiple lookup modes compose as union or intersection, or whether read access is always granted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence purpose, followed by tightly scoped bullets for each parameter. Every sentence adds information, and there is no filler or repetition. It is appropriately sized for the tool's moderate complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and all parameters are described, the description is largely complete for a simple file-metadata listing operation. The main gap is the lack of guidance on edge cases such as omitting all three identifier parameters or supplying multiple identifier sources simultaneously, but this is a minor omission for a read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining all four parameters in plain language: explicit file ids, result-attached files, asset-linked files, and the preview cap. It adds real meaning beyond the raw schema, though it stops short of clarifying parameter interactions or expected value formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List file metadata attached to a result or asset.' It also clarifies scope by stating it does not download contents, which distinguishes this metadata-listing tool from anything that fetches file bodies. The sibling context further confirms this is the file-listing operation, not a general query tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parameter descriptions provide clear context for using file_ids, result_id, or asset_id as lookup routes, which implies when the tool applies. However, it never explicitly contrasts this tool with siblings like query_results or query_assets, and it does not state whether the inputs are mutually exclusive, combinable, or authoritative when multiple are supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_assetsA
Query the asset inventory: model, serial, presence, and calibration state.
name: Substring match on asset name. serial_number: Exact serial. model_name: Substring match on model, e.g. PXIe-6368. calibration_status: OK, APPROACHING_RECOMMENDED_DUE_DATE, PAST_RECOMMENDED_DUE_DATE, or OUT_FOR_CALIBRATION. preview_limit: Max assets to include (capped at 50).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| model_name | No | ||
| preview_limit | No | ||
| serial_number | No | ||
| calibration_status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. 'Query' implies a non-mutating look-up, but there is no explicit statement that there are no side effects, no auth requirements, no rate limits, no mention of behavior for missing entries, and no return format or cursor semantics. It gives the minimum needed information but does not go beyond what the schema already says.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The main verb is in the first line, each parameter is a bullet list or a line of its own; no filler words, no redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The context (output schema: true; annotation: none) and the sibling list are simple. The tool has a clear assetInventory and supplies; no return value because an output schema is present. The description doesn't provide examples or use cases, but the essentials are all present. Since schema is present and the tool is a query, the absence of return value documentation is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% according to the context, so the description needs to compensate. It lists all 5 parameters with accurate, useful meaning: name = substring match, serial_number = exact, model = substring match, calibration_status = status enum values, preview_limit = cap (max 50). It adds concrete format details such as capitalization and the PXIe-6368 example, which are not present in the schema. Yet it could be more structured and exhaustive (e.g., the serial_number exact format).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific action ('Query') and a clear resource ('the asset inventory') with the key data dimensions listed (serial, presence, calibration state). This clearly distinguishes it from several sibling tools that query systems, products, specs, or files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description context is clear: checking the asset inventory. The parameter semantics moreover indicate the function of the filters. However, no explicit exclusion or explicit naming of the sibling alternative tool is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_productsB
Query products and part numbers used to correlate test results by revision.
family: Product family, e.g. Oscilloscopes. part_number: Exact part number / revision. name: Exact product name. preview_limit: Max products to include (capped at 50).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| family | No | ||
| part_number | No | ||
| preview_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions preview_limit is capped at 50, which is useful, but does not disclose whether the tool is read-only, what happens with no filters, or any rate limits or auth requirements. For a query tool with no annotations, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the purpose, followed by a compact parameter list. Each sentence earns its place, though the parameter list could be more integrated with the schema rather than duplicating it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered. However, with no annotations and a query tool that likely has filtering semantics, the description could explain how filters interact (e.g., are they ANDed?) and what happens when no filters are provided. The cap on preview_limit is disclosed, but other behavioral details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain each parameter's meaning (family, part_number, name, preview_limit) and notes preview_limit is capped at 50, which adds value beyond the schema. However, it doesn't clarify that all filters are optional or how they combine (AND vs OR), which would be helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool queries products and part numbers used to correlate test results by revision, which is a specific verb and resource. It distinguishes from siblings like query_results and query_specs by focusing on product/part number data, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for correlating test results by revision, but does not explicitly state when to use this tool versus query_specs or query_assets. No exclusions or alternative tool names are provided, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_resultsA
Query test results and return counts plus a bounded recent preview.
Does not dump the full result set. Counts use Test Monitor return_count; the preview is the newest matching results only.
part_number: Product revision / part number. program_name: Test program or sequence name. serial_number: DUT serial. status: Optional status.statusType filter (PASSED, FAILED, ERRORED, ...). started_after: Inclusive ISO-8601 UTC start. started_before: Inclusive ISO-8601 UTC end. preview_limit: Max result rows to include (capped at 50).
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| part_number | No | ||
| program_name | No | ||
| preview_limit | No | ||
| serial_number | No | ||
| started_after | No | ||
| started_before | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses that results are bounded, the preview is newest-only, preview_limit caps at 50, and date filters are inclusive ISO-8601 UTC. This provides solid behavioral context for a query tool, though it omits edge cases like empty-result behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly structured: a one-sentence summary, two critical behavioral constraints, then concise parameter bullets. Every sentence provides necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a rich output schema, so return-value explanation is unnecessary. Given the 7 optional parameters and no required inputs, the description fully covers input semantics, behavioral boundaries, and the core query purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema description coverage is 0%, the description documents all 7 parameters with practical meaning and constraints: status filter examples, inclusive date semantics, and preview_limit cap. This adds significant value beyond the raw schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Query test results') and defines the exact return shape ('counts plus a bounded recent preview'). It differentiates itself by noting it 'does not dump the full result set', distinguishing it from potentially broader query tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a summary plus limited preview is needed, and explicitly warns against expecting full result dumps. However, it never names alternative tools or provides explicit when-to-use vs when-not-to-use guidance against the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_specsA
Query specification limits for a product (min / typical / max, unit).
product_id: Product id or, in simulation, the part number used as product_id. preview_limit: Max specs to include (capped at 50).
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | ||
| preview_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It adds useful context beyond the schema by explaining that product_id can be a simulation part number and that preview_limit is capped at 50. It does not mention error handling or permissions, but the query nature and output scope are reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose in the first sentence. The parameter explanations are brief and directly useful, with no filler or redundancy. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, the presence of an output schema, and the clear parameter explanations, the description is largely complete. It covers purpose, parameter behavior, and a key constraint (cap at 50). It could be slightly stronger with explicit guidance on when to choose this over sibling query tools, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. Both parameters are explained: product_id is defined as 'Product id or, in simulation, the part number used as product_id,' and preview_limit is described as 'Max specs to include (capped at 50).' This adds meaningful semantics beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Query specification limits for a product' with specifics about the output (min / typical / max, unit). It distinguishes itself from siblings like query_products and query_results by focusing on specification limits rather than general product data or results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need specification limits for a product. However, it does not explicitly contrast with sibling tools like query_products or summarize_measurement, nor does it state when not to use it. The context is clear but the exclusion/alternative guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_systemsA
Query registered test systems and their connection health.
alias: System alias or id substring. connected: If set, filter on status.data.http_connected. preview_limit: Max systems to include (capped at 50).
| Name | Required | Description | Default |
|---|---|---|---|
| alias | No | ||
| connected | No | ||
| preview_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It provides some useful behavior details, such as substring matching, filtering on status.data.http_connected, and the preview_limit cap at 50, but it does not explicitly confirm this is a read-only operation or explain whether connection health is actively probed or reflects cached data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with a clear one-sentence purpose followed by concise parameter definitions. No redundant or filler content exists; every line adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter query tool with an output schema, the description covers purpose, filtering behavior, and parameter semantics well. It could go slightly further by noting the response shape or data freshness expectations, but the output schema already mitigates the need to describe return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining each parameter beyond the schema. It clarifies alias as a substring, connected as a filter on a specific status field, and preview_limit as a maximum capped at 50—useful semantic details not present in the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Query registered test systems and their connection health,' identifying both the specific resource (registered test systems) and the scope (connection health). This distinguishes it from sibling query tools like query_assets, query_products, and query_specs, which operate on different resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose statement implies when to use the tool—when you need test system information and connection health—but it does not explicitly state when not to use it or provide alternatives. No exclusions or comparisons to sibling tools are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_measurementB
Summarize a measurement table: stats plus a downsampled trace preview.
On a live server this uses DataFrameClient.query_decimated_data rather than downloading every row. Pass table_id directly, or result_id to use the first attached data table.
table_id: DataFrame table id. result_id: Test result whose data_table_ids should be used if table_id is omitted. preview_limit: Max preview points (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| table_id | No | ||
| result_id | No | ||
| preview_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses some behavioral details, such as using DataFrameClient.query_decimated_data on a live server and not downloading every row, which implies a performance-oriented approach. However, it does not explicitly state side effects, error conditions, or whether the operation is read-only. The mention of 'downsampled trace preview' and 'stats' gives partial transparency but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the main explanation in two sentences and then a brief parameter breakdown. While the parameter list is repeated in the schema, it adds clarity without being overly verbose. The structure is logically organized and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description does not specify the output format or structure of the summary, nor does it mention potential errors or edge cases (e.g., what happens if neither table_id nor result_id is provided). Given the lack of an output schema, the description could be more complete by explaining what the returned stats and trace preview contain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides helpful explanations for each parameter (table_id, result_id, preview_limit) that go beyond the schema. It clarifies the relationship between table_id and result_id (result_id is used if table_id is omitted) and defines preview_limit as a capped maximum. Since the schema itself lacks descriptions, this added semantic information is valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: summarizing a measurement table with stats and a downsampled trace preview. It is specific about the resource (measurement table) and the action (summarize), though it does not explicitly distinguish itself from sibling tools like summarize_yield, which might also produce summaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on how to use parameters (e.g., 'Pass table_id directly, or result_id to use the first attached data table') but lacks explicit direction on when to choose this tool over alternatives such as summarize_yield or query_results. There is no mention of scenarios or prerequisites for using this tool instead of others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_yieldA
Summarize pass/fail yield for test results.
Uses Test Monitor result-level status, not CMMS work-order counts. Filters are pushed to the server as Dynamic LINQ (partNumber, programName, serialNumber, status.statusType, startedAt). Yield is passed / (passed + failed).
part_number: Product revision / part number, e.g. PN-5164-B. program_name: Test program or sequence name, e.g. BoardFunctional.seq. serial_number: DUT serial. status: Optional status.statusType filter (PASSED, FAILED, ERRORED, ...). started_after: Inclusive ISO-8601 UTC start, e.g. 2026-01-01T00:00:00Z. started_before: Inclusive ISO-8601 UTC end. group_by: Break yield down by part_number, program_name, serial_number, or none.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| group_by | No | none | |
| part_number | No | ||
| program_name | No | ||
| serial_number | No | ||
| started_after | No | ||
| started_before | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Notes that it uses Test Monitor result-level status rather than CMMS work-order counts and mentions server-side Dynamic LINQ filtering, adding context beyond basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a brief intro and parameter list, but the explanations are somewhat repetitive without being bloated; still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers filtering, grouping, and data source, and the output schema exists, so no need to explain return values; lacks explicit edge-case or error handling info but is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Provides clear explanations and examples for all 7 parameters, covering meaning, format, and usage, which significantly supplements the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it summarizes pass/fail yield for test results and distinguishes from CMMS work-order counts, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage via the filter parameters and the yield summary function, but does not explicitly contrast with sibling tools like query_results or summarize_measurement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_result_propertiesA
Update keywords or properties on a test result. Requires SYSTEMLINK_MCP_ALLOW_WRITE=1.
Uses TestMonitorClient.update_result. Asset metadata cannot be patched through the current AssetManagementClient, which has no update method.
result_id: Test Monitor result id. keywords: Replacement keyword list if provided. properties: Properties to merge onto the result.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | No | ||
| result_id | Yes | ||
| properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses the write requirement (SYSTEMLINK_MCP_ALLOW_WRITE=1) and clarifies that keywords are replaced and properties are merged. It does not mention side effects or error conditions, but the update nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized, with a brief overview, a requirement note, and a clear parameter list. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It includes relevant context about the write requirement and a limitation regarding asset metadata. It does not describe the return value, but the output schema may cover that; overall it is sufficiently complete for an update operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are explained: result_id is the identifier, keywords is a replacement list, properties are merged. This adds meaning beyond the schema's type information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Update keywords or properties on a test result.' It is specific and distinguishes itself from query-related sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a required environment variable and notes that asset metadata cannot be patched via another client, implying this tool is for test results. However, it does not explicitly compare with alternatives or state when not to use it beyond the asset limitation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
execute_notebook - First observed
get_failing_steps - First observed
list_calibration_due - First observed
list_files - First observed
query_assets - First observed
query_products - First observed
query_results - First observed
query_specs - First observed
query_systems - First observed
summarize_measurement - First observed
summarize_yield - First observed
update_result_properties
TDQS
Scored across 12 tools
Each tool targets a distinct resource and action: yield aggregation, result queries, step-level failure analysis, measurement statistics, calibration status, asset/system/product/spec queries, file listing, result property updates, and notebook execution. There is no overlap; even query_results and summarize_yield differ clearly (raw counts vs pass/fail ratio). Descriptions explicitly disambiguate boundaries.
All tool names follow a consistent verb_noun pattern in snake_case: summarize_yield, query_results, get_failing_steps, list_calibration_due, execute_notebook, etc. Retrieval verbs vary (query vs list vs get) but are semantically appropriate and predictable, with no mixing of conventions.
Twelve tools is well within the ideal 3–15 range and appropriately scoped for a SystemLink MCP server covering test data, asset management, and notebook execution. Each tool adds distinct value; none feel redundant or superfluous.
The surface covers the core read workflows (yield, results, failing steps, measurements, assets, systems, products, specs, files) plus limited write actions (update_result_properties, execute_notebook). Notable gaps include lack of update/delete for assets (acknowledged as unsupported by the underlying client), no single-result full detail view beyond failing steps, and no creation of test results. However, these are minor for the apparent purpose of monitoring and analysis.
Maintenance
Related MCP Connectors
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
Analytics your AI agent can actually use. Track, experiment, and optimize via MCP.
Let AI agents query data and act across all your business apps via MCP.
Related MCP Servers
- AlicenseAqualityAmaintenanceProduction Model Context Protocol (MCP) server for business — replaces stale generic descriptions with concrete 2026 technical intelligence and data agents. Exposes dynamic KPI analytics, forecasting, anomaly detection, and schema resources across 10 enterprise domains via FastMCP over stdio and SSE transports.29AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables 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
- FlicenseNot gradedqualityCmaintenanceExposes product analytics metrics from an internal data warehouse via MCP, enabling agents to query metrics, product summaries, and event breakdowns.-
- AlicenseNot gradedqualityCmaintenanceExposes industrial motor telemetry data to AI agents via MCP and REST, enabling natural-language queries about motor status, health, and alerts. Provides a single tool and resource for retrieving real-time motor metrics and escalating critical conditions.MIT