plm-upload-mcp
v1.1.0
Published
MCP server to read the LionsBot PLM (SKU folders, component metadata, extracted drawing metadata, product & staging BOMs) and bulk-upload SolidWorks exports (STEP/PDF) into it by SKU.
Maintainers
Readme
plm-upload-mcp
An MCP server for the LionsBot PLM. It reads the PLM — SKU folders, full component metadata, extracted drawing/BOM metadata, and product & staging BOMs — and bulk-uploads local files (SolidWorks STEP/PDF exports) into it, matched to a component by SKU. It runs on your own machine, so it reads your exported files straight off disk, and it signs in as you with your PLM/hub login — every read is row-level-security scoped to you, and every uploaded file is tagged with who uploaded it.
Pair it with your SolidWorks MCP: that MCP knows each part's SKU and exports the files;
this MCP takes {path, sku} pairs and pushes them into the PLM.
Setup
Add one entry to your Claude MCP config (Claude Desktop: claude_desktop_config.json;
Claude Code: .mcp.json or claude mcp add). Use your own PLM email + password:
{
"mcpServers": {
"plm-upload": {
"command": "npx",
"args": ["-y", "plm-upload-mcp"],
"env": {
"PLM_EMAIL": "[email protected]",
"PLM_PASSWORD": "your-plm-password"
}
}
}
}That's all. npx -y fetches and runs the latest version; no clone, no build.
Your login is the same one you use for the Hardware Tools hub / PLM. Uploads are attributed to you and require a
@lionsbot.comaccount.
Tools
upload_files
Uploads one or more files, each paired with its target SKU.
files: array of{ path, sku, skuName?, category? }path— absolute local path to the filesku— component SKU, e.g.MNT-1234-A0skuName— optional; only used if the SKU's Drive folder has to be createdcategory— optional PLM tag:Default|Archive|Compliance|Ops
bucket:main(default, confirmed components) orstaging(unconfirmed)
Each file lands in PLM storage and is mirrored into that SKU's Google Drive folder (created automatically if it doesn't exist). Re-uploading a file with the same name replaces it in place — no duplicate pile-up on re-runs.
Example ask: "Upload C:\exports\bracket.step to SKU MNT-1234-A0 and C:\exports\bracket.pdf to the same SKU."
list_component_files
Lists the files currently in a component's Drive folder.
sku: component SKUbucket:main(default) orstaging
Read-only tools
All read tools query the PLM as you (RLS-scoped) — you only ever see what you're
allowed to see. bucket / classification values are main (confirmed), staging
(unconfirmed), or all (default).
list_sku_folders
Every component SKU with its Google Drive folder — the SKU→folder map (SKU, name,
category, type, revision, status, staging flag, folder id/URL). Filters: bucket,
category, with_folder_only, limit, offset.
get_component_metadata
Full component metadata (every column, incl. cost/supply, drawing-extracted fields,
CAD provenance, compliance, and the extract_meta block). Pass a single sku for one
part, or omit it to page through all. Filters: search, bucket, category,
status, limit, offset.
list_bom_extract_metadata
The metadata machine-extracted from each part's drawing/BOM PDF (extract_meta): the
Lionsbot-custom flag, SKU/drawing match check, per-field extracted values, and source
file + who/when. Only extracted parts are returned. Filters: sku, bucket, limit,
offset.
list_boms
BOMs across all products, each product carrying its BOM(s) + line items and a derived
staging flag (a product is staging while its working BOM still contains any staging
component). Working BOMs only by default. Filters: product_sku, classification,
include_snapshots, include_rows, max_rows_per_bom.
Config overrides (rarely needed)
Baked to production defaults; override via env only if the PLM backend moves:
| env | default |
|---|---|
| PLM_GATEWAY | https://gateway-production-c13d.up.railway.app |
| PLM_ANON_KEY | (prod anon key) |
| PLM_EDGE_URL | https://plm-edge-production.up.railway.app |
Requirements
Node.js 18+ (for built-in fetch).
