Skip to main content
Glama

propose_changes

PROPOSES changes without applying them: they are saved in a review queue, and a human accepts or rejects CHANGE BY CHANGE. This is the tool of the "meeting notes → graph update" flow: the project state is read first (get_schema_overview, search_cells), then a list of operations is sent, each with its identifier and — whenever a transcript accompanies the submission — the QUOTE of the sentence that justifies it. An operation without a quote is refused: this is what lets the reviewer read the sentence rather than the whole meeting notes. Nothing is ever written to the schema. The response carries reviewUrl, the review link meant for the user; get_proposal then reads back what became of the proposal.

Input Schema

NameRequiredDescriptionDefault
opsYesThe proposed changes. Each entry: { id, op, evidence?: { quote, speaker? }, confidence?: 'high'|'medium'|'low', rationale? }. `op` is write vocabulary: { kind: 'cell.add', cell: {...} }, { kind: 'task.add', task: {...} }, { kind: 'cell.update', cellId, patch }, { kind: 'task.set_status', taskId, status }, { kind: 'person.add', person }, { kind: 'assignment.set', assignment }, { kind: 'dependency.add', dependency }… The creation identifiers are SUPPLIED BY YOU: replaying the same burst then duplicates nothing. Maximum 200.
titleYesTitle of the proposal, in the user's language (e.g. "Product committee notes, July 22")
sourceNo
baseVersionNoVersion number you reasoned on. Used to REPORT drift at review, and not to block.
idempotencyKeyYesREQUIRED. A stable key derived from the source (e.g. the meeting identifier). Replaying with the same key returns the proposal ALREADY created instead of creating a second one.
expectedProjectIdNoUUID of the project targeted by THIS call. ACTUALLY targets this project instead of the session project. Refused without changing anything if access is not granted.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / baseVersion / description
      Previous value: -"Numéro de version sur lequel tu as raisonné. Sert à SIGNALER la dérive à la revue, jamais à bloquer."New value: +"Version number you reasoned on. Used to REPORT drift at review, and not to block."
    • changedInput schema / properties / expectedProjectId / description
      Previous value: -"UUID du projet visé par CET appel. Cible RÉELLEMENT ce projet au lieu du projet de session. Refusé sans rien modifier si l'accès n'est pas accordé."New value: +"UUID of the project targeted by THIS call. ACTUALLY targets this project instead of the session project. Refused without changing anything if access is not granted."
    • changedInput schema / properties / idempotencyKey / description
      Previous value: -"OBLIGATOIRE. Une clé stable dérivée de la source (ex: l'identifiant de la réunion). Rejouer avec la même clé rend la proposition DÉJÀ créée au lieu d'en créer une seconde."New value: +"REQUIRED. A stable key derived from the source (e.g. the meeting identifier). Replaying with the same key returns the proposal ALREADY created instead of creating a second one."
    • changedInput schema / properties / ops / description
      Previous value: -"Les changements proposés. Chaque entrée : { id, op, evidence?: { quote, speaker? }, confidence?: 'high'|'medium'|'low', rationale? }. `op` est du vocabulaire d'écriture : { kind: 'cell.add', cell: {...} }, { kind: 'task.add', task: {...} }, { kind: 'cell.update', cellId, patch }, { kind: 'task.set_status', taskId, status }, { kind: 'person.add', person }, { kind: 'assignment.set', assignment }, { kind: 'dependency.add', dependency }… Les identifiants de création sont FOURNIS PAR TOI : rejouer la même salve ne duplique alors rien. Maximum 200."New value: +"The proposed changes. Each entry: { id, op, evidence?: { quote, speaker? }, confidence?: 'high'|'medium'|'low', rationale? }. `op` is write vocabulary: { kind: 'cell.add', cell: {...} }, { kind: 'task.add', task: {...} }, { kind: 'cell.update', cellId, patch }, { kind: 'task.set_status', taskId, status }, { kind: 'person.add', person }, { kind: 'assignment.set', assignment }, { kind: 'dependency.add', dependency }… The creation identifiers are SUPPLIED BY YOU: replaying the same burst then duplicates nothing. Maximum 200."
    • changedInput schema / properties / source / properties / transcript / description
      Previous value: -"Le compte rendu BRUT. Quand il est fourni, chaque op DOIT porter une citation (evidence.quote) — sinon elle est refusée."New value: +"The RAW meeting notes. When they are provided, every op has to carry a quote (evidence.quote) — otherwise it is refused."
    • changedInput schema / properties / title / description
      Previous value: -"Titre de la proposition, en français (ex: « CR comité produit 22/07 »)"New value: +"Title of the proposal, in the user's language (e.g. \"Product committee notes, July 22\")"
  2. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only say it is non-destructive and non-readonly; the description goes much further by disclosing the review-queue lifecycle (human accepts/rejects change by change), the hard rule that ops without a quote are refused, the idempotent replay semantics returning an existing proposal, and that nothing is written to the schema.

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 core contract is front-loaded in the first sentence and each subsequent sentence adds a distinct operational fact (queue, precondition reads, quote rule, reviewUrl). The heavy capitalization for emphasis and mid-sentence asides make it denser than necessary, but no sentence is filler.

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 complex 6-param, nested-object tool with no output schema, the description covers the mutation lifecycle, requires-state explanation, and the returned reviewUrl plus the follow-up reader. The per-op vocabulary is left to the schema, which handles it, so the remaining gap is small.

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 already 83%, so the schema documents nearly all parameters itself; the description largely restates the quote/identifier requirement ('each with its identifier and the QUOTE') rather than adding new format or constraint detail beyond what the schema 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 opening clause states exactly what the tool does and what it does not: 'PROPOSES changes without applying them.' The verb+resource ('propose_changes') is disambiguated from the many write siblings (add_cell, apply_batch, etc.) by the explicit 'nothing is ever written to the schema' scope statement.

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?

It names the upstream reads ('get_schema_overview, search_cells') and the downstream read-back tool ('get_proposal') and the 'meeting notes → graph update' flow, giving clear when-to-use context. It stops short of explicitly contrasting itself with the sibling that actually applies changes (apply_batch), so the alternative is only implied.

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.