This process is an MCP server for the Google Slides API. A host talks to it on stdio. The first start opens a browser. You paste a Desktop client id and client secret. Google consent follows. Later starts read the token store.
- Node.js 20 or later
- A Google Cloud project with the Google Slides API enabled
- An OAuth Desktop client id and client secret
You do not need a refresh token. You do not need process env.
- Create a Desktop OAuth client. Use the Google Auth platform steps below.
- In Claude Code run:
/plugin marketplace add matteoantoci/claude-plugins
/plugin install google-slides-mcp@matteoantoci-plugins
- Run
/reload-pluginsif Claude asks. - The first start opens a browser. Paste the client id and the client secret. Finish Google consent.
Later sessions read the token store. No host JSON. No env.
- Clone this repository.
- Run
npm install. - Run
npm run build. - Create a Desktop OAuth client in Google Cloud Console:
- Open Google Auth platform.
- If the page says the platform is not configured, click Get Started.
- App name:
Google Slides MCP. User support email: your address. - Audience: External.
- Contact email: your address. Agree to the policy. Click Create.
- Open Audience. Add your Gmail as a test user.
- Open Data Access. Add
https://www.googleapis.com/auth/presentationsandhttps://www.googleapis.com/auth/drive.readonly. Save. - Open Clients. Click Create Client. Application type: Desktop app. Name:
Google Slides MCP Desktop. Click Create. - Copy the client id and the client secret.
- Run
npm run start. Paste the client id and the client secret. Finish Google consent. Then stop the process. - Point the host at
node /path/to/google-slides-mcp/build/index.js. Do not set env.
Example host config:
"google-slides-mcp": {
"transportType": "stdio",
"command": "node",
"args": [
"/path/to/google-slides-mcp/build/index.js"
]
}Replace the path with the compiled build/index.js on your machine.
The process opens a loopback page.
- If the store has no client id or client secret, paste those two values.
- Continue to Google consent.
- Close the success page.
The process writes the Google credential to the token store. It tries the OS keychain first. It uses ~/.config/google-slides-mcp/credential.json if the keychain is not available. File mode is 0600.
Later starts use the store. No browser.
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_REFRESH_TOKEN can override one field. They are never required. If env supplies a missing field, the process writes the merged credential to the store.
npm run startThe process listens on stdio. Stderr prints Google Slides MCP server running and connected via stdio.
-
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 to retrieve.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: