{"ref":"artifact:blumenkuebel-sap-dm-pod2-mcp-server","page":"/artifacts/blumenkuebel-sap-dm-pod2-mcp-server","json":"/artifacts/blumenkuebel-sap-dm-pod2-mcp-server.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"blumenkuebel-sap-dm-pod2-mcp-server","name":"sap-dm-pod2-mcp-server","artifact_type":"mcp-server","ecosystem":"digital-manufacturing","domain":"ai-and-agents","secondary_domains":["ui-and-frontend-bridge","developer-experience"],"origin_ring":"independent","use_as":"dependency","description":{"one_line":"An MCP server for [SAP Digital Manufacturing](external:sap-digital-manufacturing) POD 2.0 extension development: 23 tools over POD2 pattern docs, the POD2 class API, SAP DM REST and MDO specs and the SAPUI5 API, with five code-generation prompts.","short":"MCP server for SAP Digital Manufacturing POD 2.0 extensions","what_it_solves":"A POD 2.0 extension is written against the POD2 JSDoc API, SAPUI5, SAP DM's REST services and its MDO Extractor entities, and an agent asked to write one answers from what it recalls of all four. This serves them as 23 tools an agent calls: pattern docs with full-text search, the POD2 class API, OpenAPI specs per REST service, MDO entity property lists, SAPUI5 symbol metadata, the source of five reference extensions, and `validate_project`, which checks a generated extension against the documented standards. Five prompts generate the artefacts themselves: `create_widget`, `create_action`, `create_extension`, `migrate_widget` and `validate_project`. Only the hand-written pattern docs and the POD2 API reference ship with the repository; the REST OpenAPI specs come from the SAP Business Accelerator Hub at [api.sap.com](https://api.sap.com), the MDO metadata from a tenant's own `$metadata` document and the SAPUI5 metadata from the SDK, each fetched locally under the reader's own licence. Beside the server the repository carries a `CLAUDE.md` rule file and a plugin template to copy into the project folder, which drive a two-phase workflow: one scaffold pass, then iteration after each manual pack-and-upload, because a POD 2.0 plugin only renders once it is deployed.","when_not_to_use":"Three of its five reference corpora are not shipped: without an api.sap.com key and session cookie, a tenant bearer token and a local SAPUI5 fetch, the REST, MDO and UI5 tools return a message naming the preparation step that is missing. The HTTP transport has no authentication until `MCP_AUTH_TOKEN` is set, so anything past localhost needs that or an authenticating reverse proxy. Packing the ZIP, uploading it through Manage POD 2.0 Extensions and placing the widget in the POD Designer stay manual steps outside the agent, and the SAPUI5 fetch defaults to the SDK's newest version, which the README says is not the version a tenant runs. Node.js 22 or newer.","to_build_on_it":"The three unshipped corpora are loaded by npm scripts under `scripts/`: `fetch-rest-specs` against the Business Accelerator Hub, `generate-mdo-index` over an exported `$metadata` and `update-ui5-api-specs` against the SAPUI5 SDK. So pointing the server at another release wave or another corpus is a script and a folder under `docu/`. The shipped POD2 API reference is generated from the POD 2.0 JSDoc bundle SAP publishes in [SAP-samples/digital-manufacturing-extension-samples](https://github.com/SAP-samples/digital-manufacturing-extension-samples), and `npm run extract-docs` regenerates it for a given release. The pattern documentation is hand-written Markdown under MIT, portions of it adapted from [KevinHunter12/SAP_DM_AI_POD_SKILL](https://github.com/KevinHunter12/SAP_DM_AI_POD_SKILL)."},"links":{"repo":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","docs":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server/blob/main/usage/README.md"},"identity":{"author":"blumenkuebel"},"compat":{"runtimes":["node"]},"type_properties":{"transports":{"value":["stdio","http"],"sources":[{"url":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","title":"sap-dm-pod2-mcp-server — README","checked":"2026-10-17","quote":"Built with [FastMCP](https://github.com/punkpeye/fastmcp) — supports both **HTTP Stream** and **stdio** transports."}]}},"provides":[{"capability":"capability:pod-plugins","what_it_does":"Serves what a POD 2.0 extension is written against as tools an agent calls: the POD2 class API, hand-written pattern docs, SAP DM REST and MDO specs, the SAPUI5 API and the source of five reference extensions. Five prompts generate a widget, an action or a whole extension, and `validate_project` checks the result against the documented standards.","sources":[{"url":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","title":"sap-dm-pod2-mcp-server — README","checked":"2026-10-17","quote":"An MCP (Model Context Protocol) server for **SAP Digital Manufacturing POD 2.0** extension development."},{"url":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","title":"sap-dm-pod2-mcp-server — README","checked":"2026-10-17","quote":"Provides AI assistants with access to pattern documentation, API references, REST API specs, UI5 API, code examples, and validation workflows — everything needed to build, review, and migrate POD 2.0 extensions."},{"url":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","title":"sap-dm-pod2-mcp-server — README, Capabilities","checked":"2026-10-17","quote":"| Prompts | 5 | create_widget, create_action, create_extension, migrate_widget, validate_project |"}]},{"capability":"capability:agent-guidance","what_it_does":"Hands the agent the POD2 rules as a file to load and the development rules as a tool: `CLAUDE.md` is copied into the plugin folder and read at the start of every session, and `get_pod2_guidelines` returns the same rules, widget types and coding standards from the server.","sources":[{"url":"https://raw.githubusercontent.com/blumenkuebel/sap-dm-pod2-mcp-server/main/usage/README.md","title":"sap-dm-pod2-mcp-server — usage guide, A2. Copy template files","checked":"2026-10-17","quote":"`CLAUDE.md` holds all POD2 / SAP DM / UI5 rules and is agent-agnostic. Claude Code auto-loads it; other agents load it with *\"read CLAUDE.md\"*."},{"url":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","title":"sap-dm-pod2-mcp-server — README, Tools","checked":"2026-10-17","quote":"| `get_pod2_guidelines` | Core development rules, widget types, coding standards |"}]}],"requires":[{"ref":"external:sap-digital-manufacturing","requirement":"conditional","basis":"binding","role":"target-product","condition":"the REST API specification and MDO entity tools are used; the server starts without the specifications and the tools that need them say which step is missing","for":"the licensed release whose REST OpenAPI specifications and MDO Extractor metadata are tenant-bound content the repository does not redistribute, loaded locally before those tools answer","sources":[{"url":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","title":"sap-dm-pod2-mcp-server — README, Step 3","checked":"2026-10-17","quote":"The REST OpenAPI specifications are tenant-bound SAP content and are not redistributed."},{"url":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","title":"sap-dm-pod2-mcp-server — README, Step 4","checked":"2026-10-17","quote":"MDO metadata is required for the MDO entity tools."}]}],"connects":[{"ref":"external:sap-digital-manufacturing","kind":"data","condition":"the MDO entity tools are used, which requires exporting the metadata from the tenant with a bearer token first","for":"the MDO Extractor entity metadata behind `list_mdo_entities`, `get_mdo_entity` and `search_mdo_entities`: the OData V4 `$metadata` document is exported from the tenant and indexed locally","sources":[{"url":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","title":"sap-dm-pod2-mcp-server — README, Tools","checked":"2026-10-17","quote":"| `list_mdo_entities` | List SAP DM MDO Extractor OData V4 entities *(requires fetched specs)* |"},{"url":"https://github.com/blumenkuebel/sap-dm-pod2-mcp-server","title":"sap-dm-pod2-mcp-server — README, Step 4","checked":"2026-10-17","quote":"**1. Export `$metadata` from your tenant** (requires a bearer token):"}]}],"provenance":{"discovered_via":[{"source":"source:github"}],"first_seen":"2026-10-17"},"drafted_with_ai":true,"maintainers":["actor:blumenkuebel"],"contributors":["actor:blumenkuebel"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-09, not archived"}],"compatibility":[{"label":"Declared for","tier":"unknown","evidence":"no DIGITAL-MANUFACTURING release lines in the atlas"},{"label":"Survived majors","tier":"unknown","evidence":"no DIGITAL-MANUFACTURING release lines in the atlas"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"good","evidence":"4 test files"},{"label":"Docs","tier":"good","evidence":"docs site, README 13 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":2,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-24","npm":"not published under this name","stars":2,"forks":0,"open_issues":0,"archived":false,"pushed_at":"2026-09-15","license_spdx":"MIT","org_owned":false,"default_branch":"main","created_at":"2026-09-08T09:18:43Z","open_prs":0,"tree_truncated":false,"test_files":4,"workflows":0,"other_ci":false,"readme_bytes":13403,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2026-09-08","last_commit":"2026-09-15","commits":47,"contributors":1,"readme_path":"README.md","readme_sha":"4b5901ffa37718408fdd2b82fddebdc380d511c3","repo_read":"2026-10-24"},"edges":{"maintainers":[{"ref":"actor:blumenkuebel","name":"Philipp Domschke","json":"/actors/blumenkuebel.json"}],"contributors":[{"ref":"actor:blumenkuebel","name":"Philipp Domschke","json":"/actors/blumenkuebel.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}