Skip to main content
Glama

Ask questions about text or pictures

judge.ask
Read-onlyIdempotent

Answer your questions about text and pictures you give (yes or no, a choice, a score, or where something is in a picture), as typed answers in about a second. It asks TypeSafe Jev, a fast judgment model (preview). Jev sees exactly the state: each entry under its name, and your questions refer to entries by name in backticks ("in passage"). An entry is text (a string, or a JSON object or array of related facts) or a picture: {media_id} for an imported image, {media_id, at_seconds} for the frame of a video at that time, {timeline_id, at_seconds} for a frame of an edit as it renders (to judge a grade or a layout you made). Mix them freely. Each call stands alone, so put everything a judgment needs into its state. Choose the type by the answer you need. noul: yes or no, answered as noul, the probability of yes from 0 to 1 (0.5 or more reads as yes). choice: one of options you name, answered as choice plus probabilities and confidence. score: a degree on levels you order, answered as score (0 is the first level) plus confidence. box: where one thing is in a picture, answered as box {x, y, w, h} in fractions of that picture plus confidence. Write each question as one thing, worded so yes means it is there. Open with what the state is ("passage is a transcript of someone speaking off the cuff"), and give a noul criteria {true, false} with an example of each: Jev answers most accurately from examples. To locate, name the one thing so only it fits ("the yellow headline 'Get started' at the top of shot") and ask a noul whether it is there; trust a box with high confidence. One call answers many questions about one state at once, so judge many items together: put the shared text in state once, and give each item its own question carrying its own marked copy. Filler words: state {passage: "So basically the way this works is"}, and per word a noul "passage is a transcript of someone speaking off the cuff. With one word marked: "So [[basically]] the way this works is". Is the marked word filler, so the sentence says the same without it?" with criteria {true: "the [[the]] report is late", false: "the report is [[late]]"}. A shot: state {shot: {media_id, at_seconds: 12.5}}, choice "What fills shot?" with options {speaker: "A person talking to camera", screen: "A screen recording", none: "Anything else"}. Both: state {line: "Click Get started", screen: {media_id, at_seconds: 4}}, noul "Does screen show the button line talks about?". Up to 300 questions, 8 pictures and 200k characters of text a call. To find where something shows in a video or an edit, media.seek takes it in plain words; to measure every frame, media.analyze look asks your questions of frames it samples. Guide to writing questions: https://docs.typesafe.ai/primitives and https://docs.typesafe.ai/images.

Input Schema

NameRequiredDescriptionDefault
stateYesWhat Jev sees, entry by entry: name to a string, a JSON object or array, or a picture: {media_id} (an image), {media_id, at_seconds} (a video frame) or {timeline_id, at_seconds} (a frame of an edit as it renders). Questions refer to entries by name in backticks
questionsYesid (yours, not shown to the model) to question; up to 300, all answered about the same state

Output Schema

NameRequiredDescriptionDefault
modelYes
answersYesPer question id: noul {noul}; choice {choice, probabilities, confidence}; score {score, probabilities, confidence}; box {box: {x, y, w, h} fractions of the picture, confidence}

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / state / additionalProperties / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "at_seconds": {
      -        "description": "The frame of a video at this media time; needed for video",
      -        "minimum": 0,
      -        "type": "number"
      -      },
      -      "media_id": {
      -        "description": "Media handle from media.import or a create.* tool",
      -        "pattern": "^m_[0-9a-z]{26}$",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "media_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "anyOf": [
      -      {
      -        "type": "string"
      -      },
      -      {
      -        "type": "number"
      -      },
      -      {
      -        "type": "boolean"
      -      },
      -      {
      -        "additionalProperties": {},
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      {
      -        "items": {},
      -        "type": "array"
      -      }
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "at_seconds": {
      +        "description": "The frame of a video at this media time; needed for video",
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "media_id": {
      +        "description": "Media handle from media.import or a create.* tool",
      +        "pattern": "^m_[0-9a-z]{26}$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "media_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "at_seconds": {
      +        "description": "Timeline seconds",
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "timeline_id": {
      +        "description": "Timeline handle; every edit returns a new one",
      +        "pattern": "^tl_[0-9a-f]{32}$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "timeline_id",
      +      "at_seconds"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "number"
      +      },
      +      {
      +        "type": "boolean"
      +      },
      +      {
      +        "additionalProperties": {},
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      {
      +        "items": {},
      +        "type": "array"
      +      }
      +    ]
      +  }
      +]
    • changedInput schema / properties / state / description
      Previous value: -"What Jev sees, entry by entry: name to a string, a JSON object or array, or a picture {media_id} (an image) or {media_id, at_seconds} (a video frame). Questions refer to entries by name in backticks"New value: +"What Jev sees, entry by entry: name to a string, a JSON object or array, or a picture: {media_id} (an image), {media_id, at_seconds} (a video frame) or {timeline_id, at_seconds} (a frame of an edit as it renders). Questions refer to entries by name in backticks"
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, and the description adds context beyond them: statelessness ('Each call stands alone, so put everything a judgment needs into its state'), capacity limits (300 questions, 8 pictures, 200k characters), latency ('about a second'), and that the model is a preview.

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?

The core purpose and limits are front-loaded, but the body is a dense run-on of inline examples with no headings or lists despite the highly structured content. The filler-word example in particular requires re-reading, and the paired criteria example does not clearly map to the filler question.

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 a nested two-parameter tool with an output schema, the description covers everything an agent needs: entry formats, question types and criteria shapes, per-call limits, statelessness, and links to fuller guides. Return values need not be described because the output schema exists.

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 coverage is 100%, so the baseline would be 3, but the description adds real meaning: backtick entry references ('in `passage`'), the interpretation rule '0.5 or more reads as yes' for noul, 'score (0 is the first level)', and 'box {x, y, w, h} in fractions of that picture'.

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 states a specific verb and resource ('Answer your questions about text and pictures you give'), enumerates the four answer shapes (yes/no, choice, score, box), and names the underlying model (TypeSafe Jev). It also distinguishes the tool from media.seek and media.analyze by describing what each does instead.

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?

It routes the agent explicitly: 'To find where something shows in a video or an edit, media.seek takes it in plain words; to measure every frame, media.analyze look asks your questions of frames it samples.' It also gives selection guidance for the question subtypes ('Choose the type by the answer you need') and a batching rule ('judge many items together').

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.