Skip to main content
Glama
rbilleci

bsh-mcp

by rbilleci

ability_apply_ruling

Resolve an open pending ruling by applying a fictional choice, with default fallback when no option is provided.

Instructions

Apply a fictional choice to an open pending ruling. RUNTIME-ONLY.

The narrator engine's adjudicate step calls this once per turn to resolve a pending_ruling (e.g. which possession a demon stole) from the narration. It is excluded from the narrator model's tool surface by src/narrator/policy.py. An out-of-options choice falls to the ruling's default strategy.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
choiceNo
sourceNomodel
ruling_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are present, so the description carries the full behavioral burden. It does disclose that this resolves/consumes a pending ruling, is run once per turn, and falls back to the ruling's default strategy when no choice exists. It does not disclose side effects, failure modes, or what state changes occur after adjudication.

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 front-loaded with a one-line summary followed by a concise explanatory paragraph. Three sentences deliver runtime context, invocation cadence, and exclusion policy without padding.

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 runtime-internal tool, the domain context is well covered (who calls it, how often, default fallback). But with no output schema and no annotations, the description still omits return/error behavior and leaves one parameter (source) semantically empty, which is meaningful for a 3-parameter tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for all three parameters. It conceptually maps 'choice' and 'pending_ruling' (ruling_id) via the example, but 'source' goes entirely unexplained — the meaning of 'model' vs. any alternative value is never stated, and coverage stays mostly undocumented.

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 first sentence gives a specific verb+resource ('Apply a fictional choice to an open pending ruling'), and the follow-up clarifies the ruling domain with a concrete example (which possession a demon stole). It distinguishes itself from the game/combat/character siblings by the explicit RUNTIME-ONLY marker, though RUNTIME-ONLY is never fully defined inline.

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 states when it fires (narrator engine's adjudicate step, once per turn) and that it is excluded from the narrator model's tool surface via policy.py, which effectively tells the model it should not invoke this directly. However, it names no alternative tool and gives no explicit when-not-to-use condition beyond the runtime-only framing.

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