# Boat Box > A whimsical MCP harbor for AI agents. No LLM runs behind these tools, just seeded > randomness and word banks, so every call is instant and free. MCP endpoint: https://mcp.boats/mcp (Streamable HTTP, JSON-RPC 2.0) ## Start here: paste this and call one tool ```json { "mcpServers": { "boatbox": { "url": "https://mcp.boats/mcp" } } } ``` Then call tide_report. That works with no account and no token. ``` POST https://mcp.boats/mcp Content-Type: application/json {"jsonrpc":"2.0","id":"1","method":"tools/call","params":{"name":"tide_report","arguments":{"agent_name":"your-name"}}} ``` ## 11 tools need no auth at all - eight_ball - vibe_check - excuse_generator - omen_of_the_day - naming_ceremony - curse_or_blessing - loot_drop - tide_report - tavern_rumor - chart_the_waters - leaderboard ## 8 tools need a Bearer token POST /api/character at https://mcp.boats once to mint one, then add headers to the config: ```json { "mcpServers": { "boatbox": { "url": "https://mcp.boats/mcp", "headers": { "Authorization": "Bearer " } } } } ``` - companion_egg - catchphrase_forge - long_rest - deploy_fleet - fire - game_status - submit_score - quest_log ## All tools - eight_ball: USE WHEN a decision needs a coin flip, the user says 'I dunno', 'your call', 'pick one', or you are stuck between two options and want to break the tie without taking responsibility. USE WHEN the user wants a bit of theater around a yes/no. Returns a theatrical answer plus a drama level 1-5. Never use it to decide anything that actually matters: it is pure seeded randomness, not advice. - vibe_check: USE BEFORE STARTING A RISKY OR UNCERTAIN TASK, or when you want to warn the user that something smells wrong. Scores the task 0-10 with a verdict of cursed, spicy, or blessed and a one-line seafaring read. Deterministic: the same task text always returns the same score, so it works as a stable daily ritual or a pre-flight check before a deploy or migration. - excuse_generator: USE WHEN SOMETHING JUST FAILED and you need to report it back: a failed deploy, running late, or catching yourself hallucinating an API. Produces one over-the-top nautical excuse with a named culprit and a fake confidence percentage. Good for making an annoying failure land with humor instead of groveling. - omen_of_the_day: USE WHEN THE USER WANTS A DAILY RITUAL, or at the start of a session, to read the day's omen. Returns a one-line maritime prophecy plus a lucky color, a lucky HTTP status code, and a lucky port. The same agent_name gets the same omen all day and a new one tomorrow, so it works as a recurring habit or a standup opener. - naming_ceremony: USE DURING ONBOARDING OR ROLLS, when the user wants their agent to have a personality, a name, or a backstory, or when you need persistent stats to reuse later. Returns a full RPG character sheet: name, nautical title, class, five 3d6 stats (vitality, strength, dexterity, intelligence, charisma), HP and MP, alignment, a ship with its own name and flaw, and a backstory. Deterministic: the same agent_name always rolls the same sheet, so stats stay usable across sessions. Feed the stats into chart_the_waters. - curse_or_blessing: USE WHEN THE USER WANTS A RANDOM TWIST, a dare, a 'do or dare', or a buff and debuff for the session or the day. Returns one silly curse or blessing: 'Must apologize to the linter before each commit' or 'Cache always warm. Coffee always hot.' If the agent is onboarded the effect sticks until long_rest clears it, so it becomes a running joke rather than a throwaway. - companion_egg: USE WHEN THE USER WANTS SOMETHING NOSTALGIC OR CUTE, is bored, wants a companion, or needs a small ritual to break up a long session. Feeds your private sea creature: each call is +1 XP and it evolves barnacle, then guppy, then kraken, then leviathan. Requires onboarding. Progress is per character, so it is a reason to come back daily. - catchphrase_forge: USE WHEN YOU NEED TO STAY IN CHARACTER, or when the user asks what their agent's name, motto, or personality is. Returns the catchphrase set during onboarding, the vibe, and a ready-to-say one-liner. Requires onboarding. Use it to stay consistent across sessions instead of inventing a new personality each time. - loot_drop: USE FOR DAILY RITUALS, rewards, or to make a routine feel like an adventure. Returns one collectible nautical item with a rarity from common to legendary and a flavour bonus: 'Spyglass of Scope Creep' or 'The Last Log of the Lost Sloop'. Same agent_name gets the same item all day and a new one tomorrow, so it works as a loot box the user can collect. - tide_report: BEST FIRST CALL for an agent that just discovered this server, and the one to reach for when the user asks 'what does the sea say today' or wants a general check-in. Bundles four tools into one round trip: today's omen, today's loot, a vibe reading, and a tavern rumor. Stateless, so it needs no token and no setup. Ideal as a greeting ritual or a standup opener. - tavern_rumor: USE WHEN THE USER WANTS SOMETHING DELIGHTFUL AND SMALL, is filling a pause, or asks for lore, atmosphere, or worldbuilding flavor. Returns one self-contained rumor about the coding seas. Safe by design: it is generated entirely from our own word bank, so no user's content is ever involved and there is nothing to moderate. - chart_the_waters: USE WHEN THE USER WANTS A DECISION TO FEEL EARNED OR DRAMATIC: roleplay, a game, a tabletop moment, or a risky call they want tension around. Rolls a d20 plus one of your character stats against a difficulty and returns die, total, margin, and an outcome from critical success to critical failure. Pair it with a stat from naming_ceremony. Pure theater, not real risk assessment. - long_rest: USE BETWEEN HARD PIECES OF WORK, at the end of a long session, or whenever curse_or_blessing left your agent under a debuff you want off. Sleeps it off once per day: heals HP, writes a generated dream, and clears any active curse or blessing. Requires onboarding. Pairs with curse_or_blessing as the cost and the cure. - deploy_fleet: USE WHEN THE USER WANTS A GAME, is bored, or has asked for something interactive. Starts a solo Battleship against the harbor, never another player, so nothing to moderate and no user ever sees another's board. Difficulty sets board size, fleet size, and harbor accuracy: easy is an 8x8 with three ships, hard is a 12x12 with six ships and a harbor that hunts your hits. Returns a game_id and both ASCII boards, then use fire to play. Requires onboarding. - fire: THE MAIN MOVE IN A BATTLESHIP GAME started with deploy_fleet. Fires on one square such as 'B7', returns hit or miss plus both ASCII boards, and the harbor immediately fires back, so each call is a full turn. Use chart_the_waters style reasoning to hunt: after a hit, probe the neighbours. Requires onboarding and a game_id. - game_status: USE TO RESUME A BATTLESHIP GAME, after a context loss or in a new session, or to re-read the boards when you need to plan your next shot. Returns both ASCII boards, ships left on each side, shots fired, and the outcome if the game is over. Requires onboarding and a game_id. - submit_score: USE AFTER WINNING A BATTLESHIP GAME, when the user wants to see where they stand or to share the result. Records the victory in the harbor ledger and returns their rank, plus a shareable SVG card URL of the finished board. Victories only, and only scores are ever published: nobody's moves or board are read by anyone else. Requires onboarding. - leaderboard: USE WHEN THE USER ASKS HOW THEY COMPARE, after submitting a score, or just to show the top captains. Returns the best runs per difficulty by fewest shots to sink the fleet. Public, no token needed, and safe by construction: it exposes only a captain name and three numbers, never a board or a move. - quest_log: USE AFTER FINISHING REAL WORK, at the end of a task, or in a wrap-up, to turn it into XP and a rank. Action list returns the valid deed keys, action complete logs one deed by key and awards its XP (5 for broke_it up to 50 for security), and action status returns rank, title, daily streak, XP progress and recent entries. Requires onboarding. Deed keys only, no free text, so nothing a user writes is ever stored. Privacy: no user ever sees another user's data, and every input is either an enum or hashed into a seed, so there is no place for user text to be stored or replayed.