@jrg/mcp-google-slides
v0.1.5
Published
MCP server for Google Slides integration
Downloads
381
Readme
Google Slides MCP Server
This project provides a Model Context Protocol (MCP) server for interacting with the Google Slides API. It allows you to create, read, and modify Google Slides presentations programmatically.
Prerequisites
- Node.js (v18 or later recommended)
- npm (usually comes with Node.js)
- Google Cloud Project with the Google Slides API enabled.
- OAuth 2.0 Credentials downloaded from Google Cloud Console (stored in
~/.gmail-mcp/gcp-oauth.keys.json).
Setup
Clone the repository (if applicable) or ensure you are in the project directory.
Install dependencies:
npm installBuild the Server: Compile the TypeScript code to JavaScript:
npm run buildThis will create a
builddirectory containing the compiled JavaScript code.Obtain and Configure Google API Credentials:
This server uses file-based authentication stored in
~/.gmail-mcp/directory (same as Gmail MCP Server for credential reuse).Step A: Download OAuth 2.0 Credentials
- Go to the Google Cloud Console.
- Create a new project or select an existing one.
- Navigate to "APIs & Services" > "Enabled APIs & services".
- Click "+ ENABLE APIS AND SERVICES", search for "Google Slides API", and enable it.
- Navigate to "APIs & Services" > "Credentials".
- Click "+ CREATE CREDENTIALS" > "OAuth client ID".
- If prompted, configure the OAuth consent screen. For "User type", choose "External" unless you have a Google Workspace account and want to restrict it internally. Provide an app name, user support email, and developer contact information.
- On the "Scopes" page during consent screen setup, click "ADD OR REMOVE SCOPES". Search for and add the following scopes:
https://www.googleapis.com/auth/presentations(To view and manage your presentations)https://www.googleapis.com/auth/drive.readonly(To access Drive files)https://www.googleapis.com/auth/gmail.modify(Optional: if you want to reuse credentials with Gmail MCP)https://www.googleapis.com/auth/gmail.settings.basic(Optional: if you want to reuse credentials with Gmail MCP)
- Save the consent screen configuration.
- Go back to "Credentials", click "+ CREATE CREDENTIALS" > "OAuth client ID".
- Select "Desktop app" as the Application type.
- Give it a name (e.g., "Google MCP Client").
- Click "Create", then click "DOWNLOAD JSON" to download your OAuth client credentials.
Step B: Place Credentials File
- The downloaded JSON file should be renamed to
gcp-oauth.keys.json - Place it in one of these locations:
~/.gmail-mcp/gcp-oauth.keys.json(recommended - shared with Gmail MCP)- OR in the current working directory (it will be automatically copied to
~/.gmail-mcp/)
Step C: Authenticate (First Time Only)
- The first time you run the server, it will detect that you don't have credentials and will automatically:
- Open your browser to the Google OAuth consent page
- Ask you to sign in and grant permissions
- Save the tokens to
~/.gmail-mcp/credentials.json
- After this one-time setup, the server will automatically refresh tokens as needed.
Reusing Credentials with Gmail MCP: If you already have Gmail MCP Server configured, you can reuse the same credentials! Just ensure both APIs have the required scopes. The credentials in
~/.gmail-mcp/will work for both servers.Add to Claude Code:
Option A: Using Claude Code CLI (Recommended)
Add the server to Claude Code using the
claude mcp addcommand:claude mcp add google-slides-mcp npx -y @jrg/mcp-google-slidesTo verify it was added:
claude mcp listOption B: Manual Configuration
Locate your MCP settings file. Find or create the entry for
"google-slides-mcp":"google-slides-mcp": { "transportType": "stdio", "command": "npx", "args": [ "-y", "@jrg/mcp-google-slides" ] }
Running the Server
Execute the compiled code:
npm run startThe server will start and listen for MCP requests on standard input/output (stdio). You should see a message like: Google Slides MCP server running and connected via stdio.
Available Tools
The server exposes the following tools via the Model Context Protocol:
create_presentation: Creates a new Google Slides presentation.- Input:
title(string, required): The title for the new presentation.
- Output: JSON object representing the created presentation details.
- Input:
get_presentation: Retrieves details about an existing presentation.- Input:
presentationId(string, required): The ID of the presentation to retrieve.fields(string, optional): A field mask (e.g., "slides,pageSize") to limit the returned data.
- Output: JSON object representing the presentation details.
- Input:
batch_update_presentation: Applies a series of updates to a presentation. This is the primary method for modifying slides (adding text, shapes, images, creating slides, etc.).- Input:
presentationId(string, required): The ID of the presentation to update.requests(array, required): An array of request objects defining the updates. Refer to the Google Slides APIbatchUpdatedocumentation for the structure of individual requests.writeControl(object, optional): Controls write request execution (e.g., using revision IDs).
- Output: JSON object representing the result of the batch update.
- Input:
get_page: Retrieves details about a specific page (slide) within a presentation.- Input:
presentationId(string, required): The ID of the presentation containing the page.pageObjectId(string, required): The object ID of the page (slide) to retrieve.
- Output: JSON object representing the page details.
- Input:
summarize_presentation: Extracts and formats all text content from a presentation for easier summarization.- Input:
presentationId(string, required): The ID of the presentation to summarize.include_notes(boolean, optional): Whether to include speaker notes in the summary. Defaults to false.
- Output: JSON object containing:
title: The presentation's titleslideCount: Total number of slideslastModified: Revision informationslides: Array of slide objects containing:slideNumber: Position in presentationslideId: Object ID of the slidecontent: All text extracted from the slidenotes: Speaker notes (if requested and available)
- Input:
(More tools can be added by extending src/index.ts)
