S1000D MCP Server
by i2oss
README.md
# S1000D MCP Server
An MCP (Model Context Protocol) server that gives an LLM agent a working toolset for
reviewing **S1000D** technical publications — the structured-authoring XML standard
used across aerospace and defense for maintenance and engineering documentation.
## The problem
S1000D content is authored as small, modular XML units called **data modules**, each
identified by a structured **Data Module Code (DMC)**, validated against publicly
published XML schemas, cross-referenced against other data modules and graphics, and
filtered by an **applicability** model that says which content applies to which
product variant or configuration. In a real authoring environment, tools like
Arbortext Editor, Windchill, and DevTrack handle schema validation, cross-reference
integrity, applicability checking, and change-impact tracking as separate, disjoint
steps in someone else's workflow.
This project reimplements the *spirit* of that tooling as a set of MCP tools an LLM
agent can call directly — and then chains those tools into a single agentic review
workflow via a `SKILL.md` — using only public S1000D schema documentation and
entirely hand-built, non-proprietary sample data modules. No proprietary or
work-related content is used anywhere in this repository.
## Planned tools
| Tool | Purpose |
|---|---|
| `validate_xml_schema` | Validate a data module against the public S1000D XSD; return structured errors with line numbers. |
| `check_cross_references` | Parse a directory of data modules, build a reference graph (DMC / graphic references), flag dangling or orphaned references. |
| `generate_data_module_skeleton` | Scaffold a new, schema-valid empty data module from a template, given DMC parts, info code, and title. |
| `check_applicability` | Validate applicability annotations against a sample Applicability Cross-reference Table (ACT). |
| `suggest_fix` | Given a validation error and its surrounding XML context, call the Anthropic API (with an S1000D-authoring-rules system prompt) for a suggested corrected snippet and explanation. |
On top of the individual tools, a `review-data-module` `SKILL.md` chains them into one
workflow: validate → check cross-references → check applicability → `suggest_fix` for
each failure → summarize findings in a report.
## Status
🚧 Early development — see the [roadmap](#roadmap) below and the repo's Issues for
what's in progress.
## Tech stack
- **Language:** Python (3.10+), managed with [uv](https://docs.astral.sh/uv/)
- **XML validation:** [`lxml`](https://lxml.de/) against the public S1000D XSD
- **LLM:** Anthropic API (Claude)
- **MCP:** the official [Python MCP SDK](https://github.com/modelcontextprotocol/python-sdk)
- **Testing:** `pytest`, against a small hand-built corpus of sample data modules
(some valid, some deliberately broken)
- **CI:** GitHub Actions running `pytest` on push
## Setup
```bash
git clone https://github.com/i2oss/s1000d-mcp.git
cd s1000d-mcp
uv sync
```
Run the server:
```bash
uv run s1000d-mcp
```
### Using it with Claude Desktop / Claude Code
Add to your MCP client config (e.g. `claude_desktop_config.json`):
```json
{
"mcpServers": {
"s1000d": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/s1000d-mcp", "run", "s1000d-mcp"]
}
}
}
```
## Roadmap
- [ ] Core tool set (schema validation, cross-references, skeleton generation,
applicability, `suggest_fix`)
- [ ] `review-data-module` SKILL.md
- [ ] GitHub Actions CI
- [ ] `v0.1.0` release
- [ ] DITA schema support
- [ ] Simplified Technical English (STE)-style rule linting
- [ ] CLI wrapper
## About
Built by [Ross Shelton](https://rwshelton.com) as a demonstration of agentic AI
development — MCP tooling and Claude `SKILL.md` workflows — applied to a real
technical-documentation problem, drawing on experience authoring S1000D-compliant
content professionally. All sample data modules in this repo are fictional and
non-proprietary.
## License
MIT — see [LICENSE](LICENSE).
TDQS
A3.9/5.0
Scored across 1 tool
Disambiguation5/5
With only one tool, there is no possibility of confusion or overlap. The ping tool has a clearly distinct purpose as a health-check.
Naming Consistency5/5
A single tool named 'ping' uses a clear, standard convention. There are no mixed styles or inconsistent patterns to penalize.
Tool Count1/5
The server is named for S1000D but provides only a trivial ping placeholder. This is an extreme mismatch for the apparent domain scope.
Completeness1/5
No actual S1000D functionality is exposed; the description explicitly states the tool is a placeholder before real tooling is added. The surface is severely incomplete.
Maintenance
ActivityMaintained
ResponsivenessNo issues