S1000D Writer MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| S1000D_CSDB_DIR | No | 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. When not set, the server reads the config file ~/.config/s1000d-stack/config.json instead. | |
| S1000D_SPEC_DIR | No | The folder where you extracted the S1000D distribution you obtained. The XSDs (xml_schema_flat/) and the default BREX are searched under it. When not set, the server reads the config file ~/.config/s1000d-stack/config.json instead. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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. |
| 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. |
| 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). |
| 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. |
| 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. |
| 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 6 tools
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.
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.
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.
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.