S1000D Reader (S1000D Stack)

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

Read S1000D data and publication modules as structure, with applicability and verification status.

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

概覽

AI 產生的概覽

從本機 CSDB 讀取 S1000D 資料模組與出版模組,以結構化形式回傳,並附上適用性判定與驗證狀態。

可以做什麼
  • 列出 CSDB 中的資料模組、PM、DML、DDN、IMF 與 UPF,含 DMC、標題、版次與適用性文字,可依代碼或標題篩選
  • 以結構讀取資料模組:識別與狀態、本文樹、編號步驟、警告、表格、插圖與帶標題的參照,或只回傳標題與規模的大綱
  • 以目錄形式讀取出版模組,並解析 dmRef 與 pmRef 的目標
  • 將 DMC、PMC 或 ICN 解析為 CSDB 中的檔案
  • 回傳適用性詞彙(ACT、CCT、PCT),並依指定產品把內容標記為適用、不適用或無法判定
  • 讀取 ICN 中介資料檔:ICN、版次、標題、關鍵字與安全等級
適用情境
適合需要處理本機 CSDB 中 S1000D 技術文件的場合:助理需要文件結構、步驟編號、警告與參照目標而非原始 XML,或需要判斷哪些內容適用於某項產品時使用。
執行需求
透過 npx 以 stdio 在本機執行(需要 Node.js)。需自行從 s1000d.org 取得 S1000D 規格發行包並以 S1000D_SPEC_DIR 指向它,資料模組目錄透過 S1000D_CSDB_DIR 或 csdbDirs 參數指定。未傳環境變數時會從使用者設定目錄下的設定檔讀取路徑。不需驗證。
安裝前請注意
S1000D 規格、XML 結構描述與預設 BREX 未隨套件散布,須依其使用條款自行取得。伺服器只讀取,不做摘要、翻譯或合規判定。未通過 XSD 驗證的文件結構可能錯位;被略過的驗證步驟會標為 not-run 而非 valid。選用的 HTTP 模式沒有驗證與授權,綁定到非回送位址時不檢查 Host 與 Origin 標頭。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

@shuji-bonji/s1000d-reader-mcp

English | 日本語

An MCP server that lets an LLM read S1000D® data modules and publication modules as structure rather than as XML. It returns the heading hierarchy, numbered steps, warnings, cautions and notes, illustrations (ICN), tables and the titles of reference targets intact, and the server evaluates which product the content applies to (applicability) and passes on only the result. Every response carries how far the document has been verified (verification).

[!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. Obtain them from s1000d.org and point the S1000D_SPEC_DIR environment variable at the extracted folder.

What it does

ToolDescription
list_data_modulesLists the data modules in a CSDB (and, on request, PMs, DMLs, DDNs, IMFs and UPFs) with their DMC, title, issue, language, schema name and applicability display text. Filters by model identification code, system code, information code, schema name and title text. A DML or DDN row also carries its code, issue date, entry or item count and a reconciliation summary against the CSDB (found / issue-mismatch / not-found / not-checked; for a DML also how many DMs and PMs it does not list). The per-entry result comes from reconcile_dml in s1000d-verify-mcp
read_data_moduleReads one data module as structure: the identification and status section, the body tree (sections, paragraphs, lists, tables, illustrations, warnings, numbered steps and requirements, process branches, fault isolation questions and answers), references (with titles) and the verification status. Pass product to mark each block applicable / notApplicable / undetermined. With section: "outline" it returns only headings, step numbers, the first sentence and the size of each subtree (nodes, characters, warnings), so a large data module can be surveyed before its body is read
read_publication_moduleReads a publication module as a table of contents: the pmEntry tree and the resolved target of each dmRef / pmRef (file, title, issue)
resolve_referenceResolves a DMC, PMC or ICN to a file in the CSDB. For an ICN it also returns the DOCTYPE declaration of the referencing DM (file name and NOTATION)
describe_applicabilityReturns the applicability vocabulary: product attributes from the ACT (id, name, enumerations, identifiers), conditions from the CCT, products from the PCT (values that can be passed to product as they are), the applic statements of the DM (id and display text), and attributes to which the PCT assigns no value. It evaluates nothing
read_icn_metadataReads an ICN metadata file (IMF): ICN, issue, title, keywords, security classification and a list of the items in the status section

Reading applicability

StateMeaning
applicableApplies to the product you passed
notApplicableDoes not apply. omitNotApplicable: true leaves it out of the body
undeterminedCannot be evaluated. reason says why (the name of an attribute the product lacks, product not given, an applicIdentValue missing from the applicability repository). This does not mean "does not apply"

The server does not return assert / evaluate expressions. Look up the attributes and values you need with describe_applicability and pass them to product in the form { "attributes": { "model": "…" }, "conditions": { … } }.

Verification status (verification)

By default the server runs XSD validation only (verify: "schema"). verify: "full" also checks against the BREX (Business Rules Exchange) chain and resolves references; verify: "none" skips them. A skipped step is reported as not-run, and a missing XSD as schema-not-found; neither is valid. In a document that violates the XSD, elements may be in positions that differ from the specification, so treat the reading of the body with suspicion as well.

Security classification (securityClassification) and size (size)

Every read_data_module and read_publication_module response starts with securityClassification: dataModule (the value in the identification and status section) and inContent (the number of body elements per value). The server does not interpret the values (S1000D leaves their meaning to the project). An agent can decide how to handle the content before quoting it. The body carries size (nodes, characters, count per kind, number of warnings) so the amount to read can be estimated.

What it does not do

[!WARNING]

  • It does not summarise or translate. Its job is to return the material a summary needs (headings, step numbers, warning types, reference targets) without dropping anything.
  • It does not judge conformance to S1000D. Read the details of XSD and BREX violations with s1000d-verify-mcp, and the explanation of BREX rules with s1000d-brex-mcp.
  • The body is structured for 5 types only: descript / proced / process / fault / pm. Other types return content.structured: false and only the identification and status section. Unknown elements are kept as kind: "unknown" with their text only and counted in content.unknownElements.

Configuration

Environment variableDescription
S1000D_SPEC_DIRThe folder where you extracted the S1000D distribution you obtained. The server looks for the XSD (xml_schema_flat/) and the default BREX under it. It does not use the copies of the XSD inside the data dictionary
S1000D_CSDB_DIRThe folder that holds the project's data modules. Several folders can be given, separated by : (; on Windows). Reading by DMC, reference targets, the ACT, CCT and PCT, and the applicability repository 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)
not-foundThe DMC, PMC or ICN is not in the CSDB
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.

Example configuration for Claude Desktop / Claude Code

json
{  "mcpServers": {    "s1000d-reader": {      "command": "npx",      "args": ["-y", "@shuji-bonji/s1000d-reader-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-reader-mcp --http                      # http://127.0.0.1:3000/mcpnpx -y @shuji-bonji/s1000d-reader-mcp --http --port 3101 --path /reader
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 reading, evaluation and validation code lives in the shared library @shuji-bonji/s1000d-core; this server holds only the interpretation of arguments and the shape of the responses. The verification status is built with the same function as s1000d-verify-mcp, so the results of the two servers agree.

Development

sh
npm installnpm test            # runs on self-made test data onlynpm run test:spec   # uses the distribution you obtained (location given by S1000D_SPEC_DIR; default ../../specs/s1000d/issue-7)npm run build && S1000D_SPEC_DIR=/path/to/issue-7 S1000D_CSDB_DIR=/path/to/csdb npm start   # start 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,提交 f84ae46

工具

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

版本歷史

3
  1. v0.8.0最新Nov 7, 2026
  2. v0.7.1Oct 29, 2026
  3. v0.1.1Oct 26, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

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

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

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

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