
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
google-documents-mcp
Advanced tools
MCP server for Google Docs - read and edit documents.
Document Q&A: "What does the contract say about termination clauses?" → reads the doc and pulls out the relevant section.
Meeting-to-doc workflow: After a call, reads the Gemini transcript plus follow-up Slack discussion, then updates your team charter with the decisions made.
Release announcement: "Draft a blog post about the new feature based on the GitHub PRs and Slack discussions in #proj-awesome" → synthesizes technical changes into user-facing content.
Daily planning with persistent context: Your AI assistant reads a "planning log" doc at the start of each day, asks about yesterday's progress, helps you identify today's priority, then updates the doc with your plan. Context carries over across sessions - it remembers what you said you'd do and can follow up.
(These are just examples - any workflow that needs document reading or editing can use this. Use in combination with google-drive-mcp for finding files, deleting, comments, and sharing permissions.)
http://localhost:3000/callback to Authorized redirect URIsGOOGLE_CLIENT_ID='your-client-id' \
GOOGLE_CLIENT_SECRET='your-client-secret' \
MCP_TRANSPORT=http \
npm start
The server runs on http://localhost:3000 by default. Change with PORT=3001.
claude mcp add --transport http google-documents-mcp http://localhost:3000/mcp
This server acts as an OAuth proxy to Google:
graph LR
A[MCP client] <--> B[google-documents-mcp] <--> C[Google OAuth/API]
/.well-known/oauth-authorization-server/register returns the Google OAuth client credentials/authorize redirects to Google, encoding the client's callback URL in state/callback receives the code from Google and forwards to the client's callback/token proxies token requests to Google, injecting client credentials/mcp handles MCP requests, using the bearer token to call Google Docs APIThe server holds no tokens or state - it just proxies OAuth to Google.
| Tool | Description |
|---|---|
document_get_raw | Get full raw JSON structure (all tabs, formatting, headers, footers, styles) |
document_get_text | Get plain text content of all tabs |
document_create | Create a new blank document |
document_batch_update | Apply multiple edits atomically (insert, delete, format, etc.) |
document_append | Append text to end of document |
document_insert | Insert text at a specific index |
document_replace | Find and replace text |
The document_batch_update tool supports these operations:
insertText - Insert text at a locationdeleteContentRange - Delete a range of contentreplaceAllText - Find and replace all occurrencesinsertInlineImage - Insert an imageinsertTable - Create a tableinsertTableRow / insertTableColumn - Add rows/columns to tablesdeleteTableRow / deleteTableColumn - Remove rows/columns from tablesinsertPageBreak - Add a page breakcreateNamedRange / deleteNamedRange - Manage named rangescreateParagraphBullets / deleteParagraphBullets - Manage bullet listsdocuments - Full access to read and edit documentsPull requests are welcomed on GitHub! To get started:
npm installnpm run test to run testsnpm run buildVersions follow the semantic versioning spec.
To release:
npm version <major | minor | patch> to bump the versiongit push --follow-tags to push with tagsFAQs
MCP server for Google Docs - read and edit documents
We found that google-documents-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.