Skip to main content
Glama
webOS-ports

luneos-mcp

Official
by webOS-ports

luneos-mcp

MCP (Model Context Protocol) server packaging the knowledge gained porting LuneOS to modern Android devices via Halium GSIs and GKI kernels — kernel porting, boot-image construction, Yocto/meta-smartphone device bring-up, nyx-modules configuration, GSI building, installation, and a staged "device doesn't come up" debugging playbook.

Modelled on webOSArchive/webos-mcp, but for LuneOS device porting rather than legacy webOS app development.

The knowledge was distilled from real ports and bring-ups:

  • sargo (Pixel 3a) — the GSI pilot: one generic halium-arm64 rootfs booting Halium 14.0 and 16.0 GSIs over the stock Android 12.1 vendor

  • bluejay (Pixel 6a) — first Tier A GKI port: ACK android14-6.1 kernel, KMI-preserving config fragment, stock vendor modules

  • panther (Pixel 7) — A13-launch init_boot layout, same kernel binary

  • mindphone (MT6739) — Tier B legacy port: 32-bit kernel, halium_arm GSI built for Halium 11 and 16, full UI/wifi/BT/modem bring-up

  • q25 (Zinwa Q25, MT6789/Helio G99) — first MediaTek Tier A GKI target, square-screen QWERTY; Yocto side and stock-firmware analysis complete, pre-hardware

  • mp01 (Minimal Phone MP01, MT6789) — E Ink QWERTY phone on the shared halium-arm64 rootfs, with no published kernel source; vendor-driven module loading, per-device deviceinfo workarounds for audio and Bluetooth

  • athena (BlackBerry KEY2, SDM660) — Tier B on a 4.19 CAF tree built with Yocto's own GCC 15; source of the boot-image window rule (the kernel plus its appended device trees must end below ramdisk_offset) and of the Android-15-vendor shortcut, where an A15 vendor serves a Halium 16 GSI with no VNDK snapshot at all

plus cross-checked material from the UBports, Droidian and Sailfish OS (HADK) porting guides, integrated where their methods transfer to the LuneOS stack (and flagged where they conflict — e.g. their kernel config lists vs the Tier A KMI-poison findings).

Install

git clone https://github.com/webOS-ports/luneos-porting-mcp.git
cd luneos-porting-mcp
npm install

# For Claude Code, user scope:
claude mcp add luneos-mcp -s user -- node "$PWD/index.js"

# Or per-project:
claude mcp add luneos-mcp -s project -- node "$PWD/index.js"

(Once published to npm: claude mcp add luneos-mcp -s user -- npx -y luneos-mcp@latest.)

Requires Node.js 18+.

To have Claude load the full context automatically in a porting project, copy templates/CLAUDE.md into the project (or merge its contents into an existing CLAUDE.md).

Related MCP server: android-mcp-toolkit

What it exposes

Resources

URI

Content

luneos://knowledge/all

every topic concatenated — load at session start

luneos://knowledge/<topic>

one topic file

Topics (auto-discovered from knowledge/*.md):

Topic

Covers

architecture

the GSI+GKI model: one rootfs, Treble, Tier A/B, adaptation tiers, on-device layout

kernel-porting

GKI/ACK builds, KMI-poison list & CRC verification, Tier B legacy kernels

kmi-crc-matching

the vermagic/CRC playbook: identify the vendor from its modules, extract its real config from IKCONFIG, read Unknown symbol vs disagrees about version, and the kconfig/toolchain traps that cost builds

boot-images

header v0–v4, the kernel/ramdisk window check, per-layout repack recipes, initramfs init patches, AVB/vbmeta

gsi-building

building Halium GSIs (arm64 and 32-bit arm), Halium 16 traps, VNDK snapshots

device-bringup-yocto

meta-smartphone machines, gki_bootimg, recipes, bitbake gotchas

nyx-modules

nyx-modules(-hybris) per-machine cmake, variables, pitfalls

hal-userspace

libhybris stack, HIDL vs AIDL per subsystem, Mali, MTK connectivity

debugging

staged "device doesn't come up" playbook, symptom → cause table

installing

flash kits, userdata images, fastboot flows, anti-rollback

tools

kmi-crc-check, module-order, payload_extract, mer-kernel-check, …

deviceinfo-reference

the UBports/HGABT deviceinfo variable reference our Tier 1 format reuses

device-bluejay / device-panther / device-mindphone / device-sargo / device-zinwa-q25 / device-mp01 / device-athena / device-sunfish

per-device reference

Tools

  • luneos_list_topics — list topics with descriptions

  • luneos_get_topic — fetch one topic's markdown

  • luneos_search — keyword search across the whole knowledge base (symptoms, config options, file names)

Prompts

  • luneos-session-start — load the knowledge base into a session

  • luneos-port-device — guided porting workflow for a new device

  • luneos-debug-boot — staged triage for a device that does not come up

Updating the knowledge

Each file in knowledge/ is one topic; the first # heading is its title and the first paragraph its description. Add or edit files and the server picks them up on the next request — no restart or re-registration needed.

License

Apache-2.0

Available Tools

3 tools
luneos_get_topicA

Return the full markdown content of one LuneOS knowledge topic (e.g. 'kernel-porting', 'debugging', 'device-bluejay'). Use luneos_list_topics to see valid names.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesTopic name (filename without .md)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the return format ('full markdown content'), which is genuinely useful, and the name implies a read-only operation. It says nothing about behavior on an invalid topic name, missing topics, or content size/latency.

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?

Two short sentences, zero filler, with the core action front-loaded and the prerequisite tool named second. Every sentence earns its place.

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?

For a single-parameter retrieval tool with no output schema, the description supplies the key missing piece — what comes back (markdown content). An agent has enough to call it correctly; only error/edge-case behavior is unaddressed.

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 description coverage is 100%, so the 'topic' parameter is already documented as a filename without .md. The description reinforces this with example values, but adds no syntax or constraint beyond the schema — 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?

States a specific verb and resource ('Return the full markdown content of one LuneOS knowledge topic') plus the exact grain (one topic), which distinguishes it from list_topics and search. Concrete example topic names make the resource tangible.

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

Usage Guidelines4/5

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

Explicitly routes the agent to luneos_list_topics for valid names, giving clear context for the required argument. It does not, however, distinguish when to retrieve a full topic versus using luneos_search, so the sibling comparison is only half-covered.

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

luneos_list_topicsA

List all LuneOS knowledge-base topics with a one-line description of each. Use this first to see what porting/debugging knowledge is available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that each result includes a one-line description (useful) but omits read-only/rate-limit/pagination behavior and output structure. Adequate but with gaps for a no-annotation tool.

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?

Two tight sentences: purpose first, then usage. No wasted words, well front-loaded.

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?

For a zero-param listing tool with no annotations and no output schema, the description covers what it returns and when to call it. Slightly short of full completeness since it doesn't characterize output size or ordering.

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

Parameters4/5

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

Zero parameters, so baseline is 4. Nothing to document, and the description correctly implies a no-argument listing call.

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?

States a specific verb (List), resource (LuneOS knowledge-base topics), and return format (one-line description each). Clearly distinguishable from siblings like luneos_get_topic and luneos_search.

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

Usage Guidelines4/5

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

Explicitly says 'Use this first to see what porting/debugging knowledge is available,' giving clear when-to-use guidance. It doesn't name the alternative tools or state when not to use it, but the first-step framing is strong.

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.

  1. 3 tool updatesv1.0.0
    • First observedluneos_get_topic
    • First observedluneos_list_topics
    • First observedluneos_search

TDQS

A4/5.0

Scored across 3 tools

Disambiguation5/5

The three tools map cleanly onto distinct retrieval modes: enumerate topics (list), fetch one full document (get), and full-text search across the corpus (search). Descriptions explicitly state when to use each, including cross-references ('Use luneos_list_topics to see valid names'), leaving no realistic chance of misselection.

Naming Consistency5/5

All three names use the same luneos_ prefix followed by a verb_noun pattern (luneos_list_topics, luneos_get_topic, luneos_search). The singular/plural distinction between get_topic and list_topics is meaningful rather than inconsistent, and the style is uniform throughout.

Tool Count4/5

Three tools is on the thin side but each has a distinct, non-overlapping role and the whole surface is coherent for a read-only knowledge base. Nothing feels padded or missing at the operation level, though a slightly larger set (e.g. browsing by category or recency) would not be unreasonable.

Completeness4/5

For a read-only knowledge base, list/get/search covers the full retrieval lifecycle with no dead ends: an agent can discover topics, read them in full, or jump straight to a symptom via search. Minor gaps exist around metadata such as topic freshness, categories, or pagination for very large corpora, but core usage is fully supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A growing collection of MCP tools for Android Development. Currently features a deterministic Figma-SVG-to-Android-XML converter, with plans for Gradle analysis, Resource management, and ADB integration tools.
    7
    9 npm
    18
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables Android APK reverse engineering and Flutter runtime injection through a six-step pipeline of decompile, analyze, synthesize, inject, patch, and repackage. Provides MCP tools for authorized security research and penetration testing.
    2
    9
    43 npm
    5
    MIT