S1000D Verify (S1000D Stack)

io.github.shuji-bonji由 GitHub 帳號 shuji-bonji 發布v0.7.0更新於 Nov 7, 2026

Validate S1000D data modules: XSD, BREX chain and reference resolution as one verification status.

已驗證STDIO僅桌面檔案與儲存開發者工具

概覽

AI 產生的概覽

驗證 S1000D 資料模組的 XSD、BREX 規則與參照,並彙整成一個附證據的驗證狀態。

可以做什麼
  • 依良構性、XSD、BREX 鏈、參照解析的順序驗證單一資料模組,給出違規行號與位置
  • 單獨執行 XSD 驗證,並列出規格目錄下可用的 schema
  • 檢查 dmRef、pmRef、ICN、internalRef 與 applicRefId 的目標,回報未解析項目及原因
  • 一次執行驗證資料夾內全部 CSDB 物件,支援分頁讀取並可輸出 JSON 報告
  • 針對每項發現提供修正候選及其來源與確定程度,但不實際修改文件
  • 將資料模組清單或交付通知與 CSDB 核對,並列出未登錄的物件
適用情境
適合助理處理 S1000D 技術文件時,在依賴某個資料模組前確認它究竟被檢查到什麼程度,或排查 CSDB 中的 schema、BREX 與失效參照問題。
執行需求
透過 npx 執行的本機 Node.js 程序。需自行從 s1000d.org 取得 S1000D 規格,並以 S1000D_SPEC_DIR 指向解壓目錄(xml_schema_flat 下的 XSD 與預設 BREX);專案資料模組透過 S1000D_CSDB_DIR 或 csdbDirs 參數提供,也可寫入 ~/.config/s1000d-stack/config.json 設定檔。
安裝前請注意
規格、schema 與預設 BREX 未隨套件散布,需依其使用條款自行取得。schema 有效或 BREX 通過並不代表符合 S1000D,以文字描述的規則會以人工檢查項目回傳。schema 無效時 BREX 結果可能誤報或被掩蓋。修正僅為候選,不會寫入文件。可選的 HTTP 模式不含驗證與授權,綁定到非本機位址時需自行加上反向代理與存取控制。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 S1000D Verify (S1000D Stack),將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

@shuji-bonji/s1000d-verify-mcp

English | 日本語

An MCP server that lets an LLM know, with evidence, how far an S1000D® data module has been checked. It performs three steps — validation against the XML schema (XSD), a check against BREX (Business Rules Exchange), and resolution of references (dmRef, pmRef, ICN, internalRef and applicRefId) — and returns the results combined into a single verification status (verification). This verification status has the same shape as the one s1000d-reader-mcp embeds in its content responses.

[!IMPORTANT] This is a personal project and is not affiliated with ASD (Aerospace, Security and Defence Industries Association of Europe). S1000D® is a registered trademark of ASD. The S1000D specification, XML schemas, default BREX and official samples are not included in any package or repository, because their terms of use do not grant redistribution. To run XSD validation and checks against the default BREX, obtain them from s1000d.org yourself and point the S1000D_SPEC_DIR environment variable at the extracted folder.

What it does

ToolDescription
verify_data_moduleValidates one data module in the order well-formedness → XSD → BREX chain → references, and returns verification (the verification status) together with the details of each step (line numbers of XSD violations, locations of BREX violations, unresolved references and their reasons)
validate_schemaRuns XSD validation only. The XSD to use is chosen from the file name in xsi:noNamespaceSchemaLocation and looked up under xml_schema_flat/ below S1000D_SPEC_DIR. The issue is read from the Issue number: line at the top of brex.xsd
check_referencesCollects references of 5 kinds (dmRef / pmRef / ICN / internalRef / applicRefId) and returns whether each target exists, with a reason. A dmRef to a chapter of the specification (model identification code S1000D) is not a broken reference, so it is reported separately
verify_csdbValidates the CSDB objects in a folder (DMC and PMC by default) in one run, and returns the verification status of each object and a count summary. Read the results in parts with offset / limit, and write the details to JSON with reportPath
suggest_fixesRuns the same verification as verify_data_module and returns fix candidates for each finding. The server decides the candidates and adds their origin (BREX rule ID, XSD definition, CSDB, ids in the document, ACT/CCT/PCT) and their certainty (exact / several / none). If product is given, applicability that cannot be decided because the product lacks a value also gets candidate values. It does not apply fixes
reconcile_dmlReconciles a data module list (DML) or a data dispatch note (DDN) with the CSDB. For each DML entry (dmRef / pmRef / infoEntityRef / dmlRef) and each DDN delivery item (dispatchFileName) it returns found / issue-mismatch (the object exists but not the listed issue; the latest issue in the CSDB is given) / not-found / not-checked (commentRef), plus the DMs and PMs that are in the CSDB but not listed in the DML (notListed). Omit both path and xml to reconcile every DML and DDN in the CSDB. dmlType / dmlEntryType / issueType are not interpreted
list_schemasReturns the list of xml_schema_flat/ folders found under S1000D_SPEC_DIR (issue, number of XSDs, schema names). Use it to investigate the cause of schema-not-found

Verification status (verification)

FieldValueMeaning
schema.statevalid / invalid / schema-not-found / not-runXSD found and validated with 0 violations / violations found / XSD not found (reason in reason) / skipped with skip
brex.statepassed / violations / incomplete / not-run0 violations in every layer / violations found / an unresolved BREX or a rule that cannot be evaluated / skipped
references.stateresolved / unresolved / not-run0 unresolved / unresolved references found / skipped

schema-not-found is not valid. It means that XSD validation did not run.

What it does not do

[!WARNING]

  • It does not decide conformance to S1000D. schema: valid and brex: passed mean only that no errors were found against the XSD and the BREX rules that a machine can check. nonContextRules (agreements written as prose) are returned as manualChecks, and a person makes the judgement. A project's business rules document is outside the scope of every tool.
  • It does not return explanations of BREX rules or the meaning of values. That is the job of explain_brex / lookup_value in s1000d-brex-mcp. Severity level codes (brsl01 to brsl99) are returned as they are.
  • It does not evaluate applicability (which product the content applies to). check_references only looks at whether the target of applicRefId exists. The evaluation is done by s1000d-reader-mcp. The exception is suggest_fixes with product, which reports only applicability that cannot be decided because the product lacks a value.
  • It does not apply fixes to the document. suggest_fixes only returns candidates. Have the LLM choose among the candidates, and ask the user when confidence is none (the instructions say the same).
  • It does not interpret DML values (dmlType / dmlEntryType / issueType). reconcile_dml compares identifiers and issues only; it does not verify the content of the listed objects (use verify_csdb for that).

[!NOTE] In a document that violates the XSD, elements may be in positions that differ from the specification, so BREX violations can be reported falsely or hidden. When schema.state is invalid, read the BREX results as a rough indication only (the response also says so in _notes).

Configuration

Environment variableDescription
S1000D_SPEC_DIRThe folder where you extracted the S1000D distribution you obtained. The XSDs (xml_schema_flat/; extract the inner "XML Schema Package" zip beforehand) and the default BREX (DMC-S1000D-*-04-10-0301-00A-022A-D_*.XML) are looked up below this folder. The copies of the XSDs inside the data dictionary are not used (their imports are absolute URLs and cannot be resolved offline)
S1000D_CSDB_DIRThe folder that holds the project's data modules. Several folders can be given, separated by : (; on Windows). The referenced DM, PM and ICN files and the BREX in the middle of the chain are looked up here

Folders can also be given with the tool argument csdbDirs. When the argument is given, only those folders are used; S1000D_CSDB_DIR and csdbDirs in the config file are not used (they are not added together). Folders that do not exist are skipped and listed in _notes of the response. When none is left, the tool returns no-csdb (below).

Errors

An error that the caller can fix by changing an argument is not returned as a tool failure (isError) but in the same shape as s1000d-writer-mcp.

json
{ "error": { "code": "file-not-found", "path": "/path", "detail": "File not found: /path/to/DMC-….XML" } }
codeMeaning
file-not-foundThere is no file at the path given in the argument
no-csdbNo CSDB folder exists (pass csdbDirs or set S1000D_CSDB_DIR)
input-errorAn argument is malformed, or a required argument is missing

path names the argument to fix (/path, /csdbDirs and so on), not a file path.

Config file (when environment variables are not passed, as with plugins in Claude Desktop)

If S1000D_SPEC_DIR / S1000D_CSDB_DIR are not set, the server reads the config file ~/.config/s1000d-stack/config.json (under XDG_CONFIG_HOME if it is set; S1000D_CONFIG changes the location). Claude Desktop does not pass environment variables to servers installed as plugins, and does not substitute ${VAR} written in the plugin's env. When you install the server as a plugin, write the folders here.

json
{  "specDir": "/path/to/s1000d/issue-7",  "csdbDirs": ["/path/to/your/csdb"]}

Environment variables take precedence when they are set. Paths that start with ~/ are accepted. The config file is read again on every call, so the server does not need to be restarted after you edit it.

Configuration example for Claude Desktop / Claude Code

json
{  "mcpServers": {    "s1000d-verify": {      "command": "npx",      "args": ["-y", "@shuji-bonji/s1000d-verify-mcp"],      "env": {        "S1000D_SPEC_DIR": "/path/to/s1000d/issue-7",        "S1000D_CSDB_DIR": "/path/to/your/csdb"      }    }  }}

Running over HTTP (embedding in a product)

The default is stdio. With --http the server starts over Streamable HTTP, so a CSDB product's server or a web application can call it over HTTP (the embedding foundation of stage 2.5).

sh
npx -y @shuji-bonji/s1000d-verify-mcp --http                      # http://127.0.0.1:3000/mcpnpx -y @shuji-bonji/s1000d-verify-mcp --http --port 3102 --path /verify
ArgumentDefaultMeaning
--host127.0.0.1Address to bind to
--port3000Port; 0 picks a free port
--path/mcpPath of the MCP endpoint. GET /healthz returns the name and version
--allowed-host(see below)Host names allowed in the Host header; comma-separated or repeated
--allowed-origin(see below)Host names allowed in the Origin header

When --host is a loopback address (127.0.0.1 / ::1 / localhost), Host and Origin are limited to localhost names (DNS rebinding protection). When bound to any other address they are not checked, so put the server behind the product's reverse proxy or authentication. Authentication, authorization and multi-tenancy are not part of this server. Environment variables and the config file work the same as with stdio.

How it works

All validation logic lives in the shared library @shuji-bonji/s1000d-core; this server holds only the interpretation of arguments and the shape of the responses. XSD validation uses libxml2-wasm (the WebAssembly build of libxml2), and each XSD is compiled once and reused, so the 106 official samples of Issue 7 are validated in under 0.5 seconds. The BREX check calls the same functions as s1000d-brex-mcp, so the results of the two servers match.

Development

sh
npm installnpm test            # runs with self-made test data onlynpm run test:spec   # uses the distribution you obtained (set the location with S1000D_SPEC_DIR; default ../../specs/s1000d/issue-7)npm run build && S1000D_SPEC_DIR=/path/to/issue-7 npm start   # starts over stdio

License

MIT. S1000D® is a registered trademark of ASD. This software is not affiliated with ASD and does not include the specification, schemas or official samples.

來源:README.md,提交 818402b

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

3
  1. v0.7.0最新Nov 7, 2026
  2. v0.6.1Oct 29, 2026
  3. v0.1.1Oct 26, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分