Installation & Licensing Center
HOW TO - Install Ansys MCP Servers (VS Code & GitHub Copilot)
Authored by Caleb Scharf
November 11th, 2026
4 views
0 likes
KB4109896
Description
The Ansys MCP (Model Context Protocol) servers let an AI assistant in Visual Studio Code or the GitHub Copilot app work with Ansys products such as Mechanical, Fluent, AEDT and Lumerical. This article covers installing an assistant app and using a ready-made prompt that sets up the servers for your Windows user account.
MCP Server Source: Ansys Repositories on GitHub
Solution
1. Install Visual Studio Code or the GitHub Copilot App
- Open PowerShell (HOW TO - Open PowerShell) and run the command for the app you want:
-
To install Visual Studio Code:
# 1. Bypass execution policy for this session only (no prompt)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
# 2. Silently install VS Code without prompts
winget install --id Microsoft.VisualStudioCode -e --source winget --silent --accept-package-agreements --accept-source-agreements --disable-interactivity -
To install the GitHub Copilot app:
# 1. Bypass execution policy for this session only (no prompt)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
# 2. Silently install GitHub Copilot Desktop App without prompts
winget install -e --id GitHub.CopilotApp --scope machine --silent --accept-package-agreements --accept-source-agreements
-
To install Visual Studio Code:
- Open the app and sign in.
2. Set Up the Ansys MCP Servers
Python Versions and Existing MCP Settings
The prompt removes any Python versions that uv manages, except 3.13. If %USERPROFILE%\.copilot\mcp-config.json already exists, the assistant backs it up to mcp-config.json.bak first, and asks you before it removes other Ansys entries.
- Start a new chat, then paste the prompt below and send it.
Note: In Visual Studio Code, open the Chat view and select Agent mode.Set up the official Ansys MCP servers on this Windows PC for my user account only. No admin rights;
change nothing outside my user profile. Use PowerShell. Run every step yourself, verify it, and keep
going if one server fails (report failures at the end). Never run Set-ExecutionPolicy; run scripts with:
powershell -NoProfile -ExecutionPolicy Bypass -File <script>
The servers load only when a new chat starts, so do not call them here; test only with step 4.
Do NOT install or test ansys-cfx or ansys-mapdl (this skill doesn't install them) - they only go in the config.
Install ONLY Python 3.13 - never any other Python version.
1. Prerequisites (check each; install only if missing, user scope, never trigger an admin/UAC prompt):
- git: `git --version`. If missing, install MinGit (portable, no admin):
winget install --id Git.MinGit -e --silent --accept-package-agreements --accept-source-agreements
If git is still missing: download the latest MinGit-*-64-bit.zip from the git-for-windows/git GitHub
release, extract it to %LOCALAPPDATA%\MinGit, and add %LOCALAPPDATA%\MinGit\cmd to the USER PATH.
Do NOT install Git.Git (it prompts for admin).
- uv: `uv --version`. If missing: winget install --id astral-sh.uv -e --silent --accept-package-agreements --accept-source-agreements
(fallback: powershell -ExecutionPolicy Bypass -c "irm https://astral.sh/uv/install.ps1 | iex")
Then refresh PATH:
$env:Path = [Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [Environment]::GetEnvironmentVariable('Path','User')
2. Python 3.13 only:
- Run `uv python list --only-installed`. If any uv-managed version other than 3.13 is installed,
STOP and tell me which versions, and why: "These will be uninstalled so only Python 3.13 remains,
because the Ansys servers are built for 3.13." Ask me to confirm, and uninstall (uv python uninstall <version>)
only after I say yes. If I say no, skip the removal and continue (the pin below makes uv ignore them).
Never touch Pythons that uv did not install.
- `uv python install 3.13`
- Pin uv so it never fetches another version:
[Environment]::SetEnvironmentVariable('UV_PYTHON','3.13','User')
[Environment]::SetEnvironmentVariable('UV_PYTHON_DOWNLOADS','never','User')
- For this chat's terminal: $env:UV_PYTHON='3.13'; $env:UV_PYTHON_DOWNLOADS='never'
- Also run `Remove-Item Env:GIT_EXEC_PATH -ErrorAction SilentlyContinue` in every terminal command
that runs uvx (the app sets it to its own git, which breaks uv's git fetches).
Verify with `git ls-remote https://github.com/ansys/pyaedt-mcp.git HEAD`.
3. Write %USERPROFILE%\.copilot\mcp-config.json using the file-creation tool (not shell redirection),
UTF-8 without BOM. Write it CHARACTER FOR CHARACTER as below: same multi-line layout, 2-space
indentation, one key per line. CRITICAL: every repo URL ends with ".git" (e.g. ...pyaedt-mcp.git).
Never drop ".git", never shorten or "clean up" the URLs, never collapse entries onto one line, never
add "--python" or other args, no version pins, no .exe paths. Never change these entries later in this
chat, even on test failures.
{
"mcpServers": {
"ansys-aedt": {
"tools": ["*"],
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/ansys/pyaedt-mcp.git", "ansys-aedt-mcp"]
},
"ansys-fluent": {
"tools": ["*"],
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/ansys/pyfluent-mcp.git", "ansys-fluent-mcp"]
},
"ansys-mechanical": {
"tools": ["*"],
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/ansys/pymechanical-mcp.git", "ansys-mechanical-mcp"]
},
"ansys-mapdl": {
"tools": ["*"],
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/ansys/pymapdl-mcp.git", "ansys-mapdl-mcp"]
},
"ansys-cfx": {
"tools": ["*"],
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/ansys/pycfx-mcp.git", "ansys-cfx-mcp"]
},
"ansys-lumerical": {
"tools": ["*"],
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/ansys/pylumerical-mcp.git", "ansys-lumerical-mcp"]
}
}
}
- If the file already exists: copy to mcp-config.json.bak first, keep all non-Ansys servers, and
add/replace these six (same layout). If other Ansys-looking entries exist (e.g. "AEDT Global",
"Fluent", any .exe), list them and ask me before removing anything.
- MANDATORY verification after writing (re-read the file from disk, do not trust what you wrote):
* parses as JSON and first bytes are not EF BB BF
* run this check and it must print "CONFIG OK":
$c = Get-Content "$env:USERPROFILE\.copilot\mcp-config.json" -Raw | ConvertFrom-Json
$bad = 'aedt','fluent','mechanical','mapdl','cfx','lumerical' | ForEach-Object {
$e = $c.mcpServers."ansys-$_"
if ($e.command -ne 'uvx' -or $e.args.Count -ne 3 -or $e.args[0] -ne '--from' -or
$e.args[1] -notmatch '^git\+https://github\.com/ansys/py[a-z]+-mcp\.git$' -or
$e.args[2] -ne "ansys-$_-mcp") { "ansys-$_" } }
if ($bad) { "BAD: $bad" } else { 'CONFIG OK' }
* if it prints BAD, rewrite the file and re-check until it prints CONFIG OK.
* print the file contents back and confirm every URL ends in ".git".
4. Test the four working servers IN PARALLEL (this also pre-downloads/builds them). Save
$env:TEMP\Test-Mcp.ps1 exactly as written below, then run all four at once with Start-Job
(each: powershell -NoProfile -ExecutionPolicy Bypass -File "$env:TEMP\Test-Mcp.ps1" <repo.git url> <command>),
with env vars from step 2 set, 20-minute timeout, and Wait-Job / Receive-Job.
Repos/commands: pyaedt-mcp/ansys-aedt-mcp, pyfluent-mcp/ansys-fluent-mcp,
pymechanical-mcp/ansys-mechanical-mcp, pylumerical-mcp/ansys-lumerical-mcp
(all https://github.com/ansys/<repo>.git). Pass = prints "OK". On failure record the last 20 lines of stderr.
If a server fails, retry it once alone. Never fix failures by changing the config.
---- script start ----
param([string]$Repo, [string]$Command, [int]$Seconds = 900)
function Read-Reply($p, [ref]$task, $id, $deadline) {
while ((Get-Date) -lt $deadline) {
if ($null -eq $task.Value) { $task.Value = $p.StandardOutput.ReadLineAsync() }
if (-not $task.Value.Wait(1000)) { continue }
$line = $task.Value.Result; $task.Value = $null
if ($null -eq $line) { return $null }
try { $msg = $line | ConvertFrom-Json } catch { continue }
if ($msg.id -eq $id) { return $msg }
}
return $null
}
$psi = New-Object System.Diagnostics.ProcessStartInfo 'uvx'
$psi.Arguments = "--from git+$Repo $Command"
$psi.UseShellExecute = $false; $psi.RedirectStandardInput = $true; $psi.RedirectStandardOutput = $true
$p = [System.Diagnostics.Process]::Start($psi); $p.StandardInput.AutoFlush = $true
$deadline = (Get-Date).AddSeconds($Seconds); $task = $null
$p.StandardInput.WriteLine('{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"setup-check","version":"1.0"}}}')
$init = Read-Reply $p ([ref]$task) 1 $deadline
if (-not $init) { $result = "FAILED: no reply to initialize within $Seconds s" }
elseif ($init.error) { $result = "FAILED: initialize error: $($init.error.message)" }
else {
$p.StandardInput.WriteLine('{"jsonrpc":"2.0","method":"notifications/initialized"}')
$p.StandardInput.WriteLine('{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}')
$list = Read-Reply $p ([ref]$task) 2 $deadline
if ($list.result.tools) { $result = "OK: $($list.result.tools.Count) tools" } else { $result = "FAILED: no tools listed" }
}
if (-not $p.HasExited) { taskkill /PID $p.Id /T /F | Out-Null }
"${Command}: $result"
---- script end ----
5. Finish with exactly this Markdown, nothing before or after:
## Ansys MCP setup: done ✅
| Server | In config | Test |
|---|---|---|
| ansys-aedt | Yes | ✅ OK (N tools) |
| ansys-fluent | ... | ... |
| ansys-mechanical | ... | ... |
| ansys-lumerical | ... | ... |
| ansys-cfx | Yes | ⏸️ This skill doesn't install it - not tested |
| ansys-mapdl | Yes | ⏸️ This skill doesn't install it - not tested |
(Use ❌ FAILED + one-line reason for failures, then details under "### Problems".)
### 🚀 Next steps
1. 🔄 **Close this AI application completely and restart it** (closing the window isn't enough):
right-click its system tray icon (click ^ for hidden icons) > **Exit**, then reopen it.
In VS Code, close every VS Code window, then reopen.
2. 💬 **Start a new chat** (Agent mode in VS Code).
3. 👀 **Check server status** (allow up to 3 minutes for first start):
- **Task Manager:** open it, filter by **MCP**, and look for the running services.
- **GitHub Copilot app:** go to **Customizations** > **MCP servers**.
- **VS Code:** in the **Agents** window, go to **Customizations** > **MCP servers**.
There you can see whether each server has started. Use the toggle to start/stop it, or
disable and re-enable it (this also stops and starts the service). If one spins with no
green check, toggle it off and on once.
ansys-cfx and ansys-mapdl are in the config but this skill doesn't install them, so expect no green check.
4. ⌨️ **Type:** `Open Mechanical using the MCP server`, then choose **Allow**.
5. 🖥️ **The Ansys Mechanical window should open** (1-2 minutes). If not, click **...** next to the
server and send the error text to whoever supports your setup. - When the assistant finishes, it shows a status table and a "Test it" list. Follow that list.
3. Verify It Worked
- Fully exit the app and restart it. Closing the window is not enough.
- GitHub Copilot app: right-click the system tray icon ➜ Exit, then reopen the app. Click ^ in the taskbar to see hidden icons.
- Visual Studio Code: close every Visual Studio Code window, then reopen it.
- Start a new chat.
Note: In Visual Studio Code, select Agent mode. - Check whether each server has started. The first start can take up to 3 minutes.
- Task Manager: open Task Manager, filter by MCP, and look for the running services.
- GitHub Copilot app: go to Customizations ➜ MCP servers.
- Visual Studio Code: in the Agents window, go to Customizations ➜ MCP servers.
Note: The setup adds six servers. It installs and tests four: ansys-aedt, ansys-fluent, ansys-mechanical and ansys-lumerical. ansys-cfx and ansys-mapdl are only added to the configuration, so they do not show a green check. Type something like
Open Mechanical using the MCP server, then click Allow.- Check that the Ansys Mechanical window opens. This can take 1-2 minutes. If it does not open, click ... next to the server and send the error text to whoever supports your setup.