
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
@bohachu/google-slides-mcp
Advanced tools
MCP server for Google Slides integration with service account authentication
This project provides a Model Context Protocol (MCP) server for interacting with the Google Slides API. It allows you to create, read, modify, and manage Google Slides presentations programmatically through a secure service account authentication method.
Follow these step-by-step instructions to set up the Google Slides MCP server with Gemini CLI:
Create working directory
mkdir ~/coding_projects/working
Navigate to working directory
cd ~/coding_projects/working
Create keys directory for Google service account
mkdir -p ~/coding_projects/working/keys
Copy your Google service account key
google_service_account_key.json
file to the directory: ~/coding_projects/working/keys
google_service_account_key.json
Create .env file with Gemini API key
vi ~/coding_projects/working/.env
i
to enter insert modeGEMINI_API_KEY=your_actual_api_key_here
ESC
, then type :wq
and press Enter
to save and exitCreate MCP configuration directory
mkdir -p ~/coding_projects/working/.gemini
Configure MCP settings
vi ~/coding_projects/working/.gemini/settings.json
i
to enter insert mode{
"mcpServers": {
"google-slides-mcp": {
"command": "google-slides-mcp"
}
}
}
ESC
, then type :wq
and press Enter
to save and exitInstall the Google Slides MCP server globally
Remember to execute this command in your terminal first:
npm install -g @bohachu/google-slides-mcp
This installs the remote MCP server to your local machine globally, making it executable from any path.
Verify installation
gemini -y
You should now see that the Google Slides MCP server environment is installed and ready to use.
Once you've completed the initial setup, for subsequent use you only need:
export GOOGLE_API_KEY="YOUR_API_KEY"
Install the MCP server globally:
npm install -g @bohachu/google-slides-mcp
Then edit ~/.gemini/settings.json
to add the Google Slides MCP server:
{
"mcpServers": {
"google-slides-mcp": {
"command": "google-slides-mcp"
}
}
}
Note: The service account key file must be present at keys/google_service_account_key.json
relative to your working directory when using Gemini CLI.
google_service_account_key.json
and place it in a keys
directory in your current working directoryOnce configured, you can use the Google Slides tools directly in Gemini CLI. The MCP server will be automatically loaded when you start Gemini.
If you want to build from source or contribute to the project:
# Clone the repository
git clone https://github.com/bohachu/botrun-google-slides-mcp.git
cd botrun-google-slides-mcp
# Install dependencies
npm install
# Build the project
npm run build
Clone the repository (if applicable) or ensure you are in the project directory.
Install dependencies:
npm install
Build the Server: Compile the TypeScript code to JavaScript:
npm run build
This will create a build
directory containing the compiled JavaScript code.
Set up Authentication:
This project uses Google Service Account authentication for better security and easier deployment.
Obtain Google Service Account Credentials:
google_service_account_key.json
and place it in the keys
directory of this project.Grant Permissions (if needed):
client_email
)This project is based on the original work by Matteo Antoci: google-slides-mcp. The original project is licensed under GPL-3.0, and this modified version maintains the same license. We are grateful to Matteo Antoci and all contributors to the original project for creating this foundation.
move_presentation
tool for moving/copying presentations to Google Drive foldersget_slides
tool for paginated slide reading to handle large presentationsget_slide_preview
tool for visual preview/thumbnail generationduplicate_presentation
tool for creating complete presentation copiesget_slide_text_elements
tool for extracting all text elements with IDs and stylesreplace_text_by_element
tool for precise text replacement while preserving formattinganalyze_template_structure
tool for understanding presentation patterns and content mappingThis MCP server can also be used with other AI tools that support the Model Context Protocol:
Configuration file location:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
Configuration (after global installation):
{
"mcpServers": {
"google-slides-mcp": {
"command": "google-slides-mcp"
}
}
}
Note: First install globally with npm install -g @bohachu/google-slides-mcp
After editing the configuration:
Using CLI (after global installation):
# First install globally
npm install -g @bohachu/google-slides-mcp
# Add the server
claude mcp add google-slides google-slides-mcp
# For project-specific configuration
claude mcp add google-slides -s project google-slides-mcp
Direct configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json
(macOS){project}/.mcp.json
Configuration format:
{
"mcpServers": {
"google-slides-mcp": {
"command": "google-slides-mcp"
}
}
}
Configuration file location:
{project}/.cursor/mcp.json
Setup steps:
npm install -g @bohachu/google-slides-mcp
Ctrl+Shift+J
or Cmd+Shift+J
).cursor/mcp.json
:{
"mcpServers": {
"google-slides-mcp": {
"command": "google-slides-mcp"
}
}
}
npm install -g @bohachu/google-slides-mcp
keys/google_service_account_key.json
relative to the current working directoryC:/path/to/file
or C:\\path\\to\\file
)~/Library/Logs/Claude/mcp*.log
(macOS) or %APPDATA%\Claude\logs\mcp*.log
(Windows)Ctrl+Shift+U
) and select "MCP Logs" from dropdown--debug
flag for detailed loggingnode --version
)index.js
after running npm run build
Execute the compiled code:
npm run start
The 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.
The server exposes the following tools via the Model Context Protocol:
create_presentation
: Creates a new Google Slides presentation.
title
(string, required): The title for the new presentation.get_presentation
: Retrieves details about an existing presentation.
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.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.).
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 API batchUpdate
documentation for the structure of individual requests.writeControl
(object, optional): Controls write request execution (e.g., using revision IDs).get_page
: Retrieves details about a specific page (slide) within a presentation.
presentationId
(string, required): The ID of the presentation containing the page.pageObjectId
(string, required): The object ID of the page (slide) to retrieve.summarize_presentation
: Extracts and formats all text content from a presentation for easier summarization.
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.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)move_presentation
: Move or copy a presentation to a specific Google Drive folder.
presentationId
(string, required): The ID of the presentation to move.folderId
(string, required): The ID of the target Google Drive folder.copyInstead
(boolean, optional): If true, creates a copy in the target folder instead of moving. Defaults to false.newName
(string, optional): New name for the presentation (only used when copyInstead is true).success
: Boolean indicating if the operation was successfulmessage
: Description of what happenedpresentationUrl
: URL to access the presentationhttps://drive.google.com/drive/folders/[FOLDER_ID]
get_slides
: Get a range of slides from a presentation with pagination support.
presentationId
(string, required): The ID of the presentation.startIndex
(number, optional): The starting slide index (0-based, inclusive). Default: 0endIndex
(number, optional): The ending slide index (0-based, exclusive). Default: all slidespresentationId
: The ID of the presentationtitle
: The presentation titletotalSlides
: Total number of slides in the presentationrequestedRange
: Object showing the actual range returnedslides
: Array of slide objects for the requested rangeget_slide_preview
: Get a visual preview (thumbnail) of a specific slide.
presentationId
(string, required): The ID of the presentation.slideId
(string, required): The object ID of the slide to preview.mimeType
(string, optional): The MIME type of the thumbnail image. Options: 'PNG' or 'JPEG'. Default: 'PNG'presentationId
: The ID of the presentationslideId
: The ID of the slidemimeType
: The MIME type of the thumbnailcontentUrl
: Temporary URL to the thumbnail imagewidth
: Width of the thumbnail in pixelsheight
: Height of the thumbnail in pixelsnote
: Warning that the contentUrl expires quicklyduplicate_presentation
: Create a complete copy of an existing presentation.
presentationId
(string, required): The ID of the presentation to duplicate.newTitle
(string, required): The title for the new presentation copy.success
: Boolean indicating if the operation was successfuloriginalPresentationId
: The ID of the source presentationnewPresentationId
: The ID of the newly created copynewTitle
: The title of the new presentationslideCount
: Number of slides in the new presentationmessage
: Description of what happenedget_slide_text_elements
: Extract all text elements from a slide with complete context.
presentationId
(string, required): The ID of the presentation.slideId
(string, required): The object ID of the slide.includeStyles
(boolean, optional): Include text formatting information. Default: trueincludePosition
(boolean, optional): Include element position/layout info. Default: truepresentationId
: The ID of the presentationslideId
: The ID of the slideelementCount
: Number of text elements foundelements
: Array of text element objects containing:
elementId
: Unique ID of the elementshapeType
: Type of shape containing the texttext
: The actual text contentplaceholder
: Placeholder info if applicableposition
: X, Y, width, height in pixels (if requested)textStyle
: Font, size, color, bold, italic, etc. (if requested)paragraphStyle
: Alignment, spacing, indentation (if requested)replace_text_by_element
: Replace text in specific elements while preserving formatting.
presentationId
(string, required): The ID of the presentation.replacements
(array, required): Array of replacement operations:
elementId
(string, required): The object ID of the element containing textnewText
(string, required): The new text to insertpreserveStyle
(boolean, optional): Preserve original text style. Default: truepresentationId
: The ID of the presentationtotalReplacements
: Number of replacements requestedsuccessfulReplacements
: Number of successful replacementsreplacementDetails
: Array with details of each replacement operationanalyze_template_structure
: Analyze presentation structure to understand text elements and content patterns.
presentationId
(string, required): The ID of the presentation to analyze.slideIndices
(array, optional): Specific slide indices to analyze. If not provided, analyzes all slides.presentationId
: The ID of the presentationtotalSlides
: Total number of slidesanalyzedSlides
: Number of slides analyzedslides
: Array of slide analysis objects with:
slideIndex
: Position in presentationslideId
: Object ID of the slidelayout
: Layout type (TITLE_SLIDE, TITLE_AND_BODY, etc.)textElements
: Array of elements with role, placeholder status, and content suggestionsinsights
: Analysis summary including:
totalTextElements
: Total count across all slidesplaceholderElements
: Count of placeholder elementslayoutDistribution
: Distribution of layout typeselementRoleDistribution
: Distribution of text rolesrecommendedApproach
: Suggestion for content replacement strategy(More tools can be added by extending src/index.ts
)
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
Original work Copyright (C) 2025 Matteo Antoci
Modifications Copyright (C) 2025 Bowen Chiu
Contributions are welcome! Please feel free to submit a Pull Request.
google_service_account_key.json
file to version controlkeys/
directory should be added to .gitignore
FAQs
MCP server for Google Slides integration with service account authentication
The npm package @bohachu/google-slides-mcp receives a total of 2 weekly downloads. As such, @bohachu/google-slides-mcp popularity was classified as not popular.
We found that @bohachu/google-slides-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.