Connect Claude Desktop, Cursor, or any MCP client to your Google Docs, Google Sheets, and Google Drive.
- Go to the Google Cloud Console
- Create or select a project
- Enable the Google Docs API, Google Sheets API, and Google Drive API
- Configure the OAuth consent screen (External, add your email as a test user)
- Create an OAuth client ID (Desktop app type)
- Copy the Client ID and Client Secret from the confirmation screen
Need more detail? See step-by-step instructions at the bottom of this page.
GOOGLE_CLIENT_ID="your-client-id" \
GOOGLE_CLIENT_SECRET="your-client-secret" \
npx -y google-docs-mcp authThis opens your browser for Google authorization. After you approve, the refresh token is saved to ~/.config/google-docs-mcp/token.json.
Claude Desktop / Cursor / Windsurf:
{
"mcpServers": {
"google-docs": {
"command": "npx",
"args": ["-y", "google-docs-mcp"],
"env": {
"GOOGLE_CLIENT_ID": "your-client-id",
"GOOGLE_CLIENT_SECRET": "your-client-secret"
}
}
}
}The server starts automatically when your MCP client needs it.
| Tool | Description |
|---|---|
readDocument |
Read content as plain text, JSON, or markdown |
appendText |
Append text to a document |
insertText |
Insert text at a specific position |
deleteRange |
Remove content by index range |
listDocumentTabs |
List all tabs in a multi-tab document |
replaceDocumentWithMarkdown |
Replace entire document content from markdown |
appendMarkdownToGoogleDoc |
Append markdown-formatted content |
applyTextStyle |
Bold, italic, colors, font size, links |
applyParagraphStyle |
Alignment, spacing, indentation |
insertTable |
Create tables |
insertPageBreak |
Insert page breaks |
insertImage |
Insert images from URLs or local files |
| Tool | Description |
|---|---|
listComments |
View all comments with author and date |
getComment |
Get a specific comment with replies |
addComment |
Create a comment anchored to text |
replyToComment |
Reply to an existing comment |
resolveComment |
Mark a comment as resolved |
deleteComment |
Remove a comment |
| Tool | Description |
|---|---|
readSpreadsheet |
Read data from a range (A1 notation) |
writeSpreadsheet |
Write data to a range |
appendSpreadsheetRows |
Add rows to a sheet |
clearSpreadsheetRange |
Clear cell values |
createSpreadsheet |
Create a new spreadsheet |
addSpreadsheetSheet |
Add a sheet/tab |
getSpreadsheetInfo |
Get metadata and sheet list |
listGoogleSheets |
Find spreadsheets |
formatCells |
Bold, colors, alignment on cell ranges |
freezeRowsAndColumns |
Pin header rows/columns |
setDropdownValidation |
Add/remove dropdown lists on cells |
| Tool | Description |
|---|---|
listDocuments |
List documents, optionally filtered by date |
searchGoogleDocs |
Search by name or content |
getDocumentInfo |
Get document metadata |
createDocument |
Create a new document |
createFromTemplate |
Create from an existing template |
createFolder |
Create a folder |
listFolderContents |
List folder contents |
getFolderInfo |
Get folder metadata |
moveFile |
Move a file to another folder |
copyFile |
Duplicate a file |
renameFile |
Rename a file |
deleteFile |
Move to trash or permanently delete |
"Read document ABC123 as markdown"
"Append 'Meeting notes for today' to document ABC123"
"Make the text 'Important' bold and red in document ABC123"
"Replace the entire document with this markdown: # Title\n\nNew content here"
"Insert a 3x4 table at index 50 in document ABC123"
"Read range A1:D10 from spreadsheet XYZ789"
"Write [[Name, Score], [Alice, 95], [Bob, 87]] to range A1 in spreadsheet XYZ789"
"Create a new spreadsheet titled 'Q1 Report'"
"Format row 1 as bold with a light blue background in spreadsheet XYZ789"
"Freeze the first row in spreadsheet XYZ789"
"Add a dropdown with options [Open, In Progress, Done] to range C2:C100"
"List my 10 most recent Google Docs"
"Search for documents containing 'project proposal'"
"Create a folder called 'Meeting Notes' and move document ABC123 into it"
The server supports a full round-trip markdown workflow:
- Read a document as markdown:
readDocumentwithformat='markdown' - Edit the markdown locally
- Push changes back:
replaceDocumentWithMarkdown
Supported: headings, bold, italic, strikethrough, links, bullet/numbered lists, horizontal rules.
Pass your Google Cloud OAuth client credentials as environment variables:
| Variable | Description |
|---|---|
GOOGLE_CLIENT_ID |
OAuth client ID from Google Cloud Console |
GOOGLE_CLIENT_SECRET |
OAuth client secret from Google Cloud Console |
For Google Workspace with domain-wide delegation:
| Variable | Description |
|---|---|
SERVICE_ACCOUNT_PATH |
Path to the service account JSON key file |
GOOGLE_IMPERSONATE_USER |
Email of the user to impersonate (optional) |
{
"mcpServers": {
"google-docs": {
"command": "npx",
"args": ["-y", "google-docs-mcp"],
"env": {
"SERVICE_ACCOUNT_PATH": "/path/to/service-account-key.json",
"GOOGLE_IMPERSONATE_USER": "user@yourdomain.com"
}
}
}
}OAuth refresh tokens are stored in ~/.config/google-docs-mcp/token.json (respects XDG_CONFIG_HOME). To re-authorize, run the auth command again or delete the token file.
- Comment anchoring: Programmatically created comments appear in the comment list but aren't visibly anchored to text in the Google Docs UI. This is a Google Drive API limitation.
- Comment resolution: Resolved status may not persist in the Google Docs UI.
- Converted documents: Docs converted from Word may not support all API operations.
- Markdown tables/images: Not yet supported in the markdown-to-Docs conversion.
- Deeply nested lists: Lists with 3+ nesting levels may have formatting quirks.
- Server won't start:
- Verify
GOOGLE_CLIENT_IDandGOOGLE_CLIENT_SECRETare set in theenvblock of your MCP config. - Try running manually:
npx google-docs-mcpand check stderr for errors.
- Verify
- Authorization errors:
- Ensure Docs, Sheets, and Drive APIs are enabled in Google Cloud Console.
- Confirm your email is listed as a Test User on the OAuth consent screen.
- Re-authorize:
npx google-docs-mcp auth - Delete
~/.config/google-docs-mcp/token.jsonand re-authorize if upgrading.
- Tab errors:
- Use
listDocumentTabsto see available tab IDs. - Omit
tabIdfor single-tab documents.
- Use
Step-by-step Google Cloud Console instructions
- Go to Google Cloud Console: Open console.cloud.google.com
- Create or Select a Project: Click the project dropdown > "NEW PROJECT". Name it (e.g., "MCP Docs Server") and click "CREATE".
- Enable APIs:
- Navigate to "APIs & Services" > "Library"
- Search for and enable: Google Docs API, Google Sheets API, Google Drive API
- Configure OAuth Consent Screen:
- Go to "APIs & Services" > "OAuth consent screen"
- Choose "External" and click "CREATE"
- Fill in: App name, User support email, Developer contact email
- Click "SAVE AND CONTINUE"
- Add scopes:
documents,spreadsheets,drive - Click "SAVE AND CONTINUE"
- Add your Google email as a Test User
- Click "SAVE AND CONTINUE"
- Create Credentials:
- Go to "APIs & Services" > "Credentials"
- Click "+ CREATE CREDENTIALS" > "OAuth client ID"
- Application type: "Desktop app"
- Click "CREATE"
- Copy the Client ID and Client Secret
Contributions are welcome! See CONTRIBUTING.md for development setup, architecture overview, and guidelines.
MIT -- see LICENSE for details.
