New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

siemens-docs-mcp

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

siemens-docs-mcp

Search and read Siemens Fluid Topics documentation via MCP or export it to Markdown

pipPyPI
Version
0.1.2
Weekly downloads
223
Maintainers
1
Created

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:

ToolPurpose
search_docsFull-text search (filter by product, version, locale, host).
read_pageRead one page as Markdown; page through long pages with offset.
get_tocTable of contents of a publication or of the subtree under a topic URL.
list_publicationsList 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:

VariableDefaultMeaning
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_LOCALEen-USDefault locale for search and listings.
SIEMENS_DOCS_MIN_INTERVAL0.3Minimum 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

KeyRequiredDescription
nameNoHuman-readable label shown in log output.
urlYes*Any reader URL of the publication (resolved to its map automatically).
api_baseYes*Legacy: root URL of the Fluidtopics instance (use with map_id).
map_idYes*Legacy: Fluidtopics map identifier (use with api_base).
output_dirYesDirectory 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/maps lists every publication; reader URLs are resolved against it.
  • Search — POST /api/khub/clustered-search with product/version/locale filters.
  • TOC — GET /api/khub/maps/{mapId}/pages returns the navigation tree.
  • Content — GET /api/khub/maps/{mapId}/topics/{contentId}/content returns 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

Keywords

mcp

FAQs

Related posts