Skip to main content
Glama

@shuji-bonji/s1000d-writer-mcp

English | 日本語

An MCP server that lets an LLM create S1000D® data modules without writing XML. The LLM passes a structured draft and numbering rules; the server builds the XML, verifies it against the XSD, the BREX and the references, and applies automatically only the fixes that have exactly one candidate (exact). A fix with several candidates is applied only from a selection, and a value outside the candidates is never accepted. By default nothing is written.

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 froms1000d.org and point the S1000D_SPEC_DIR environment variable at the extracted folder.

What it does

Tool

Description

build_data_module

Builds a data module from one draft (descript, proced, process, fault or PM) and numbering rules. The DMC, ICN and issue come from the ledger (ledger) and the CSDB, and the same sourceId always gets the same DMC. After building, it verifies the XSD, BREX and references, and applies only exact fixes, up to maxFixRounds rounds. The remaining fixes are returned in fixes[] with their candidates

convert_manual

Converts an experiential manual (@shuji-bonji/experiential-manual-model) into one data module per topic plus a publication module. Descriptions, procedures and fault isolation map directly; a screen flow becomes one process data module plus one procedure per screen. References between DMs, the PM and ICNs are resolved on top of the CSDB overlaid with the DMs just built and the ICN originals found on disk. What the conversion cannot represent is returned in notRepresented as counts

apply_fixes

Applies the fixes you chose from the candidates in fixes[]. A selection must be a copy of a candidate; a value outside the candidates, or one that does not fit a range, goes to rejected with a reason. It re-verifies after applying

create_comment

Builds a comment data module (comment) and verifies it. The sequence number is the next one in the CSDB

extract_segments

Takes the sentences a person reads out of a data module (titles, paragraphs, steps, warnings, table cells, figure captions) so they can be translated. Inline elements are replaced by {1}, {2} placeholders, and skeletonHash is returned

apply_segments

Puts translated sentences back into the data module they were taken from. The DMC stays the same and only the language changes. It stops with skeleton-mismatch when the data module changed after extraction

Write rules

  • Nothing is written by default. Only with write: true does the server write DMC-….XML into the first folder of csdbDirs (or the first of S1000D_CSDB_DIR). With no destination it writes nothing and returns the reason (no-csdb-dir).

  • A file with the same name is not overwritten (write-conflict) unless overwrite: true is passed.

  • XML that violates the XSD is not written (schema-invalid) unless allowInvalid: true is passed. schema-not-found (no XSD available) is not a violation; the file is written as unverified.

  • With write: true, convert_manual also copies the original assets under their ICN file names.

What is fixed automatically

Only a fix whose confidence is exact and which has exactly one candidate is applied (for example, replacing a value when the BREX allows a single responsible company, or removing an element the BREX forbids). several (more than one candidate, or a value given as a range) and none are not applied and are returned in fixes[]. The user chooses, and the server never fixes with a value outside the candidates. Each applied fix is returned in appliedFixes[] with the values before and after.

Verification status (verification)

Every response carries the verification status of the XSD, the BREX and the references. A missing XSD is reported as schema-not-found and a skipped step as not-run; neither is valid. The server reports the result of verification only: it does not judge conformance to S1000D and does not interpret severity.

Input errors

A mistake in the draft or the numbering rules is returned not as isError but as error: { code: "input-error", path, detail }. path is the location of the mistake (for example /body[1] or /allocation/rules/infoCodeByKind/proced). Fix it and call again.

Related MCP server: AutoCAD MCP Pro

What it does not do

WARNING
  • It does not accept XML written by an LLM. It builds only from a draft. The tools that take existing XML (apply_fixes, extract_segments, apply_segments) do not change the structure of the document.

  • It does not fix with a value outside the candidates. There is no entry point for writing a free value.

  • It does not skip verification. A built XML is always verified before it is returned.

  • It does not judge conformance to S1000D or interpret severity. Read the violations in s1000d-verify-mcp and the explanation of BREX rules in s1000d-brex-mcp.

  • It does not translate. It only takes sentences out and puts them back. The LLM or a person translates.

  • It does not create illustrations or judge Simplified Technical English (STE). For an illustration it only allocates an ICN and inserts the reference.

  • What a data module cannot represent, such as hotspot coordinates or part of scopeRefs in an experiential manual, is reported in notRepresented and never dropped silently.

  • It does not create an ACT, CCT or PCT. Applicability relies on the applic of the draft and an existing applicability repository.

Configuration

Environment variable

Meaning

S1000D_SPEC_DIR

The folder where you extracted the S1000D distribution you obtained. The XSDs (xml_schema_flat/) and the default BREX are searched under it

S1000D_CSDB_DIR

The folder holding the project's data modules. Several can be given, separated by : (; on Windows). The BREX chain, reference targets and existing issues are searched here, and the first folder is the write destination

You can also add folders with the tool argument csdbDirs (the first one is the write destination).

Config file (when environment variables are not passed, such as a Claude Desktop plugin)

When 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 set; the location can be changed with S1000D_CONFIG). Claude Desktop does not pass environment variables to a server installed as a plugin, so write the settings here in that case.

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

Environment variables take precedence when they are set. The config file is read again on every call.

Example configuration for Claude Desktop / Claude Code

{
  "mcpServers": {
    "s1000d-writer": {
      "command": "npx",
      "args": ["-y", "@shuji-bonji/s1000d-writer-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.

npx -y @shuji-bonji/s1000d-writer-mcp --http                      # http://127.0.0.1:3000/mcp
npx -y @shuji-bonji/s1000d-writer-mcp --http --port 3102 --path /writer

Argument

Default

Meaning

--host

127.0.0.1

Address to bind to

--port

3000

Port; 0 picks a free port

--path

/mcp

Path 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, 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. Because this server can write files, do not expose it without authentication.

How it works

All building, verification, fixing, comment and segment code lives in the shared library @shuji-bonji/s1000d-core; this server holds only the interpretation of arguments, the shape of the responses and the conversion from a manual to drafts (src/convert/). The input schemas import the definitions of core's draft.schema.json. The conversion is also available as @shuji-bonji/s1000d-writer-mcp/convert.

Development

npm install
npm test            # runs on self-made test data only (tests/fixtures/)
npm 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.

Available Tools

6 tools
apply_fixesA

Apply fixes to an existing data module. Each selection copies the location and ONE candidate of a fix that s1000d-verify-mcp suggest_fixes (or this server) returned: { location, action, target?, value? }. The server computes the fix candidates again and applies a selection only if it matches one of them; a value outside the candidates (or outside a range / pattern candidate) is not applied and comes back in rejected[] with the reason. "provide" candidates change the product, not the document: pass them as "product". The result is verified again. Returns xml, applied[], rejected[], verification, the fixes that remain. Writes only when write is true (a path is overwritten in place; xml is written under its own file name in the first CSDB folder).

NameRequiredDescriptionDefault
xmlNoAn existing document as an XML string (alternative to path; max 5 MB). Not for XML you wrote yourself: build new data modules with build_data_module.
pathNoFile path of the document.
writeNoWrite the result into the CSDB (the first folder of csdbDirs / S1000D_CSDB_DIR). Default false: the XML is only returned. Nothing is written when the XML is not valid against the XSD unless allowInvalid is true.
productNoThe product to evaluate applicability for. attributes: ACT productAttribute id → value; conditions: CCT cond id → value. Omit to skip the applicability check.
csdbDirsNoCSDB folders (in addition to S1000D_CSDB_DIR) used to resolve references, find BREX and number new objects. The FIRST folder is also where write: true writes.
maxFixesNoCap on the remaining fixes listed in the response (default 50).
overwriteNoWith write: true, replace a file of the same name. Default false: an existing file is left alone and reported as write-conflict.
selectionsYes
allowInvalidNoWith write: true, write even when verification.schema.state is "invalid". Default false.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full load and does well: it discloses that candidates are recomputed and selections validated against them, that failures come back in rejected[] with a reason, that provide changes the product rather than the document, that output is re-verified, and that nothing is written unless write is true. It omits permission/auth requirements and any note on partial-apply atomicity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and nearly every sentence adds operational information. The middle sentences are dense and parenthetical-heavy, which slows parsing, but there is little outright waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with nested objects and no output schema, the description compensates by enumerating the return payload (xml, applied[], rejected[], verification, remaining fixes) and the write/overwrite conditions. A short note on failure modes when selections partially match or on the CSDB folder resolution would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 89%, so the schema documents most parameters on its own. The description adds meaningful semantics for selections (location + one candidate, action/target/value) and the provide→product mapping, but does not touch path, csdbDirs, or maxFixes beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Apply fixes to an existing data module") and ties it to the upstream suggest_fixes output shape, so an agent knows this is the selection/commit step. It does not differentiate from the listed sibling apply_segments, which is a plausible source of confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly and explicitly establishes the workflow: take a location plus ONE candidate returned by suggest_fixes and pass it back, with "provide" candidates routed through the product parameter. It gives a clear condition for rejection but no explicit statement of when to prefer this over alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_segmentsA

Put translated sentences back into the data module they were taken from. The output has the same DMC with only the language changed (issueInfo too if given). It stops with error.code "skeleton-mismatch" when the data module changed since extract_segments (skeletonHash). A segment whose id is unknown, duplicated, or whose {n} placeholders do not match is not applied and is listed in unapplied[] (the original sentence stays). The result is verified. Writes only when write is true.

NameRequiredDescriptionDefault
xmlNoAn existing document as an XML string (alternative to path; max 5 MB). Not for XML you wrote yourself: build new data modules with build_data_module.
pathNoFile path of the document.
writeNoWrite the result into the CSDB (the first folder of csdbDirs / S1000D_CSDB_DIR). Default false: the XML is only returned. Nothing is written when the XML is not valid against the XSD unless allowInvalid is true.
csdbDirsNoCSDB folders (in addition to S1000D_CSDB_DIR) used to resolve references, find BREX and number new objects. The FIRST folder is also where write: true writes.
languageYesTarget language written to dmIdent/language.
maxFixesNoCap on the remaining fixes listed in the response (default 50).
segmentsYesThe translated sentences, by segment id.
issueInfoNoIssue of the translated data module (default: same as the source).
overwriteNoWith write: true, replace a file of the same name. Default false: an existing file is left alone and reported as write-conflict.
allowInvalidNoWith write: true, write even when verification.schema.state is "invalid". Default false.
skeletonHashYesThe skeletonHash returned by extract_segments.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the skeleton-mismatch failure mode, the per-segment non-application rules (unknown/duplicate id, {n} placeholder mismatch) with the original sentence preserved, and that writes only occur when `write` is true. It omits overwrite-conflict and allowInvalid behaviors, which are only documented in 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by output shape, failure mode, partial-application rules, and the write gate in a tight sequence. Every sentence carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter, nested-schema tool with no output schema, the description covers the critical behaviors (hash guard, unapplied[], verification, write gating). The response structure beyond `unapplied[]` and `error.code` — e.g., write-conflict reporting and remaining-fixes listing — is not described, though the schema hints at them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: `language` is the only thing that changes in the output, `issueInfo` is optional, `skeletonHash` is the value from extract_segments, and segment `text` must preserve {n} placeholders. `maxFixes` and `csdbDirs` are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource: putting translated sentences back into the data module they came from, and names the inverse relationship to extract_segments. An agent can immediately tell this apart from build_data_module (new content) and extract_segments (the source of the segments).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the workflow clear by tying skeletonHash to extract_segments and by gating writes on `write`. It does not explicitly say 'call extract_segments first' or name when not to use it (e.g., new content belongs in build_data_module, which only appears in the schema), so usage is strongly implied rather than fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_data_moduleA

Build ONE S1000D data module (descript / proced / process / fault) or publication module (pm) from a structured draft and number it from the allocation rules. You give titles, paragraphs, steps, tables, figures and references as a tree; the server writes the XML (you never write XML, DMCs, ICNs or the BREX reference). The XML is verified (XSD, BREX along the brexDmRef chain, references; applicability too when a product is given); fixes the server is certain about (confidence "exact") are applied automatically and verified again, up to maxFixRounds times. Returns xml, fileName, dmCode (pmCode for a pm), verification, appliedFixes[] (what was changed automatically), fixes[] (what remains: candidates to choose from), the updated ledger and the next ICN number. Writes into the CSDB only when write is true. A malformed draft comes back as error.code "input-error" with the path of the problem.

NameRequiredDescriptionDefault
draftYesThe data module as a tree. kind decides which node kinds are accepted.
writeNoWrite the result into the CSDB (the first folder of csdbDirs / S1000D_CSDB_DIR). Default false: the XML is only returned. Nothing is written when the XML is not valid against the XSD unless allowInvalid is true.
productNoThe product to evaluate applicability for. attributes: ACT productAttribute id → value; conditions: CCT cond id → value. Omit to skip the applicability check.
csdbDirsNoCSDB folders (in addition to S1000D_CSDB_DIR) used to resolve references, find BREX and number new objects. The FIRST folder is also where write: true writes.
maxFixesNoCap on the remaining fixes listed in the response (default 50).
overwriteNoWith write: true, replace a file of the same name. Default false: an existing file is left alone and reported as write-conflict.
allocationYesNumbering rules and the ledger. Pass the ledger of the previous response back so that the same sourceId keeps the same DMC and the same asset keeps the same ICN.
issuePolicyNoWhen the CSDB already has the same data module and the draft gives no issueInfo: raise issueNumber (default), raise inWork, or keep the issue.increment-issue
allowInvalidNoWith write: true, write even when verification.schema.state is "invalid". Default false.
assetFormatsNoFile format of each figure original, by assetId (or ICN): { extension: "PNG", notation: "png", publicId? }. Default: taken from the original file name for known formats (png, jpg, gif, svg, cgm, pdf).
maxFixRoundsNoHow many times to apply the fixes the server is certain about (confidence "exact") and verify again (default 3). 0 turns automatic fixing off.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does: it discloses the verification chain (XSD, BREX along brexDmRef, references, applicability), the bounded auto-fix loop with confidence "exact" and maxFixRounds, the two-tier fix reporting (appliedFixes vs fixes), write gating on write:true, and the input-error code. It also states the server keeps no state and the ledger must be round-tripped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and scope in the first clause, then verification behavior, then return values, then the write gate, then the error case — a sensible priority order. It is long but nearly every clause carries information; the 'you never write XML, DMCs, ICNs or the BREX reference' aside earns its place by preventing wasted effort.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 11 parameters, deep nesting and no output schema, the description correctly enumerates the return shape (xml, fileName, dmCode/pmCode, verification, appliedFixes, fixes, ledger, next ICN) and the failure mode. The remaining gap is routing the residual fixes[] to the sibling apply_fixes, and any note on required CSDB directory setup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the draft tree and allocation are already documented field by field. The description adds framing (you supply titles/paragraphs/steps/tables/figures/references, never XML/DMC/ICN/BREX text) and names maxFixRounds, but contributes no new per-parameter semantics. Baseline 3 is right.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — build ONE data module of a stated set of kinds or a publication module — from a structured draft, and says the DMC/PMC comes from allocation rules. The scope (one object per call) and the output artifacts are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the description never says when to pick this over the sibling apply_fixes for leftover fixes[], nor when to re-run rather than patch. The write:false / write:true split hints at a preview-then-commit workflow but requires the agent to infer it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_manualA

Convert an experiential operation manual (@shuji-bonji/experiential-manual-model JSON) into S1000D: one publication module, one data module per topic (description → descript, procedure → proced, troubleshooting → fault, screenFlow → process plus one proced per screen), a glossary data module, applicability from the scopes, and ICNs for the assets. Every data module goes through the same flow as build_data_module (build, verify, automatic exact fixes, verify again); references between the data modules are resolved against the CSDB plus the data modules built in this call. Returns dataModules[], publicationModule, assets[] (assetId → ICN and the original file; with write: true the originals are copied under the ICN file name), the ledger, a summary of verification states and notRepresented (what the draft format cannot express). Nothing is written unless write is true.

NameRequiredDescriptionDefault
writeNoWrite the result into the CSDB (the first folder of csdbDirs / S1000D_CSDB_DIR). Default false: the XML is only returned. Nothing is written when the XML is not valid against the XSD unless allowInvalid is true.
manualNoThe manual as JSON (Manual of experiential-manual-model). Alternative to manualPath.
topicsNoTopic ids to convert (default: all; the glossary is converted only when all topics are).
productNoThe product to evaluate applicability for. attributes: ACT productAttribute id → value; conditions: CCT cond id → value. Omit to skip the applicability check.
csdbDirsNoCSDB folders (in addition to S1000D_CSDB_DIR) used to resolve references, find BREX and number new objects. The FIRST folder is also where write: true writes.
languageNoLanguage of the output. Default: Manual.language ("ja" → ja-JP). A BCP 47 tag or { languageIsoCode, countryIsoCode }.
maxFixesNoCap on the remaining fixes listed in the response (default 50).
overwriteNoWith write: true, replace a file of the same name. Default false: an existing file is left alone and reported as write-conflict.
allocationYesNumbering rules and the ledger. infoCodeByKind must give the info codes for descript, proced, process and fault (there is no default).
includeXmlNoInclude the XML of every data module in the response (default: true when write is false, false when write is true).
manualPathNoPath of a manual JSON file. Relative asset paths are resolved from its folder.
originatorNo
issuePolicyNoWhen the CSDB already has the same data module and the draft gives no issueInfo: raise issueNumber (default), raise inWork, or keep the issue.increment-issue
allowInvalidNoWith write: true, write even when verification.schema.state is "invalid". Default false.
assetBaseDirNoFolder the relative Asset.source.path values are resolved from (default: the folder of manualPath).
assetFormatsNoFile format of each figure original, by assetId (or ICN): { extension: "PNG", notation: "png", publicId? }. Default: taken from the original file name for known formats (png, jpg, gif, svg, cgm, pdf).
maxFixRoundsNoHow many times to apply the fixes the server is certain about (confidence "exact") and verify again (default 3). 0 turns automatic fixing off.
defaultApplicNoapplic for data modules without scopeRefs (default: display text "All" / "すべて").
publicationModuleNoBuild the publication module too (default true).
securityClassificationYessecurityClassification for every data module (the manual has none; the value is written as given, not interpreted).
responsiblePartnerCompanyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it discloses the build/verify/auto-fix/verify loop, that references are resolved against the CSDB plus DMs built in this call, what write:true actually copies (originals renamed to ICN), and the default of no writes at all. It also names the response fields (dataModules[], publicationModule, assets[], ledger, notRepresented), which is the behavioral contract an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and the kind mapping, and nearly every clause carries information (topic→DM kind mapping, verification loop, return fields, write default). It is a dense single block with no visual structure, which makes it heavier than it needs to be for its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 21-parameter mutation-capable tool with no annotations and no output schema, the description covers the write semantics, the verification pipeline, the response shape and the limits of the draft format (notRepresented). The remaining depth on parameters like allocation.ledger and issuePolicy lives in the schema, so nothing critical is missing, though a note on failure/partial-write behavior would complete it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 90%, so the schema already explains allocation, ledger, issuePolicy, allowInvalid and the rest. The description adds value mainly for write and for the return shape rather than for individual parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Convert an experiential operation manual ... into S1000D') and then enumerates the exact output artifacts (one PM, one DM per topic with kind mapping, glossary DM, ICNs). It explicitly names the sibling relationship to build_data_module, so an agent can distinguish whole-manual conversion from single-DM building.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is clear from context: this is the batch/manual-level path, and 'Every data module goes through the same flow as build_data_module' tells the agent how the two relate. It also states the glossary-only-when-all-topics rule and that nothing is written unless write is true. It stops short of an explicit 'use build_data_module instead when you have a single DM' routing sentence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_commentA

Build a comment data module (comment.xsd): a remark about data modules, publication modules, DMLs or DDNs, with the type (q / i / r), the priority code (cp01–cp99), paragraphs, the originator and the sender. The enumerations are written as given and not interpreted. The sequence number defaults to the next free one in the CSDB. The XML is verified (comment.xsd, BREX). Returns xml, fileName, commentCode, verification, fixes[]. Writes only when write is true.

NameRequiredDescriptionDefault
refsNoWhat the comment is about (all of one kind). Empty: noReferences.
titleNo
writeNoWrite the result into the CSDB (the first folder of csdbDirs / S1000D_CSDB_DIR). Default false: the XML is only returned. Nothing is written when the XML is not valid against the XSD unless allowInvalid is true.
remarksNo
csdbDirsNoCSDB folders (in addition to S1000D_CSDB_DIR) used to resolve references, find BREX and number new objects. The FIRST folder is also where write: true writes.
languageYes言語(language 要素)
maxFixesNoCap on the remaining fixes listed in the response (default 50).
brexDmRefNoBREX the comment follows (default: the default BREX in S1000D_SPEC_DIR).
issueDateNoYYYY-MM-DD (default today).
issueTypeNo
overwriteNoWith write: true, replace a file of the same name. Default false: an existing file is left alone and reported as write-conflict.
seqNumberNoDefault: the next free number in the CSDB.
originatorYes
paragraphsYessimplePara texts, written as given.
commentTypeYes
senderIdentYesSender enterprise code (5 characters).
allowInvalidNoWith write: true, write even when verification.schema.state is "invalid". Default false.
responseTypeNort01–rt99. Omit for no commentResponse.
modelIdentCodeYes
yearOfDataIssueNoDefault: this year.
commentPriorityCodeYes
securityClassificationYes01–99, written as given.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses that enumerations are passed through uninterpreted, that the sequence number defaults to the next free one in the CSDB, that output is verified against comment.xsd and BREX, that the response contains xml/fileName/commentCode/verification/fixes[], and that nothing is written unless write is true. It omits overwrite-conflict and allowInvalid semantics, though the schema covers those.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences with the resource identity front-loaded and no filler. The first sentence is long and packs the field list into one clause, but every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 22-parameter, deeply nested tool with no output schema, the description supplies the return shape (xml, fileName, commentCode, verification, fixes[]) and the write-safety model, which are the two biggest gaps. Missing pieces — directory resolution and invalid-write override — are already documented on the corresponding schema properties.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 68%, so the schema does most of the work for the 22 parameters. The description adds real meaning for a few — comment type (q/i/r), priority range cp01–cp99, paragraphs, originator/sender, and the seqNumber default — but leaves the majority of parameters (refs, csdbDirs, brexDmRef, responseType, maxFixes) to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — build a comment data module (comment.xsd) — and defines the resource precisely as a remark about data modules, publication modules, DMLs or DDNs. It does not explicitly contrast itself with the sibling build_data_module, so an agent must infer the split from the resource noun rather than from a stated exclusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only conditional guidance is 'Writes only when write is true', which is about mode rather than tool selection. There is no statement of when to prefer this over build_data_module, nor prerequisites such as an existing CSDB or BREX. Usage is implied by the resource description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_segmentsA

Take the sentences that a person reads out of a data module so they can be translated: titles, paragraphs, step texts, warnings / cautions / notes, table cells and figure captions. Each segment has a stable id, its XPath, a context hint and the text, with inline elements (emphasis, references …) replaced by {1}, {2} placeholders that must stay in the translation. Attribute values, DMCs, ICNs, applicability expressions and ids are never offered. Also returns the skeletonHash to pass to apply_segments. The server does not translate and does not score translations.

NameRequiredDescriptionDefault
xmlNoAn existing document as an XML string (alternative to path; max 5 MB). Not for XML you wrote yourself: build new data modules with build_data_module.
pathNoFile path of the document.
includeNoWhich kinds of sentences to return (default: all).
maxSegmentsNoCap on the number of segments returned.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and discloses substantial behavior: segment structure (stable id, XPath, context hint, text), inline placeholder rules, excluded values (attribute values, DMCs, ICNs, applicability expressions, ids), and the skeletonHash return. It still does not explicitly state read-only status, file/auth constraints, or error behavior, so it is not fully complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and dense, moving from purpose to segment structure to exclusions to the apply_segments linkage. Each sentence contributes, though the middle sentences are information-heavy and could be split for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must explain returns, and it does: segments with id, XPath, context hint, text, plus skeletonHash. It omits how maxSegments truncation behaves, error cases, and file access expectations, but for an extraction tool with fully documented input parameters, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description mentions the content categories corresponding to the include enum and the placeholder convention, but it adds no syntax or format meaning for xml versus path or for maxSegments behavior beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Take the sentences that a person reads out of a data module so they can be translated.' It enumerates the exact content types returned and explicitly excludes technical values, making it distinguishable from sibling tools like build_data_module and apply_segments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context: extraction for translation, then pass the skeletonHash to apply_segments. It also states what the server does not do (translate or score). However, it does not explicitly name when not to use this tool versus alternatives such as build_data_module or convert_manual, leaving some routing to inference.

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.

  1. 6 tool updatesv0.1.2
    • First observedapply_fixes
    • First observedapply_segments
    • First observedbuild_data_module
    • First observedconvert_manual
    • First observedcreate_comment
    • First observedextract_segments

TDQS

A4/5.0

Scored across 6 tools

Disambiguation4/5

Each tool targets a distinct operation: drafting a DM/PM, bulk conversion of an external manual format, applying verifier-suggested fixes, building a comment module, and the tightly paired extract/apply translation tools. The only overlap is build_data_module versus convert_manual, since the latter reuses the former's build/verify flow, but the input domains (structured draft vs experiential-manual JSON) are clearly separated in the descriptions.

Naming Consistency5/5

All six names follow a strict snake_case verb_noun pattern (build_, convert_, apply_, create_, extract_, apply_). The prefixes are semantically accurate: build/create for new artifacts, apply_ for mutating operations, extract_ for read/export.

Tool Count5/5

Six tools is well-scoped for an S1000D authoring server, with no filler: authoring, bulk conversion, remediation, commenting, and a clear extract/apply pair for translation. Nothing appears redundant or missing that would require a single tool to bolt on unrelated modes.

Completeness3/5

The toolset covers creation, fixes, commenting, and translation round-trips, but there is no read/list/get operation to inspect or retrieve existing data modules from the CSDB, which is a real dead end (e.g. you cannot list candidates before extracting or fixing). There is also no DML/DDN authoring or delete/retire operation, so the lifecycle is only partially covered.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides LLM agents with a toolset for reviewing S1000D technical publications, including XML schema validation, cross-reference and applicability checks, skeleton generation, and AI-suggested fixes.
    1
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to draft, inspect, and validate CAD drawings through a large typed tool catalog, driving either a live desktop CAD seat over COM or a headless ezdxf engine on any platform. It covers ISO GD&T and dimension-tolerance checks plus P&ID, mechanical, and architectural sheet generation, with selectable tool packs and a low-token discovery mode.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to create, edit, validate, and read back production-grade CAD drawings — including P&ID sheets, mechanical parts and assemblies, and architectural floor plans with measured areas and schedules — through a single typed tool contract that runs either live via COM on Windows or headlessly via ezdxf anywhere. It also supports standards-aware dimensioning, ISO GD&T and tolerance checks, takeoff workbooks, and drawing understanding, diffing, and critique.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables an LLM to read S1000D BREX data modules and check data modules against them, reporting allowed elements, values, SNS code meanings, and permitted illustration formats. Also returns each rule violation with its XPath location, actual value, rule ID, and severity, following the BREX reference chain layer by layer.
    5
    1,178 npm
    MIT