Three local Model Context Protocol servers for controlling Autodesk Inventor, managing Moodle without Web Service tokens, and operating Proxmox VE through its native API. Build CAD models through Inventor's COM API, work with Moodle courses through an authenticated browser-style session, or manage a Proxmox cluster with a scoped API token.
Important
This repository is experimental. Test write and delete operations on disposable Inventor documents and Moodle courses before using them with important data.
| Server | What it does | Platform |
|---|---|---|
inventor_mcp_server.py |
Controls Autodesk Inventor through its COM API | Windows |
moodle_mcp_server.py |
Manages Moodle through a normal login session, internal AJAX calls, and HTML forms | Windows, Linux, WSL |
proxmox_mcp_server.py |
Exposes the complete Proxmox VE JSON API through a secure generic MCP interface | Windows, Linux, WSL |
installer_manager.py |
Installs release builds and configures supported MCP clients through a local HTML UI | Windows, Linux |
The easiest way to get started is the Custom MCP Manager, a local desktop application built with an HTML interface and a Python bridge.
- Downloads the latest executables directly from GitHub Releases
- Streams downloads with live progress
- Verifies GitHub-provided SHA-256 asset digests
- Compares installed files with the newest available release at startup
- Installs, updates, and uninstalls executables atomically
- Supports a custom installation directory
- Detects Codex, Claude Desktop, Cursor, and Visual Studio Code
- Adds or removes individual MCP entries in selected clients
- Preserves unrelated client settings
- Creates and restores timestamped configuration backups
- Creates Desktop and Start Menu shortcuts
- Opens secure terminal setup for Moodle and Proxmox VE
- Keeps an in-app activity log for troubleshooting
Download custom-mcp-manager.exe on Windows or
custom-mcp-manager-linux-x64 on Linux from the latest release and run it. No
Python installation is required for either prebuilt manager.
To run it from source:
python -m pip install requests pywebview
python installer_manager.pyNote
Restart an MCP client after configuring it so the client discovers the newly installed servers.
The Inventor server connects an MCP-compatible AI assistant to a running Autodesk Inventor installation. All public tool dimensions use millimetres; the server converts them to Inventor's internal centimetres automatically.
- Create parts, boxes, cylinders, generic sketches, sketch extrusions, revolved profiles, circular or rectangular sweeps, mixed-section lofts, slots, and 3D paths
- Add cuts, holes, counterbores, countersinks, equal/two-distance/distance-angle chamfers, inside/outside/two-sided shells, drafts, and threads
- Mirror bodies and features, and create rectangular or circular patterns
- Read and modify model parameters
- Inspect bodies, faces, edges, features, bounding boxes, mass properties, and iProperties
- Address faces and edges with persistent
geometry_idhandles instead of relying on changing collection indices - Create assemblies, place components, and list occurrences
- Create drawings and export STEP, STL, DXF, and DWG files
- Save model screenshots from predefined camera orientations
- Windows
- Autodesk Inventor installed
- Python 3
mcp[cli]pywin32
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install "mcp[cli]" pywin32Start Autodesk Inventor, then run the server:
python inventor_mcp_server.pyYou can also test it with the MCP Inspector:
npx @modelcontextprotocol/inspector python inventor_mcp_server.pyCreate a 100 Γ 60 Γ 20 mm box and add a 10 mm through-hole in its centre.
Show me the model's bounding box and mass properties, then export it as STEP.
Generic sketch example:
Create a sketch named "Base" on XY with a 40 x 20 mm rectangle and a 6 mm
circle at (20, 10), then extrude the closed profile by 12 mm as a new body.
create_sketch accepts line, circle, rectangle, polyline, and
polygon geometry. list_faces and list_face_edges return persistent
geometry_id values. Use face_id/edge_id with add_fillet or
add_chamfer; numeric F1:E1 references remain available for older
workflows.
Advanced feature examples:
Sweep a 12 mm circle along 0,0,0;40,0,0;40,30,20 with the profile normal
to the path and a 30 degree twist.
Create a loft with sections "0|circle|50;30|rectangle|40|25;60|circle|20".
List the faces, then remove the selected top face and create a 2 mm shell
directed inside.
The loft tool also retains its legacy circular syntax such as
XY:50;30:40;60:30. Structured section syntax is
plane|circle|diameter[|centre_x|centre_y] or
plane|rectangle|width|height[|centre_x|centre_y]. The shell tool accepts
stable face IDs from list_faces. add_chamfer supports distance,
two_distances, and distance_angle; asymmetric chamfers can use a stable
reference_face ID.
Note
Inventor COM automation is not thread-safe. The server intentionally performs one operation per tool call on a single thread.
The Moodle server signs in through Moodle's regular login page and keeps an authenticated session using cookies and Moodle's sesskey. It does not require administrators to enable Moodle Web Services or create a wstoken.
- Log in through a local GUI or terminal setup
- Diagnose Moodle version, active theme, permissions, course-list source, and compatibility warnings
- List and search courses with pagination for accounts with many enrolments
- Inspect course sections and activities
- Create courses
- Rename, move, show, hide, duplicate, and delete course content
- Create and update pages, URLs, labels, folders, forums, assignments, resources, and basic quizzes
- Create, inspect, export, upload, and edit interactive H5P activities and
.h5ppackages - Upload files to Moodle's draft area
- Inspect internal Moodle forms and call AJAX-enabled functions
- Retry automatically after an expired session
- Python 3
fastmcprequestsbeautifulsoup4keyringis strongly recommended
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install "fastmcp>=3,<4" requests beautifulsoup4 keyringLinux and WSL:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install "fastmcp>=3,<4" requests beautifulsoup4 keyringThe safest interactive setup reads the password without displaying it in the terminal:
python moodle_mcp_server.py --setupAlternatively, use environment variables:
MOODLE_URL=https://moodle.example.edu
MOODLE_USER=your-username
MOODLE_PASSWORD=your-password
MOODLE_VERIFY_TLS=1
The moodle_login MCP tool can open a local Tkinter login window. moodle_login_manual is available as a fallback, but its password argument may become part of the AI client's conversation history.
List my Moodle courses and show the sections in course 42.
Run moodle_diagnose and explain why my course list may be incomplete.
Create a hidden five-section course called "Python Basics".
Add a page named "Welcome" to section 1 with a short introduction.
The Moodle MCP works with Moodle's native mod_h5pactivity package field. It
can publish an existing .h5p package, inspect its h5p.json,
content/content.json, library semantics and file list, export it again, and
replace its content or settings.
Relevant tools:
moodle_h5p_inspectβ inspect a Base64 package or an existing activitymoodle_create_h5p_activityβ upload and publish an interactive H5P activitymoodle_update_h5p_activityβ replace its package/content or edit settingsmoodle_h5p_exportβ return the complete package as Base64
For reliable AI-authored content, first inspect an existing activity of the
same H5P content type. Then use it as template_cmid: the MCP preserves its
libraries and assets while replacing h5p.json and/or
content/content.json. A package can also be built without a template, but
its required H5P libraries must already be installed in Moodle or included in
files_base64_json. Package paths and JSON are validated locally before the
upload; Moodle remains authoritative for library compatibility and content
validation.
Example requests:
Inspect H5P activity 87, keep its question type and design, replace the
questions with five questions about networking, and publish the result in
section 2 of course 42.
Update only the content of H5P activity 87 and keep its libraries, media,
display settings, and title unchanged.
Warning
If an OS keyring is unavailable, the current implementation falls back to storing the Moodle password in a local configuration file. Install keyring and check the storage location reported during setup.
Caution
Generic AJAX and form tools are powerful and can change or delete Moodle data. Use a dedicated Moodle account with the minimum required permissions and test against a non-production course first.
The Proxmox VE server exposes the live JSON API behind a small set of MCP
tools. pve_request can call every HTTP endpoint available to the configured
API token, so the MCP does not become stale when Proxmox adds an endpoint. Use
pve_api_schema to inspect live API paths directly on the connected PVE
instance. For directory paths, it lists the child endpoints available to the
configured token.
- Call every Proxmox VE JSON API endpoint with
pve_request - Inspect the live API tree and child endpoints
- Upload files through multipart API endpoints
- List cluster resources and guests with concise convenience tools
- Start, stop, reboot, suspend, and resume QEMU VMs and LXC containers
- Execute confirmed shell commands inside LXC containers through Proxmox's terminal WebSocket
- Read and wait for asynchronous Proxmox tasks (UPIDs)
- Diagnose connectivity, PVE version, and the configured token identity
- Python 3.10 or newer
fastmcp>=3,<4requestswebsocket-client- Network access to the Proxmox VE API (usually HTTPS port 8006)
- A Proxmox VE API token with deliberately scoped ACLs
python3 -m venv .venv
source .venv/bin/activate
python -m pip install "fastmcp>=3,<4" requests websocket-clientCreate a dedicated PVE user and API token in the Proxmox UI, then grant it only the ACLs required for the tasks it should perform. Export its values in the environment used by your MCP client:
export PVE_URL="https://pve.example:8006"
export PVE_TOKEN_ID="automation@pve!mcp"
export PVE_TOKEN_SECRET="replace-with-the-token-secret"
export PVE_VERIFY_TLS=1
python proxmox_mcp_server.pyRun python proxmox_mcp_server.py --setup to validate a URL and token
interactively. It stores them in ~/.proxmox_mcp/config.json with mode 0600,
so Claude can start the MCP reliably without depending on a desktop keyring or
session service. Environment variables always override saved credentials.
PVE_VERIFY_TLS defaults to 1; only set it to 0 temporarily when
connecting to a deliberately trusted host with a self-signed certificate.
Read-only API requests are available immediately. Every request with a
state-changing HTTP method (POST, PUT, PATCH, or DELETE) requires
confirm=true; uploads and every LXC console command do too. Console execution
provides effective interactive root-shell access inside a container and is much
more powerful than a normal REST endpoint. This is an MCP-level guard, not a
replacement for Proxmox permissions. The API token's ACLs remain the
authoritative limit, and the token needs VM.Console for the target container.
Use pve_api_schema for /nodes/pve1/qemu/100, then show the VM configuration.
Start VM 100 on pve1 using pve_guest_action with confirm=true, wait for its task, then show its status.
Use pve_request to create a snapshot for container 200. Inspect the API path first and ask me for confirmation before sending the request.
Run "uname -a" inside LXC container 200 on pve1 with pve_lxc_console_exec.
Show me the exact command first and only continue with confirm=true after I approve it.
LXC console execution uses Proxmox's xterm.js terminal protocol rather than a
Guest Agent. It returns the captured terminal output and a shell-derived exit
code. By default it waits until the command completes; set timeout_seconds
only when a deliberate overall execution deadline is wanted.
The target container must use console mode shell; Proxmox defaults to the
login-based tty mode, which cannot safely execute an unattended command. Set
it with pct set <VMID> --cmode shell or under the container's Options in the
Proxmox UI. Reading this setting also requires permission to read the container
configuration (normally VM.Audit).
Older PVE releases may reject API tokens during the WebSocket upgrade even when
the REST termproxy call succeeds; update PVE if that compatibility error is
reported.
Add the servers you need to your MCP client's configuration. Replace the example paths with absolute paths on your machine.
{
"mcpServers": {
"inventor": {
"command": "C:/path/to/CustomMCPs/.venv/Scripts/python.exe",
"args": [
"C:/path/to/CustomMCPs/inventor_mcp_server.py"
]
},
"moodle": {
"command": "C:/path/to/CustomMCPs/.venv/Scripts/python.exe",
"args": [
"C:/path/to/CustomMCPs/moodle_mcp_server.py"
]
},
"proxmox": {
"command": "C:/path/to/CustomMCPs/.venv/Scripts/python.exe",
"args": [
"C:/path/to/CustomMCPs/proxmox_mcp_server.py"
],
"env": {
"PVE_URL": "https://pve.example:8006",
"PVE_TOKEN_ID": "automation@pve!mcp",
"PVE_TOKEN_SECRET": "replace-with-your-token-secret"
}
}
}
}For Linux or WSL, use the virtual environment's bin/python path instead:
/absolute/path/to/CustomMCPs/.venv/bin/python
Tip
A Windows MCP client cannot directly execute a Python interpreter inside WSL without an explicit WSL command. For the Inventor server, use native Windows Python because Autodesk Inventor and its COM API are Windows-only.
The Inventor server can be packaged with PyInstaller:
python -m pip install pyinstaller
pyinstaller --onefile --name inventor-mcp-server --hidden-import win32timezone --hidden-import win32com.gen_py inventor_mcp_server.pyThe executable will be created in the dist directory.
Whenever a server source file changes on main, or when the installer manager
changes, GitHub Actions builds Windows x64 executables for all components plus
Linux x64 executables for Moodle and Proxmox VE, then
creates a new GitHub Release:
inventor-mcp-server.exemoodle-mcp-server.exeproxmox-mcp-server.execustom-mcp-manager.execustom-mcp-manager-linux-x64moodle-mcp-server-linux-x64proxmox-mcp-server-linux-x64SHA256SUMS.txt
Download them from the repository's Releases page. Releases use semantic
v<major>.<minor>.<build> tags and include automatically generated, categorized
release notes. The same files are also available as a workflow artifact for 30
days.
Verify a downloaded executable against the published checksum file:
Get-FileHash .\custom-mcp-manager.exe -Algorithm SHA256
Get-Content .\SHA256SUMS.txtThe workflow can be started manually from Actions β Build and release MCP executables β Run workflow.
- Requires a local Autodesk Inventor installation and Windows COM support
- Complex CAD operations depend on the active document and Inventor's feature state
- Validate generated geometry before manufacturing or production use
- Tested against one Moodle installation using the Boost theme and topics course format
- No formal Moodle version compatibility matrix exists yet
- Uses internal AJAX endpoints and HTML forms that may change between Moodle versions or themes
- Direct username/password login does not support SSO or two-factor authentication
- Some activity creation, upload, duplicate, and delete paths remain experimental
- Add automated tests and reproducible test fixtures
- Introduce dry-run and explicit confirmation modes for destructive Moodle tools
- Harden Moodle URL validation and credential storage
- Add a Moodle compatibility test matrix
- Split shared configuration into installable Python packages
- Add code signing for stronger Windows SmartScreen trust
Issues, test reports, and pull requests are welcome. When reporting a problem, please include:
- operating system and Python version
- MCP client
- Autodesk Inventor or Moodle version
- the tool that was called
- the error message with credentials and private course data removed
Please never commit passwords, Moodle session cookies, Web Service tokens, student data, or proprietary CAD files.
This is an independent community project and is not affiliated with, endorsed by, or sponsored by Autodesk or Moodle. Autodesk Inventor and Moodle are trademarks of their respective owners.