Skip to main content
Glama

write_review

Appends a typed Core review to a workspace so teams can record decisions, subject references, and reviewer details for later validation by trusted profile evaluators.

Instructions

Append a typed Core REVIEW. Authority is evaluated only by trusted startup Profile evaluators.

Input Schema

NameRequiredDescriptionDefault
bodyYes
senderYes
decisionYes
issued_atNo
recipientYes
attempt_idNo
expires_atNo
referencesNo
transitionNo
profile_refNo
review_kindYes
subject_refYes
issuer_proofNo
workspace_idYes
family_digestNo
operation_kindNo
authorization_refNo
authorization_scopeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed27 schema fields changedv4.0.5
    • addedInput schema / properties / attempt_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / authorization_ref
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / authorization_scope
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedInput schema / properties / body / default
      Removed value: -""
    • removedInput schema / properties / body / description
      Removed value: -"Additional Markdown body after the frontmatter."
    • removedInput schema / properties / decision / description
      Removed value: -"Review decision. One of:\n``approved`` — artefact is accepted;\n``rejected`` — artefact is rejected (cannot proceed);\n``needs_changes`` — must be revised (requires ``required_changes``);\n``abstained`` — reviewer recuses;\n``needs_human`` — reviewer escalates to human (ADR-0025,\nv1.1). The review stays pending until ``mark_human_approved``\nis called to close the loop."
    • addedInput schema / properties / expires_at
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / family_digest
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / issued_at
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / issuer_proof
      Added value: +{
      +  "default": null,
      +  "title": "Issuer Proof"
      +}
    • addedInput schema / properties / operation_kind
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / profile_ref
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedInput schema / properties / rationale
      Removed value: -{
      -  "default": "",
      -  "description": "Free-text rationale for the decision. Recommended\nfor all non-``approved`` decisions.",
      -  "type": "string"
      -}
    • addedInput schema / properties / recipient
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / references
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedInput schema / properties / required_changes
      Removed value: -{
      -  "default": "",
      -  "description": "Newline- or comma-separated list of required\nchanges. Mandatory when ``decision=needs_changes``.",
      -  "type": "string"
      -}
    • addedInput schema / properties / review_kind
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / reviewer_agent
      Removed value: -{
      -  "default": "",
      -  "description": "Optional agent/session identifier on top of\nthe role code.",
      -  "type": "string"
      -}
    • removedInput schema / properties / reviewer_role
      Removed value: -{
      -  "description": "Role code of the reviewer (must have\n``review_decision`` capability; typically ``layer: governance``\nor ``layer: admin``).",
      -  "type": "string"
      -}
    • addedInput schema / properties / sender
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / subject_ref / description
      Removed value: -"Reference to the artefact under review —\nfile path for task/report/code_change; fcop.json diff range\nfor role_switch."
    • removedInput schema / properties / subject_short
      Removed value: -{
      -  "default": "",
      -  "description": "Override the ``-on-{slug}`` segment of the\nfilename. Auto-derived from ``subject_ref`` when omitted.",
      -  "type": "string"
      -}
    • removedInput schema / properties / subject_type
      Removed value: -{
      -  "description": "What is being reviewed. One of\n``task`` / ``report`` / ``role_switch`` / ``code_change``.",
      -  "type": "string"
      -}
    • addedInput schema / properties / transition
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / workspace_id
      Added value: +{
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "reviewer_role",
      -  "subject_type",
      -  "subject_ref",
      -  "decision"
      -]New value: +[
      +  "workspace_id",
      +  "sender",
      +  "recipient",
      +  "subject_ref",
      +  "review_kind",
      +  "decision",
      +  "body"
      +]
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "result": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "result"
      -  ],
      -  "type": "object",
      -  "x-fastmcp-wrap-result": true
      -}New value: +null
  2. First observedv3.2.4

TDQS

C2.1/5.0
Behavior2/5

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

No annotations exist, so the description carries the full burden. It notes that authority is evaluated by trusted startup Profile evaluators, which is a useful behavioral clue about authorization, but says nothing about mutation effects, required permissions, whether appends are idempotent, or what happens on failure. For a write tool with 18 parameters, this is far too thin.

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?

Short and front-loaded with the verb+resource, so it is not padded. However, the brevity is under-specification rather than conciseness: the second sentence introduces an important authorization concept without explaining it.

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

Completeness1/5

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

No annotations, no output schema, 18 parameters with 0% schema description coverage, and a two-sentence description. The agent lacks what it needs to invoke this tool correctly: parameter meaning, review_kind/decision values, and the relationship between sender, recipient, subject_ref, and profile_ref are all unexplained.

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

Parameters1/5

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

Schema description coverage is 0% and the description explains no parameters at all. With 18 parameters including ambiguous fields like review_kind, decision, subject_ref, transition, family_digest, and issuer_proof, the absence of any semantic guidance is a severe gap.

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

Purpose3/5

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

States a specific verb ("Append") and resource ("Core REVIEW"), which is better than tautology. But "typed Core REVIEW" is jargon that doesn't clarify what a review is versus a report or issue, and the description never distinguishes this tool from siblings like write_report, write_issue, or list_reviews.

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 write_review instead of write_report or write_issue, no prerequisites, no workflow context. The authority sentence hints at a gate but doesn't tell the agent when this tool is appropriate.

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