Skip to main content
Glama

ogf_cue

Sends a bounded OGF Bridge cue for avatar action, emotion, intensity, and gaze, requiring Owner approval before launch and returning a pending result for the caller to await.

Instructions

Send one bounded OGF Bridge cue; every cue opens the normal Owner approval window.

The Owner reads the session from OGF's Bridge panel and supplies it in chat, or ChatGPT reads an approved capture. Only the documented lists and ranges are allowed. Approval shows a one-time protected session file path, never the UUID. Returns run_command_wait's result unchanged: after PENDING or observer timeout, use await_command_result with the original pending_id; never call ogf_cue again for the same cue. A DENIED review or review expiry before launch sends nothing; do not infer implemented TIMED_OUT metadata. ERROR/UNKNOWN requires observation and Owner reconciliation, never replay. Feature off returns DENY OgfBridgeNotConfigured.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "session_id": "<session_id>",
      "action": "<action>",
      "emotion": "<emotion>",
      "intensity": "<intensity>",
      "gaze": "<gaze>"
    },
    "name": "ogf_cue"
  }
}

Input Schema

NameRequiredDescriptionDefault
gazeYesOne of neutral, user, content, away; no arbitrary target or input.
actionYesOne of none, wave, nod, shake_head, small_guts_pose, celebrate; semantic presentation only.
ttl_msNoInteger cue lifetime from 100 to 10000 milliseconds, default 3000.
emotionYesOne of neutral, happy, excited, curious, surprised, concerned, sad, proud.
messageNoOptional text, at most 120 Unicode code points, no control characters; null clears the message.
intensityYesFinite number from 0 to 1 inclusive; booleans and strings are refused.
session_idYesEphemeral UUID from OGF's Bridge panel, supplied by the Owner in chat or read from an approved capture; never placed in approval argv.
wait_secondsNoObserver wait from 0 to 90 seconds, default 50; after PENDING/timeout use await_command_result with the original pending_id.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.1.5

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses that an Owner approval window always opens, that approval reveals a one-time protected session file path but never the UUID, that results are returned unchanged from run_command_wait, that a DENIED review or expiry sends nothing, and that the feature-off path returns DENY OgfBridgeNotConfigured. It also warns against inferring TIMED_OUT metadata that wasn't implemented.

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?

It is front-loaded with the purpose and then reads as a tight sequence of operational rules with no filler. It is longer than most definitions and a few clauses restate schema constraints ('only the documented lists and ranges are allowed'), but nearly every sentence encodes a distinct failure mode worth knowing.

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?

For an 8-parameter, 5-required, approval-gated tool, the description covers the whole lifecycle: preconditions for the session, the approval gate, the return value, and the correct follow-up for each terminal state. An output schema exists, yet the description still clarifies that the result is run_command_wait's result unchanged, which is the fact an agent most needs.

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%, so the baseline is 3; the description goes beyond it by documenting session_id provenance (ephemeral UUID from OGF's Bridge panel, supplied by the Owner in chat or read from an approved capture, never placed in approval argv). It reinforces the 'documented lists and ranges only' constraint and message-null-clears semantics, though it adds no per-parameter detail for action, emotion, gaze, or intensity.

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 opening sentence gives a specific verb and resource ('Send one bounded OGF Bridge cue') and immediately states the scope limit ('one', 'every cue opens the normal Owner approval window'). It also separates this tool from the follow-up siblings by name: after PENDING the agent must use await_command_result, not ogf_cue again.

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?

The description gives explicit routing rules for every post-call state: PENDING/timeout goes to await_command_result with the original pending_id, DENIED or review expiry means nothing was sent, ERROR/UNKNOWN requires observation and Owner reconciliation rather than replay. It also says explicitly not to call ogf_cue again for the same cue, which is the key misuse to prevent.

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