Plan and build a physical body for your AI agent: boards, parts list, assembly and pairing.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Look up a device by id, exact name or substring and return hackability, brick risk, firmware links, curated firmware playbooks, community size, build page and agent platform support. Input: `device_name` 1-200 chars.
Device name or id, 1-200 characters.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Look up a device by id, exact name or substring and return hackability, brick risk, firmware links, curated firmware playbooks, community size, build page and agent platform support. Input: `device_name` 1-200 chars.
| Argument | Type | Description |
|---|---|---|
| device_name* | string | Device name or id, 1-200 characters. |
{
"type": "object",
"required": [
"device_name"
],
"properties": {
"device_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Device name or id, 1-200 characters."
}
}
}Fail-closed compatibility check for one firmware playbook. Required model, codename, revision, SoC or firmware identifiers must exactly match a curated target; missing facts return unknown and mismatches return unsupported.
| Argument | Type | Description |
|---|---|---|
| observed* | object | |
| playbook_id* | string |
{
"type": "object",
"required": [
"playbook_id",
"observed"
],
"properties": {
"observed": {
"type": "object",
"properties": {
"soc": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Confirmed SoC or module identifier."
},
"sensor": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Confirmed image sensor or other sensor identifier."
},
"codename": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Documented hardware codename, when available."
},
"wifi_module": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Confirmed Wi-Fi or radio module identifier."
},
"model_number": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Model number from the physical label, not the retail family name."
},
"firmware_version": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Installed vendor firmware version."
},
"hardware_revision": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Exact hardware or PCB revision."
}
},
"additionalProperties": false
},
"playbook_id": {
"type": "string",
"maxLength": 200,
"minLength": 1
}
}
}Find curated owner-authorized firmware, local-protocol and cloud-replacement playbooks. Results prefer the least-invasive path and are not compatibility approval; call check_firmware_compatibility before preparation.
| Argument | Type | Description |
|---|---|---|
| limit | number | |
| query* | string | |
| device_id | string | |
| intervention | string | |
| risk_tolerance | string |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "number",
"default": 5,
"maximum": 10,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"device_id": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"intervention": {
"enum": [
"official_local_api",
"protocol_replacement",
"cloud_replacement",
"stock_firmware_overlay",
"custom_userspace",
"full_replacement",
"research_only"
],
"type": "string"
},
"risk_tolerance": {
"enum": [
"low",
"moderate",
"high"
],
"type": "string",
"default": "moderate"
}
}
}Search Hackshop's curated hardware reverse-engineering examples and research methods. With no query, returns the newest dated examples first. Evidence labels distinguish reproduced work, documented implementations, author demos and analysis methods; they do not imply compatibility with similar-looking hardware.
| Argument | Type | Description |
|---|---|---|
| limit | number | |
| query | string | Optional case-insensitive search across title, device, exact models, summary, outcome and tags. Empty returns the latest examples. |
| method | string | |
| category | string | |
| evidence | string | |
| use_case | string | Filter source-backed design starters by intended use. |
| max_device_price_usd | number | Maximum lowest-listed device price in USD; unknown prices excluded. Accessories, host, shipping and tax are extra; availability is returned separately. |
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"default": 20,
"maximum": 50,
"minimum": 1
},
"query": {
"type": "string",
"default": "",
"maxLength": 2000,
"description": "Optional case-insensitive search across title, device, exact models, summary, outcome and tags. Empty returns the latest examples."
},
"method": {
"enum": [
"root",
"firmware",
"protocol",
"app_api",
"hardware_bus",
"repurpose",
"analysis_tool"
],
"type": "string"
},
"category": {
"enum": [
"display",
"speaker",
"input",
"sensor",
"bulb",
"sbc",
"handheld",
"mini-pc",
"wearable",
"router",
"other"
],
"type": "string"
},
"evidence": {
"enum": [
"reproduced",
"documented",
"author_demo",
"analysis_method"
],
"type": "string"
},
"use_case": {
"enum": [
"calendar",
"ai_interface",
"info_panel",
"smart_home",
"art"
],
"type": "string",
"description": "Filter source-backed design starters by intended use."
},
"max_device_price_usd": {
"type": "number",
"description": "Maximum lowest-listed device price in USD; unknown prices excluded. Accessories, host, shipping and tax are extra; availability is returned separately.",
"exclusiveMinimum": 0
}
}
}Return the complete deterministic build plan for a catalog device id: difficulty, board-specific flash warnings, parts, shopping list with buy_options, prices checked date and purchase policy, steps, machine-readable assembly with verify checks, commands, links, caveats and an agent-ready brief. Input: `device_id` 1-200 chars.
| Argument | Type | Description |
|---|---|---|
| device_id* | string | Catalog device id, 1-200 characters. |
{
"type": "object",
"required": [
"device_id"
],
"properties": {
"device_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Catalog device id, 1-200 characters."
}
}
}Return a curated firmware playbook with exact targets, prerequisites, backups, recovery, independent risk axes, sources, validation checks and the human-only destructive-action boundary.
| Argument | Type | Description |
|---|---|---|
| playbook_id* | string |
{
"type": "object",
"required": [
"playbook_id"
],
"properties": {
"playbook_id": {
"type": "string",
"maxLength": 200,
"minLength": 1
}
}
}Return the 4 intake questions (where it lives, how you interact, room sensing, budget), why each matters and how each answer maps to plan_gadget. Ask the human these, then call plan_gadget with `answers`. No input.
No arguments.
{
"type": "object",
"properties": {}
}Deterministically plan a physical body for an AI agent using Meta Muse boards. Ask the intake questions first (intake_gadget, or the `questions` this returns until `intake.complete` is true), then pass the human's choices as `answers`. Inputs: `idea` 3-2000 chars (optional when `answers` or `needs` are given); `answers` {size, interaction, sensing, budget} using the intake option values; `platform` one of muse-esp32, muse-linux, any (default any); `budget_usd` number greater than 0, up to 100000; `owned_device_ids` up to 50 catalog ids; `needs` values: voice, screen, images, touch, camera, air-sensors, e-ink, battery, round, home-tunnel, big-screen, compute, linux; `size` one of pocket, desk, wall, hidden, any (default any); `limit` 1-5 (default 3). Boards that meet the hard needs and the budget rank first, cheapest first. Returns fit, notes, warnings, intake status, questions, picks with difficulty, terms and next steps.
| Argument | Type | Description |
|---|---|---|
| idea | string | Gadget idea or use case, 3-2000 characters. Optional when `answers` or `needs` are given. |
| size | string | Preferred size or placement: pocket, desk, wall, hidden, any. Default any. |
| limit | number | Number of picks to return: 1-5, default 3. |
| needs | array | Optional explicit needs. Allowed: voice, screen, images, touch, camera, air-sensors, e-ink, battery, round, home-tunnel, big-screen, compute, linux. |
| answers | object | The human's intake answers, by question id, using the option values from intake_gadget. |
| platform |
Prepare a non-executing firmware manifest after owner authorization and an exact compatibility match. Returns backup, recovery, sources, validation and stop points; never returns a flash command.
| Argument | Type | Description |
|---|---|---|
| observed* | object | |
| playbook_id* | string | |
| owner_authorized* | boolean |
{
"type": "object",
"required": [
"playbook_id",
"owner_authorized",
"observed"
],
"properties": {
"observed": {
"type": "object",
"properties": {
"soc": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Confirmed SoC or module identifier."
},
"sensor": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Confirmed image sensor or other sensor identifier."
},
"codename": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Documented hardware codename, when available."
},
"wifi_module": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Confirmed Wi-Fi or radio module identifier."
},
"model_number": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Model number from the physical label, not the retail family name."
},
"firmware_version": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Installed vendor firmware version."
},
"hardware_revision": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Exact hardware or PCB revision."
}
},
"additionalProperties": false
},
"playbook_id": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"owner_authorized": {
"type": "boolean"
}
}
}Compare a caller-supplied filename, source URL and SHA-256 with Hackshop's curated metadata. Hackshop does not fetch, upload or redistribute the artifact; absent hashes return unknown.
| Argument | Type | Description |
|---|---|---|
| sha256* | string | |
| filename* | string | |
| source_url* | string | |
| playbook_id* | string |
{
"type": "object",
"required": [
"playbook_id",
"filename",
"sha256",
"source_url"
],
"properties": {
"sha256": {
"type": "string",
"pattern": "^[a-fA-F0-9]{64}$"
},
"filename": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"source_url": {
"type": "string",
"format": "uri"
},
"playbook_id": {
"type": "string",
"maxLength": 200,
"minLength": 1
}
}
}| string |
| Platform filter: muse-esp32, muse-linux, or any. Default any. |
| budget_usd | number | Optional hardware budget in USD. Must be greater than 0, max 100000. |
| owned_device_ids | array | Catalog device ids the user already owns. Max 50. |
{
"type": "object",
"properties": {
"idea": {
"type": "string",
"maxLength": 2000,
"minLength": 3,
"description": "Gadget idea or use case, 3-2000 characters. Optional when `answers` or `needs` are given."
},
"size": {
"enum": [
"pocket",
"desk",
"wall",
"hidden",
"any"
],
"type": "string",
"default": "any",
"description": "Preferred size or placement: pocket, desk, wall, hidden, any. Default any."
},
"limit": {
"type": "number",
"default": 3,
"maximum": 5,
"minimum": 1,
"description": "Number of picks to return: 1-5, default 3."
},
"needs": {
"type": "array",
"items": {
"enum": [
"voice",
"screen",
"images",
"touch",
"camera",
"air-sensors",
"e-ink",
"battery",
"round",
"home-tunnel",
"big-screen",
"compute",
"linux"
],
"type": "string"
},
"description": "Optional explicit needs. Allowed: voice, screen, images, touch, camera, air-sensors, e-ink, battery, round, home-tunnel, big-screen, compute, linux."
},
"answers": {
"type": "object",
"properties": {
"size": {
"enum": [
"pocket",
"desk",
"wall",
"hidden"
],
"type": "string",
"description": "Where should this body live? pocket = Pocket; desk = Desk; wall = Wall or fridge; hidden = Hidden, no screen."
},
"budget": {
"enum": [
"under-25",
"under-50",
"under-100",
"no-limit"
],
"type": "string",
"description": "What budget should I plan around? under-25 = Under $25; under-50 = Under $50; under-100 = Under $100; no-limit = No limit."
},
"sensing": {
"enum": [
"camera",
"air-quality",
"none"
],
"type": "string",
"description": "Should it sense the room? camera = Camera; air-quality = Air quality; none = None."
},
"interaction": {
"enum": [
"voice",
"touch",
"light-button"
],
"type": "string",
"description": "How should you interact with it? voice = Talk to it; touch = Touch screen; light-button = Light and button."
}
},
"description": "The human's intake answers, by question id, using the option values from intake_gadget.",
"additionalProperties": false
},
"platform": {
"enum": [
"muse-esp32",
"muse-linux",
"any"
],
"type": "string",
"default": "any",
"description": "Platform filter: muse-esp32, muse-linux, or any. Default any."
},
"budget_usd": {
"type": "number",
"maximum": 100000,
"description": "Optional hardware budget in USD. Must be greater than 0, max 100000.",
"exclusiveMinimum": 0
},
"owned_device_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"description": "Catalog device ids the user already owns. Max 50."
}
}
}