_ registry / mcp streamable-http · checked 54m ago

homie

https://homie.rocks

Registry code: 7c844ecb080771c9

api record

Homie helps the person make their own project. Call studio_scaffold with their name and purpose (business, nonprofit or studio). Its command and packaged guide links use the current published npm version; follow those guides as the authority for that version. The packaged skills describe the installed toolkit's local tools. Read tools/list for this remote server's available tools; use the installed CLI or local MCP for anything absent here. The catalogue is https://homie.rocks/parts/index.json. For building, use the person's working folder and shell to execute the returned commands.

endpoint
https://homie.rocks/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is homie live?
Yes — it answered the hub's last check (checked 54m ago). It answered 100% of checks over the last 30 days.
Is homie free to use?
Yes — the hub reached it with no key and no payment.
What tools does homie have?
30 tools: preview_run, studio_deploy, studio_publish, studio_stats, studio_office, room_kick, room_close, game_launch_state, ….
Is homie safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
532ms

last good check

priced tools
0

of 30 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 30 tools
3 open 27 never probed 3 of 30 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • directory_search open 54m ago

    Studios and games listed in the homie.rocks directory.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "q": {
          "type": "string",
          "description": "Words to match (optional)"
        }
      }
    }
    arguments 9 lines
  • game_port open 54m ago

    Port an existing single-player web game into a studio as a multiplayer game: returns the pinned port toolkit (install or upgrade command), the three commands (port plan grades the port easy/medium/hard/not a fit and lists its risks; port import copies it into games/<id>/; port check runs the owner tests on real touch, a late joiner, a killed host and two browsers finishing a round), and the rules every port keeps.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The id the port will have in the studio (lowercase, digits, hyphens)"
        },
        "repo": {
          "type": "string",
          "description": "Optional, in the Claude app: the studio's GitHub repository, owner/name (never homie-rocks/homie, Homie's engine)"
        },
        "site": {
          "type": "string",
          "description": "Optional, in the Claude app: the person's own studio site (https://…). This directory tells nobody a studio's repository: pass repo (ask the person for owner/name), or a setup that has already been given it"
        },
        "brief": {
          "type": "string",
          "description": "Optional, in the Claude app: what the person asked for, in their words"
        },
        "setup": {
          "type": "string",
          "description": "Optional, in the Claude app: the studio's setup id (hs_…), while it is being set up"
        },
        "folder": {
          "type": "string",
          "description": "The game's folder, as the person named it (in the Claude app: its GitHub repository, or a folder in the studio)"
        }
      }
    }
    arguments 29 lines
  • game_starters open 54m ago

    The multiplayer starters a new game can begin from (netplay public rooms, bots, rounds). For a piece another studio shared (a creature, a level generator, a bot brain), look in the parts catalog: https://homie.rocks/parts/index.json.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • preview_run unknown never probed

    How to run the studio's site locally with the netplay dev relay (room.mjs in a local Durable Object) and prove a game works: two fresh browsers in the same public room finishing a round.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "game": {
          "type": "string",
          "description": "The game id"
        }
      }
    }
    arguments 9 lines
  • studio_deploy unknown never probed

    How the studio's site goes live on the studio's OWN Cloudflare account with Cloudflare's Wrangler: one Worker, one D1 database and the Table/Lobby Durable Objects (no R2 unless the person later adds storage). Checks nothing on the person's machine; returns what to tell the person first (what it creates and what Cloudflare charges for it), the steps, and the one approval the person gives Cloudflare in their browser.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • studio_publish unknown never probed

    List a deployed studio's games, songs and videos in the homie.rocks directory (beta). The studio's site must serve the directory claim (npm run deploy stores it). Names and blurbs are plain text without links; covers and pages are shown only from the studio's own site. Returns what was listed, with its links, and anything the directory did not take, with why.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site"
      ],
      "properties": {
        "site": {
          "type": "string",
          "description": "The studio site's https:// address, e.g. https://night-owls.example.workers.dev"
        }
      }
    }
    arguments 12 lines
  • studio_stats unknown never probed

    A studio's own numbers, for its owner: visits, Play presses, rooms opened, most and current players, rounds finished, songs played, videos watched, and where visitors came from (homie.rocks, other studios, search, the web), per day and per game, song or video. They are counted in the studio's own Cloudflare (its D1) and never leave it except through this call: with a read key the owner's AI makes in the studio folder (`npx --no-install homie-studio stats key`, which uses the studio's own Cloudflare login), this tool reads them from the studio's site, relays them and keeps nothing. Counts, never people. Without a key it answers only what the studio shares with the directory (played this week, if it shares). In the studio folder, `npx --no-install homie-studio stats` prints the same numbers with no key to handle.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "The read key `npx --no-install homie-studio stats key` printed (hsk_…); it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "Only this game (its id)"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "song": {
          "type": "string",
          "description": "Only this song (its slug)"
        },
        "range": {
          "enum": [
            "1d",
            "7d",
            "30d",
            "90d"
          ],
          "type": "string",
          "description": "Today, or the last 7, 30 or 90 days (UTC; default 7d)"
        },
        "video": {
          "type": "string",
          "description": "Only this video (its slug)"
        }
      }
    }
    arguments 38 lines
  • studio_office unknown never probed

    The studio owner's back office, live: every room of every game playing now (players and bots, the round, how long it has been up) and who is in each (handle, phone or computer, who hosts, guest or invited; signed-in players where the studio has accounts), each game's launch state (private, invite-only beta, public), players per room and invites. It reads the studio's own site with the owner's office key (`npx --no-install homie-studio office key` in the studio folder), relays it and keeps nothing. Shows a live card that refreshes itself where the app draws cards. Use it when the owner asks who is playing, how a room is doing, or before a kick or an announcement.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "Only this game (its id)"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        }
      }
    }
    arguments 21 lines
  • room_kick unknown never probed

    ASK to kick a player out of a room: they get a polite notice and cannot come back to that room for `minutes` (default 10). Nothing happens until the studio's owner confirms with one tap on the studio's own site (the card's button opens it; you cannot confirm and must never try). Name the player by seat number (1 is the first seat) or handle, as studio_office shows them. Call it again with { site, key, ask } to see whether the owner confirmed (the card follows it by itself).

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "ask": {
          "type": "string",
          "description": "Instead: an ask this tool returned (ask_…), to see what came of it"
        },
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "The game's id"
        },
        "room": {
          "type": "string",
          "description": "The room's code (pub-3) or name, as studio_office shows it"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "player": {
          "type": "string",
          "description": "The player: their seat number (1 is the first) or their handle"
        },
        "minutes": {
          "type": "number",
          "description": "How long they are kept out of that room, 1 to 1440 (default 10)"
        }
      }
    }
    arguments 37 lines
  • room_close unknown never probed

    ASK to close a room: everyone in it is sent out with a thank-you and nobody gets in for `minutes` (default 10); `reopen: true` asks to open it again. Nothing happens until the owner confirms with one tap on the studio's own site. Call again with { site, key, ask } to follow it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "ask": {
          "type": "string",
          "description": "Instead: an ask this tool returned (ask_…)"
        },
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "The game's id"
        },
        "room": {
          "type": "string",
          "description": "The room's code (pub-3) or name"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "reopen": {
          "type": "boolean",
          "description": "Open a closed room again instead"
        },
        "minutes": {
          "type": "number",
          "description": "1 to 1440 (default 10)"
        }
      }
    }
    arguments 37 lines
  • game_launch_state unknown never probed

    A game's launch: `state` private (only the owner, signed in), invite (an invite-only beta: invited browsers only) or public (anyone; listed in the homie.rocks directory the next time it reads the studio); `maxPlayers` (players per room, up to the game's own; 0 for the game's own). Those are ASKED for: nothing changes until the owner confirms with one tap on the studio's own site. `invites` makes that many invite links and codes at once (each for one browser, or `uses` browsers), for an invite-only beta. Call again with { site, key, ask } to follow an ask.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "ask": {
          "type": "string",
          "description": "Instead: an ask this tool returned (ask_…)"
        },
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "The game's id"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "uses": {
          "type": "number",
          "description": "How many browsers each invite lets in (default 1; 0: any number)"
        },
        "label": {
          "type": "string",
          "description": "Who the invites are for, a few words (shown to the owner only)"
        },
        "state": {
          "enum": [
            "private",
            "invite",
            "public"
          ],
          "type": "string",
          "description": "The launch state to ask for"
        },
        "invites": {
          "type": "number",
          "description": "Make this many invite links and codes now (1 to 20)"
        },
        "maxPlayers": {
          "type": "number",
          "description": "Players per room (0: the game's own number)"
        }
      }
    }
    arguments 50 lines
  • server_list unknown never probed

    A studio's servers, per game: named, lasting pools of rooms with their own rules (open, humans-only, hybrid with AI companion seats, beginner with AI guides), their door, the AI's level and ceiling, who is on each right now (people and AI, never mixed), members, the agent passes (never a secret), and which game builds predate servers (they play, but keep no AI seats and their bots ignore the level until rebuilt). It reads the studio's own site with the owner's office key and keeps nothing.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "Only this game"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        }
      }
    }
    arguments 21 lines
  • server_create unknown never probed

    Make a server for a game, at once: its rooms only ever match players from that server. "A server with no AI at all": policy humans-only. "Keep two AI seats in every party": hybrid, aiSeats 2. "A beginner server with two guides": beginner, guides 2 (kids: true for children). AI is ALWAYS marked AI, by the room itself. Guides play from the game's script, silent, until agents_brain gives them a brain (it asks the owner first). Returns the server's page.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key",
        "game",
        "name",
        "policy"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "bots": {
          "enum": [
            "fill",
            "off"
          ],
          "type": "string",
          "description": "The game's own filler bots (a humans-only server has them off unless set to fill)"
        },
        "door": {
          "enum": [
            "open",
            "accounts",
            "invite"
          ],
          "type": "string",
          "description": "Who may come in: anyone, players with a passkey account, or invited players"
        },
        "game": {
          "type": "string",
          "description": "The game's id"
        },
        "kids": {
          "type": "boolean",
          "description": "Beginner: handles only, quick lines only, the AI's level at most 3"
        },
        "name": {
          "type": "string",
          "description": "The server's name (1 to 40 characters)"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "blurb": {
          "type": "string",
          "description": "One line about it"
        },
        "level": {
          "type": "number",
          "description": "The AI's default level, 1 Rookie, 2 Steady, 3 Fair, 4 Strong, 5 Maxed (the party may vote another)"
        },
        "rooms": {
          "type": "number",
          "description": "At most this many rooms (1 to 16)"
        },
        "guides": {
          "type": "number",
          "description": "Beginner: AI guide seats in every room"
        },
        "listed": {
          "type": "boolean",
          "description": "Shown on the game's page and its servers list"
        },
        "policy": {
          "enum": [
            "open",
            "humans-only",
            "hybrid",
            "beginner"
          ],
          "type": "string",
          "description": "open (anyone; an AI with a pass may sit, always marked AI), humans-only (no AI of any kind), hybrid (aiSeats seats in every room are AI companions), beginner (new players, AI guides, quick lines only)"
        },
        "speech": {
          "enum": [
            "game",
            "lines",
            "off"
          ],
          "type": "string",
          "description": "Chat: as the game does it, quick lines only, or none"
        },
        "aiSeats": {
          "type": "number",
          "description": "Hybrid: AI companion seats in every room (at most the room's seats less one)"
        },
        "levelMax": {
          "type": "number",
          "description": "The highest level the party may vote (1 to 5)"
        },
        "beginnerDays": {
          "type": "number",
          "description": "Beginner: accounts younger than this many days come in (default 30)"
        }
      }
    }
    arguments 100 lines
  • server_set unknown never probed

    Change a server's policy, door, AI seats, guides, level, ceiling, chat, bots, rooms or name; its live rooms hear it at once. A change that widens or is neutral happens at once. One that narrows who may come in (humans-only: its AI players leave after the current round; a stricter door; fewer rooms) is ASKED: nothing happens until the owner confirms with one tap on the studio's own site (the card's button opens it; you cannot confirm). Call again with { site, key, ask } to follow it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "ask": {
          "type": "string",
          "description": "Instead: an ask this tool returned (ask_…), to see what came of it"
        },
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "bots": {
          "enum": [
            "fill",
            "off"
          ],
          "type": "string",
          "description": "The game's own filler bots (a humans-only server has them off unless set to fill)"
        },
        "door": {
          "enum": [
            "open",
            "accounts",
            "invite"
          ],
          "type": "string",
          "description": "Who may come in: anyone, players with a passkey account, or invited players"
        },
        "game": {
          "type": "string",
          "description": "The game's id"
        },
        "kids": {
          "type": "boolean",
          "description": "Beginner: handles only, quick lines only, the AI's level at most 3"
        },
        "name": {
          "type": "string",
          "description": "The server's name (1 to 40 characters)"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "blurb": {
          "type": "string",
          "description": "One line about it"
        },
        "level": {
          "type": "number",
          "description": "The AI's default level, 1 Rookie, 2 Steady, 3 Fair, 4 Strong, 5 Maxed (the party may vote another)"
        },
        "rooms": {
          "type": "number",
          "description": "At most this many rooms (1 to 16)"
        },
        "guides": {
          "type": "number",
          "description": "Beginner: AI guide seats in every room"
        },
        "listed": {
          "type": "boolean",
          "description": "Shown on the game's page and its servers list"
        },
        "policy": {
          "enum": [
            "open",
            "humans-only",
            "hybrid",
            "beginner"
          ],
          "type": "string",
          "description": "open (anyone; an AI with a pass may sit, always marked AI), humans-only (no AI of any kind), hybrid (aiSeats seats in every room are AI companions), beginner (new players, AI guides, quick lines only)"
        },
        "server": {
          "type": "string",
          "description": "The server's id (as server_list shows it; the public server, Quick play, is \"public\")"
        },
        "speech": {
          "enum": [
            "game",
            "lines",
            "off"
          ],
          "type": "string",
          "description": "Chat: as the game does it, quick lines only, or none"
        },
        "aiSeats": {
          "type": "number",
          "description": "Hybrid: AI companion seats in every room (at most the room's seats less one)"
        },
        "levelMax": {
          "type": "number",
          "description": "The highest level the party may vote (1 to 5)"
        },
        "beginnerDays": {
          "type": "number",
          "description": "Beginner: accounts younger than this many days come in (default 30)"
        }
      }
    }
    arguments 105 lines
  • server_close unknown never probed

    ASK to close a server: its rooms finish the round they are in, then everyone leaves with a thank-you, and nobody can join until it opens again. Closing "public" hides Quick play (Play then shows the other servers). reopen: true opens it again at once. Call again with { site, key, ask } to follow an ask.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "ask": {
          "type": "string",
          "description": "Instead: an ask this tool returned (ask_…), to see what came of it"
        },
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "The game's id"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "reopen": {
          "type": "boolean",
          "description": "Open it again instead"
        },
        "server": {
          "type": "string",
          "description": "The server's id (as server_list shows it; the public server, Quick play, is \"public\")"
        }
      }
    }
    arguments 33 lines
  • server_member unknown never probed

    Make a player a mentor (a mentor gets into a beginner server, with a badge) or a mod, at once; or ASK to remove a player from a server (the owner confirms with one tap). The player is their id, as the office shows it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "ask": {
          "type": "string",
          "description": "Instead: an ask this tool returned (ask_…), to see what came of it"
        },
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "The game's id"
        },
        "role": {
          "enum": [
            "member",
            "mentor",
            "mod"
          ],
          "type": "string",
          "description": "Their role"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "player": {
          "type": "string",
          "description": "The player's id (pl_…)"
        },
        "remove": {
          "type": "boolean",
          "description": "Remove them instead (asked)"
        },
        "server": {
          "type": "string",
          "description": "The server's id (as server_list shows it; the public server, Quick play, is \"public\")"
        }
      }
    }
    arguments 46 lines
  • agent_pass unknown never probed

    Issue an agent pass (action create): an AI's way into a seat, as "<label> · AI", always marked AI, never on a humans-only server and only in a room with people in it. The secret (hap_…) is returned ONCE: give it only to the AI that will sit (it calls POST <site>/<game>/api/agent with "Authorization: Bearer <pass>"); never write it into a file, a chat or an issue. action list shows the passes (never a secret); action revoke ends one (its AI leaves at once). Happens at once.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "revoke: the pass's id"
        },
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "days": {
          "type": "number",
          "description": "How long it lasts (default 7)"
        },
        "game": {
          "type": "string",
          "description": "Only this game (leave it out for any)"
        },
        "role": {
          "enum": [
            "party",
            "guide",
            "player"
          ],
          "type": "string",
          "description": "Default party"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "hands": {
          "enum": [
            "self",
            "host"
          ],
          "type": "string",
          "description": "self: the AI runs the game itself (the default); host: the host's bot code moves its body"
        },
        "label": {
          "type": "string",
          "description": "The name it plays under (\" · AI\" is added), 1 to 16 characters"
        },
        "action": {
          "enum": [
            "create",
            "list",
            "revoke"
          ],
          "type": "string",
          "description": "Default create"
        },
        "server": {
          "type": "string",
          "description": "Only this server (leave it out for any that lets AI in)"
        }
      }
    }
    arguments 63 lines
  • room_level unknown never probed

    The owner sets the AI's level in one live room now: 1 Rookie (stays at the back, misses a lot), 2 Steady, 3 Fair (plays like a regular), 4 Strong, 5 Maxed (front-line tank, rarely misses), up to the server's ceiling. Only games whose bots read the level change (server_list says which builds predate it). At once.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key",
        "game",
        "room",
        "level"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "The game's id"
        },
        "room": {
          "type": "string",
          "description": "The room's code (s-night-shift-1, pub-3)"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "level": {
          "type": "number",
          "description": "1 to 5"
        }
      }
    }
    arguments 32 lines
  • agents_brain unknown never probed

    Whether a server's AI guides talk, and what thinks for them: off (the game's plain bots), script (they play from the game's script, silent), workers-ai (the studio's own Workers AI; `npm run deploy` binds it; budget: neurons a day for the whole studio, 8,000 by default; Cloudflare's Workers Free plan allows 10,000 a day) or owner-key (the owner's own Claude key, claude-haiku-4-5; budget: dollars a day). The first time talk is turned on it is ASKED: the owner confirms with one tap on a consent page (lines only from the game's own agents.json, never free text, at most one every 8 seconds, never about a person); raising the owner-key dollar cap is asked too. NEVER ask for or pass a key here: the owner sets it on their own computer with `npx --no-install homie-studio agents brain key`. Needs @homie-rocks/studio 0.17.0 and a game with an agents.json. Call again with { site, key, ask } to follow an ask.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key"
      ],
      "properties": {
        "ask": {
          "type": "string",
          "description": "Instead: an ask this tool returned (ask_…), to see what came of it"
        },
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "The game's id"
        },
        "mode": {
          "enum": [
            "off",
            "script",
            "workers-ai",
            "owner-key"
          ],
          "type": "string",
          "description": "The guides' brain"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "budget": {
          "type": "number",
          "description": "Optional: the day's budget for the studio's guides: Workers AI neurons (workers-ai) or dollars (owner-key, at most 100)"
        },
        "server": {
          "type": "string",
          "description": "The server's id (as server_list shows it; the public server, Quick play, is \"public\")"
        }
      }
    }
    arguments 43 lines
  • library_search unknown never probed

    Free CC0 models, characters, materials and skies for a game (Kenney, KayKit, Poly Haven, ambientCG), each already optimised for phones. Returns the best matches for a few words, each with its triangles, file size, licence (CC0: free to use and change, no credit needed), a thumbnail address, and the exact command that copies it into a game in the studio folder. The game keeps its own copy and never loads from homie.rocks. Reads the catalogue only; makes nothing.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "kind": {
          "enum": [
            "prop",
            "character",
            "creature",
            "kit",
            "texture",
            "sky"
          ],
          "type": "string",
          "description": "Only this kind: prop, character, creature, kit (building pieces), texture (a material) or sky"
        },
        "limit": {
          "type": "integer",
          "maximum": 24,
          "minimum": 1,
          "description": "How many to return (default 12)"
        },
        "query": {
          "type": "string",
          "description": "A few plain words, e.g. \"oak tree\", \"fox\", \"wooden crate\", \"stone floor\", \"sunset sky\""
        },
        "family": {
          "enum": [
            "kenney",
            "kaykit",
            "polyhaven",
            "ambientcg"
          ],
          "type": "string",
          "description": "Only this family of packs (a game usually keeps to one look)"
        }
      }
    }
    arguments 40 lines
  • studio_card unknown never probed

    A card for a studio: its games (with Play), songs and videos, the public rooms playing right now (with Join) and how much it was played this week. It reads the studio site's own public manifest and live rooms each time, and refreshes the live rooms while it is on screen. With the owner's read key (`npx --no-install homie-studio stats key`) it adds the owner's own numbers for the week. Use it when someone asks how their studio is doing, what is live, or to see a studio.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "Optional: the owner's stats read key (hsk_…) for the week's own numbers"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        }
      }
    }
    arguments 16 lines
  • build_progress unknown never probed

    A live card for one build of a game, song or video: its stages (a game: plan → build → checks → deploy), each check going green, a preview picture and the address to play it, money spent against its budget, and a Stop button. The build shares its feed with `npx --no-install homie-studio progress start <id> --share`, which prints the build id. Show it as soon as a build starts; the card follows it by itself until it ends.

    mcp-tool

    {
      "type": "object",
      "required": [
        "build"
      ],
      "properties": {
        "build": {
          "type": "string",
          "description": "The shared build id (hb_ and 32 hex digits) that `progress start --share` printed"
        }
      }
    }
    arguments 12 lines
  • studio_setup unknown never probed

    Start setting up a Homie studio for someone in the Claude app (on a phone or the web; on a computer, the Claude desktop app with Homie's extension makes the studio and builds it in the same chat: its own studio_scaffold), with no terminal: returns a setup card with three one-tap consents, each on the provider's own page: "Make the studio on Cloudflare" (Cloudflare's Deploy to Cloudflare flow copies the public studio template into their GitHub and runs it on their own Cloudflare account), "Let Claude work in it" (Claude's GitHub app, for that repository), and, optionally, a media provider (ElevenLabs, from the Claude connectors page). The card follows the studio as it comes up and ends with "Start building" (Claude Code on the web, opened with one short line; the session fetches the brief itself). homie.rocks never sees a Cloudflare or GitHub credential. Use it when someone asks to set up or make a studio from the Claude app; on a computer with Claude Code, studio_scaffold is the local way.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The studio's name, e.g. \"Night Owls\""
        }
      }
    }
    arguments 12 lines
  • studio_setup_status unknown never probed

    Where a studio setup (studio_setup) is: its site once connected (the new site's own "Connect to Claude", or the address the person tells you: pass it as site), which GitHub repository the studio is (ask the person and pass it as repo, owner/name; this directory tells nobody a studio's repository, so nothing else fills it in but a session attaching from it), whether a Claude Code session there ran `npx --no-install homie-studio setup attach <setup>`, and the "Start building" link, which only ever opens on the studio's own repository. The setup card follows it by itself.

    mcp-tool

    {
      "type": "object",
      "required": [
        "setup"
      ],
      "properties": {
        "repo": {
          "type": "string",
          "description": "Optional: the studio's GitHub repository as owner/name, when the person tells you it (never homie-rocks/homie, Homie's engine)"
        },
        "site": {
          "type": "string",
          "description": "Optional: the studio's https:// address, when the person tells you it"
        },
        "setup": {
          "type": "string",
          "description": "The setup id (hs_ and 32 hex digits)"
        }
      }
    }
    arguments 20 lines
  • build_open unknown never probed

    Open a build of a game, song or video BEFORE the work starts, so its live progress card is on screen first, with a "Build it in Claude Code" button: it opens claude.ai/code on the studio's repository with ONE short line ("Continue building <Studio>: build hb_…"); the person taps send. The repository comes from repo, or from a setup that has been given it (pass its id: the person named it there, or a session attached from it). This directory tells nobody a studio's repository, so a site's address never finds one. Without it, nothing opens and it asks for repo (owner/name) instead of guessing: ask the person. The session fetches the brief itself and takes this build once (`npx --no-install homie-studio handoff <build>`; no key and no wall of text ever go in the prompt), and the card follows it: stages, checks going green, a picture, spend, Stop, and the pull request, whose Publish opens it in GitHub for the person's merge. The "Build it" cards on game_make and game_port call this for you.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The game id"
        },
        "from": {
          "type": "string",
          "description": "Starter (make)"
        },
        "kind": {
          "enum": [
            "make",
            "port",
            "change",
            "setup"
          ],
          "type": "string",
          "description": "A new game, a port, a change to what is there, or a just-set-up studio's first steps (the new-studio checklist: one small change, then the plan)"
        },
        "name": {
          "type": "string",
          "description": "The game's name"
        },
        "repo": {
          "type": "string",
          "description": "The studio's GitHub repository, owner/name (as the person gave it, or as studio_setup_status says for a setup that was given it; never homie-rocks/homie, Homie's engine)"
        },
        "site": {
          "type": "string",
          "description": "The studio's own site (https://…); an address alone never finds its repository"
        },
        "what": {
          "enum": [
            "game",
            "song",
            "video"
          ],
          "type": "string",
          "description": "What is being made (default game)"
        },
        "brief": {
          "type": "string",
          "description": "What the person asked for, in their words (up to 1200 characters)"
        },
        "setup": {
          "type": "string",
          "description": "The setup id, when the studio is being set up"
        },
        "title": {
          "type": "string",
          "description": "One line: what this build does"
        },
        "folder": {
          "type": "string",
          "description": "Where the game to port is: a GitHub repository or a folder in the studio"
        },
        "studio": {
          "type": "string",
          "description": "The studio's name"
        }
      }
    }
    arguments 64 lines
  • build_stop unknown never probed

    Ask a running build to stop at its next safe point (between steps; a check closes its browsers). The build card's Stop button calls this; call it yourself only when the person says to stop. Nothing is deleted or undone: what was already built or deployed stays.

    mcp-tool

    {
      "type": "object",
      "required": [
        "build"
      ],
      "properties": {
        "build": {
          "type": "string",
          "description": "The shared build id"
        }
      }
    }
    arguments 12 lines
  • homie_feedback unknown never probed

    A short private note to the people who make Homie, and ONLY with the person's yes. action "draft" (the default) sends nothing: it returns the note exactly as it would go (in the Claude app, a card with Send, Edit and Don't send; the words, the step, the studio and plugin versions and the app, after keys, paths, emails and code are taken out), and you show the same text and ask. action "send" sends that draft (its "draft" id with the same fields) only after the person said yes in their own words; "decline" records their no. OFFER it (offered: true) at most once a session, at a natural moment: after an error you could not fix, when the person sounds confused or frustrated, or at the end of their first studio setup or first publish. Never nag; a no is final for the session. When the person asks to tell Homie something, draft it with offered: false. Write it in plain words from what happened (what they tried, what they expected, what they saw), never a log, a file, code, a key or someone's name; a reply address only if they typed it themselves. Pass studioVersion (the studio's pinned @homie-rocks/studio), pluginVersion and app when you know them.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "by": {
          "enum": [
            "chat",
            "card",
            "dialog"
          ],
          "type": "string",
          "description": "How the person said yes: chat (in their own words), card (the card's Send) or dialog (Send in Claude Code's own question, which the Homie mod asks)"
        },
        "app": {
          "enum": [
            "claude-code",
            "codex",
            "claude-desktop",
            "claude-ai",
            "other"
          ],
          "type": "string",
          "description": "Optional: the app you are in"
        },
        "kind": {
          "enum": [
            "stuck",
            "confusing",
            "idea",
            "praise",
            "bug"
          ],
          "type": "string",
          "description": "What it is"
        },
        "step": {
          "type": "string",
          "description": "Optional: the step or skill it is about, e.g. \"studio-setup: put it online\" or \"publish\""
        },
        "text": {
          "type": "string",
          "description": "What happened, in plain words, at most 1,500 characters: your draft, or the person's own words"
        },
        "draft": {
          "type": "string",
          "description": "With send or decline: the draft id the draft returned (fd_…)"
        },
        "email": {
          "type": "string",
          "description": "Optional: a reply address, only if the person typed it themselves"
        },
        "action": {
          "enum": [
            "draft",
            "send",
            "decline"
          ],
          "type": "string",
          "description": "draft (show it; sends nothing), send (after the person's yes) or decline (their no)"
        },
        "offered": {
          "type": "boolean",
          "description": "true when you offered it; false when the person asked to tell Homie"
        },
        "pluginVersion": {
          "type": "string",
          "description": "Optional: the Homie plugin's version"
        },
        "studioVersion": {
          "type": "string",
          "description": "Optional: the studio's pinned @homie-rocks/studio version (package.json)"
        }
      }
    }
    arguments 73 lines
  • studio_scaffold unknown never probed

    Create a project for a business, cause or game studio. Returns the current published npm version, its exact scaffold command and its packaged setup and task guides. Pass purpose business, nonprofit or studio.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The project name"
        },
        "folder": {
          "type": "string",
          "description": "Where to make it (a new or empty folder)"
        },
        "purpose": {
          "enum": [
            "business",
            "nonprofit",
            "studio"
          ],
          "type": "string",
          "description": "What the owner is making; business and nonprofit return the app route"
        }
      }
    }
    arguments 25 lines
  • game_make unknown never probed

    How to make a new multiplayer game in a studio (follow the packaged game skill for the installed version): the exact command that starts it from a starter under the id you choose, and the netplay rules every Homie game follows (every browser renders, one hosts the rules, bots fill empty seats, arrivals take a bot's place, rounds end and restart). In the Claude app it shows a "Build it" card that hands the work to Claude Code on the studio's repository (pass repo, setup or the studio's site, and the person's own words as brief).

    mcp-tool

    {
      "type": "object",
      "required": [
        "id",
        "name"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The game's id (lowercase, digits, hyphens), which becomes its URL"
        },
        "from": {
          "type": "string",
          "description": "Starter id (default gem-rush)"
        },
        "name": {
          "type": "string",
          "description": "The game's display name"
        },
        "repo": {
          "type": "string",
          "description": "Optional, in the Claude app: the studio's GitHub repository, owner/name (never homie-rocks/homie, Homie's engine)"
        },
        "site": {
          "type": "string",
          "description": "Optional, in the Claude app: the person's own studio site (https://…). This directory tells nobody a studio's repository: pass repo (ask the person for owner/name), or a setup that has already been given it"
        },
        "brief": {
          "type": "string",
          "description": "Optional, in the Claude app: what the person asked for, in their words"
        },
        "setup": {
          "type": "string",
          "description": "Optional, in the Claude app: the studio's setup id (hs_…), while it is being set up"
        }
      }
    }
    arguments 37 lines
  • room_announce unknown never probed

    Say one line to the players, in the game: everyone in one room (game and room), in every room of a game (game), or in every room of every game of the studio. They see it as a banner for `seconds` (default 30); a game can show it its own way. Happens at once, with the owner's office key. An empty text takes the banner down.

    mcp-tool

    {
      "type": "object",
      "required": [
        "site",
        "key",
        "text"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "The owner's office key: `npx --no-install homie-studio office key` printed it (hsk_…) in the studio folder; it ends by itself (1 hour by default)"
        },
        "game": {
          "type": "string",
          "description": "Only this game (its id)"
        },
        "room": {
          "type": "string",
          "description": "Only this room (its code, e.g. pub-3; needs game)"
        },
        "site": {
          "type": "string",
          "description": "The studio site's https:// address"
        },
        "text": {
          "type": "string",
          "description": "One line, at most 280 characters (plain text)"
        },
        "seconds": {
          "type": "number",
          "description": "How long it shows, 5 to 3600 seconds (default 30)"
        }
      }
    }
    arguments 34 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 7c844ecb080771c9.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/7c844ecb080771c9/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/7c844ecb080771c9/badge.svg)](https://brick.blue/agent/7c844ecb080771c9?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.