hackshop

Plan and build a physical body for your AI agent: boards, parts list, assembly and pairing.

Should I use this

Quality & Safety

B
Description quality
100%
Schema completeness
80%
Naming quality
92%
Poisoning risk
40%
Permission match
100%
Protocol compliance
100%

Findings (5)

  • HIGHTool poisoning patterns detected
  • LOWTool 'find_reverse_engineering_examples' name length outside 3-30 rangein find_reverse_engineering_examples
  • INFOTool description contains placeholder or incomplete textin assess_hackability
  • INFOTool description contains placeholder or incomplete textin find_reverse_engineering_examples
  • INFOTool description contains placeholder or incomplete textin verify_firmware_artifact

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,563Tokens (tool definitions)
~2.1 KBTypical response size
Significant attention impact (2.00% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "hackshop-mcp": {
      "command": "npx",
      "args": [
        "hackshop-mcp"
      ]
    }
  }
}

Runnable packages

npmhackshop-mcp0.0.6stdio

Remote endpoints

https://www.hackshop.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪intake_gadget

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.

Input Schema

{
  "type": "object",
  "properties": {}
}

Output Schema

{
  "type": "object",
  "properties": {}
}
⚪plan_gadget(idea, answers, platform, budget_usd, owned_device_ids, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "idea": {
      "type": "string",
      "minLength": 3,
      "maxLength": 2000,
      "description": "Gadget idea or use case, 3-2000 characters. Optional when `answers` or `needs` are given."
    },
    "answers": {
      "type": "object",
      "properties": {
        "size": {
          "type": "string",
          "enum": [
            "pocket",
            "desk",
            "wall",
            "hidden"
          ],
          "description": "Where should this body live? pocket = Pocket; desk = Desk; wall = Wall or fridge; hidden = Hidden, no screen."
        },
        "interaction": {
          "type": "string",
          "enum": [
            "voice",
            "touch",
            "light-button"
          ],
          "description": "How should you interact with it? voice = Talk to it; touch = Touch screen; light-button = Light and button."
        },
        "sensing": {
          "type": "string",
          "enum": [
            "camera",
            "air-quality",
            "none"
          ],
          "description": "Should it sense the room? camera = Camera; air-quality = Air quality; none = None."
        },
        "budget": {
          "type": "string",
          "enum": [
            "under-25",
            "under-50",
            "under-100",
            "no-limit"
          ],
          "description": "What budget should I plan around? under-25 = Under $25; under-50 = Under $50; under-100 = Under $100; no-limit = No limit."
        }
      },
      "additionalProperties": false,
      "description": "The human's intake answers, by question id, using the option values from intake_gadget."
    },
    "platform": {
      "type": "string",
      "enum": [
        "muse-esp32",
        "muse-linux",
        "any"
      ],
      "default": "any",
      "description": "Platform filter: muse-esp32, muse-linux, or any. Default any."
    },
    "budget_usd": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 100000,
      "description": "Optional hardware budget in USD. Must be greater than 0, max 100000."
    },
    "owned_device_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 50,
      "description": "Catalog device ids the user already owns. Max 50."
    },
    "needs": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "voice",
          "screen",
          "images",
          "touch",
          "camera",
          "air-sensors",
          "e-ink",
          "battery",
          "round",
          "home-tunnel",
          "big-screen",
          "compute",
          "linux"
        ]
      },
      "description": "Optional explicit needs. Allowed: voice, screen, images, touch, camera, air-sensors, e-ink, battery, round, home-tunnel, big-screen, compute, linux."
    },
    "size": {
      "type": "string",
      "enum": [
        "pocket",
        "desk",
        "wall",
        "hidden",
        "any"
      ],
      "default": "any",
      "description": "Preferred size or placement: pocket, desk, wall, hidden, any. Default any."
    },
    "limit": {
      "type": "number",
      "minimum": 1,
      "maximum": 5,
      "default": 3,
      "description": "Number of picks to return: 1-5, default 3."
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {}
}
🟢get_build_plan(device_id)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "device_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Catalog device id, 1-200 characters."
    }
  },
  "required": [
    "device_id"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {}
}
⚪assess_hackability(device_name)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "device_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Device name or id, 1-200 characters."
    }
  },
  "required": [
    "device_name"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {}
}
🟢find_reverse_engineering_examples(query, category, evidence, method, use_case, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 2000,
      "default": "",
      "description": "Optional case-insensitive search across title, device, exact models, summary, outcome and tags. Empty returns the latest examples."
    },
    "category": {
      "type": "string",
      "enum": [
        "display",
        "speaker",
        "input",
        "sensor",
        "bulb",
        "sbc",
        "handheld",
        "mini-pc",
        "wearable",
        "router",
        "other"
      ]
    },
    "evidence": {
      "type": "string",
      "enum": [
        "reproduced",
        "documented",
        "author_demo",
        "analysis_method"
      ]
    },
    "method": {
      "type": "string",
      "enum": [
        "root",
        "firmware",
        "protocol",
        "app_api",
        "hardware_bus",
        "repurpose",
        "analysis_tool"
      ]
    },
    "use_case": {
      "type": "string",
      "enum": [
        "calendar",
        "ai_interface",
        "info_panel",
        "smart_home",
        "art"
      ],
      "description": "Filter source-backed design starters by intended use."
    },
    "max_device_price_usd": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Maximum lowest-listed device price in USD; unknown prices excluded. Accessories, host, shipping and tax are extra; availability is returned separately."
    },
    "limit": {
      "type": "number",
      "minimum": 1,
      "maximum": 50,
      "default": 20
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {}
}
🟢find_firmware_playbooks(query, device_id, intervention, risk_tolerance, limit)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000
    },
    "device_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "intervention": {
      "type": "string",
      "enum": [
        "official_local_api",
        "protocol_replacement",
        "cloud_replacement",
        "stock_firmware_overlay",
        "custom_userspace",
        "full_replacement",
        "research_only"
      ]
    },
    "risk_tolerance": {
      "type": "string",
      "enum": [
        "low",
        "moderate",
        "high"
      ],
      "default": "moderate"
    },
    "limit": {
      "type": "number",
      "minimum": 1,
      "maximum": 10,
      "default": 5
    }
  },
  "required": [
    "query"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {}
}
🟢check_firmware_compatibility(playbook_id, observed)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "playbook_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "observed": {
      "type": "object",
      "properties": {
        "model_number": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Model number from the physical label, not the retail family name."
        },
        "codename": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Documented hardware codename, when available."
        },
        "hardware_revision": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Exact hardware or PCB revision."
        },
        "soc": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Confirmed SoC or module identifier."
        },
        "sensor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Confirmed image sensor or other sensor identifier."
        },
        "wifi_module": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Confirmed Wi-Fi or radio module identifier."
        },
        "firmware_version": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Installed vendor firmware version."
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "playbook_id",
    "observed"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {}
}
🟢get_firmware_playbook(playbook_id)

Return a curated firmware playbook with exact targets, prerequisites, backups, recovery, independent risk axes, sources, validation checks and the human-only destructive-action boundary.

Input Schema

{
  "type": "object",
  "properties": {
    "playbook_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "playbook_id"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {}
}
🟡verify_firmware_artifact(playbook_id, filename, sha256, source_url)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "playbook_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "filename": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "sha256": {
      "type": "string",
      "pattern": "^[a-fA-F0-9]{64}$"
    },
    "source_url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "playbook_id",
    "filename",
    "sha256",
    "source_url"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {}
}
⚪prepare_firmware_job(playbook_id, owner_authorized, observed)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "playbook_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "owner_authorized": {
      "type": "boolean"
    },
    "observed": {
      "type": "object",
      "properties": {
        "model_number": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Model number from the physical label, not the retail family name."
        },
        "codename": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Documented hardware codename, when available."
        },
        "hardware_revision": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Exact hardware or PCB revision."
        },
        "soc": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Confirmed SoC or module identifier."
        },
        "sensor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Confirmed image sensor or other sensor identifier."
        },
        "wifi_module": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Confirmed Wi-Fi or radio module identifier."
        },
        "firmware_version": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Installed vendor firmware version."
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "playbook_id",
    "owner_authorized",
    "observed"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools
verifiedversion not recorded4 tools