Repository navigation
Releases: juliandickie/scribe-plugin
Release list
Scribe v1.3.2
The tab populate helper now runs without a permission prompt
- The rule. The docs and push skills pre-approve the helper through
allowed-tools: Bash(${CLAUDE_PLUGIN_ROOT}/scripts/doc-tab-populate *). Pushing a markdown file into a Google Doc tab no longer stops to ask for permission while either skill is active. - Nothing else changes. Per the Claude Code skills docs,
allowed-toolsonly pre-approves. Every other tool, including all the Google Workspace tools, stays callable with its usual permission behaviour, and your own deny and ask rules still win. - Unquoted commands. The helper command in the skills,
docs/services.mdand README is now written unquoted, so it matches the rule exactly. - Developer docs. CLAUDE.md "Current state" is corrected, and the
allowed-toolsconvention is recorded.
The helper itself is unchanged from 1.3.1. See the v1.3.1 notes for what it does.
Full detail in #4.
Scribe v1.3.1
Fill Google Doc tabs straight from files
New scripts/doc-tab-populate. It fills an existing Doc tab from a markdown file using the MCP server's own converter, then reads the tab back and checks it.
- No text through the session. The markdown never passes through Claude's context, so there is no cap on how many Docs a sync can cover.
- One command. It runs through
uvxon the pinned workspace-mcp, so there is nothing extra to install. - Same result as the tool. Structurally identical to
manage_doc_tab populate_from_markdown, verified live on 1.26.1. - Read-back check. Confirms every text block landed, in order. Warns on flattened tables, flattened nested lists and emoji.
- Refuses unsafe writes. Files with no text (which would blank the tab), files with emoji, and a non-pinned server.
- Other safety. Writes carry the Doc's revision id. Secret locations are never read.
--sandboxopt-in appliesALLOWED_FILE_DIRS. - Appending after text. When the tab's last paragraph has text, the helper inserts a paragraph break first. The tool glues the first new paragraph onto it.
The docs, push and workspace skills now use it for file-sourced tabs above about 8 KB or any multi-Doc sync. Its check is the standard "verify the push" step.
New gotchas in the docs skill
All confirmed live on workspace-mcp 1.26.1, and all return success:
- Nested lists flatten.
- Indented code blocks, raw HTML blocks and second paragraphs inside a list item are dropped.
- One emoji makes the converter's offsets drift. An emoji in an H1 turned every later paragraph into an H1.
- Appending glues onto a non-empty last paragraph.
Other skill fixes
- A tab's URL is the Doc URL plus
?tab=<tab id>. create_docandimport_to_google_docgive a single "Tab 1".- Which call to use for a tab list only.
- Shared Drive search needs no
corpora. An empty result is the name terms. manage_sheet_tabis documented.- Parameter corrections to the live 1.26.1 schema for
create_doc,create_spreadsheet,create_presentation,import_to_google_docandcreate_drive_folder.
Maintenance
- Both manifests at 1.3.1.
- New
make testtarget (54 offline tests). make validatechecks the helper and now fails properly.- New pin-bump checklist step.
- Retirement plan for when upstream ships a file parameter on
manage_doc_tab.
Full detail in #3.
Scribe v1.3.0
Tagged retroactively on 1 October 2026. This commit merged to main on 14 September 2026 and has been what marketplace installers receive since then, but it was never tagged.
Upstream pin 1.25.2 to 1.26.1
- Pins
workspace-mcp@1.26.1(released 2026-09-13). - Tool surface verified by live MCP handshake of both versions: 122 to 123 tools. One was added (
manage_sheet_tab), none were removed, and all 11 parameter changes are additive. MINOR, not MAJOR.
Fixes that reach Scribe users
inspect_doc_structurereturned HTTP 400 on every call made withincludeTabsContent. It now works.run_script_functionpassed a project ID where the API wants a deployment ID. Fixed.- Corrupt
.docx,.xlsxand.pptxfiles now report as damaged. - Comment tools return real multi-line output.
- Startup errors log at ERROR level.
Unchanged
GFM tables still flatten on populate_from_markdown, because upstream PR #929 is still open. The verification and repair guidance in the docs skill stays load-bearing.
Note - marketplace.json still said 1.2.0 in this release. v1.3.1 aligns both manifests.
Scribe v1.2.0
Upstream pin bump release. The wrapped MCP server moves from workspace-mcp 1.21.2 to 1.25.2 (ten upstream releases), and the skill documentation was re-verified against a live MCP handshake of the new version.
Upstream pin - workspace-mcp 1.25.2
The tool surface is stable - zero tools added or removed (122 tools), 22 tools gained additive parameters, and one schema change. Highlights most relevant to Scribe workflows -
-
Gmail reply threading fixed end to end. Drafted and sent replies attach to the original thread, target the latest non-draft message, and
send_gmail_messagegainsreply_all,quote_original, andforward_message_id(forwarding with attachments). -
read_sheet_valuesno longer silently truncates output at 50 rows. Open-ended ranges clamp at 1000 rows. -
search_drive_filesexcludes trashed files by default, matching the Drive web UI (include_trashedopts back in). -
update_drive_filegains content updates withreplace/append/prependmodes, keeping non-Google formats intact. -
Docs tables gain header-row pinning (
create_table_with_data header_rows,pin_table_header_rowsbatch operation) and per-edge paragraph borders. -
Slides speaker notes are readable and editable (
get_presentation include_speaker_notes). -
Calendar
manage_eventsupports Zoom/Webex/Teams conferencing and per-boundary timezones;get_eventsgainssingle_eventsfor recurring series. -
Multiple CVE-driven dependency raises (cryptography, starlette, pypdf, PyJWT, mcp).
One breaking schema change - set_publish_settings (Forms) replaced publish_as_template/require_authentication with is_published/is_accepting_responses. The forms skill documents the new fields.
Not included - native markdown tables
The GFM table fix for populate_from_markdown (upstream PR 929) is still unmerged upstream, so tables still flatten to pipe text in 1.25.2. The mandatory post-populate table verification and repair guidance in the docs, push, and workspace skills remains in force.
Verification
- Live MCP handshake of 1.21.2 and 1.25.2 diffed name-by-name and parameter-by-parameter.
- All 188 documented tool references checked against the live 1.25.2 schema.
- Live authenticated
list_calendarscall on 1.25.2 confirmed the existing token cache works unchanged - no re-auth needed after updating. - All ten service skills stamped
last-validated: 2026-08-28.
Scribe v1.1.1
Scribe v1.1.1
Skill-layer hardening for the markdown table defect on the populate_from_markdown path, plus contributor doc updates. The workspace-mcp pin is unchanged at 1.21.2.
Why
GFM tables in markdown pushed through manage_doc_tab populate_from_markdown flatten to a single paragraph of raw pipe text while the tool reports success. The root cause is in the upstream converter (tables are not enabled in its parser) and a fix is submitted upstream as taylorwilsdon/google_workspace_mcp#929. Until that ships in a PyPI release and the pin bumps, the failure is silent, so the skills now make verification mandatory.
Changes
- docs skill - the Gotchas now carry a mandatory post-populate table verification (detailed inspect_doc_structure, table count matches source, zero pipe-text paragraphs) and the proven repair pass (modify_doc_text wipe plus create_table_with_data per table, bottom-up). Also corrects an inverted claim - import_to_google_doc renders tables natively and always has.
- push skill - new mandatory "Table integrity check" section; a push is not complete until the check passes.
- workspace skill - router hint updated to point at the verification pass.
- CLAUDE.md - contribution pattern rewritten around the standing fork (sync to mirror upstream, feature branch off upstream main, single focused PR); PR #929 recorded in the contribution history.
The skill wording is verification-driven rather than version-driven, so it remains correct after the upstream fix lands - the check simply passes on first inspect. A follow-up release will bump the workspace-mcp pin once the table fix ships upstream, at which point populate_from_markdown renders native Docs tables directly.
Scribe v1.1.0
Documentation accuracy, a new orientation command, and an upstream refresh. No breaking changes - update via your plugin marketplace and restart.
New
/scribe:start- orientation command. Checks which Google accounts are authenticated and lists every workflow Scribe offers, grouped by use case. Run it first, or any time.
Changed
-
Pinned
workspace-mcpupdated 1.20.4 to 1.21.2. Additive upstream release - gmail inline-image attachments viacontent_id, Office-to-Google import, contacts birthday fields, and a socket-timeout hang fix. No breaking changes, scope changes, or env-var renames. -
Gmail skill now documents the real send and draft surface - the four attachment modes (url / path / content / content_id), Send As (
from_email/from_name),include_signature,body_formatfor HTML, and reply threading. -
New cross-service "File and attachment handling" map in the orchestration router - the file-reference modes and the per-tool parameter names (
path/urlvsfile_path/file_urlvsfileUrl). -
Documented the Google-Doc rendering gotchas - GFM tables render as raw pipe text, and single-newline lines collapse into one paragraph - with the correct list and paragraph patterns.
-
auth-init - clearer OAuth callback explanation and a proactive Windows path note.
Notes
- Windows
${HOME}path behaviour is documented but not yet verified on a live Windows machine.
Scribe v1.0.0 - Full Google Workspace Suite
The biggest release since the initial plugin. Scribe is now a complete Google Workspace orchestration layer with 10 service skills, 14 named workflow commands, and a refactored orchestration router.
What's new
14 named workflow commands for cross-service operations:
/scribe:daily-briefing- inbox + calendar morning sweep/scribe:inbox-triage- categorise, label, draft replies/scribe:support-scan- support inbox to tracking sheet + drafts/scribe:meeting-prep- prep doc with related emails/scribe:thread-to-doc- email thread to Doc + attachments to folder/scribe:client-digest- full activity digest for a client/scribe:weekly-wrap- weekly summary across services/scribe:follow-up-tracker- find unanswered sent emails/scribe:contact-onboard- bootstrap folder + Contact + Sheet + welcome/scribe:doc-chase- nudge inactive doc reviewers/scribe:attach-vault- organise email attachments into Drive/scribe:event-recap- post-meeting notes doc + follow-up/scribe:smart-reply- contextual draft from prior history/scribe:educator-setup- bootstrap educator's Drive structure
10 service skills - one per Google service - now auto-activate to give Claude per-service MCP tool API depth - gmail, calendar, docs, drive, sheets, slides, contacts, tasks, forms, chat.
Three-layer skill architecture - orchestration router + service skills + workflow skills - keeps each skill focused under 500 lines and ensures Claude loads the right context per request.
Cross-plugin composition - workflow skills include "if ClickUp/Slack/Spiffy/AC Builder plugin is installed..." prose hints so Claude chains across plugins naturally without code coupling.
Multi-account orchestration - explicit multi-account intent ("check both my inboxes") triggers auto-loop across all authenticated accounts. Ambiguous intent prompts once.
make check-upstream maintenance ritual - new Makefile target hits PyPI's JSON API monthly to flag drift against the pinned workspace-mcp version.
Pre-release accuracy work
This release went through a full pre-tag code review against the actual workspace-mcp@1.20.4 tool surface. Every service skill's MCP tool reference was verified against the installed package source, not approximated. Caught and fixed - non-existent list_authenticated_accounts references, invented Sheets/Slides/Contacts/Tasks/Forms/Chat tool names, manage_event action="read" (replaced with get_events(event_id=...)), and other accuracy issues. The release ships with correct upstream tool names throughout.
Upgrading from 0.x
The install command is the same:
/plugin marketplace add juliandickie/scribe-plugin
/plugin install scribe
After upgrading, run /scribe:auth-status to confirm existing tokens still work. Existing tokens cover the broader scope set the v1.0 tool list requests, but if you see "Scope not authorized" errors on a specific service, re-run /scribe:auth-add EMAIL for that account.
Documentation
- Workflows reference - docs/workflows.md
- Services reference - docs/services.md
- Multi-org setup - docs/multi-org-setup.md
- Setup walkthrough -
/scribe:auth-initafter install
Credits
Wraps workspace-mcp@1.20.4 by @taylorwilsdon. The breadth of this release is possible because of his work on the underlying MCP server.
Scribe v0.3.1
Full Changelog: v0.3.0...v0.3.1
Scribe v0.3.0 - PyPI install path
Scribe v0.3.0
Minor-version release marking the shift from git-URL fork dependency to PyPI-published upstream. No user-facing capability changes.
What changed
The plugin's manifest used to install workspace-mcp from git+https://github.com/juliandickie/google_workspace_mcp.git@fork-extension. As of v0.3.0 it installs from PyPI -
- "args": [
- "--from",
- "git+https://github.com/juliandickie/google_workspace_mcp.git@fork-extension",
- "workspace-mcp",
+ "args": [
+ "workspace-mcp@1.20.4",
...
]This is possible because our markdown writer contribution (PR #727) and the QoL improvements that followed (PR #742) are now both shipped in upstream taylorwilsdon/google_workspace_mcp v1.20.4 on PyPI.
Why this matters
- Faster cold start - uvx pulls from PyPI cache instead of cloning a git branch
- Pinned to a known-good version - reproducible installs across machines and time
- No more fork dependency - users no longer need to trust a branch on a downstream fork; they're consuming the same upstream package the maintainer publishes
- Free upstream improvements - when taylor cuts v1.20.5, v1.21.0, etc., we test and bump the pin in plugin.json
Items addressed in upstream
The original deferred-items list from v0.2.1 has now been resolved -
| Item | Status |
|---|---|
| Auto-retry on transient HTTP 500s | ✅ in v1.20.3+ via PR #742 |
import_to_google_doc description rewording |
✅ in v1.20.3+ via PR #742 |
list_drive_items surfaces driveId |
✅ in v1.20.3+ via PR #742 |
| Configurable scope subset per install | ⏳ design discussion at upstream issue #771 |
Migration
If you have v0.2.x installed -
/plugin update scribe
Or full reinstall in fresh sessions -
/plugin uninstall scribe
/plugin install scribe
Existing OAuth tokens at ~/.workspace-mcp/credentials/*.json continue to work. The upstream tool surface is the post-PR-727 shape (the consolidated manage_doc_tab action tool with populate_from_markdown, create, rename, delete actions) which the v0.2.2 skills already match.
What v0.3.0 is NOT
This is not a feature release. The plugin's user-facing surface (skills, slash commands, install flow, multi-org docs) is identical to v0.2.2. The change is entirely behind-the-scenes plumbing.
Acknowledgements
Major thanks to @taylorwilsdon for the responsive review of PR #727, the elegant manage_doc_tab consolidation refactor during merge, and the same-week turnaround on the four QoL improvements via PR #742. This release exists because upstream is healthy and active.
License
MIT - see LICENSE.
Scribe v0.2.2
Full Changelog: v0.2.1...v0.2.2