Skip to main content
Glama
bellsanct
by bellsanct

view_status

Display character status, equipment, and current activities in the MCP Dungeon Game to monitor progress and manage gameplay.

Instructions

キャラクターの状態、ステータス、装備、現在の活動を表示します。

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
save_keyYesセーブキー

Implementation Reference

  • The 'viewStatus' function retrieves player data from storage, calculates total equipment stats, and formats a string displaying the player's status, equipment, and current dungeon progress.
    export async function viewStatus(saveKey: string): Promise<string> {
      const data = await storage.load(saveKey);
      
      if (!data.player.name) {
        return "プレイヤーが見つかりません。先に'create_player'を実行してください。";
      }
    
      const stats = calculateTotalStats(data.player.equipment);
      
      // 状態アイコン
      const stateIcon = data.player.state === 'exploring' ? '⚔️' : '🏠';
      const stateText = data.player.state === 'exploring' ? '探索中' : '待機中';
      
      let output = `=== ${data.player.name} ===\n\n`;
      output += `状態: ${stateIcon} ${stateText}\n`;
      output += `HP: ${data.player.hp}/${data.player.maxHp}\n`;
      output += `ゴールド: ${data.player.gold}\n\n`;
    
      output += `ステータス:\n`;
      output += `  攻撃力: ${stats.attack}\n`;
      output += `  防御力: ${stats.defense}\n`;
      output += `  速度: ${stats.speed}\n`;
      output += `  運: ${stats.luck}%\n\n`;
      
      output += `装備:\n`;
      const slotNames: { [key: string]: string } = {
        weapon: '武器',
        shield: '盾',
        armor: '防具',
        accessory: 'アクセサリ',
        item1: '持ち物1',
        item2: '持ち物2'
      };
    
      for (const [slot, item] of Object.entries(data.player.equipment)) {
        if (slot === 'length') continue; // インデックスシグネチャ対応
        const slotName = slotNames[slot] || slot;
    
        if (slot === 'item1' || slot === 'item2') {
          // 持ち物スロット
          if (item && 'effect' in item) {
            const holdingItem = item as Item;
            output += `  ${slotName}: ${holdingItem.name}\n`;
            output += `    効果: ${holdingItem.description}\n`;
          } else {
            output += `  ${slotName}: (なし)\n`;
          }
        } else {
          // 装備スロット
          if (item && 'stats' in item) {
            const equipment = item as Equipment;
            output += `  ${slotName}: ${equipment.name} [${equipment.rarity}]\n`;
            output += `    ステータス: 攻撃+${equipment.stats.attack} 防御+${equipment.stats.defense} 速度+${equipment.stats.speed} 運+${equipment.stats.luck}\n`;
          } else {
            output += `  ${slotName}: (なし)\n`;
          }
        }
      }
    
      output += `\n装備インベントリ: ${data.player.inventory.length}個\n`;
      output += `持ち物インベントリ: ${data.player.itemInventory?.length || 0}個\n`;
    
      if (data.player.currentDungeon) {
        const now = Date.now();
        const { startTime, estimatedEndTime } = data.player.currentDungeon;
        const remaining = Math.max(0, estimatedEndTime - now);
        const totalTime = estimatedEndTime - startTime;
        const elapsed = now - startTime;
        const progressPercentage = Math.min((elapsed / totalTime) * 100, 100);
    
        const minutes = Math.ceil(remaining / 60000);
        const seconds = Math.ceil((remaining % 60000) / 1000);
    
        output += `\n⚔️  ダンジョン探索中!\n`;
        output += `進行状況: ${progressPercentage.toFixed(1)}%\n`;
        output += `残り時間: ${minutes}分${seconds}秒\n`;
    
        // 簡易プログレスバー
        const barLength = 15;
        const filledLength = Math.floor((progressPercentage / 100) * barLength);
        const bar = '█'.repeat(filledLength) + '░'.repeat(barLength - filledLength);
        output += `[${bar}]\n`;
    
        output += `\n'check_progress'で詳細な進行状況を確認できます。`;
      }
    
      return output;
    }
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states the tool displays information, implying it's read-only, but does not disclose behavioral traits such as whether it requires authentication, has rate limits, returns structured or formatted data, or any side effects. The description is minimal and lacks operational context.

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

Conciseness4/5

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

The description is a single, efficient sentence in Japanese that front-loads the purpose. It lists key data types concisely without unnecessary details, though it could be slightly more structured for clarity. Every part earns its place, but it's brief and lacks elaboration.

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

Completeness2/5

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

Given the tool's complexity (displaying multiple character aspects), no annotations, no output schema, and 100% schema coverage, the description is incomplete. It does not explain return values, data format, or behavioral context, leaving gaps for an AI agent to understand how to interpret results or handle errors.

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

Parameters3/5

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

The input schema has 100% description coverage, with one parameter 'save_key' documented as 'セーブキー'. The description adds no additional meaning beyond the schema, such as explaining what a save_key is or its format. With high schema coverage, the baseline is 3, as the description does not compensate but doesn't detract.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'display character status, stats, equipment, and current activity.' It uses specific verbs ('display') and resources ('character'), but does not explicitly differentiate from siblings like 'view_inventory' or 'view_battle_log' beyond listing different data types.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., needing a save_key), exclusions, or comparisons to sibling tools like 'view_inventory' or 'check_progress', leaving usage context implied rather than explicit.

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/bellsanct/mcp-dungeon-game'

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