Skip to main content
Glama

Set WorkPaper Cell Contents

set_cell_contents
Idempotent

Write raw content to one cell and recalculate dependents in memory only. Start with --writable when the edit should persist to JSON.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
valueYesRaw cell content. Formula strings must start with =; plain strings are stored as literals. Strict MCP hosts such as Semantic Kernel require a single parameter type, so pass evaluated numbers/booleans as formulas such as =0.4 or =TRUE(). The server still accepts JSON number, boolean, or null arguments from clients that support them.
addressYesSingle A1 cell address such as B3. Ranges are not accepted.
sheetNameYesExisting sheet name, for example Inputs.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
afterYes
beforeYes
checksYes
restoredYes
editedCellYesCanonical sheet-qualified address that was edited.
persistenceYes

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed6 schema fields changed
    • addedOutput schema / properties / after / properties / formulaDiagnostics
      Added value: +{
      +  "description": "Structured formula diagnostics. Empty when the cell has no formula error.",
      +  "type": "array"
      +}
    • changedOutput schema / properties / after / required
      Previous value: -[
      -  "address",
      -  "value",
      -  "serialized",
      -  "formula",
      -  "displayValue"
      -]New value: +[
      +  "address",
      +  "value",
      +  "serialized",
      +  "formula",
      +  "displayValue",
      +  "formulaDiagnostics"
      +]
    • addedOutput schema / properties / before / properties / formulaDiagnostics
      Added value: +{
      +  "description": "Structured formula diagnostics. Empty when the cell has no formula error.",
      +  "type": "array"
      +}
    • changedOutput schema / properties / before / required
      Previous value: -[
      -  "address",
      -  "value",
      -  "serialized",
      -  "formula",
      -  "displayValue"
      -]New value: +[
      +  "address",
      +  "value",
      +  "serialized",
      +  "formula",
      +  "displayValue",
      +  "formulaDiagnostics"
      +]
    • addedOutput schema / properties / restored / properties / formulaDiagnostics
      Added value: +{
      +  "description": "Structured formula diagnostics. Empty when the cell has no formula error.",
      +  "type": "array"
      +}
    • changedOutput schema / properties / restored / required
      Previous value: -[
      -  "address",
      -  "value",
      -  "serialized",
      -  "formula",
      -  "displayValue"
      -]New value: +[
      +  "address",
      +  "value",
      +  "serialized",
      +  "formula",
      +  "displayValue",
      +  "formulaDiagnostics"
      +]
  2. Changed18 schema fields changed
    • changedInput schema / properties / value / description
      Previous value: -"Raw cell content. Formula strings must start with =; plain strings are stored as literals."New value: +"Raw cell content. Formula strings must start with =; plain strings are stored as literals. Strict MCP hosts such as Semantic Kernel require a single parameter type, so pass evaluated numbers/booleans as formulas such as =0.4 or =TRUE(). The server still accepts JSON number, boolean, or null arguments from clients that support them."
    • changedInput schema / properties / value / type
      Previous value: -[
      -  "string",
      -  "number",
      -  "boolean",
      -  "null"
      -]New value: +"string"
    • addedOutput schema / properties / after / properties / formula / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / after / properties / formula / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / after / properties / serialized / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / after / properties / serialized / type
      Removed value: -[
      -  "string",
      -  "number",
      -  "boolean",
      -  "null"
      -]
    • addedOutput schema / properties / before / properties / formula / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / before / properties / formula / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / before / properties / serialized / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / before / properties / serialized / type
      Removed value: -[
      -  "string",
      -  "number",
      -  "boolean",
      -  "null"
      -]
    • addedOutput schema / properties / checks / properties / newSerialized / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / checks / properties / newSerialized / type
      Removed value: -[
      -  "string",
      -  "number",
      -  "boolean",
      -  "null"
      -]
    • addedOutput schema / properties / checks / properties / previousSerialized / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / checks / properties / previousSerialized / type
      Removed value: -[
      -  "string",
      -  "number",
      -  "boolean",
      -  "null"
      -]
    • addedOutput schema / properties / restored / properties / formula / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / restored / properties / formula / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / restored / properties / serialized / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / restored / properties / serialized / type
      Removed value: -[
      -  "string",
      -  "number",
      -  "boolean",
      -  "null"
      -]
  3. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description adds meaningful behavioral details: it recalculates dependents, and persistence is conditional on --writable. This gives the agent a richer picture of side effects without contradicting any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and every clause earns its place. No filler or repetition of schema/annotation info.

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?

Given the output schema exists, return values are not needed. The description covers the key behavioral nuances (one-cell write, in-memory dependency recalculation, persistence conditional) and is sufficient for a tool of this complexity.

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 coverage is 100%, so the baseline is 3. The tool description itself does not address parameters directly; all parameter semantics reside in the schema descriptions, which are already thorough. The description adds no extra parameter-level meaning.

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 description uses a specific verb ('Write') and resource ('one cell'), and immediately clarifies the scope ('recalculate dependents in memory only'). This distinguishes it from sibling tools like read_cell and set_cell_contents_and_readback, which have different purposes.

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?

The description provides clear context: writes are in-memory by default, and the --writable flag is needed to persist to JSON. However, it does not explicitly name alternatives or exclusions (e.g., when to use set_cell_contents_and_readback instead), so it stops short of full guidance.

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.

TDQS

A4.3/5.0
Disambiguation4/5

Tools are mostly distinct with clear purposes for reading, writing, exporting, and validating. Slight overlap exists between get_cell_display_value and read_cell, and between the two set_cell variants, but descriptions clarify the intended use.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., list_sheets, read_cell, validate_formula). This predictable naming makes the set easy to navigate.

Tool Count5/5

With 8 tools, the set is well-scoped for interacting with a WorkPaper document. Each tool serves a clear purpose without unnecessary bloat.

Completeness3/5

Core operations for reading, writing, validating, and exporting are covered, but the surface lacks batch cell writes, cell clearing, and sheet management. These notable gaps may hinder complex editing workflows.