Model Context Protocol server: expert knowledge and a live build/simulate loop for the ik language (ik8b/ik8bvm AVR toolchain).
ikmcp presents 29 well-organized tools across language and IDE domains with consistent naming (verb_noun: ide_*, ik_*) and comprehensive descriptions (avg ~180 chars, well above 34-char minimum). All tools have explicit JSON Schema input definitions with typed properties. However, parameter descriptions are sparse, most parameters lack inline descriptions explaining their purpose, format, or constraints. Output schemas are not documented; LLMs cannot predict return structure. Error handling is minimal; tools raise ValueError but do not guide recovery. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY vs WRITE). Composition is strong: tools chain well (e.g., ide_devices → ide_device_script; ik_compile → ik_simulate). Security is adequate for a local toolchain server (no secrets in params), but audit trails and permission gates are absent.
The complete virtual-device authoring contract for devices/*.rhai: meta() fields, pin/terminal modes, view element kinds, every behaviour handler (pin_set, on_view, spi_transfer, i2c_*, uart_tx/poll, tick), the framebuffer/display API, helpers, and the execution model & limits.
Return the full Rhai source of a shipped device model (e.g. 'ssd1306', 'max7219', 'led') — a worked reference for authoring your own.
A starter devices/*.rhai virtual-device script to adapt.
List the virtual-device models the IDE ships (name, bus, address, display, pins, purpose). Optional filter matches name or bus (none/uart/spi/i2c). Read one model's source with ide_device_script.
Return all files of one example project (main.ik, tests/*.rhai, devices/*.rhai, info.json, README) — a complete worked reference.
List the IDE's bundled breadboard example projects (program + wiring + often tests/devices), with title and description.
Parameter descriptions missing or minimal. Most parameters (e.g., 'filter', 'name', 'source', 'target', 'emit', 'trace', 'limit', 'peek') lack inline descriptions explaining purpose, format, or constraints. LLMs cannot infer whether 'filter' is a regex, substring, or enum.
Output schemas not documented. Tools return complex objects (e.g., ide_run_tests returns PASS/FAIL verdict + diagnostics; ik_compile returns success + diagnostics + HEX/IR artifact) but LLMs have no schema to predict structure. Agents cannot plan downstream calls or extract fields reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
How to build a complete ikide project: the program (.ik), the test bench (tests/*.rhai), and virtual devices/peripherals (devices/*.rhai), and how they fit together. READ THIS before writing tests or devices.
Run the headless `ikide test` runner and return the real PASS/FAIL verdict. Provide an existing `workspace` (with tests/*.rhai), OR inline `program` + `test` (assembled into a throwaway workspace). Optionally attach custom `devices` and pick an `mcu` for load_hex tests.
Full-text search across the IDE's device scripts, the device-authoring guide, and example projects' programs/tests.
Diagnostics: resolved ikide root, ikide binary path, and whether the IDE checkout is available.
The complete test-bench (Bench) API for tests/*.rhai: every function to drive and observe the simulated core (program, run, UART, SPI, I2C, ADC, GPIO, SRAM/IO, EEPROM, interrupts, core) plus assertions, grouped by area, with how-to-run notes and examples.
A starter tests/*.rhai bench script to adapt.
Fast syntax/semantic check: compile and return only ok + diagnostics (no artifact). The quickest write-compile-fix feedback loop.
Compile ik source (inline `source` or a `path`) with the real ik8b compiler. Returns success, diagnostics, and the Intel HEX (emit=hex) or SSA IR (emit=ir) artifact. `import std/...` resolves automatically. Use this to VERIFY any ik code you generate.
Deep reference for the ik8b compiler internals: the lex->parse->IR->regalloc->AVR->HEX pipeline, the SSA IR shown by `--emit ir`, register allocation, the calling convention/ABI, ISR codegen, fixed-point (r8/r16) lowering, intrinsic lowering, and optimization passes. Use this to reason about the generated code.
Memory layout and core family for one device (the value for `target <device>`).
List supported AVR target devices (name, core family, SRAM, FLASH, EEPROM, SRAM_START). Optional filter matches a device-name substring or an exact core family (AVRe, AVRePlus, AVRxm, AVRxt, AVRrc).
List bundled ik example programs, or return one example's source by name.
The complete formal EBNF grammar of the ik language.
List the compiler intrinsics (@nop @sei @cli @wdr @sleep @break @burn @swap @movw @mul @goto @spm @swtch) with signatures and notes. These are the only built-in @-functions.
Curated cheat-sheet for the ik language: sigils ($ @ %), the left-to-right `value -> target` assignment, program shape, types, memory spaces, control flow, interrupts, and a minimal program. READ THIS FIRST before writing any ik code.
Read a language-reference chapter as plain text. Topics: lexical, types, memory, expressions, statements, functions, interrupts, interrupt-vectors, intrinsics, conditional-compilation, grammar.
Full-text search across the language reference, stdlib docs, tutorial, toolchain docs, std/ sources, and examples. Returns matching lines with scope/file/line.
Run code on the ik8bvm AVR core simulator. Provide ik `source`/`path` (compiled then run with the source's own target), OR a `hex_path` + `mcu`. Returns the register/PC/SP/SREG dump, any --peek bytes, and an optional instruction trace. Interrupts can be injected for testing.
List every standard-library module with a one-line summary, whether it depends on the selected `target`, and its public function count.
Full API for one stdlib module: every public function signature + summary, the rendered reference doc, and optionally the ik source. Accepts 'gpio' or 'std/gpio'.
Diagnostics: resolved ik8b root, ik8b binary path, ik8bvm binary path, and whether the toolchain sources are available.
Read a tutorial page, or list pages when no argument is given. Pages: index, installing, firstprogram, tour, stdlib, interrupts.
Deep reference for the ik8bvm AVR simulator: core classes, register file, SREG flags, memory map, the implemented instruction set, the peripherals/interrupts modeled, cycle counting, and the explicit limitations. Use this to reason about simulation behaviour.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked READ_ONLY or WRITE in metadata but not exposed via MCP tool annotations. Agents cannot distinguish safe discovery calls from state-modifying operations without reading descriptions.
Error handling lacks recovery guidance. Tools raise ValueError (e.g., 'test API index unavailable') but do not tell LLMs what to do next: retry? Check configuration? Call a diagnostic tool? Bare errors force agents to guess.
Complex parameters (e.g., ik_simulate's 'irq', 'irq_at', 'irq_every' arrays) lack format/constraint documentation. LLMs cannot determine whether to pass decimal, hex, or instruction counts without explicit guidance in descriptions.