Skip to main content
Glama

Arm-Migrate MCP

Migrate your LLM workload to Arm — and prove the speedup with real numbers.

Arm-Migrate is an MCP server plus a GitHub Actions benchmark harness. Connect it to any MCP client (Claude Code, Claude Desktop, …) and ask it to migrate an LLM inference workload to Arm64. It will:

  1. Analyze the workload (analyze_workload) — scans Dockerfiles, compose files, and dependency lists for migration blockers: x86-pinned base images, CUDA-only stacks, missing quantization, arch-specific wheels.

  2. Plan the migration (generate_migration_plan) — emits ready-to-commit artifacts: an arm64 Dockerfile built around llama.cpp with KleidiAI kernels, a CI benchmark workflow, recommended quantization (Q4_0 for KleidiAI's int8mm/dotprod paths), and a migration checklist.

  3. Measure (trigger_benchmark / fetch_benchmark_results) — runs a 3-way benchmark matrix on GitHub's free ubuntu-24.04-arm runners: Arm64 + KleidiAI vs Arm64 baseline vs x86 baseline, using llama-bench with repetitions and captured CPU feature flags.

  4. Report (generate_report) — turns the raw JSON artifacts into a migration report: prompt-processing and token-generation tokens/sec, deltas, hardware context, and a go/no-go recommendation.

Zero-cost, fully reproducible: everything runs on free public-repo CI. No GPUs, no cloud account, no API keys.

Measured results (Neoverse-N2, free GitHub Arm64 runners)

Qwen2.5-0.5B-Instruct, llama-bench, 5 repetitions, 4 threads. Full reports with stddev and hardware context: Q4_0 · Q8_0.

Comparison

Prompt proc.

Generation

Arm optimized kernels vs naive Arm build (Q4_0)

+131%

+44%

KleidiAI vs default kernels (Q4_0)

~0%

~0%

KleidiAI vs default kernels (Q8_0)

+59%

+15%

Arm64+KleidiAI vs x86 runner (Q8_0)

+269%

+155%

The practical guidance that falls out: Q4_0 is fast on Arm out of the box (mainline repack kernels); Q8_0 leaves large gains on the table unless you build with -DGGML_CPU_KLEIDIAI=ON. Arm64 wins token generation — the axis that dominates chat/agent serving cost — across every silicon draw we measured; the x86 prompt-processing picture depends on whether GitHub's mixed pool hands you AVX-512 (see the variance disclosure in the reports).

Related MCP server: ArmBench MCP Server

Why this matters

Arm64 cloud (Graviton, Axion, Cobalt, Ampere) is routinely the cheapest compute per vCPU, and KleidiAI makes CPU-only LLM inference genuinely usable — but teams don't migrate because they can't predict what their workload gains. Arm-Migrate closes that gap: the agent hands you the migration plan and the measured numbers in one conversation.

Quickstart

npm install && npm run build

Register with your MCP client (Claude Code shown):

claude mcp add arm-migrate -- node <path>/dist/index.js

Then ask: "Analyze this Dockerfile for Arm migration and generate a plan."

To reproduce our benchmark numbers: fork, enable Actions, run the arm-bench workflow (workflow_dispatch) — the report lands in the run's artifacts and job summary.

Repository layout

src/            MCP server (TypeScript)
bench/          benchmark scripts + report generator (no deps)
templates/      generated migration artifacts (Dockerfile.arm64, …)
.github/        the arm-bench harness itself

Hackathon

Built for Arm Create: AI Optimization Challenge 2026 (Track 2 — Cloud AI). See RULES.md for the rules digest and DEVLOG.md for an honest build log.

License

MIT

Available Tools

4 tools
analyze_workloadA

Analyze an LLM workload (Dockerfile, compose file, dependency list, or plain description) for Arm64 migration blockers and optimization opportunities. Returns severity-ranked signals with concrete fixes.

ParametersJSON Schema
NameRequiredDescriptionDefault
composeNodocker-compose.yml contents
packagesNorequirements.txt / package.json contents
dockerfileNoDockerfile contents
descriptionNoPlain-text description of the workload

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses the output format (severity-ranked signals with fixes) and implies read-only analysis without side effects. However, it does not detail potential rate limits or authentication requirements, but the core behavior is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, densely packed sentence that front-loads the purpose and scope. Every word adds value, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 4 optional parameters and no output schema, the description adequately explains the tool's function and output. It lacks details on handling multiple inputs or response format specifics, but is sufficient for an experienced user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptive parameter names and descriptions. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool analyzes LLM workloads for Arm64 migration blockers and optimization, specifying input types (Dockerfile, compose, packages, description). It distinguishes from siblings like fetch_benchmark_results or generate_migration_plan which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when analyzing workloads but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it. No comparison with sibling tools is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_benchmark_resultsA

Download artifacts from the latest (or a specific) completed arm-bench run and return the migration report with measured tokens/sec deltas.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesGitHub repo as owner/name
run_idNoSpecific run ID; defaults to latest completed

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only mentions download and return. Does not disclose authentication needs, rate limits, error handling (e.g., if run incomplete or missing), or whether artifacts are deleted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no filler. Front-loaded with key action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema; description mentions 'migration report with tokens/sec deltas' but not format or structure. Lacks details on error conditions or prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters (100% coverage). Description adds 'completed' qualification for run_id and restates schema info, but adds no meaningful extra beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Explicitly states verb 'Download', resource 'artifacts from completed arm-bench run', and output 'migration report with tokens/sec deltas'. Distinct from sibling tools that analyze workloads or plan migrations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly suggests use after a completed run, but no explicit 'when to use' or 'when not to use' guidance. No mention of alternatives like analyzing workload instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_migration_planB

Generate ready-to-commit Arm64 migration artifacts: an arm64 Dockerfile (llama.cpp + KleidiAI), a CI benchmark workflow for free GitHub Arm64 runners, build flags, and a migration checklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
quantNoTarget quantization (default Q4_0, the KleidiAI fast path)
model_hintNoGGUF model URL or HF repo to bake into templates
workload_kindNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It states artifacts are 'ready-to-commit' but does not disclose side effects, permissions, or whether it modifies state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence efficiently conveys the tool's purpose and outputs. Could be slightly clearer by breaking into separate points.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet description does not explain return format or how artifacts are provided. Missing guidance on optional parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 67% of parameters with descriptions. The description adds no extra semantic beyond the schema for the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: generating Arm64 migration artifacts including Dockerfile, CI workflow, build flags, and checklist. It distinguishes from siblings which focus on analysis or benchmarking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (for Arm64 migration planning) but does not explicitly contrast with sibling tools or state prerequisites or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trigger_benchmarkA

Trigger the arm-bench workflow (Arm64+KleidiAI vs Arm64 vs x86 benchmark matrix) on a GitHub repo via workflow_dispatch. Requires an authenticated gh CLI; falls back to manual instructions.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesGitHub repo as owner/name, e.g. CisnerosCodes/arm-migrate-mcp
model_urlNoOverride GGUF model URL for this run

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the requirement for an authenticated gh CLI and the fallback to manual instructions, but omits details about what happens after dispatch (e.g., async behavior, response, error handling). Some behavioral insight is provided, but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that immediately conveys the tool's primary function. Every word adds value; there is no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description is not required to explain return values. However, for a workflow trigger tool, it lacks information about expected outcomes (e.g., job URL, status) and how it fits into the pipeline with sibling tools (e.g., use after trigger). It is adequate but not fully complete for an AI agent's decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage: both parameters have descriptions. The tool's description adds context about the workflow (e.g., benchmark matrix) but does not enhance understanding of the parameters beyond what the schema already provides. Baseline score 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (trigger), the specific workflow (arm-bench with benchmark matrix), and the target (GitHub repo via workflow_dispatch). It distinguishes from sibling tools by focusing on triggering a workflow, which is unique among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions a prerequisite (authenticated gh CLI) and a fallback (manual instructions), but does not explicitly state when to use this tool versus its siblings. The usage context is implied by the tool's purpose, but no exclusion criteria or alternative selection guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.0
    • First observedanalyze_workload
    • First observedfetch_benchmark_results
    • First observedgenerate_migration_plan
    • First observedtrigger_benchmark

TDQS

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: analyze workloads, fetch results, generate migration plans, and trigger benchmarks. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (analyze_workload, fetch_benchmark_results, generate_migration_plan, trigger_benchmark).

Tool Count5/5

With 4 tools, the set covers the core migration workflow without being over- or under-scoped. Each tool earns its place.

Completeness5/5

The tool surface covers the full migration lifecycle: analyze current workload, benchmark performance, generate migration plan, and trigger benchmarks. No obvious gaps.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides AI assistants with tools for Arm architecture development, migration, and optimization, including knowledge base search, code migration analysis, container inspection, assembly performance analysis, and workload performance testing.
    91
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Helps AI assistants optimize Linux workloads on Arm64 by parsing perf report output, recommending NEON SIMD intrinsics for hot loops, and auditing Python dependency manifests for arm64 wheel availability — all offline and structured.
    4
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that autonomously optimizes ONNX ML models for Arm64 deployment, providing tools to analyze models, apply real INT8 quantization, benchmark performance, and generate Arm64-optimized Docker deployment packages.
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CisnerosCodes/arm-migrate-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server