ak-mcp
OfficialThe ak-mcp server provides queryable documentation, API details, and guidance for the AK (Active Kernel) event-driven MCU framework, helping AI tools generate correct firmware code. Key capabilities include:
Search AK Docs (
search_ak_docs): Full-text BM25 search across AK concepts, guides, guardrails, and API entries, with optional filtering by section (api,concept,guide,guardrail).Get AK API Entry (
get_ak_api): Retrieve exact signatures, parameters, return values, semantics, usage examples, and FATAL error codes for specific AK kernel functions, macros, or types (e.g.,timer_set,task_post_pure_msg).List AK API (
list_ak_api): Browse all AK kernel API symbols with one-line summaries, optionally filtered by module (task,message,timer,fsm,tsm,ak,port).Get AK How-To Guide (
get_ak_guide): Step-by-step recipes with skeleton code and wiring instructions for common tasks likecreate-task,create-driver,create-screen,isr-bridge,tune-pools, anduse-timer.Get AK Guardrails (
get_ak_guardrails): Mandatory rules and kernel invariants for AK development (e.g., no blocking, fixed pools, 64-byte payload, max 7 refs, priority 0 reserved) — essential before generating any code.Start New AK Projects: Resolve the latest base-kit release and get setup commands and a customization plan.
Analyze AK Debug Logs: Process raw UART output to get structured diagnoses for FATAL errors, timing problems, or reboot loops.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ak-mcpshow me the API signature for ak_timer_start"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ak-mcp — AK Active Kernel documentation MCP server
A free, public Model Context Protocol server that gives AI coding tools accurate, queryable documentation for the AK (Active Kernel) event-driven MCU framework, whose firmware lives in the sibling repo ak-base-kit-stm32l151.
It lets an AI assistant:
understand the AK kernel core (scheduler, message pools, timers, FSM/TSM),
look up exact API signatures and arguments (extracted straight from the headers, so they never drift),
follow the rules & format for creating tasks, drivers, and screens,
design new tasks/drivers without touching the kernel, boot, networks, or common code.
How it works
../ak-base-kit-stm32l151/ (sibling firmware repo)
application/sources/ak/inc/*.h ──► scripts/extract.mjs ─┐
corpus/ (hand-written guides, scripts/build-corpus ├─► generated/corpus.json
guardrails, enrichment) ───────────────────────┘ (docs + BM25 index)
│
src/core (resources + tools + prompts)
├── src/worker → Cloudflare Worker (remote HTTP)
└── src/cli → npx ak-mcp (stdio, local)Signatures come from the kernel headers; semantics/examples are layered on per symbol (corpus/enrichment/). A CI drift check fails if any cross-reference points at a symbol the headers no longer define.
Related MCP server: AI Development Guidelines MCP Server
What it exposes
Tools
Tool | Purpose |
| resolve the latest base-kit release and return download/extract commands + a customization plan |
| BM25 search across everything |
| exact signature, params, returns, semantics, examples, FATAL codes |
| browse the API by module (task/message/timer/fsm/tsm/ak/port) |
| recipes: start-project, create-task, create-driver, create-screen, use-timer, isr-bridge, tune-pools, debug-uart-shell |
| do-not-modify zones + kernel invariants |
| paste raw UART output → structured diagnosis: FATAL cause/fix, timing (run-to-completion/starvation), reboot loops, next shell commands |
| paste a |
Prompts: ak-new-project, ak-new-task, ak-new-driver, ak-debug — guided scaffolding/debugging that enforces conventions and guardrails.
Debugging loop: the board's only debug surface is its 115200 UART console (leveled printf
an interactive shell). Agents capture it non-interactively with
examples/ak-console.py(pyserial; destructive shell commands are blocked unless--allow-destructive), then feed the text toanalyze_ak_log.
start_ak_project queries the GitHub "latest release" API at call time (falling back to the
pinned v1.3 if the API is unreachable), so new projects always start from the newest tag.
Resources: ak://index, and ak://{section}/{id} for every concept, guide, guardrail, and API entry.
Repository layout (important)
This repo is standalone but its build reads the firmware kernel headers. Clone the firmware repo next to this one:
<workspace>/
ak-base-kit-stm32l151/ # firmware (source of the headers)
mcp-docs-server/ # this repoThe header path is auto-resolved in this order (first existing wins):
$AK_INC_DIR— exact path to.../application/sources/ak/inc$AK_FIRMWARE_DIR/application/sources/ak/inc— firmware repo root../ak-base-kit-stm32l151/application/sources/ak/inc— sibling clone (default)
So a side-by-side clone needs no configuration. Otherwise:
AK_FIRMWARE_DIR=/path/to/ak-base-kit-stm32l151 npm run build:corpusOnce generated/corpus.json is built, the running server (stdio or Worker) needs nothing
from the firmware repo — the corpus is self-contained.
Develop
npm install
npm run build:corpus # generate generated/corpus.json from the headers + corpus/
npm run drift # build + fail on broken cross-references
npm test # extractor, corpus integrity, and search ranking (no deps needed)
npm run typecheck # core + cliThe corpus pipeline (scripts/*.mjs) and tests are zero-dependency and run on plain Node ≥ 20 — no install required for npm run build:corpus / node --test (only the firmware headers must be reachable as above).
Run locally (stdio)
npm run build # build:corpus + tsc -> dist/
node dist/cli/bin.js # or, after publishing: npx -y ak-mcpInspect it with the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/cli/bin.jsClient config (Claude Desktop / Cursor):
{ "mcpServers": { "ak": { "command": "npx", "args": ["-y", "ak-mcp"] } } }Deploy (remote, public)
The Worker bundles corpus.json at build time, so it needs no database.
npm run dev # local Streamable HTTP at http://localhost:8787/mcp
npm run deploy # build:corpus + wrangler deployEndpoints: /mcp (Streamable HTTP), /sse (legacy), / (landing page).
Remote client config:
{ "mcpServers": { "ak": { "url": "https://ak-mcp.<your-account>.workers.dev/mcp" } } }Using it in VS Code (vibe coding): see docs/vscode-vibe-coding.md
for step-by-step setup (Copilot Agent mode, Cursor, Cline, Claude Code), a copy-paste
.vscode/mcp.json template, and a project steering file
(examples/copilot-instructions.md).
CI (.github/workflows/ak-mcp.yml) checks out both this repo and the firmware repo
(FIRMWARE_REPO, default the-ak-foundation/ak-base-kit-stm32l151, exposed to the build as
AK_FIRMWARE_DIR), then runs build + drift + tests + typecheck on every change, and deploys
from main when CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID secrets are set. If the
firmware repo is private, uncomment the token: line and add a FIRMWARE_REPO_TOKEN secret.
To auto-rebuild when kernel headers change, have the firmware repo send a repository_dispatch
(event_type: firmware-updated) to this repo.
Adding documentation
A new API got added to the kernel? Nothing to do for the signature — it's extracted automatically. Add
corpus/enrichment/<symbol>.mdto give it semantics/examples.A new recipe or concept? Add a markdown file under
corpus/guides/orcorpus/concepts/with frontmatter (id,title,tags,summary, optionalapis).Run
npm run driftto verify all references resolve.
Enrichment / content frontmatter:
---
symbol: timer_set # enrichment only
summary: One-line summary.
fatal_codes: MT:0x30
see_also: timer_remove_attr, timer_tick
tags: timer, periodic
---
Markdown body (semantics, examples) ...Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/the-ak-foundation/mcp-docs-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server