cc_party
Check your party's bond levels, moods, personalities, and discovered traits.
Instructions
View your full party — bond levels, moods, personalities, and any discovered traits.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/games/crittercatch/index.ts:520-525 (registration)The tool 'cc_party' is registered via server.tool() with an empty schema (no params). The handler calls renderParty(requireGame()) which renders the full party detail view.
server.tool( 'cc_party', 'View your full party — bond levels, moods, personalities, and any discovered traits.', {}, async () => ok(renderParty(requireGame())), ); - src/games/crittercatch/render.ts:177-231 (handler)The renderParty() function is the actual handler logic for cc_party. It builds a detailed view of the player's party including bond levels, moods, personalities, species names, secret traits for rare creatures, and retired creatures at home in Millhaven.
// ── Party detail view (cc_party) ─────────────────────────────────────────── export function renderParty(state: PlayerState): string { const lines: string[] = []; if (state.party.length === 0 && state.retired.length === 0) { return 'Your party is empty. Head into the meadow or forest to find creatures.'; } if (state.party.length > 0) { lines.push(`YOUR PARTY (${state.party.length}/4)`); lines.push('(Bond grows through time together. Watch for shifts in mood as trust deepens.)'); lines.push(''); for (const m of state.party) { const species = SPECIES[m.speciesId]; const header = m.isRare ? `★ ${m.nickname.toUpperCase()}` : m.nickname.toUpperCase(); const subname = m.nickname !== species.name ? ` ${species.name}` : ''; lines.push(`${header}${subname}`); lines.push(` "${species.personalityNote}"`); lines.push(` Bond ${bondBar(m.bondLevel)}`); lines.push(` Mood ${m.mood} ${moodIcon(m.mood)}`); lines.push(` ${species.bondQuotes[bondTier(m.bondLevel)]}`); lines.push(` Caught at: ${m.caughtAt}`); if (species.secretTrait && m.isRare) { lines.push(` ✦ ${species.secretTrait}`); } lines.push(''); } } else { lines.push('YOUR PARTY (empty)'); lines.push(''); } if (state.retired.length > 0) { lines.push('AT HOME IN MILLHAVEN:'); lines.push('(Safe, warm, and waiting for your return.)'); lines.push(''); for (const m of state.retired) { const species = SPECIES[m.speciesId]; const header = m.isRare ? `★ ${m.nickname.toUpperCase()}` : m.nickname.toUpperCase(); const subname = m.nickname !== species.name ? ` ${species.name}` : ''; lines.push(`${header}${subname}`); lines.push(` Bond ${bondBar(m.bondLevel)}`); lines.push(` ${species.bondQuotes.high}`); lines.push(''); } } return lines.join('\n'); } - src/games/crittercatch/index.ts:114-114 (registration)The registerCritterCatchTools() function is the export that registers all Critter Catch tools including cc_party on the McpServer instance.
export function registerCritterCatchTools(server: McpServer): void { - The renderParty function is imported from './render.js' and used by the cc_party tool handler.
import { renderArea, renderExploreUpdate, renderParty, renderStatus, renderWin } from './render.js';