Google Docs, Sheets, and Slides MCP server
2026년 11월 9일 커밋AI 클라이언트가 Google Docs, Sheets, Slides 및 Drive 댓글을 읽을 수 있게 하며, 옵션으로 파일 업로드를 위한 쓰기 모드를 지원합니다.
다른 이름 plexusone/mcp-google
- 스타
- 1
- Tools
- 62
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 9일
- 라이선스
- MIT
Google Docs, Sheets, and Slides MCP란?
Google Docs, Sheets, and Slides은(는) MCP server입니다. AI 클라이언트가 Google Docs, Sheets, Slides 및 Drive 댓글을 읽을 수 있게 하며, 옵션으로 파일 업로드를 위한 쓰기 모드를 지원합니다. 62개 도구를 제공합니다. 예: get_document_metadata, get_document_content, get_document_text.
프로젝트 README에서 생성된 요약
Google Docs, Sheets, and Slides MCP server 정보
이 서버는 AI 클라이언트를 통해 Google Docs, Sheets, Slides의 정보에 직접 접근할 수 있도록 지원합니다. 사용자는 구조화된 콘텐츠, 메타데이터, 발표자 메모를 가져오거나 Google Drive 파일 내의 댓글 및 수정 제안을 검토할 수 있습니다. 서버는 기본적으로 stdio를 통해 작동하지만, ID-JAG 인증을 사용하는 엔터프라이즈 환경을 위해 HTTP로도 서비스할 수 있습니다.
개발자는 Google Cloud 서비스 계정 JSON 파일을 제공하거나 omnitoken을 통해 1Password 또는 Bitwarden과 같은 자격 증명 관리자와 통합하여 이 서버를 사용할 수 있습니다. 서버는 기본적으로 읽기 전용 권한을 제공하지만, --enable-write 플래그로 쓰기 모드를 활성화하면 로컬 파일을 업로드하거나 기존 Drive 콘텐츠를 교체할 수 있습니다. 이 구현은 omniskill을 기반으로 구축되었으므로, 문서, 스프레드시트 및 프레젠테이션에 대한 특정 기능은 더 큰 멀티 서비스 MCP 서버로 모듈형 빌딩 블록처럼 가져올 수 있습니다.
활용 사례
- 1문서 구조 및 콘텐츠 분석AI가 특정 Google Doc에서 제목, 단락, 표를 가져와 내용을 요약할 수 있습니다.
- 2처리를 위한 스프레드시트 데이터 추출AI에게 Google Spreadsheet 내의 특정 범위 또는 전체 시트에서 셀 값을 가져오도록 지시할 수 있습니다.
- 3프레젠테이션 노트 및 슬라이드 검토개발자는 AI 클라이언트가 프레젠테이션의 모든 슬라이드와 발표자 메모를 읽어 브리핑을 준비하도록 할 수 있습니다.
- 4쓰기 모드에서 파일 업로드 관리쓰기 모드가 활성화되면 AI가 로컬 파일을 Google Drive에 업로드하고 이를 Docs 또는 Sheets로 변convert할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
Google Docs, Sheets, and Slides MCP 도구 62
README에서 감지됨get_document_metadataget_document_contentget_document_textget_document_paragraphsget_document_suggestionsget_file_commentsupload_fileupdate_fileget_spreadsheet_metadatalist_sheetsget_sheet_valuesget_sheet_data
| get_document_metadata | — | |
| get_document_content | — | |
| get_document_text | — | |
| get_document_paragraphs | — | |
| get_document_suggestions | — | |
| get_file_comments | — | |
| upload_file | — | |
| update_file | — | |
| get_spreadsheet_metadata | — | |
| list_sheets | — | |
| get_sheet_values | — | |
| get_sheet_data | — |
도구 62개 모두 보기도구 수 줄이기
get_multiple_rangesget_presentationlist_slidesget_slideget_slide_notesget_presentation_contentdocument_idtitlerevision_idword_countchar_countimage_counttable_countheader_countfooter_countinclude_imagesinclude_tablesinclude_headersinclude_footerssectionsimagestablesheadersfooterstextparagraphsspreadsheet_idlocaletime_zonesheet_counturlsheetsrangesheet_indexsheet_namevalue_formatvaluessheet_gidinclude_metadatametadatarangespresentation_idslide_countslidesslide_indexslide_object_idtext_contentelement_summarynotesinclude_notes
| get_multiple_ranges | — | |
| get_presentation | — | |
| list_slides | — | |
| get_slide | — | |
| get_slide_notes | — | |
| get_presentation_content | — | |
| document_id | — | |
| title | — | |
| revision_id | — | |
| word_count | — | |
| char_count | — | |
| image_count | — | |
| table_count | — | |
| header_count | — | |
| footer_count | — | |
| include_images | — | |
| include_tables | — | |
| include_headers | — | |
| include_footers | — | |
| sections | — | |
| images | — | |
| tables | — | |
| headers | — | |
| footers | — | |
| text | — | |
| paragraphs | — | |
| spreadsheet_id | — | |
| locale | — | |
| time_zone | — | |
| sheet_count | — | |
| url | — | |
| sheets | — | |
| range | — | |
| sheet_index | — | |
| sheet_name | — | |
| value_format | — | |
| values | — | |
| sheet_gid | — | |
| include_metadata | — | |
| metadata | — | |
| ranges | — | |
| presentation_id | — | |
| slide_count | — | |
| slides | — | |
| slide_index | — | |
| slide_object_id | — | |
| text_content | — | |
| element_summary | — | |
| notes | — | |
| include_notes | — |
구성
BW_ACCESS_TOKENBW_ORGANIZATION_IDGOAUTH_CREDENTIALS_ACCOUNTGOAUTH_CREDENTIALS_FILEGOOGLE_CREDENTIALS_FILEOMNITOKEN_CREDENTIALS_NAMEOMNITOKEN_VAULT_URIOP_SERVICE_ACCOUNT_TOKEN
| 이름 | 설명 | 유형 |
|---|---|---|
| BW_ACCESS_TOKEN | — | |
| BW_ORGANIZATION_ID | — | |
| GOAUTH_CREDENTIALS_ACCOUNT | — | |
| GOAUTH_CREDENTIALS_FILE | — | |
| GOOGLE_CREDENTIALS_FILE | — | |
| OMNITOKEN_CREDENTIALS_NAME | — | |
| OMNITOKEN_VAULT_URI | — | |
| OP_SERVICE_ACCOUNT_TOKEN | — |
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능plexusone/mcp-google is public and reachablegithub.com/plexusone/mcp-google ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-09github.com/plexusone/mcp-google ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음62 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기Google MCP Server
An MCP (Model Context Protocol) server for reading Google Docs, Sheets, and Slides, and the comments and suggested edits on them.
Features
Read-only access to Google Docs, Sheets, Slides, and Drive comments via MCP tools. Two upload tools exist only if you turn on write mode.
Google Docs Tools
- get_document_metadata - 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
- get_document_suggestions - Get text split into original, inserted, and deleted by suggested edits
Google Drive Tools
- get_file_comments - List a file's comments with quoted text, resolved state, and replies
- upload_file - Upload a local file, optionally converting it to a Doc, Sheet, or Slides file (write mode only)
- update_file - Replace a Drive file's content, keeping its ID (write mode only)
Write mode is off by default. Start the server with --enable-write (or MCP_GOOGLE_ENABLE_WRITE=true) to register the two upload tools; they read local files only from --upload-root. See Google Drive tools.
Google Sheets Tools
- get_spreadsheet_metadata - Get spreadsheet metadata (title, sheet count, locale, time zone)
- list_sheets - List all sheets with their properties
- get_sheet_values - Get cell values from a specific range
- get_sheet_data - Get all data from a specific sheet
- get_multiple_ranges - Batch get values from multiple ranges
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)
Architecture
This server is built on omniskill, making its Google Docs, Sheets, and Slides 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/plexusone/mcp-google/skills/docs"
"github.com/plexusone/mcp-google/skills/sheets"
"github.com/plexusone/mcp-google/skills/slides"
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
docsSkill := docs.New(googleHTTPClient)
docsSkill.Init(ctx)
rt.RegisterSkill(docsSkill)
sheetsSkill := sheets.New(googleHTTPClient)
sheetsSkill.Init(ctx)
rt.RegisterSkill(sheetsSkill)
slidesSkill := slides.New(googleHTTPClient)
slidesSkill.Init(ctx)
rt.RegisterSkill(slidesSkill)
// 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.26+
- Google Cloud service account with Docs, Sheets, and Slides API access
Installation
go install github.com/plexusone/mcp-google/cmd/mcp-google@latest
Or build from source:
git clone https://github.com/plexusone/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 Docs API, Google Sheets API, and Google Slides API
- Create a service account with no special roles
- Download the JSON credentials file
2. Share Documents with the Service Account
Share any documents, spreadsheets, or presentations 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/documents.readonly",
"https://www.googleapis.com/auth/spreadsheets.readonly",
"https://www.googleapis.com/auth/presentations.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
CLI Tool Commands
The CLI exposes one subcommand per MCP tool, plus serve and version.
mcp-google --help
mcp-google get-document-metadata <document-id-or-url> --credentials /path/to/service-account.json
mcp-google get-document-content <document-id-or-url> --include-metadata --include-images --include-tables -o pretty
mcp-google get-spreadsheet-metadata <spreadsheet-id-or-url> --credentials /path/to/service-account.json
mcp-google get-sheet-data <spreadsheet-id-or-url> --sheet-name "Sheet1" -o pretty
mcp-google get-presentation <presentation-id> --credentials /path/to/service-account.json
Use mcp-google <command> --help for command-specific flags. See docs/cli.md for the full CLI reference.
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.
HTTP Transport (ID-JAG Authorization)
By default mcp-google serves over stdio. It can also serve streamable HTTP as a pure OAuth resource server, verifying bearer tokens issued by an external authorization server (enterprise IdP / ID-JAG delegation-chain tokens):
mcp-google serve \
--http :8080 \
--idjag-issuer https://idp.example.com \
--idjag-audience https://mcp-google.example.com
Verified identity (subject, RFC 8693 act chain, scope) is audit-logged on every tool call, and calls are gated by scope (docs:read, sheets:read, slides:read, drive:read, and drive:write in write mode) when the token carries one. Each tool maps to exactly one required scope through an explicit per-tool table; when a scope claim is present, a tool without a mapping is denied. See docs/configuration/http-transport.md for the full flag/env reference.
Google Docs Tools
get_document_metadata
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
Google Sheets Tools
get_spreadsheet_metadata
Get metadata about a spreadsheet.
Input:
spreadsheet_id(required) - The ID or URL of the Google Sheets spreadsheet
Output:
spreadsheet_id- Spreadsheet IDtitle- Spreadsheet titlelocale- Spreadsheet localetime_zone- Spreadsheet time zonesheet_count- Number of sheetsurl- Spreadsheet URL
list_sheets
List all sheets in a spreadsheet with their properties.
Input:
spreadsheet_id(required) - The ID or URL of the Google Sheets spreadsheet
Output:
spreadsheet_id- Spreadsheet IDtitle- Spreadsheet titlesheets- Array of sheet information:index- Sheet indexsheet_id- Sheet GIDtitle- Sheet titlesheet_type- Sheet type (GRID, etc.)hidden- Whether sheet is hiddenrow_count- Number of rowscolumn_count- Number of columnsfrozen_row_count- Number of frozen rows (if any)frozen_column_count- Number of frozen columns (if any)
get_sheet_values
Get cell values from a specific range.
Input:
spreadsheet_id(required) - The ID or URL of the Google Sheets spreadsheetrange(required) - A1 notation range (e.g., 'Sheet1!A1:D10', 'A:D', 'A1:D10')sheet_index(optional) - Zero-based sheet index (used when range doesn't include sheet name)sheet_name(optional) - Sheet name (mutually exclusive with sheet_index)value_format(optional) - Output format: 'formatted' (default), 'typed', 'raw'
Output:
spreadsheet_id- Spreadsheet IDrange- Resolved rangevalues- 2D array of cell values (format depends on value_format)
get_sheet_data
Get all data from a specific sheet.
Input:
spreadsheet_id(required) - The ID or URL of the Google Sheets spreadsheetsheet_index(optional) - Zero-based sheet index (default: 0)sheet_name(optional) - Sheet name (mutually exclusive with sheet_index and sheet_gid)sheet_gid(optional) - Sheet GID from URL (mutually exclusive with sheet_index and sheet_name)value_format(optional) - Output format: 'formatted' (default), 'typed', 'raw'include_metadata(optional) - Include sheet metadata (default: false)
Output:
spreadsheet_id- Spreadsheet IDsheet_name- Sheet namerange- Data rangevalues- 2D array of cell valuesmetadata- Sheet metadata (if requested)
get_multiple_ranges
Batch get values from multiple ranges in a single request.
Input:
spreadsheet_id(required) - The ID or URL of the Google Sheets spreadsheetranges(required) - Array of A1 notation rangesvalue_format(optional) - Output format: 'formatted' (default), 'typed', 'raw'
Output:
spreadsheet_id- Spreadsheet IDranges- Array of range results, each containing:range- Resolved rangevalues- 2D array of cell values
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)
Finding Document IDs
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
Spreadsheets
The spreadsheet ID is in the URL when viewing a spreadsheet:
https://docs.google.com/spreadsheets/d/SPREADSHEET_ID_HERE/edit
Note: Google Sheets tools accept either the spreadsheet ID or the full URL. URLs may include sheet GID and range:
https://docs.google.com/spreadsheets/d/SPREADSHEET_ID_HERE/edit#gid=123&range=A1:D10
Presentations
The presentation ID is in the URL when viewing a presentation:
https://docs.google.com/presentation/d/PRESENTATION_ID_HERE/edit
License
MIT
Google Docs, Sheets, and Slides MCP 질문
Google Docs, Sheets, and Slides MCP는 어떤 도구를 제공하나요?
62개 도구를 제공합니다. 예: get_document_metadata, get_document_content, get_document_text, get_document_paragraphs, get_document_suggestions.
서버를 사용하려면 어떤 자격 증명이 필요한가요?
Docs, Sheets, Slides API에 접근 권한이 있는 Google Cloud 서비스 계정이 필요합니다.
서버에 문서를 어떻게 공유하나요?
특정 문서, 스프레드시트 또는 프레젠테이션을 서비스 계정의 이메일 주소로 공유해야 합니다.
서버는 기본적으로 읽기 전용인가요?
네, 쓰기 모드는 기본적으로 비활성화되어 있습니다.