MCP server bridging Altium 365 design data (schematics, netlists, components, BOM, PCB info) to AI assistants via the Nexar GraphQL API.
- Node.js 18+
- An Altium 365 workspace with design data
- Nexar API credentials (see below)
- Go to portal.nexar.com and create a free account
- Choose an organization name during signup
- Once logged in, create a new Application — this generates your Client ID and Client Secret
- Copy both values; you'll need them to configure the MCP server
The free tier allows limited supply queries (design queries are unlimited). You can test your credentials in the Nexar IDE before configuring the server.
Note for SSO / enterprise Altium users: Nexar and Altium 365 have separate account systems. The Nexar organization you create during signup does not need to match your Altium 365 org — it's just a container for your API keys. What matters is that you sign up for Nexar with the same email/SSO identity that has access to your Altium 365 workspace. Nexar uses that identity to resolve which A365 workspaces and designs the API can see. If you're the first person in your Altium org to use Nexar, you'll be prompted to create a new Nexar organization — this is expected and won't conflict with your existing A365 setup.
npm install
npm run buildAdd to your .mcp.json (project-level) or ~/.claude/mcp.json (global):
{
"mcpServers": {
"viaduct": {
"command": "npx",
"args": ["tsx", "src/index.ts"],
"env": {
"NEXAR_CLIENT_ID": "<your client id>",
"NEXAR_CLIENT_SECRET": "<your client secret>"
}
}
}
}Or using the compiled output:
{
"mcpServers": {
"viaduct": {
"command": "node",
"args": ["/absolute/path/to/viaduct/dist/index.js"],
"env": {
"NEXAR_CLIENT_ID": "<your client id>",
"NEXAR_CLIENT_SECRET": "<your client secret>"
}
}
}
}| Tool | Description |
|---|---|
list_workspaces |
List all accessible Altium 365 workspaces and their projects. |
get_library_components |
Get the full workspace component library with parameters and manufacturer parts. |
| Tool | Description |
|---|---|
list_projects |
List all projects in a workspace. |
get_project_documents |
Get schematic and PCB document IDs/names for a project, including both WIP and released variants. |
| Tool | Description |
|---|---|
get_nets |
Get net names and trace lengths from a project's PCB. Optionally filter by name pattern and include pad geometry. |
get_bom |
Get the BOM for a project. Default mode returns a compact list; use mode='full' for complete data including parameters and supplier parts. Can filter by designator prefix. |
search_component_supply |
Search for component supply/availability by manufacturer part number (MPN). Returns stock levels and seller info. |
| Tool | Description |
|---|---|
bom_summary |
Get a compact BOM summary grouped by component category (ICs, passives, connectors, etc.) with key IC identification. Much smaller than get_bom. |
search_nets |
Search for nets by name pattern (regex) and return their trace lengths. Use this instead of get_nets for targeted queries. |
trace_length_analysis |
Analyze trace length matching for a group of nets. Returns min/max/spread/deviation stats. Use for checking DDR, SPI, RGMII, or other matched-length signal groups. |
get_component_pins |
Get the pin-to-net mapping for a specific component on the PCB. Returns each pin/pad with the net it connects to, enriched with pin function names and datasheet URL from the workspace library. Essential for verifying MCU peripheral pin assignments and catching polarity errors. |
npm run dev # run with tsx (auto-reloads)
npm run build # compile to dist/