Siemens Docs MCP
An MCP server that lets an AI assistant search and read Siemens documentation live — any publication on docs.tia.siemens.cloud (TIA Portal, STEP 7, WinCC Unified, Openness, …) and docs.industrial-operations-x.siemens.cloud (Industrial Operations X) — plus a CLI that exports a whole publication to a tree of Markdown files.
Built to solve the problem of documentation portals that only offer low-quality PDF exports or JavaScript-rendered web views, making the content difficult to search, reference, or feed to AI tools.
Installation
PyPI
pip install siemens-docs-mcp
This installs two commands: siemens-docs-mcp (the MCP server) and siemens-docs-export (the Markdown exporter). Requires Python 3.11+.
From source
git clone https://github.com/Czarnak/siemens-docs-mcp
cd siemens-docs-mcp
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .
# development (pytest, ruff, pip-audit; needs pip >= 25.1):
pip install -e . --group dev
MCP server
The server speaks MCP over stdio. Register it with Claude Code:
# from PyPI, no manual install (needs uv)
claude mcp add siemens-docs -- uvx siemens-docs-mcp
# or an installed copy
claude mcp add siemens-docs -- siemens-docs-mcp
# from a source checkout: <repo>/.venv/Scripts/siemens-docs-mcp (Linux/macOS: <repo>/.venv/bin/siemens-docs-mcp)
Pass settings with -e, e.g. claude mcp add siemens-docs -e SIEMENS_DOCS_LOCALE=de-DE -- uvx siemens-docs-mcp.
Tools:
| Tool | Purpose |
|---|---|
search_docs |
Full-text search (filter by product, version, locale, host). |
read_page |
Read one page as Markdown; page through long pages with offset. |
get_toc |
Table of contents of a publication or of the subtree under a topic URL. |
list_publications |
List publications; discover valid product / version values. |
Any reader URL returned by a tool (or copied from the browser) is valid input to read_page and get_toc.
Environment variables:
| Variable | Default | Meaning |
|---|---|---|
SIEMENS_DOCS_HOSTS |
(none) | Comma-separated extra hosts, appended to the built-in two (docs.tia.siemens.cloud, docs.industrial-operations-x.siemens.cloud). |
SIEMENS_DOCS_LOCALE |
en-US |
Default locale for search and listings. |
SIEMENS_DOCS_MIN_INTERVAL |
0.3 |
Minimum seconds between requests to a host. |
The publication catalog and TOCs are cached in memory (not on disk), so the first call per host takes a few seconds.
Markdown export (CLI)
Export a whole publication to Markdown — one file per page, folders mirroring the navigation hierarchy. Create a config with any reader URL of the publication (a topic URL exports the whole publication):
# my_docs.yaml
name: tia_openness_v21
url: "https://docs.tia.siemens.cloud/r/en-us/v21/tia-portal-openness-api-for-automation-of-engineering-workflows"
output_dir: "output/tia_openness_v21"
# Preview pages without writing files
siemens-docs-export my_docs.yaml --dry-run
# Export everything
siemens-docs-export my_docs.yaml
# Export a single page (for testing output quality)
siemens-docs-export my_docs.yaml --page cybersecurity-information
# Override the output directory / verbose logging
siemens-docs-export my_docs.yaml --output /tmp/docs --verbose
A ready-made config lives in configs/ in the repository.
Output structure
output/tia_openness_v21/
├── index.md ← root page
├── cybersecurity-information.md
├── what-s-new-in-tia-portal-openness.md
├── basics/
│ ├── basics.md
│ └── ...
├── tia-portal-openness-api/
│ ├── tia-portal-openness-object/
│ │ └── ...
│ └── ...
└── ...
Configuration reference
| Key | Required | Description |
|---|---|---|
name |
No | Human-readable label shown in log output. |
url |
Yes* | Any reader URL of the publication (resolved to its map automatically). |
api_base |
Yes* | Legacy: root URL of the Fluidtopics instance (use with map_id). |
map_id |
Yes* | Legacy: Fluidtopics map identifier (use with api_base). |
output_dir |
Yes | Directory where Markdown files will be written. |
* Either url, or api_base + map_id. If both are present, url wins.
How it works
Fluidtopics (the platform behind both portals) exposes a REST API that the browser SPA uses internally. This package calls that API directly — no browser automation:
- Catalog —
GET /api/khub/mapslists every publication; reader URLs are resolved against it. - Search —
POST /api/khub/clustered-searchwith product/version/locale filters. - TOC —
GET /api/khub/maps/{mapId}/pagesreturns the navigation tree. - Content —
GET /api/khub/maps/{mapId}/topics/{contentId}/contentreturns raw HTML, converted to Markdown with markdownify.
Requests are throttled per host and retried once on 401/403/429/5xx.
Note: Only Fluidtopics-based portals are supported. Other platforms (MadCap Flare, Paligo, etc.) would need a different adapter.
Development
python -m pytest -q # offline tests
python -m pytest -m live -q # live smoke tests against the real hosts
ruff check .
Created with Claude AI
Metadata
Release files for siemens-docs-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| siemens_docs_mcp-0.1.0.tar.gz | 34.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| siemens_docs_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.5 kB
Release files / siemens_docs_mcp-0.1.0.tar.gz
| Download URL | siemens_docs_mcp-0.1.0.tar.gz |
|---|---|
| Size | 34.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8167e6800173cc32ebb80f1effe4357639690cacfa9c2bc63df1dd4a13fc5f76
|
|
BLAKE2b-256 checksum How to use checksums |
75b9144e0b129fed213fb5a7383b4e4cf2e1dcafe0353a9c6517e71be0fe1c2f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency logRelease files / siemens_docs_mcp-0.1.0-py3-none-any.whl
| Download URL | siemens_docs_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 26.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9281c04482663985275432168eeb14cab81d7ac5cf290b9774dc0ba944011849
|
|
BLAKE2b-256 checksum How to use checksums |
e18ed2833024cbcadba50ed91aefe597c3c4cb09c7adf759525fd52453a17625
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency log