Arezzo

io.github.ConvergentMethodsPublished by GitHub account ConvergentMethodsv0.1.1Updated Oct 27, 2026

Deterministic Google Docs API compiler. Your agent stops silently corrupting documents.

Overview

AI-generated overview

Local MCP server that reads and edits Google Docs through semantic operations, compiling them into correct batchUpdate requests.

What you can do
  • Read a document's structure: headings with hierarchy, named ranges, tables and section boundaries
  • Edit documents by inserting, deleting or replacing text, applying formatting, links and headings
  • Add tables, rows and columns, lists, images, headers, footers, footnotes and named ranges
  • Dry-run operations to inspect the compiled requests before anything is executed
When to use it
Useful when an assistant needs to modify Google Docs reliably, especially multi-step edits where manual index arithmetic would corrupt the document. The README recommends reading a document before editing and re-reading after structural changes.
Requirements
Runs locally as a Python package installed with pip, then configured via an init command that writes MCP client config files. Needs a Google Cloud project with the Google Docs API enabled and an OAuth 2.0 desktop client credentials file, referenced by the GOOGLE_APPLICATION_CREDENTIALS environment variable; a browser-based OAuth consent step is required once.
Before you install
Requires Google OAuth credentials, which the setup wizard copies into a local config directory. The edit tool writes to real Google Docs, so mistakes change live documents; use the dry-run validation tool first. The server sends document content and edits to the Google Docs API.

Installation

In SourceWeft

  1. Open Arezzo in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Arezzo

Deterministic compiler for Google Docs API operations.

You cannot safely modify a Google Doc by constructing batchUpdate requests yourself. The API uses UTF-16 code units with cascading index shifts — insert 10 characters at position 50, and every subsequent index in your batch is now wrong. A single miscalculation silently corrupts the document with no error message.

Arezzo compiles semantic intent into a correct request sequence. Tell it what you want to do; it handles the index arithmetic.

For AI agents (MCP tools)

Arezzo exposes three tools via the Model Context Protocol:

read_document(document_id)  → Returns the document's structural map: headings with hierarchy,    named ranges, tables, section boundaries. Call this before editing    so you know what addresses are available.
edit_document(document_id, operations)  → Compiles operations into correct batchUpdate requests and executes    them. Handles UTF-16 arithmetic, cascading index shifts, and    OT-compatible request ordering. Supported operations: insert/delete/    replace text, formatting (bold, italic, headings, links), tables,    lists, images, headers/footers, footnotes, named ranges.
validate_operations(document_id, operations)  → Compile-only dry run. Returns the compiled requests for inspection    without executing. Use before edit_document when uncertain.

Operation format

json
{  "type": "insert_text",  "address": {"heading": "Revenue Analysis"},  "params": {"text": "New paragraph content.\n"}}

Address modes:

  • {"heading": "Section Name"} — by heading text
  • {"named_range": "range_name"} — by named range
  • {"bookmark": "bookmark_id"} — by bookmark ID
  • {"start": true} — document start
  • {"end": true} — document end
  • {"index": 42} — absolute UTF-16 index

Operation types: insert_text, delete_content, replace_all_text, replace_section, update_text_style, update_paragraph_style, insert_bullet_list, insert_table, insert_table_row, insert_table_column, delete_table_row, delete_table_column, insert_image, create_header, create_footer, create_footnote, create_named_range, replace_named_range_content, insert_page_break

Recommended workflow

read_document → edit_document → (if structural changes) read_document → edit_document

Always read before editing. After inserting structural elements (tables, headers, footers), read again to get the new element indices before adding content inside them.

Installation

bash
pip install arezzoarezzo init

arezzo init walks through Google OAuth setup and writes platform config files for your MCP client.

Setup

Prerequisites: A Google Cloud project with the Google Docs API enabled and an OAuth 2.0 client ID (Desktop application type).

bash
arezzo init

The wizard:

  1. Copies your credentials.json to ~/.config/arezzo/
  2. Runs the OAuth consent flow (browser opens once)
  3. Generates config files for Claude Code, Cursor, and VS Code

For Claude Desktop, arezzo init prints the config block to add manually.

Platform configs

After arezzo init, config files are written to your project directory:

Claude Code / Cursor (.mcp.json):

json
{  "mcpServers": {    "arezzo": {      "command": "arezzo"    }  }}

VS Code (.vscode/mcp.json):

json
{  "servers": {    "arezzo": {      "type": "stdio",      "command": "arezzo"    }  }}

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

json
{  "mcpServers": {    "arezzo": {      "command": "arezzo"    }  }}

Why Arezzo exists

The Google Docs batchUpdate API operates on UTF-16 code units with absolute index positions. Every character insertion or deletion shifts all subsequent indices. In a batch with multiple mutations, each request's indices must account for the effect of every prior request in the same batch.

Getting this right requires:

  • UTF-16 length calculation (not Python len() — surrogate pairs count differently)
  • Reverse-order execution for same-type mutations (delete from end to start)
  • Two-phase compilation (content mutations before format mutations)
  • Cascading offset tracking across multi-step operations

Arezzo handles this deterministically. The same input always produces the same output. No reasoning, no guessing, no "usually works."

Architecture

semantic operation    ↓arezzo.parser.parse_document()    — build heading/range/bookmark indexes    ↓arezzo.address.resolve_address()  — semantic reference → document index    ↓arezzo.operations.*               — operation → batchUpdate request(s)    ↓arezzo.index.sort_requests()      — OT-compatible mutation ordering    ↓correct batchUpdate request sequence

The engine is a pure function: compile_operations(doc, operations) → requests. Deterministic. No side effects. No API calls.

The MCP server (arezzo.server) wraps the engine with Google Docs API I/O and behavioral guidance fields (next_step, present_to_user, document_reality).

License

MIT — Convergent Methods, LLC

Source: README.md at commit 8a458d7

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts