README
¶
Google MCP Server
An MCP (Model Context Protocol) server for reading Google Slides presentations and Google Docs documents.
Features
Read-only access to Google Slides and Google Docs via MCP tools.
Google Slides Tools
- get_presentation - Get presentation metadata (title, slide count, locale, revision ID)
- list_slides - List all slides with titles and element counts
- get_slide - Get slide content and element details by index or object ID
- get_slide_notes - Get speaker notes by slide index or object ID
- get_presentation_content - Get all slides' text and images in one call (ideal for AI)
Google Docs Tools
- get_document - Get document metadata (title, word count, element counts)
- get_document_content - Get structured content (headings, paragraphs, images, tables)
- get_document_text - Get all text as a single plain text string
- get_document_paragraphs - Get text organized by paragraphs
Architecture
This server is built on omniskill, making its Google Slides and Docs skills composable building blocks that can be reused in multi-service MCP servers.
Composable Skills
The skills in this repository can be imported and combined with other skills:
import (
"github.com/grokify/mcp-google/skills/slides"
"github.com/grokify/mcp-google/skills/docs"
runtime "github.com/plexusone/omniskill/mcp/server"
)
// Create runtime
rt := runtime.New(&mcp.Implementation{
Name: "work-mcp-server",
Version: "v1.0.0",
}, nil)
// Add Google skills
slidesSkill := slides.New(googleHTTPClient)
slidesSkill.Init(ctx)
rt.RegisterSkill(slidesSkill)
docsSkill := docs.New(googleHTTPClient)
docsSkill.Init(ctx)
rt.RegisterSkill(docsSkill)
// Add other skills (Slack, Jira, GitHub, etc.)
rt.RegisterSkill(slackSkill)
rt.RegisterSkill(jiraSkill)
// Run server
rt.ServeStdio(ctx)
This enables building unified MCP servers that combine multiple services while keeping each service's implementation modular and maintainable.
Requirements
- Go 1.24+
- Google Cloud service account with Slides and Docs API access
Installation
go install github.com/grokify/mcp-google/cmd/mcp-google@latest
Or build from source:
git clone https://github.com/grokify/mcp-google.git
cd mcp-google
go build ./cmd/mcp-google
Setup
1. Create a Google Cloud Service Account
- Go to the Google Cloud Console
- Create a new project or select an existing one
- Enable the Google Slides API and Google Docs API
- Create a service account with no special roles
- Download the JSON credentials file
2. Share Documents with the Service Account
Share any presentations or documents you want to access with the service account's email address (found in the credentials JSON as client_email).
Usage
Option 1: Google Service Account Credentials
Use a standard Google Cloud service account JSON file:
mcp-google --credentials /path/to/service-account.json
Or using an environment variable:
export GOOGLE_CREDENTIALS_FILE=/path/to/service-account.json
mcp-google
Option 2: goauth CredentialsSet
Use a goauth CredentialsSet file, which can store multiple credentials:
mcp-google --goauth-credentials-file /path/to/credentials.json --goauth-credentials-account myaccount
Or using environment variables:
export GOAUTH_CREDENTIALS_FILE=/path/to/credentials.json
export GOAUTH_CREDENTIALS_ACCOUNT=myaccount
mcp-google
The CredentialsSet entry should be of type gcpsa with appropriate scopes:
{
"credentials": {
"myaccount": {
"type": "gcpsa",
"gcpsa": {
"gcpCredentials": {
"type": "service_account",
"project_id": "...",
"private_key_id": "...",
"private_key": "...",
"client_email": "...",
"client_id": "..."
},
"scopes": [
"https://www.googleapis.com/auth/presentations.readonly",
"https://www.googleapis.com/auth/documents.readonly",
"https://www.googleapis.com/auth/drive.readonly"
]
}
}
}
}
Option 3: Vault-Backed Credentials
Use omnitoken with omnivault-desktop for secure credential storage in password managers.
Supported vault providers:
| Provider | URI Pattern | Requirements |
|---|---|---|
| 1Password | op://vault |
OP_SERVICE_ACCOUNT_TOKEN env var |
| Bitwarden | bw://org-id |
BW_ACCESS_TOKEN and BW_ORGANIZATION_ID env vars |
| File | file:///path |
None |
| Env | env://PREFIX_ |
None |
1Password Example
export OP_SERVICE_ACCOUNT_TOKEN="ops_..."
mcp-google --vault op://MyVault --credentials-name google
Bitwarden Example
export BW_ACCESS_TOKEN="..."
export BW_ORGANIZATION_ID="..."
mcp-google --vault bw://org-id --credentials-name google
File Vault Example
mcp-google --vault file:///path/to/secrets --credentials-name google
Claude Desktop Configuration
Add to your Claude Desktop configuration (claude_desktop_config.json):
With Google Service Account
{
"mcpServers": {
"google": {
"command": "/path/to/mcp-google",
"env": {
"GOOGLE_CREDENTIALS_FILE": "/path/to/service-account.json"
}
}
}
}
With goauth CredentialsSet
{
"mcpServers": {
"google": {
"command": "/path/to/mcp-google",
"env": {
"GOAUTH_CREDENTIALS_FILE": "/path/to/credentials.json",
"GOAUTH_CREDENTIALS_ACCOUNT": "myaccount"
}
}
}
}
With 1Password
{
"mcpServers": {
"google": {
"command": "/path/to/mcp-google",
"env": {
"OP_SERVICE_ACCOUNT_TOKEN": "ops_...",
"OMNITOKEN_VAULT_URI": "op://MyVault",
"OMNITOKEN_CREDENTIALS_NAME": "google"
}
}
}
}
See docs/configuration/claude-desktop.md for more options including Bitwarden.
Google Slides Tools
get_presentation
Get metadata about a presentation.
Input:
presentation_id(required) - The ID of the Google Slides presentation
Output:
title- Presentation titleslide_count- Number of slideslocale- Presentation localerevision_id- Current revision ID
list_slides
List all slides in a presentation.
Input:
presentation_id(required) - The ID of the Google Slides presentation
Output:
slides- Array of slide information:object_id- Slide's unique identifierindex- Zero-based slide indextitle- Slide title (if present)element_count- Number of elements on the slide
get_slide
Get the content of a specific slide.
Input:
presentation_id(required) - The ID of the Google Slides presentationslide_index(optional) - Zero-based slide indexslide_object_id(optional) - Slide's object ID
One of slide_index or slide_object_id must be provided.
Output:
text_content- Array of text strings from the slideelement_summary- Array of element details:object_id- Element's unique identifierelement_type- Type of element (shape, image, table, etc.)description- Element description or text preview
get_slide_notes
Get the speaker notes for a specific slide.
Input:
presentation_id(required) - The ID of the Google Slides presentationslide_index(optional) - Zero-based slide indexslide_object_id(optional) - Slide's object ID
One of slide_index or slide_object_id must be provided.
Output:
notes- Speaker notes text
get_presentation_content
Get all slide content in a single call - ideal for AI analysis of the entire presentation.
Input:
presentation_id(required) - The ID of the Google Slides presentationinclude_notes(optional) - Include speaker notes for each slide (default: false)
Output:
title- Presentation titleslides- Array of slide content:index- Zero-based slide indexobject_id- Slide's unique identifiertitle- Slide title (if present)text_content- Array of text strings from the slideimages- Array of images:object_id- Image element IDcontent_url- Direct URL to image (valid ~30 minutes)source_url- Original source URL (if available)alt_text- Image description
notes- Speaker notes (ifinclude_notesis true)
Google Docs Tools
get_document
Get metadata about a document.
Input:
document_id(required) - The ID or URL of the Google Doc
Output:
title- Document titledocument_id- Document IDrevision_id- Current revision IDword_count- Approximate word countchar_count- Character countimage_count- Number of imagestable_count- Number of tablesheader_count- Number of headersfooter_count- Number of footers
get_document_content
Get the full structured content of a document.
Input:
document_id(required) - The ID or URL of the Google Docinclude_images(optional) - Include image information (default: false)include_tables(optional) - Include table content (default: false)include_headers(optional) - Include document headers (default: false)include_footers(optional) - Include document footers (default: false)
Output:
title- Document titlesections- Array of content sections:type- Section type ("heading", "paragraph")level- Heading level (1-6, for headings only)text- Section text contentstyle_id- Style identifier (e.g., "HEADING_1", "NORMAL_TEXT")
images- Array of images (if requested):object_id- Image element IDcontent_uri- Direct URL to imagesource_uri- Original source URLtitle- Image titledescription- Image description
tables- Array of tables (if requested):rows- Number of rowscolumns- Number of columnscells- 2D array of cell text content
headers- Array of header text (if requested)footers- Array of footer text (if requested)
get_document_text
Get all text from a document as a single plain text string.
Input:
document_id(required) - The ID or URL of the Google Doc
Output:
title- Document titletext- Full document text
get_document_paragraphs
Get text organized by paragraphs.
Input:
document_id(required) - The ID or URL of the Google Doc
Output:
title- Document titleparagraphs- Array of paragraph text strings
Finding Document IDs
Presentations
The presentation ID is in the URL when viewing a presentation:
https://docs.google.com/presentation/d/PRESENTATION_ID_HERE/edit
Documents
The document ID is in the URL when viewing a document:
https://docs.google.com/document/d/DOCUMENT_ID_HERE/edit
Note: Google Docs tools accept either the document ID or the full URL, including URLs with query strings and anchors:
https://docs.google.com/document/d/DOCUMENT_ID_HERE/edit?tab=t.0#heading=h.xyz
License
MIT
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
mcp-google
command
mcp-google is an MCP server for reading Google Slides and Docs.
|
mcp-google is an MCP server for reading Google Slides and Docs. |
|
internal
|
|
|
auth
Package auth provides authentication for Google APIs via omnitoken.
|
Package auth provides authentication for Google APIs via omnitoken. |
|
skills
|
|
|
docs
Package docs provides an omniskill Skill for reading Google Docs documents.
|
Package docs provides an omniskill Skill for reading Google Docs documents. |
|
slides
Package slides provides an omniskill Skill for reading Google Slides presentations.
|
Package slides provides an omniskill Skill for reading Google Slides presentations. |