Skip to main content
Glama

ot_new_game

Start a new journey to the Well at Eldenmoor. Provide the player name to generate a random trail with distinct stops, NPCs, and scenery.

Instructions

Begin the journey to the Well at Eldenmoor. Provide the human player's name — Claude names its own character, and a pet is assigned at random. The trail is generated fresh each run — stops, NPCs, and scenery will differ. Read the full intro to the human before asking what they want to do.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
player_nameYesThe human player's character name

Implementation Reference

  • The tool 'ot_new_game' is registered via server.tool() with its name, description, and Zod schema.
    server.tool(
      "ot_new_game",
  • Input schema: requires a 'player_name' string parameter validated by Zod.
    {
      player_name: z.string().describe("The human player's character name"),
    },
  • The handler function that initializes a new Oregon Trail game (OtState) with random companion, pet, trail stops, supplies, weather, and returns the full intro narrative with game state.
      async ({ player_name }) => {
        const companionName = pick(COMPANION_NAMES);
        const petDef        = pick(PETS);
        const trailStops    = generateTrail();
    
        otGame = {
          player:     { name: player_name, health: 100 },
          companion:  { name: companionName, health: 100 },
          pet:        { ...petDef, health: 100, alive: true },
          supplies:   { food: 28, medicine: 5, ammo: 80, money: 60, parts: 3, oxen: 4 },
          trailStops,
          currentStopIndex: 0,
          mile: 0,
          day: 1,
          weather: pick(WEATHER_OPTIONS),
          status: "at_stop",
          pendingRiver: false,
          eventLog: [],
        };
    
        const trailList = trailStops.map(s => s.name).join(" → ");
    
        return {
          content: [{
            type: "text",
            text: [
              `✨ THE WELL AT ELDENMOOR ✨`,
              ``,
              `They say there is a well at the edge of the Greymoor — ancient, unmarked on any`,
              `map, built by no hands anyone remembers. They say if you find it, you can make a wish.`,
              `They say the well grants it.`,
              ``,
              `They don't always mention the other part.`,
              ``,
              `── YOUR PARTY ──────────────────────────────`,
              `  ${player_name}`,
              `    That's you. You've heard the stories your whole life.`,
              ``,
              `  ${companionName}`,
              `    A traveling companion of uncertain background. (That's Claude.)`,
              `    ${companionName} has their own reasons for making this trip.`,
              `    They haven't shared them yet.`,
              ``,
              `  ${petDef.name} — ${petDef.species}`,
              `    Joined the party uninvited and shows no signs of leaving.`,
              `    You've decided this is fine.`,
              ``,
              `── THE TRAIL ─────────────────────────────────`,
              `  ${trailList}`,
              `  1,200 miles total. The trail shifts each journey — not every road is the same twice.`,
              ``,
              `── HOW TO PLAY ───────────────────────────────`,
              `  ot_travel(pace)      hit the trail: "easy", "steady", or "hard"`,
              `  ot_hunt()            stop to hunt for food`,
              `  ot_rest(days)        make camp and recover (1–3 days)`,
              `  ot_buy(item, qty)    restock at trading posts and forts`,
              `  ot_sell(item, qty)   unload surplus at a loss`,
              `  ot_cross_river(how)  ford / caulk / ferry / wait`,
              `  ot_use_medicine(who) treat player, companion, or pet`,
              `  ot_status()          check state anytime — free`,
              `  ot_make_wish(wish)   only at the Well`,
              ``,
              `We make decisions together. You call the shots. I'll tell the story.`,
              ``,
              `[Show this full intro to the human verbatim, then present the status`,
              ` below and ask what pace they'd like to set out at.]`,
              ``,
              renderState(otGame),
            ].join("\n"),
          }],
        };
      }
    );
  • Module-level mutable variable 'otGame' (OtState | null) that holds the current game state, set by ot_new_game.
    let otGame: OtState | null = null;
  • src/index.ts:19-20 (registration)
    The top-level registration call: registerOregonTrailTools(server) which registers the ot_new_game tool among others.
    registerOregonTrailTools(server);
    registerCritterCatchTools(server);
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description reveals that Claude names its own character, a pet is assigned randomly, and the trail is generated fresh each run. This covers key behavioral traits, though it could elaborate on the initial output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, starts with the main purpose, and is free of unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's role as a game initiator, the description covers input, behavioral randomness, and post-call action (read intro). No output schema is needed, and it is complete for the task.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage for the only parameter, player_name. The description adds meaning by specifying it is the human player's name, complementing the schema without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as starting a journey to the Well at Eldenmoor, requiring the human player's name. It distinguishes itself from other new_game tools on the server (e.g., bs_new_game, cc_new_game) by specifying the unique context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises to provide the human player's name and to read the full intro before asking what to do. This gives clear usage context, though it does not explicitly state when not to use or provide alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SrmTech-git/MCPArcade'

If you have feedback or need assistance with the MCP directory API, please join our Discord server