Skip to main content
Glama
ChessMess

mcp-server-return-to-dark-tower

by ChessMess
IMPORTANT

This project has moved. mcp-server-return-to-dark-tower is now part of the UltimateDarkTower monorepo at apps/mcp-server. Development continues there; this repository is archived / read-only. Full git history was preserved (tag mcp-v1.0.0).

The npm package name is unchanged — npx -y mcp-server-return-to-dark-tower still works, and releases now ship from the monorepo.

Return to Dark Tower — AI MCP Server

License: MIT Node.js npm

An MCP server that lets AI assistants like Claude, ChatGPT, and Gemini control the physical Return to Dark Tower board game tower via Bluetooth. Connect, calibrate, play sounds, animate lights, rotate drums, break seals, and run dramatic game sequences — all through natural language.

Features

  • 31 MCP tools across 6 domains — connection, audio, lights, drums, seals, state & glyphs

  • 15 tower state resources — connection status, battery, drum positions, glyphs, seals, audio library, light effects

  • 8 game knowledge resources — rules, heroes, items, quests, adversaries, buildings, lore, glossary

  • 8 prompt templates — dramatic entrance, victory/defeat sequences, monthly transitions, dungeon runs, battle starts, game master setup, sound browser

  • Dual transport — stdio for desktop AI tools, Streamable HTTP for web apps

  • Zero custom BLE code — built on UltimateDarkTower adapter pattern

AI Agents

Ready-to-use AI agents for this server and the ultimatedarktower library: 👉 return-to-dark-tower-agents

  • Return to Dark Tower agent — system prompt for Claude.ai, ChatGPT, and other web AI tools; knows all 31 tools, 15 resources, and 8 prompts

  • Ultimate Dark Tower agent — VS Code / GitHub Copilot coding agent for building apps with the ultimatedarktower npm library

Supported in VS Code (GitHub Copilot), Claude.ai, ChatGPT, and 20+ tools via the AGENTS.md standard.


📚 Table of Contents


Related MCP server: matter-mcp-server

⚡ Quick Start

Requires Node.js 18+. Run node --version to check.

🌐 For Web AI Chat Apps (Claude.ai, ChatGPT, etc.)

Step 1 — Open a terminal and start the server:

npx -y mcp-server-return-to-dark-tower --http-only --port 3001

npx fetches the package from npm on first run (cached after that) and starts the server. Keep this terminal open — the server runs as long as the window is open.

Step 2 — Connect your web AI app to the server.

In your AI app's settings, add a new MCP connection pointing at:

http://localhost:3001/mcp

See Web-Based AI Chat Apps for step-by-step instructions for Claude.ai and ChatGPT.

Step 3 — Ask it something like:

"Connect to the tower, calibrate it, then turn on all the north doorway lights."


🖥️ For Desktop AI Tools (Claude Desktop, Cursor, VS Code, etc.)

Step 1 — Add this to your AI tool's config file (find the exact file path for your tool in Setup with Your AI Tool):

{
  "mcpServers": {
    "return-to-dark-tower": {
      "command": "npx",
      "args": ["-y", "mcp-server-return-to-dark-tower", "--stdio-only"]
    }
  }
}

Step 2 — Restart your AI tool.

When it starts, it runs the npx command above — npx fetches the package from npm (first run only, cached after that) and launches the server as a background process. No separate terminal needed.

Step 3 — Ask it something like:

"Connect to the tower, calibrate it, then turn on all the north doorway lights."


What is MCP?

MCP (Model Context Protocol) is an open standard that lets AI assistants use tools and access data from external systems — similar to how a browser loads plugins. Instead of the AI just knowing about your tower, it can control it.

This server implements the MCP standard. Once configured, your AI assistant gains 31 tools it can call by name — things like tower_play_sound, tower_break_seal, or tower_rotate_drum — and it can chain them together to run full dramatic game sequences on command.

Two ways to connect:

Transport

Best for

How it works

stdio

Desktop AI apps (Claude Desktop, Cursor, VS Code, etc.)

The AI app launches this server as a background process and communicates over stdin/stdout

HTTP

Web-based AI apps (Claude.ai, ChatGPT web)

You start the server manually; the AI app connects to it over HTTP


Getting Started

Prerequisites

Before you begin, make sure you have:

  1. Node.js 18 or newer — Download from nodejs.org. To check your version, run node --version in a terminal.

  2. Bluetooth Low Energy (BLE) hardware — Built into most Macs made after 2011 and most modern Windows PCs.

  3. A physical Return to Dark Tower tower, though you could use the resources in the server without a tower.

Platform-specific setup:

Platform

What you need to do

macOS

Nothing extra. After first use, grant Bluetooth permission: System Settings → Privacy & Security → Bluetooth → allow Terminal (or your AI app).

Linux

Install BlueZ first: sudo apt install bluetooth bluez libbluetooth-dev

Windows

Windows 10 or newer with Bluetooth is required. No extra setup needed.

Install

The easiest way is to use npx, which runs the package directly from npm without any installation step:

# Test that it works — this starts the server in stdio mode
npx -y mcp-server-return-to-dark-tower --stdio-only

What is npx? It's a tool that comes bundled with Node.js. It downloads and runs a package from the npm registry on demand, so you don't have to install anything globally.

If you'd rather install it globally (for faster startup after the first run):

npm install -g mcp-server-return-to-dark-tower

Pick your AI tool below for the exact config to paste in. You do not need to run the server yourself — your AI tool will start it for you using stdio.

git clone https://github.com/your-org/mcp-server-return-to-dark-tower.git
cd mcp-server-return-to-dark-tower
npm install
npm run build

Then in all config snippets below, replace:

"command": "npx",
"args": ["-y", "mcp-server-return-to-dark-tower", "--stdio-only"]

with:

"command": "node",
"args": ["/absolute/path/to/dist/index.js", "--stdio-only"]

🖥️ Setup with Your AI Tool

Each section is self-contained — jump straight to the tool you use.

All desktop AI tools use stdio transport. The config tells the AI app how to launch this server; the app handles the rest. You just edit a JSON (or YAML) config file, save it, and restart your AI app.

If the config file doesn't exist yet, create it as a new empty file at the path shown. All configs shown below are complete and valid — you can paste them as-is if you're starting fresh.

If the file already exists, add the "return-to-dark-tower" block inside the existing "mcpServers" (or equivalent) object. Don't replace the whole file.


Claude Desktop

Claude Desktop reads its config file at startup. After saving changes, you must fully quit and reopen the app (⌘Q on Mac, not just closing the window).

Config file location:

OS

Path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Tip (macOS): Open the file quickly in Terminal: open -e ~/Library/Application\ Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "return-to-dark-tower": {
      "command": "npx",
      "args": ["-y", "mcp-server-return-to-dark-tower", "--stdio-only"]
    }
  }
}

After restarting Claude, you should see a hammer icon (🔨) in the chat input area indicating MCP tools are available.

Windows note: If npx doesn't work, try replacing "command": "npx" with "command": "node" and adding the full path to node_modules/.bin/mcp-server-dark-tower.js as the first arg, or install globally first.


🎯 Cursor

Cursor can load MCP config from a project-specific file or a global file.

Config file locations:

Scope

Path

This project only

.cursor/mcp.json (in your project root)

All projects

~/.cursor/mcp.json (in your home directory)

{
  "mcpServers": {
    "return-to-dark-tower": {
      "command": "npx",
      "args": ["-y", "mcp-server-return-to-dark-tower", "--stdio-only"]
    }
  }
}

Cursor picks up changes automatically — no restart required.

Important: MCP tools only appear when you're in Agent mode. In the Cursor chat panel, look for the mode selector and switch from "Normal" to "Agent" before asking the AI to use the tower.


🐙 VS Code (GitHub Copilot)

VS Code supports two config locations. The .vscode/mcp.json file can be committed to your repo so your whole team shares the same MCP setup.

Requires: VS Code 1.99 or newer. Update via Help → Check for Updates.

Option A — Workspace config (recommended, shareable with your team):

Create or edit .vscode/mcp.json in your project root:

{
  "servers": {
    "return-to-dark-tower": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-server-return-to-dark-tower", "--stdio-only"]
    }
  }
}

Option B — User settings (applies to all your projects):

Open settings.json (Cmd/Ctrl+Shift+P → "Open User Settings JSON") and add:

{
  "mcp": {
    "servers": {
      "return-to-dark-tower": {
        "type": "stdio",
        "command": "npx",
        "args": ["-y", "mcp-server-return-to-dark-tower", "--stdio-only"]
      }
    }
  }
}

Important: Switch the Copilot Chat panel to Agent mode (look for the mode dropdown in the chat panel). MCP tools are not available in Ask or Edit modes.


🌊 Windsurf

Windsurf uses a single global config file for all MCP servers.

Config file location:

OS

Path

macOS / Linux

~/.codeium/windsurf/mcp_config.json

Windows

%USERPROFILE%\.codeium\windsurf\mcp_config.json

You can also open it from within Windsurf: click the MCP icon in the top-right of the Cascade panel → Configure.

{
  "mcpServers": {
    "return-to-dark-tower": {
      "command": "npx",
      "args": ["-y", "mcp-server-return-to-dark-tower", "--stdio-only"]
    }
  }
}

Restart Windsurf after saving. The tower tools will appear in the Cascade agent panel.


⚡ Zed

Zed's MCP servers are configured in its global settings file.

Config file location:

OS

Path

macOS / Linux

~/.config/zed/settings.json

Windows

%APPDATA%\Zed\settings.json

Add the context_servers block (alongside any existing settings in the file):

{
  "context_servers": {
    "return-to-dark-tower": {
      "source": "custom",
      "command": "npx",
      "args": ["-y", "mcp-server-return-to-dark-tower", "--stdio-only"],
      "env": {}
    }
  }
}

Restart Zed after saving. Open the Agent Panel and look for a green dot next to the server name — that means it connected successfully.


🔎 Perplexity (macOS App)

Perplexity's native MCP support is available in the Mac App (download from the App Store). The web interface does not support MCP.

Requirements:

  • macOS only

  • Paid Perplexity plan (Pro or higher)

  • The free tier does not include MCP

Setup:

  1. Install the Perplexity Mac App from the App Store if you haven't already

  2. Open the app and go to Account SettingsConnectors

  3. Click "Install Helper" and install the PerplexityXPC helper app when prompted — this is a one-time step required by macOS's App Store sandbox rules

  4. Click "Add Connector"Simple"Add MCP Connector"

  5. Fill in:

    • Server Name: return-to-dark-tower (or anything you like)

    • Command: npx

    • Arguments: -y mcp-server-return-to-dark-tower --stdio-only

  6. Click Save and wait for the status indicator to show Running

  7. In a Perplexity chat, click Sources and enable the return-to-dark-tower connector

There is no config file to edit — everything is done through Perplexity's UI.

Note: Remote MCP support (for the web interface) is on Perplexity's roadmap but not yet available.


🐋 DeepSeek

DeepSeek's web chat (chat.deepseek.com) and API do not currently support MCP — there is no config file or UI to connect an MCP server to DeepSeek directly.

If you're using DeepSeek through an IDE that supports it (Cursor and VS Code both allow you to switch the underlying AI model to DeepSeek while keeping their MCP layer), MCP tools work fine. The IDE handles the MCP connection; it's independent of which AI model is powering the responses. Configure the tower using the Cursor or VS Code section above, then switch your model to DeepSeek in that IDE's settings.

If you use DeepSeek's own web or API interface, MCP is not available at this time. Check DeepSeek's documentation for updates.


Summary

Tool

Config file

Root key

Agent mode required?

Claude Desktop

claude_desktop_config.json

mcpServers

No (always on)

Cursor

.cursor/mcp.json

mcpServers

Yes

VS Code (Copilot)

.vscode/mcp.json

servers

Yes

Windsurf

mcp_config.json

mcpServers

No (Cascade only)

Zed

settings.json

context_servers

No

Perplexity

App UI (no file)

macOS + paid plan only

DeepSeek

Not supported natively


🌐 Web-Based AI Chat Apps

Web-based AI tools can't launch processes on your machine the way desktop apps can. Instead, you start the HTTP server yourself and point the web app at it.

Start the HTTP Server

Open a terminal and run:

npx mcp-server-return-to-dark-tower --http-only --port 3001

Keep this terminal window open while you use your web AI tool. The server exposes:

  • http://localhost:3001/mcp — the main MCP endpoint

  • http://localhost:3001/health — returns {"status":"ok"} if it's running

To verify it's up, open http://localhost:3001/health in your browser. You should see {"status":"ok"}.

What is localhost? It means "this computer". The server is running on your machine and is only accessible from your own browser — it's not exposed to the internet by default.


Claude.ai (Web)

Remote MCP connections are available on Pro, Max, Team, and Enterprise plans (not the free tier).

  1. Go to claude.ai and open SettingsIntegrations

  2. Click Add Integration (or Add MCP Server)

  3. Enter the URL: http://localhost:3001/mcp

  4. Save. The tower tools will appear in your next conversation.

Heads up: Claude.ai connects from your browser to localhost, which works as long as your browser and the server are on the same machine. If you want to use it from another device (like a phone), you'll need to expose the server publicly — see the note below.

Use a tunneling tool like ngrok to create a public URL for your local server:

# In a second terminal (while the server is running)
ngrok http 3001

ngrok will print a public URL like https://abc123.ngrok.io. Use that URL instead of http://localhost:3001 in your AI app's settings.

⚠️ Anyone with that URL can send commands to your tower. Use ngrok's auth features or keep the session short.


ChatGPT / OpenAI

ChatGPT added MCP support in late 2025, available through Developer Mode (requires ChatGPT Plus or higher).

  1. In ChatGPT, open SettingsDeveloper Mode (enable it if you haven't)

  2. Go to ConnectorsAdd Connector

  3. Select Streamable HTTP as the transport type

  4. Enter the URL: http://localhost:3001/mcp

  5. Save and start a new conversation. Tower tools will be available.

Note: OpenAI's MCP UI is evolving quickly. If "Connectors" has been renamed to "Apps" or similar, look for the MCP integration option there. Check OpenAI's help docs for the latest steps.


Custom Web Applications

Building your own web app to control the tower? Use the HTTP endpoint directly.

Start the server with both transports running simultaneously:

npx mcp-server-return-to-dark-tower
# stdio on stdin/stdout  +  HTTP on http://localhost:3001/mcp

Send a command with fetch:

// Generate a session ID once per user session
const sessionId = crypto.randomUUID();

const response = await fetch("http://localhost:3001/mcp", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "mcp-session-id": sessionId, // keeps this session's context consistent
  },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "tools/call",
    params: {
      name: "tower_play_sound_by_name",
      arguments: { name: "Ashstrider" },
    },
  }),
});

const result = await response.json();
console.log(result);

Subscribe to streaming events (SSE):

const eventSource = new EventSource("http://localhost:3001/mcp");
eventSource.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log("Tower event:", data);
};

CORS: If your web app runs on a different port (e.g., localhost:5173), the browser will block requests to localhost:3001 due to CORS. Configure your dev server to proxy /mcp requests, or add a CORS header to the MCP server. See the Architecture section for details on how HTTP and stdio share a single tower connection.


Available Tools

Connection (8 tools)

Tool

Description

tower_connect

Connect to the tower via BLE

tower_disconnect

Disconnect from the tower

tower_calibrate

Calibrate drum positions

tower_status

Get connection status, calibration state, battery

tower_device_info

Get manufacturer, model, firmware info

tower_is_responsive

Active connectivity check

tower_cleanup

Clean up resources

tower_set_monitoring

Configure connection monitoring

Audio (3 tools)

Tool

Description

tower_play_sound

Play a sound by index (1-113)

tower_play_sound_by_name

Play a sound by name (e.g., "Ashstrider")

tower_list_sounds

List available sounds, optionally filtered by category

Lights (5 tools)

Tool

Description

tower_set_lights

Set doorway, ledge, and base lights

tower_set_led

Set individual LED by layer and index

tower_light_sequence

Run a named light sequence by ID

tower_light_sequence_by_name

Run a light sequence by name (e.g., "victory")

tower_lights_off

Turn all lights off

Drums (4 tools)

Tool

Description

tower_rotate

Rotate all drums to specific positions

tower_rotate_drum

Rotate a single drum to a position

tower_random_rotate

Randomly rotate drums

tower_get_drum_positions

Get current drum positions

Seals (5 tools)

Tool

Description

tower_break_seal

Break a seal at a specific side and level

tower_is_seal_broken

Check if a specific seal is broken

tower_get_broken_seals

Get all broken seals

tower_reset_seals

Reset all seals

tower_random_seal

Get a random unbroken seal

State & Glyphs (7 tools)

Tool

Description

tower_get_state

Get current tower state

tower_send_state

Send a tower state update

tower_get_glyphs

Get all glyph positions

tower_get_glyph

Get a specific glyph's position

tower_glyphs_facing

Get glyphs facing a direction

tower_skull_count

Get skull drop count

tower_reset_skull_count

Reset skull drop count


Available Resources

Resources are read-only data the AI can pull in for context (e.g., checking battery level before a long sequence).

Tower State Resources

Resource

URI

Description

Tower Connection

tower://connection

Connection status, calibration, busy state

Device Info

tower://device-info

Manufacturer, model, firmware revisions

Battery

tower://battery

Millivolts, percentage, previous values

Drum Positions

tower://drums

All 3 drum positions

Glyph Positions

tower://glyphs

All 5 glyph positions and directions

Seal State

tower://seals

Broken/unbroken seals

Tower State

tower://state

Full tower state snapshot

Audio Library

tower://audio-library

All 113 sounds with categories

Light Effects

tower://light-effects

6 effects + 19 named sequences

Game Knowledge Resources

Resource

URI

Description

Rules

tower://game/rules

Setup, turn phases, win/loss conditions

Adversaries

tower://game/adversaries

Abilities, spawn mechanics, escalation

Quests

tower://game/quests

Quest types, conditions, rewards

Items

tower://game/items

Equipment, potions, relics

Heroes

tower://game/heroes

Classes, stats, abilities

Buildings

tower://game/buildings

Citadel, sanctuary, village, bazaar

Lore

tower://game/lore

World lore, tower history, flavor

Glossary

tower://game/glossary

Key terms and concepts

Glyph Icon Resources

Resource

URI

Description

Cleanse

tower://glyphs/cleanse

Cleanse glyph SVG

Quest

tower://glyphs/quest

Quest glyph SVG

Battle

tower://glyphs/battle

Battle glyph SVG

Banner

tower://glyphs/banner

Banner glyph SVG

Reinforce

tower://glyphs/reinforce

Reinforce glyph SVG

All Glyphs

tower://glyphs/all

Combined SVG sheet


Available Prompts

Prompts are pre-built instruction templates you can invoke by name. They chain multiple tools together into a single dramatic sequence.

Prompt

Args

Description

dramatic_entrance

adversary?

Connect, calibrate, spawn sound, strobe lights, random drums

victory_sequence

soundIndex?

Victory sound + victory light sequence

defeat_sequence

Defeat sound + defeat lights

monthly_transition

month?

Month end/start sounds and lights

dungeon_run

type?

Dungeon sound + idle lights

battle_start

Battle sound + flicker lights

game_master_setup

Full game session setup guide

sound_browser

category?

Browse audio library by category


Architecture

┌─────────────────┐     ┌──────────────────┐
│  Claude Desktop │────▶│  stdio transport  │──┐
└─────────────────┘     └──────────────────┘  │    ┌───────────────────┐     ┌─────────┐
                                               ├───▶│ TowerController   │────▶│  Tower  │
┌─────────────────┐     ┌──────────────────┐  │    │ (singleton)       │ BLE │  (HW)   │
│   React App     │────▶│  HTTP transport   │──┘    └───────────────────┘     └─────────┘
└─────────────────┘     └──────────────────┘

The TowerController singleton wraps UltimateDarkTower (v2.0.0) and is shared by both transports. The library's BluetoothAdapterFactory auto-detects the Node.js environment and uses @stoprocent/noble for BLE communication.


CLI Options

Flag

Description

--stdio-only

Run stdio transport only (for desktop AI tools)

--http-only

Run HTTP transport only (for web apps)

--port <n>

HTTP port (default: 3001)


Dependencies

Package

Purpose

@modelcontextprotocol/sdk

MCP server and transport

ultimatedarktower

Tower BLE control library

@stoprocent/noble

Node.js BLE backend

zod

Schema validation

express

HTTP transport server


Development

npm run dev      # Watch mode with tsx
npm run build    # Compile TypeScript
npm run lint     # Run ESLint + Prettier check
npm test         # Run tests

License

MIT — see LICENSE.


Acknowledgments

Available Tools

34 tools
tower_break_sealBreak SealC

Break a seal at the specified side and level. Plays the seal-breaking animation and sound.

ParametersJSON Schema
NameRequiredDescriptionDefault
sideYesSide of the tower
levelYesLevel of the seal
volumeNoVolume: 0=Loud, 1=Medium, 2=Quiet, 3=Mute

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility. It discloses that an animation and sound play, but does not state that the seal becomes broken, whether the action is reversible, or any side effects on the tower state. Critical behavioral details are missing.

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 consists of two short, direct sentences. Every word serves a purpose: first sentence states the core action with parameters, second adds behavioral context. No redundant or vague language.

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?

Despite 100% schema coverage and no output schema, the description omits what happens after execution (e.g., return value, state change, error conditions). With many sibling tools, it should explain the outcome or how to verify success.

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?

Schema description coverage is 100%, with clear enums and bounds for all three parameters. The description merely reiterates 'side and level' without adding new meaning (e.g., format, constraints, or defaults). Baseline score is appropriate.

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 action ('Break a seal') and identifies the parameters (side, level) with additional detail about animation and sound. However, it does not distinguish from sibling tools like tower_reset_seals or tower_get_broken_seals, missing a chance to differentiate.

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?

No guidance on when to use this tool vs alternatives. It does not mention prerequisites (e.g., connection state) or whether to check if the seal is already broken. The agent is left to infer appropriateness from context.

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

tower_calibrateCalibrate TowerA

Calibrate the tower drums. Must be connected first. The tower will rotate all drums to their home positions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It states the drums rotate to home but does not disclose side effects, reversibility, or impact on other state (e.g., seals).

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?

Two focused sentences with no fluff. Front-loaded with the main action and followed by a critical prerequisite.

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

Completeness4/5

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

Given no parameters or output schema, the description is sufficiently complete for a simple calibration action. However, more context on the calibration's purpose or effects would elevate it.

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?

There are no parameters, and schema coverage is 100%. The description adds no parameter details, but none are needed; baseline for zero parameters is 4.

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 states the tool calibrates tower drums by rotating them to home positions, distinguishing it from sibling rotation tools like tower_rotate and tower_random_rotate.

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

Usage Guidelines3/5

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

The description includes a prerequisite ('Must be connected first') but does not specify when to use this tool versus alternatives like tower_rotate or tower_random_rotate.

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

tower_connectConnect to TowerA

Connect to the Return to Dark Tower via Bluetooth LE

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose any behavioral traits such as side effects, idempotency, or whether a successful connection is required before using other tower tools.

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 a single, efficient sentence that conveys the essential purpose. No wasted words.

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

Completeness3/5

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

Given the tool has no parameters and no output schema, the description is adequate but could indicate that connection is a prerequisite for other tower operations, especially with many sibling tools present.

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?

With zero parameters, the baseline is 4. The description does not add extra meaning beyond the schema, but no parameter documentation is needed.

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 states the tool connects to a specific device via Bluetooth LE, using a specific verb and resource. It distinguishes itself from siblings like tower_reconnect and tower_disconnect by implying an initial connection step.

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?

No guidance on when to use this tool versus alternatives like tower_reconnect. The description does not provide any context about prerequisites or typical use cases.

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

tower_device_infoTower Device InfoA

Get device information: manufacturer, model, firmware/hardware revision, serial number

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It implies a read-only action but does not mention potential side effects, error conditions, or connectivity requirements. It is minimally adequate.

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 a single sentence that front-loads the purpose and lists the returned information. Every word is necessary and there is no redundancy.

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

Completeness3/5

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

For a simple tool with no parameters or output schema, the description covers the core information. However, it does not specify the return format or structure, which could help an agent parse the output.

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?

There are no parameters, so baseline is 4. The description adds value by listing the returned fields, which compensates for the lack of an output schema.

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 states the tool retrieves device information including manufacturer, model, firmware/hardware revision, and serial number. It distinguishes itself from sibling tools like tower_get_state and tower_status by specifying hardware details.

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?

No guidance is provided on when to use this tool versus alternatives like tower_get_state or tower_status. The description lacks context about prerequisites or typical use cases.

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

tower_disconnectDisconnect from TowerB

Disconnect from the Return to Dark Tower

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does not mention side effects, required prior state (e.g., must be connected), error handling, or what happens after disconnection. This is insufficient for a tool that modifies state.

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 sentence with no wasted words. It is front-loaded with the action. However, it could include a brief note about the tool's effect without becoming verbose.

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

Completeness3/5

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

Given the tool's simplicity (no parameters, no output schema), the description is minimally complete but lacks context about the physical device connection. It does not specify that it disconnects from the Dark Tower hardware, which might be assumed but is not explicit. Slightly more detail would improve completeness.

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?

There are no parameters, so the schema coverage is trivially 100%. The description does not add parameter meaning, but per guidelines, 0 parameters gets a baseline of 4. No deduction is necessary as no additional info is needed.

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 states 'Disconnect from the Return to Dark Tower', which is a specific verb+resource. It distinguishes this tool from siblings like `tower_connect` and `tower_reconnect`, making the purpose immediately understandable.

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?

No guidance is provided on when to use this tool versus alternatives like `tower_reconnect` or when a disconnect is appropriate. The description lacks any context about prerequisites or typical use cases.

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

tower_get_broken_sealsGet Broken SealsA

Get a list of all broken seals

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. Only states it returns a list, but no disclosure on side effects, performance, or return format. Minimal insight into behavior beyond the basic action.

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?

Single sentence of eight words, perfectly concise with no wasted text. Front-loaded with the core action.

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

Completeness4/5

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

Given the simplicity (no parameters, no output schema), the description is nearly complete. Could mention that it returns a list of seal identifiers, but not essential for a straightforward getter in context of sibling tools.

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?

No parameters exist; schema coverage is 100% trivially. Description adds no parameter info but none needed. Baseline 4 for zero parameters is appropriate.

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 states the tool retrieves a list of all broken seals, using a specific verb and resource. It distinguishes from sibling tools like tower_break_seal (action) and tower_is_seal_broken (check single seal).

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?

No guidance on when to use this tool versus alternatives. Does not mention when not to use it or any prerequisites. Siblings like tower_is_seal_broken or tower_get_state could overlap, but no differentiation provided.

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

tower_get_drum_positionsGet Drum PositionsA

Get the current position of all three drums

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior. It only states it retrieves positions, with no mention of side-effects, rate limits, or data freshness. This is minimal for a read operation.

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 a single, straightforward sentence with no extraneous words. Highly efficient.

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

Completeness3/5

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

For a simple getter with no parameters and no output schema, the description covers the basic purpose but lacks details on return format or structure. It is minimally adequate.

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?

No parameters exist, so the description adds nothing beyond the schema. Baseline for 0 parameters is 4, as no additional meaning is needed.

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 explicitly states the action 'Get' and the resource 'position of all three drums', providing clear purpose. It is distinct from sibling tools like tower_rotate_drum or tower_glyphs_facing.

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?

No guidance is given on when to use this tool versus alternatives. The description does not mention prerequisites or context, leaving the agent to infer usage.

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

tower_get_glyphGet Glyph PositionA

Get the current facing direction of a specific glyph

ParametersJSON Schema
NameRequiredDescriptionDefault
glyphYesThe glyph to look up

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states 'current facing direction' but does not specify the format (e.g., degrees, compass direction), behavior on invalid input, or whether it returns a scalar or object. This lack of detail impairs safe invocation.

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 a single concise sentence with no filler. Every word contributes to the purpose.

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

Completeness3/5

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

For a simple lookup with one parameter, the description is minimally adequate. However, it omits the output format (e.g., numeric angle, cardinal direction) and edge cases, which a complete description would include. Given the absence of output schema, more details would be helpful.

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?

Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond 'specific glyph'. It does not explain what each glyph value represents or how the direction is returned relative to the parameter.

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 uses a specific verb 'Get' and resource 'facing direction of a specific glyph', clearly distinguishing it from sibling tools like `tower_get_glyphs` and `tower_glyphs_facing`, which likely handle multiple glyphs or general facing info.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool over siblings or when not to use it. The context is implied (for a single glyph's facing direction), but neither alternatives nor exclusions are mentioned.

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

tower_get_glyphsGet All Glyph PositionsA

Get the current facing direction of all 5 glyphs (cleanse, quest, battle, banner, reinforce)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It clearly indicates this is a read operation ('Get'), so it is likely non-destructive. However, it does not mention side effects, permissions, or what happens if data is unavailable. The description is adequate but minimal.

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 a single, direct sentence with no wasted words. It is front-loaded with the core action and resource.

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

Completeness4/5

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

Given zero parameters and no output schema, the description is largely complete. It could be improved by specifying the format of the facing direction (e.g., compass directions or angles), but the current description covers the essential information for a simple read operation.

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

Parameters5/5

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

There are zero parameters and schema coverage is 100% (vacuously). The description adds value by listing the five glyph names, clarifying what positions are returned. This exceeds the baseline of 4 for parameterless tools.

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 states the tool 'gets the current facing direction of all 5 glyphs' and lists the specific glyph names (cleanse, quest, battle, banner, reinforce), which distinguishes it from siblings like tower_get_glyph (singular) and tower_glyphs_facing. It provides a specific verb and resource.

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?

No guidance is given on when to use this tool versus alternatives such as tower_get_glyph for a single glyph or tower_glyphs_facing for a different orientation. Agents have no information about usage context or exclusion criteria.

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

tower_get_stateGet Tower StateA

Get the full current tower state including drums, lights, audio, and beam sensor data

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations; description describes read operation ('Get'). Adds minimal behavioral context beyond obvious read-only nature.

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?

Single sentence, front-loaded with action and result scope. No wasted words.

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

Completeness4/5

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

Lists components but no output schema; description sufficiently hints at return content for a comprehensive state tool.

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?

No parameters exist; schema coverage is 100%. Description does not need to add parameter meaning.

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?

Clearly states it gets the full tower state, listing components (drums, lights, audio, beam sensor). Distinguishes from siblings like tower_get_drum_positions or tower_status.

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

Usage Guidelines3/5

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

Implied usage for comprehensive state retrieval, but no explicit guidance on when to use vs. alternatives like tower_get_drum_positions or tower_status.

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

tower_glyphs_facingGlyphs Facing DirectionB

Get all glyphs currently facing a given direction

ParametersJSON Schema
NameRequiredDescriptionDefault
directionYesThe direction to check

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided, so the description carries the full burden. It only states the core action but does not disclose behavioral traits such as whether it is read-only, side effects, what happens if no glyphs face the direction, or return format. This is minimal transparency.

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 sentence of 7 words, extremely concise with no wasted text. However, it lacks additional context that could be included without much verbosity, so not a perfect score.

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?

For a simple tool with one enum parameter and no output schema, the description is minimal. It does not explain what 'facing' means, what is returned (e.g., list of glyph IDs), or behavior in edge cases (e.g., no matching glyphs). More context is needed for completeness.

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?

Schema coverage is 100% with the single parameter 'direction' described as 'The direction to check' with enum values. The description adds 'currently facing', implying temporal context, which adds slight meaning beyond the schema. Baseline 3 is appropriate.

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 states 'Get all glyphs currently facing a given direction', using a specific verb 'Get' and resource 'glyphs facing a given direction'. This distinguishes it from sibling tools like tower_get_glyphs (all glyphs) and tower_get_glyph (single glyph) by adding the direction filter.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives like tower_get_glyphs or tower_get_glyph. The usage is implied by the description (to get glyphs filtered by direction), but no exclusions or when-not-to-use advice are given.

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

tower_is_responsiveCheck Tower ResponsiveA

Active connectivity check — verifies the tower is connected and responding

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

The phrase 'active connectivity check' implies a ping-like behavior, but there is no mention of side effects, effect on state, or what happens on failure. Since no annotations exist, the description carries full burden but provides only minimal behavioral context.

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?

Single, front-loaded sentence that efficiently conveys the tool's purpose without extraneous information.

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

Completeness4/5

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

For a simple connectivity check with no parameters and no output schema, the description is sufficient. It could optionally mention the return type (e.g., boolean), but given the tool's simplicity, it is complete enough.

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?

No parameters exist, and schema description coverage is trivially 100%. The description adds no parameter-level detail, but with zero parameters the baseline is 4, and the description is adequate.

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?

Description clearly states 'verifies the tower is connected and responding', providing a specific verb and resource. It is distinct from sibling tools like tower_status or tower_connect, which have different purposes.

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?

No guidance on when to use this tool versus alternatives such as tower_status or tower_connect. The description does not indicate prerequisites or when not to use it, leaving ambiguity.

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

tower_is_seal_brokenCheck Seal StatusC

Check if a specific seal has been broken

ParametersJSON Schema
NameRequiredDescriptionDefault
sideYesSide of the tower
levelYesLevel of the seal

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only says 'check if broken'. It does not disclose whether the tool is read-only, what happens if the seal is already broken, or any side effects. The return format is not mentioned.

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

Conciseness3/5

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

Single sentence with no fluff, but it is under-specified for the complexity of the tool. Conciseness is positive but not at the expense of adequacy.

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?

Lacks output schema and annotations; description should clarify return type (e.g., boolean) and typical usage scenarios. Among many sibling tools, this minimal description leaves the agent guessing about integration.

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?

Schema coverage is 100% with enums and descriptions for side and level. The description adds no extra meaning beyond 'specific seal', so it meets the baseline but provides no additional value.

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 checks if a specific seal is broken, with verb 'check' and resource 'seal'. However, it doesn't distinguish from sibling tools like tower_get_broken_seals, which lists all broken seals, missing an opportunity for disambiguation.

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?

No guidance on when to use this tool versus alternatives (e.g., tower_break_seal to break seals, tower_get_broken_seals to list all broken seals). The absence of context leaves the agent without decision support.

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

tower_light_sequencePlay Light SequenceA

Play a predefined light sequence by ID (1-19). Optionally play a sound simultaneously.

ParametersJSON Schema
NameRequiredDescriptionDefault
sequenceYesLight sequence ID from TOWER_LIGHT_SEQUENCES
soundIndexNoOptional sound to play with sequence

TDQS

A3.6/5.0
Behavior3/5

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

Without annotations, description carries burden. It states sequence playback and optional sound but omits details on error handling, state changes, or feedback. Adequate for a simple command.

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?

Single sentence front-loads action and parameters. No redundant words, efficient and clear.

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

Completeness4/5

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

No output schema, but tool is simple. Description covers what the tool does; return values not critical for a play action.

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?

Schema coverage is 100% with field descriptions. Description adds context about ID range and optional sound, but doesn't go beyond schema. Baseline of 3 applies.

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 uses a specific verb 'Play' and resource 'predefined light sequence', with ID range 1-19, clearly distinguishing it from siblings like tower_light_sequence_by_name.

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?

No guidance on when to use this tool versus alternatives (e.g., tower_light_sequence_by_name, tower_play_sound). Lacks when-not-to-use context.

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

tower_light_sequence_by_namePlay Light Sequence by NameA

Play a predefined light sequence by name (e.g. 'victory', 'defeat', 'dungeonIdle', 'twinkle'). Case-insensitive.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSequence name from TOWER_LIGHT_SEQUENCES
soundIndexNoOptional sound to play with sequence

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must bear the full burden of behavioral disclosure. It discloses case-insensitivity and gives examples, but fails to mention important behaviors such as error handling for invalid names, whether it stops running sequences, or if the sound parameter overrides anything. These gaps hinder an agent from safely invoking the tool.

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 sentence with parenthetical examples. It is concise and to the point, though it could be slightly more structured (e.g., separating parameter hints). Every element is earned, but it is not maximally efficient.

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

Completeness3/5

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

The tool is simple with two parameters and no output schema. The description covers the core functionality and provides examples, but lacks information on return values, side effects (e.g., does it stop other sequences?), and error behavior. For a tool of this complexity, it is minimally complete but has clear gaps.

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?

Schema coverage is 100%, and the description adds value by listing example names and noting case-insensitivity for the 'name' parameter. The schema already describes 'name' as coming from TOWER_LIGHT_SEQUENCES and 'soundIndex' as optional with min/max, but the examples make the semantics clearer.

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 states the action ('Play'), the resource ('predefined light sequence'), and the method ('by name'). It provides concrete examples like 'victory', 'defeat', 'dungeonIdle', 'twinkle', and notes case-insensitivity. This distinguishes it from siblings like `tower_light_sequence` (likely index-based) and `tower_lights_on/off`.

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 implies usage when you know the sequence name, with examples that clarify valid inputs. However, it does not explicitly contrast with `tower_light_sequence` or specify when not to use it. The guidance is clear but lacks explicit alternatives or exclusions.

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

tower_lights_offAll Lights OffA

Turn off all 24 tower LEDs with a single command

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states the action is to turn off all LEDs, but it does not disclose whether the action is reversible, if it affects other states, or if there are any side effects. Minimal behavioral context is given.

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 a single sentence with no unnecessary information. Every word serves a purpose, and it is immediately clear what the tool does.

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

Completeness4/5

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

Given the simplicity of the tool (no parameters, no output schema), the description is sufficiently complete. However, considering the large number of sibling tools, additional context about when to use this specific command (e.g., 'after a light sequence or emergency stop') would improve completeness.

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?

There are zero parameters, and the schema coverage is 100% (empty set). The description adds no parameter-specific meaning, but no parameters exist to describe, so the baseline of 4 is appropriate.

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 states the action ('Turn off') and the specific resource ('all 24 tower LEDs'), with a single command. It is unambiguous and distinct from the sibling tool 'tower_lights_on'.

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 like 'tower_set_lights' or 'tower_light_sequence'. It only mentions it's a 'single command' but does not specify scenarios or prerequisites.

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

tower_lights_onAll Lights OnA

Turn on all 24 tower LEDs with a single command. Optionally specify an effect (0=off, 1=on, 2=breathe, 3=breatheFast, 4=breathe50%, 5=flicker); defaults to on.

ParametersJSON Schema
NameRequiredDescriptionDefault
effectNoEffect to apply to all LEDs (default: 1=on)

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It clearly states action (turn on all LEDs) and effect parameter options. No destructive behavior or hidden traits mentioned, but for a simple command it is adequate.

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?

Two sentences: first declares purpose, second explains parameter. No redundant information. Front-loaded with action.

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 single parameter, no output schema, and straightforward action, the description covers all necessary information. Sibling tools are numerous but description specifies scope (all LEDs) clearly.

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

Parameters5/5

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

Schema description for effect is minimal ('Effect to apply to all LEDs'), but tool description enumerates all mappings (0=off, 1=on, etc.), adding significant meaning beyond the schema.

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?

Tool name and title clearly indicate turning on all lights. Description specifies 'all 24 tower LEDs' and distinguishes from siblings like tower_set_lights (individual control) and tower_lights_off.

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?

Description states 'with a single command' implying simplicity, and optionally specifies effect parameter. However, it does not explicitly contrast with alternatives (e.g., tower_set_lights for individual LEDs) or provide when-not scenarios.

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

tower_list_soundsList SoundsA

List all available sounds from the tower audio library, optionally filtered by category

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by category: Adversary, Ally, Battle, Classic, Unlisted, Dungeon, Foe, Spawn, Quest, Glyph, State, Seals

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided; description implies read-only behavior but does not elaborate on side effects or performance, e.g., listing is non-destructive but not explicitly stated.

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?

Single sentence, front-loaded with action, no wasted words.

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

Completeness4/5

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

Adequate for a simple listing tool with one optional parameter; lacks mention of return format but sufficient given tool complexity.

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?

Schema coverage is 100%; description adds 'optionally filtered by category', which aligns with schema but does not add new meaning beyond the parameter's description.

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?

Description clearly states the tool lists sounds from the tower audio library with optional category filtering, distinguishing it from other sound-related tools.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus siblings like tower_play_sound; implied use for browsing sounds but lacks exclusions.

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

tower_play_soundPlay SoundA

Play a sound from the tower audio library by index number (1-113). Volume is 0 (loudest) to 3 (soft).

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNoLoop the sound continuously
volumeNoVolume level: 0=Loud, 1=Medium, 2=Quiet, 3=Soft
soundIndexYesSound index (1-113) from tower audio library

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided, so the description carries the burden. It explains volume levels and index range, but does not disclose potential errors, side effects, or the effect of the loop parameter. The description is partially transparent but misses critical behavioral details.

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 extremely concise, using two sentences to convey the essential purpose and volume details. No wasted words, and the key information is front-loaded.

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

Completeness4/5

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

For a simple audio player tool, the description covers core functionality. However, it omits details about the loop parameter and possible return values or error handling. Given no output schema and moderate complexity, it is nearly complete.

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?

Schema description coverage is 100%, so baseline is 3. The description rephrases index and volume meaning but does not add significant new semantic information beyond what the schema already provides.

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 states 'Play a sound from the tower audio library by index number', specifying the verb (Play), resource (sound), and scope (by index). It distinguishes from sibling tools like tower_play_sound_by_name, which plays by name, and tower_list_sounds.

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

Usage Guidelines3/5

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

The description provides volume levels and index range, implying usage but lacks explicit guidance on when to use index vs name, or any when-not scenarios. It does not mention alternatives or prerequisites.

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

tower_play_sound_by_namePlay Sound by NameB

Play a sound by name (e.g. 'Ashstrider', 'Battle Start'). Case-insensitive lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNoLoop the sound continuously
nameYesSound name from the audio library
volumeNoVolume level: 0=Loud, 1=Medium, 2=Quiet, 3=Soft

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavioral traits. It mentions case-insensitive lookup but fails to disclose playback details (e.g., immediate vs queued, interaction with current sound, return behavior). The volume parameter details are in the schema but not expanded in the description.

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?

Single sentence with clear verb, resource, and examples. Front-loaded and efficient; every word adds value.

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

Completeness3/5

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

For a simple tool (3 params, no output schema), the description is adequate but lacks usage guidelines and behavioral transparency. Missing details like whether playback blocks or overlaps make it incomplete.

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?

Schema coverage is 100%, so the schema provides full parameter descriptions. The description adds case-insensitivity for 'name', which is helpful but minimal. No additional meaning for 'loop' or 'volume' beyond the schema.

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 states the action 'Play a sound by name' and provides specific examples ('Ashstrider', 'Battle Start'). It distinguishes from sibling 'tower_play_sound' (likely by index) and 'tower_play_sound_by_name' targets name-based lookup.

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?

No guidance on when to use this tool vs alternatives like 'tower_play_sound' (by index). The description implies simple name-based lookup but does not explain scenarios or exclusions.

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

tower_random_rotateRandom RotateA

Randomly rotate drum levels. level: 0=all, 1=top, 2=middle, 3=bottom, 4=top+middle, 5=top+bottom, 6=middle+bottom

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoWhich drums to rotate randomly (0=all, default)

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, and the description does not disclose side effects, such as whether the rotation is destructive, requires specific conditions, or affects other state. The random nature is mentioned but not elaborated.

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?

Two concise sentences: one for purpose, one for parameter details. No wasted words.

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

Completeness3/5

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

For a simple one-parameter tool with no output schema, the parameter mapping is well covered, but missing details on the exact behavior of 'randomly rotate' (e.g., how many rotations, direction, timing). Adequate but not fully complete.

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?

Schema coverage is 100% (single parameter 'level'), and the description adds detailed meaning by explaining each value (0=all, 1=top, etc.), going beyond the basic schema description.

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 states the action ('Randomly rotate drum levels') and explains the parameter mappings, distinguishing it from sibling tools like tower_rotate (specific rotation) and tower_rotate_drum (single drum).

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?

No guidance on when to use this tool versus alternatives (e.g., tower_rotate, tower_rotate_drum) or any prerequisites. The description only states what it does, not when to choose it.

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

tower_random_sealRandom Unbroken SealC

Get a random unbroken seal location

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavioral traits. It describes a read-like operation ('Get') but does not explicitly state that it is non-destructive, idempotent, or stateless. The user cannot tell if calling this tool changes any state or requires specific permissions.

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 sentence of five words, making it highly concise. It front-loads the key action and object. However, it could include a brief note on output format without significantly increasing length.

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 no output schema or annotations, the description should fully explain the return value. It only says 'location' without specifying whether it is an integer, string, or object. This omission makes the tool harder to use correctly without additional context.

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 tool has zero parameters and schema coverage is 100%. Baseline is 3. The description adds meaning by specifying 'random unbroken seal' but does not elaborate on the format or type of the returned location, which would have added value.

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 gets a random unbroken seal location. It specifies the verb 'Get' and the resource 'random unbroken seal location', which distinguishes it from sibling tools like tower_break_seal and tower_get_broken_seals. However, it does not define what 'location' means (e.g., coordinate or index), slightly reducing clarity.

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?

No usage guidelines are provided. The description does not indicate when to use this tool over alternatives, such as tower_get_broken_seals or tower_is_seal_broken. It fails to give context for when to invoke it, leaving the agent to infer its purpose from the name alone.

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

tower_reconnectReconnect to TowerA

Clean up, reconnect, and recalibrate the tower in one step. Use this when tower_is_responsive returns false or the tower stops responding after going idle.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations; description mentions cleanup, reconnect, recalibrate but does not detail side effects or what 'clean up' entails.

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?

Two sentences, front-loaded action verb, no wasted words.

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

Completeness4/5

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

Adequate for a simple tool with no parameters or output schema; could mention prerequisites or failure indicators but not essential.

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?

Zero parameters, so baseline 4; no additional parameter info needed.

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 states it connects, cleans up, and recalibrates, distinguishing it from siblings like tower_connect or tower_calibrate, but 'clean up' is vague.

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

Usage Guidelines5/5

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

Explicitly states when to use: when tower_is_responsive returns false or tower stops responding after idle.

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

tower_reset_sealsReset SealsA

Reset all seals to unbroken state (in software tracking only)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must disclose behavioral traits. It reveals that the reset is 'in software tracking only', which is crucial and prevents misunderstanding about physical seals. However, it lacks details on side effects (e.g., logs, state dependencies) or whether the operation is reversible, leaving gaps in transparency.

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 a single, well-structured sentence that front-loads the key action and scope. No redundant words; every part adds value. It is appropriately concise for a simple, parameterless tool.

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

Completeness4/5

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

Given the tool's simplicity (no parameters, no output schema), the description is mostly complete. It covers the core function and important limitation. However, it could mention prerequisites like connection state or that the reset affects all seals collectively, but these are minor omissions.

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 tool has no parameters, so the input schema is fully covered. The description does not need to add parameter semantics, and it appropriately avoids extraneous information. The baseline for zero parameters is 4.

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 states the action ('Reset all seals') and the target state ('to unbroken state'), with the important qualifier 'in software tracking only'. It distinguishes from sibling tools like tower_break_seal (opposite) and tower_get_broken_seals (read-only).

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

Usage Guidelines3/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives like tower_break_seal or tower_is_seal_broken. While the purpose is clear, the absence of usage context or prerequisites (e.g., 'do not use if physical seals need resetting') limits its helpfulness for an agent deciding between tools.

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

tower_reset_skull_countReset Skull CountA

Reset the skull drop counter to zero

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses the reset action but does not mention potential side effects (e.g., does it affect other game state) or required permissions. For a simple mutation, this is minimally adequate.

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 a single sentence of 7 words, extremely concise and front-loaded. No wasted text.

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

Completeness4/5

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

Given the tool has no parameters and no output schema, the description is largely complete. It could mention that it only affects skull count, but the tool name and sibling context make it clear.

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?

Schema coverage is 100% (no parameters). The baseline for high coverage is 3, and the description adds no additional meaning since there are no parameters to document.

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 states the verb 'Reset' and the resource 'skull drop counter', making the action unambiguous. It distinguishes from the sibling tool tower_skull_count which presumably reads the count.

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 like tower_reset_seals or tower_skull_count. No context for prerequisites or side effects.

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

tower_rotateRotate All DrumsB

Rotate all three drums to specified positions. Requires calibration. Optionally plays a sound.

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesTarget position for top drum
bottomYesTarget position for bottom drum
middleYesTarget position for middle drum
soundIndexNoOptional sound to play during rotation

TDQS

B3.4/5.0
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 lacks details on side effects, what happens if calibration is missing, or whether the rotation is instantaneous or queued.

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 concise sentence that front-loads the main action. It could benefit from better structure (e.g., prerequisites), but it is efficient.

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

Completeness3/5

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

Given no output schema, the description does not explain return values. It mentions calibration but lacks error conditions or state change details. Adequate for a simple tool.

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?

Schema coverage is 100%, but the description only adds 'Optionally plays a sound' for soundIndex. For the required parameters, it adds minimal value beyond the schema.

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 states 'Rotate all three drums to specified positions', using a specific verb and resource. It distinguishes this from sibling tools like tower_rotate_drum (single drum) and tower_random_rotate.

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

Usage Guidelines3/5

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

The description mentions 'Requires calibration' as a prerequisite, but does not explicitly state when to use or alternatives compared to other rotate tools.

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

tower_rotate_drumRotate Single DrumC

Rotate a single drum to a specified position. Requires calibration.

ParametersJSON Schema
NameRequiredDescriptionDefault
drumYesWhich drum to rotate
positionYesTarget position for the drum
playSoundNoPlay sound during rotation (default: true)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description must fully disclose behavioral traits. It only states that calibration is needed but fails to mention whether the tower must be connected, if rotation is instantaneous or takes time, what side effects occur (e.g., does it move other drums?), or error handling. The lack of transparency is a significant gap.

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 very concise at one sentence, front-loaded with the core action and result. However, it could be slightly more structured (e.g., separate prerequisite sentence) but currently presents the key information without waste.

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 moderate complexity (3 parameters, simple enums, no output schema), the description should cover return values or confirmation of success. It does not mention what the tool returns (if anything) or prerequisites beyond calibration, leaving the agent underinformed about the full context of invocation.

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 provides clear descriptions for all three parameters (drum, position, playSound) with 100% coverage. The description adds no additional semantic information beyond the schema. Per guidelines, with high schema coverage the baseline is 3, which is appropriate here.

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 action (rotate) and resource (single drum) with a specific outcome (to a specified position). It also notes a prerequisite (calibration). However, it does not explicitly differentiate from sibling tools like 'tower_rotate' or 'tower_random_rotate', so it misses the highest mark.

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 mentions a requirement ('Requires calibration') but provides no guidance on when to use this tool versus alternatives like 'tower_rotate' (which may rotate multiple drums) or 'tower_random_rotate'. There are no when-to-use or when-not-to-use instructions, leaving the agent without context for tool selection.

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

tower_send_stateSend Tower StateC

Send a complete tower state to the tower. Advanced: directly sets all tower hardware state.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoComplete TowerState object to send to the tower

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavioral traits. It mentions 'directly sets all tower hardware state' implying total overwrite, but fails to disclose prerequisites (connection state), reversibility, side effects (hardware actions), or error conditions. This is insufficient for a potentially destructive hardware operation.

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?

Description is concise, two sentences with no wasted words. It is front-loaded with the primary action. Could be slightly more structured but efficient.

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?

For a tool with no output schema and no annotations, the description lacks important context about return values, side effects, and preconditions. It does not mention whether a connection is needed, what happens on failure, or how the state object is validated. Incomplete for safe usage.

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?

Schema coverage is 100% with a single 'state' parameter described. The tool description repeats the schema's description and adds 'Advanced: directly sets all tower hardware state' but does not provide format or validation details beyond what the schema offers. Baseline 3 is appropriate.

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 action ('Send a complete tower state') and the resource (tower). The term 'Advanced: directly sets all tower hardware state' adds context, distinguishing it from higher-level state-modifying tools. However, it does not explicitly differentiate from sibling tools like tower_set_led or tower_rotate, but the broad scope is implied.

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?

No guidance on when to use this tool versus alternatives. The 'Advanced' label hints at expert use, but there is no explicit when-to-use, when-not-to-use, or mention of alternatives such as individual setter tools.

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

tower_set_battery_monitoringSet Battery MonitoringC

Configure battery heartbeat monitoring

ParametersJSON Schema
NameRequiredDescriptionDefault
verifyNoVerify connection on heartbeat timeout
enabledNoEnable or disable battery monitoring
timeoutNoHeartbeat timeout in milliseconds

TDQS

C2.7/5.0
Behavior1/5

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

No annotations are provided, and the description does not disclose any behavioral traits—such as whether the tool modifies device state, whether changes take effect immediately, or potential side effects like resetting timers. The description is entirely opaque about behavior beyond the name.

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

Conciseness2/5

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

The description is a single sentence with no wasted words, but it is too brief to be helpful. It lacks structure and fails to provide context that would aid an AI agent. Brevity here sacrifices completeness.

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 no output schema and a tool that modifies state, the description should explain what configuration means (e.g., whether it enables/disables alerting, what the heartbeat timeout does). Without this, an agent cannot fully understand the tool's effect or when to call it.

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?

Schema coverage is 100%, so the schema already defines each parameter. The description adds no additional meaning beyond the tool's overall purpose. It does not explain how parameters relate (e.g., that 'timeout' only matters if 'verify' is true). Baseline of 3 is appropriate.

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 'Configure battery heartbeat monitoring' clearly states the action (configure) and the target (battery heartbeat monitoring). It is specific and distinguishes from sibling tools like 'tower_set_connection_monitoring', which deals with connection monitoring, not battery.

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?

There is no guidance on when to use this tool versus alternatives such as 'tower_set_connection_monitoring'. The description does not mention prerequisites, context, or scenarios where this tool should be preferred or avoided.

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

tower_set_connection_monitoringSet Connection MonitoringB

Enable or disable connection monitoring with optional frequency and timeout

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledYesEnable or disable connection monitoring
timeoutNoConnection timeout in milliseconds
frequencyNoMonitoring frequency in milliseconds

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided; description does not disclose side effects, state persistence, or requirements. A mutation tool like this should mention what happens when monitoring is enabled (e.g., starts background checks) and any dependencies.

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?

Single sentence efficiently conveys the main action and optional parameters. Front-loaded with verb and resource.

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?

With no output schema and no annotations, the description is too brief. Lacks info on return values, errors, or behavioral implications of enabling monitoring.

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?

Schema covers all parameters with descriptions (100% coverage). The tool description adds minimal value beyond listing 'optional frequency and timeout', not explaining relationships or constraints.

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 states the tool enables or disables connection monitoring with optional parameters, distinguishing it from siblings like tower_connect (establishes connection) and tower_set_battery_monitoring.

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?

No guidance on when to enable/disable monitoring, prerequisites (e.g., connection needed), or alternatives. The description is a bare statement without context.

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

tower_set_ledSet Individual LEDA

Set a single LED by layer and light index. Layers: 0=top ring, 1=middle ring, 2=bottom ring, 3=ledge, 4=base1, 5=base2. Light index 0-3.

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNoLoop the effect
layerYesLayer index 0-5
effectYesEffect: 0=off, 1=on, 2=breathe, 3=breatheFast, 4=breathe50%, 5=flicker
lightIndexYesLight index 0-3 within the layer

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It does not disclose behavioral traits such as immediate effect, return value, or destructiveness. The effect parameter is not explained in the description (only in schema).

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 very concise (two sentences), front-loads the core purpose, and uses a clear structure with bullet-like layer mappings. Every sentence adds value.

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?

The description omits explanation of the effect and loop parameters, which are crucial for understanding the tool's behavior. With no output schema, it should also clarify what happens upon invocation. The tool's complexity (4 params, 3 required) demands more complete documentation.

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?

Schema coverage is 100% with descriptions for all parameters. The description adds value by explicitly mapping layers and light index ranges, which goes beyond the schema's basic descriptions. However, it does not explain the effect or loop parameters.

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 states the tool sets a single LED by layer and light index, with explicit layer mapping and index range. It distinguishes from sibling tools that operate on multiple lights or sequences.

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

Usage Guidelines3/5

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

The description implies usage for individual LED control but provides no explicit guidance on when to use vs alternatives like tower_set_lights or tower_light_sequence. No caveats or when-not-to-use information.

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

tower_set_lightsSet LightsA

Control tower lights. Set doorway lights (north/south/east/west at top/middle/bottom), ledge lights (corner positions), and base lights. Effects: off, on, breathe, breatheFast, breathe50percent, flicker.

ParametersJSON Schema
NameRequiredDescriptionDefault
lightsYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only lists capabilities but does not disclose side effects, reversibility, required permissions, or any constraints beyond the listed options.

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 a single sentence with clear enumeration, no redundancy, and front-loads the core purpose. Every word adds value.

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

Completeness3/5

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

For a complex nested parameter tool with no output schema, the description covers most aspects but misses base light position details (side/level) and does not mention return behavior. It is adequate but has gaps.

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?

Schema coverage is 0%, so description compensates significantly. It explains position values for doorway (north/south/east/west at top/middle/bottom), ledge (corner positions), and lists all effect styles. However, it omits that base lights have side and level positions as defined in schema.

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 states the verb 'Control' or 'Set', the resource 'tower lights', and enumerates specific light types (doorway, ledge, base) and effects. This distinguishes it from siblings like tower_lights_on/off which are simpler.

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?

No guidance is provided on when to use this tool versus alternatives such as tower_lights_on, tower_light_sequence, or tower_set_led. The description does not mention prerequisites, context, or exclusions.

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

tower_skull_countSkull Drop CountA

Get the cumulative number of skulls that have dropped into the tower

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It correctly implies a read operation (no side effects), but does not mention whether the count resets, whether it requires connection, or what output format to expect. More detail would be helpful.

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 a single sentence that is fully self-contained and front-loaded. Every word is necessary and there is no redundancy.

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

Completeness4/5

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

Given the tool's simplicity (no parameters, no output schema), the description is mostly complete. However, it does not clarify the scope of the cumulative count (e.g., since last reset, since power-on) even though a sibling reset tool exists. Minor gap.

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 tool has no parameters, so the description does not need to add semantic meaning to parameters. Per guidelines, 0 parameters yields a baseline score of 4, and the description appropriately avoids extraneous detail.

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 states it retrieves the cumulative number of skulls dropped, using a specific verb (Get) and resource (cumulative number of skulls). It distinguishes itself from sibling tools like tower_reset_skull_count or tower_break_seal by focusing on a read-only count.

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

Usage Guidelines3/5

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

The description provides no explicit when-to-use or when-not-to-use guidance. However, the tool's name and description make its purpose clear, and given the sibling tools, the context is straightforward. No alternatives or exclusions are mentioned.

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

tower_statusTower StatusA

Get the current tower connection status, calibration state, and battery info

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

Without annotations, the description carries full burden. It clearly indicates a read-only operation ('Get') with no side effects, and lists the specific data returned. No contradictions or hidden behaviors are implied.

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?

Single concise sentence that captures the tool's full scope without extraneous words. Well-structured and front-loaded with key information.

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

Completeness4/5

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

Given the tool's simplicity (no parameters, no output schema) and low complexity, the description sufficiently explains its purpose. It could be enhanced by mentioning output format or units (e.g., battery percentage), but overall complete.

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 tool has zero parameters, so baseline is 4. The description adds no parameter-level detail, which is acceptable given no parameters exist. Schema coverage is 100% (empty schema).

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 specifies the verb 'Get' and lists three concrete resources: connection status, calibration state, battery info. It distinguishes from siblings like 'tower_is_responsive' which focuses only on connectivity, and 'tower_get_state' which may be broader, but does not explicitly differentiate.

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?

No guidance on when to use this tool versus alternatives such as 'tower_get_state' or 'tower_device_info'. The description does not specify prerequisites, limitations, or context for selecting this tool.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 34 tool updatesv1.0.0
    • First observedtower_break_seal
    • First observedtower_calibrate
    • First observedtower_connect
    • First observedtower_device_info
    • First observedtower_disconnect
    • First observedtower_get_broken_seals
    • First observedtower_get_drum_positions
    • First observedtower_get_glyph
    • First observedtower_get_glyphs
    • First observedtower_get_state
    • First observedtower_glyphs_facing
    • First observedtower_is_responsive
    • First observedtower_is_seal_broken
    • First observedtower_light_sequence
    • First observedtower_light_sequence_by_name
    • First observedtower_lights_off
    • First observedtower_lights_on
    • First observedtower_list_sounds
    • First observedtower_play_sound
    • First observedtower_play_sound_by_name
    • First observedtower_random_rotate
    • First observedtower_random_seal
    • First observedtower_reconnect
    • First observedtower_reset_seals
    • First observedtower_reset_skull_count
    • First observedtower_rotate
    • First observedtower_rotate_drum
    • First observedtower_send_state
    • First observedtower_set_battery_monitoring
    • First observedtower_set_connection_monitoring
    • First observedtower_set_led
    • First observedtower_set_lights
    • First observedtower_skull_count
    • First observedtower_status

TDQS

A3.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, such as controlling lights, sounds, seals, or drums, with clear differentiation between similar tools like tower_play_sound and tower_play_sound_by_name.

Naming Consistency5/5

All tools follow a consistent tower_verb_noun pattern in snake_case, making it easy to predict tool names and understand their functions.

Tool Count3/5

With 34 tools, the set is large but justified by the complexity of controlling a physical device; however, it exceeds the typical well-scoped range of 3-15 and is near the 'too many' threshold.

Completeness5/5

The tool set covers all essential aspects of the device lifecycle: connection, calibration, state retrieval, light and sound control, seal management, drum rotation, and monitoring. No obvious gaps.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables communication with G1 Bluetooth devices using the Nordic UART protocol over BLE. Supports device discovery, connection management, and message exchange for G1 audio devices through natural language commands.
    5
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to directly interact with Matter devices and protocol operations, including device commissioning, attribute read/write, commands, and event monitoring, through natural language.
    7
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to control Govee smart devices, including lights, via natural language. Supports turning on/off, changing colors, adjusting brightness, and activating scenes through the Govee API or local network.
    9
    1
    MIT

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/ChessMess/mcp-server-return-to-dark-tower'

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