If you're migrating x86 code to Arm or optimizing for Arm architecture, this gives your AI assistant the tools to actually help. It bundles semantic search across Arm docs and intrinsics, runs migrate-ease scans on C++, Python, Go, JavaScript and Java codebases, checks Docker image architecture compatibility with Skopeo, and analyzes assembly performance with LLVM-MCA. The Arm Performix integration lets you run recipe workflows over SSH to capture real performance data from target devices. Ships as a multi-arch Docker image that mounts your workspace and optionally your SSH keys. Reach for it when you need more than generic advice about Arm development and want tooling that understands the migration path.
An MCP server providing AI assistants with tools and knowledge for Arm architecture development, migration, and optimization.
If your goal is to migrate an application from x86 to Arm as quickly as possible, start here:
Automate x86-to-Arm application migration using Arm MCP Server
This MCP server equips AI assistants with specialized tools for Arm development:
If you would prefer to use a pre-built, multi-arch image, the official image can be found in Docker Hub here: armlimited/arm-mcp:latest
From the root of this repository:
docker buildx build --platform linux/arm64,linux/amd64 -f mcp-local/Dockerfile -t armlimited/arm-mcp .
For a single-platform build (faster):
docker buildx build -f mcp-local/Dockerfile -t armlimited/arm-mcp . --load
Choose the configuration that matches your MCP client:
The examples below include the optional Docker arguments required for Arm Performix. These SSH-related settings are only needed when you want the MCP server to run remote commands on a target device through Arm Performix. If you are not using Arm Performix, you can omit the SSH -v lines.
Add to .mcp.json in your project:
{
"mcpServers": {
"arm-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--pull=always",
"-v", "/path/to/your/workspace:/workspace",
"-v", "/path/to/your/ssh/private_key:/run/keys/ssh-key.pem:ro",
"-v", "/path/to/your/ssh/known_hosts:/run/keys/known_hosts:ro",
"armlimited/arm-mcp"
]
}
}
}
Add to .vscode/mcp.json in your project, or globally at ~/Library/Application Support/Code/User/mcp.json (macOS):
{
"servers": {
"arm-mcp": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--pull=always",
"-v", "/path/to/your/workspace:/workspace",
"-v", "/path/to/your/ssh/private_key:/run/keys/ssh-key.pem:ro",
"-v", "/path/to/your/ssh/known_hosts:/run/keys/known_hosts:ro",
"armlimited/arm-mcp"
]
}
}
}
The easiest way to open this file in VS Code for editing is command+shift+p and search for
MCP: Open User Configuration
Add to ~/.kiro/settings/mcp.json:
{
"mcpServers": {
"arm-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--pull=always",
"-v", "/path/to/your/workspace:/workspace",
"-v", "/path/to/your/ssh/private_key:/run/keys/ssh-key.pem:ro",
"-v", "/path/to/your/ssh/known_hosts:/run/keys/known_hosts:ro",
"armlimited/arm-mcp"
],
"timeout": 60000
}
}
}
It is recommended to use a project-local configuration file to ensure the relevant workspace is mounted.
Add to .gemini/settings.json in your project root:
{
"mcpServers": {
"arm-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--pull=always",
"-v", "/path/to/your/workspace:/workspace",
"-v", "/path/to/your/ssh/private_key:/run/keys/ssh-key.pem:ro",
"-v", "/path/to/your/ssh/known_hosts:/run/keys/known_hosts:ro",
"armlimited/arm-mcp"
]
}
}
}
[mcp_servers.arm-mcp]
command = "docker"
args = [
"run",
"--rm",
"-i",
"--pull=always",
"-v", "/path/to/your/workspace:/workspace",
"-v", "/path/to/your/ssh/private_key:/run/keys/ssh-key.pem:ro",
"-v", "/path/to/your/ssh/known_hosts:/run/keys/known_hosts:ro",
"armlimited/arm-mcp"
]
Note: Replace /path/to/your/workspace with the actual path to your project directory that you want the MCP server to access. If you are enabling Arm Performix, also replace the /path/to/your/ssh/private_key and /path/to/your/ssh/known_hosts paths with your local files. The MCP container auto-discovers files mounted under /run/keys, as shown in the configs above.
After updating the configuration, restart your MCP client to load the Arm MCP server.
mcp-local/: The MCP server implementation
server.py: Main FastMCP server with tool definitionsutils/: Helper modules for each tooldata/: Pre-built knowledge base (embeddings and metadata)Dockerfile: Multi-stage Docker buildembedding-generation/: Scripts for regenerating the knowledge base from source documentspip install -r tests/requirements.txt within the mcp_local directory.python -m pytest -s tests/test_mcp.pyTo debug or explore the container environment:
docker run --rm -it --entrypoint /bin/bash armlimited/arm-mcp
timeout value in your MCP client configuration (e.g., "timeout": 120000 for 2 minutes)--platform linux/amd64 or --platform linux/arm64Contributions are welcome! Please feel free to submit issues or pull requests.
When contributing:
Copyright © 2025, Arm Limited and Contributors. All rights reserved.
Licensed under the Apache License, Version 2.0. See LICENSE for details.