cc_status
View your current location, party summary, rare observations, and recent event log.
Instructions
View your current location, party summary, rare observations, and recent event log.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/games/crittercatch/index.ts:527-532 (registration)Registration of the 'cc_status' tool on the MCP server. It has no input schema and delegates to renderStatus().
server.tool( 'cc_status', 'View your current location, party summary, rare observations, and recent event log.', {}, async () => ok(renderStatus(requireGame())), ); - src/games/crittercatch/render.ts:235-289 (handler)The actual handler function `renderStatus` that builds the status overview string: location, party summary, rare observations, inventory, and recent event log.
export function renderStatus(state: PlayerState): string { const area = AREAS[state.currentArea]; const lines: string[] = []; lines.push(`${state.name.toUpperCase()}'S JOURNEY`); lines.push(`Location : ${area.name}`); const retiredLine = state.retired.length > 0 ? ` (${state.retired.length} at home)` : ''; lines.push(`Party : ${state.party.length}/4${retiredLine}`); lines.push(`Rares : ${caughtRareCount(state)}/${RARE_SPECIES_IDS.length} caught (${state.observedRares.length} sighted)`); lines.push(`Items : ${state.inventory.length} carried`); lines.push(''); // Inventory detail if (state.inventory.length > 0) { lines.push('CARRYING:'); for (const id of state.inventory) { const item = ITEMS[id]; if (!item) continue; lines.push(` ${item.name} — ${item.effectLabel}`); lines.push(` ${item.description}`); } lines.push(''); } lines.push('RARE CREATURES:'); for (const id of RARE_SPECIES_IDS) { const found = state.observedRares.includes(id); const inParty = state.party.some(m => m.speciesId === id); const atHome = state.retired.some(m => m.speciesId === id); let status = 'not yet found'; if (inParty) status = 'in party ★'; else if (atHome) status = 'at home ♥'; else if (found) status = 'observed ✓'; lines.push(` ${SPECIES[id].name.padEnd(12)} ${status}`); } lines.push(''); // All-rares-caught nudge — fires only when each rare is actually in your care if (caughtRareCount(state) >= RARE_SPECIES_IDS.length && state.gameStatus !== 'won') { lines.push(''); lines.push('✦ ─────────────────────────────────────── ✦'); lines.push(" Old Maren's voice, somewhere in the back of your mind:"); lines.push(' "You have all three. Bring them home."'); lines.push(' Return to Millhaven to complete your journey.'); lines.push('✦ ─────────────────────────────────────── ✦'); } lines.push(''); lines.push('RECENT LOG:'); for (const entry of state.log) { lines.push(` • ${entry}`); } return lines.join('\n'); } - src/games/crittercatch/render.ts:7-9 (helper)Helper function `caughtRareCount` used by renderStatus to count how many rare species the player currently has in their care.
function caughtRareCount(state: PlayerState): number { return RARE_SPECIES_IDS.filter(id => ownsSpecies(state, id)).length; }