A Model Context Protocol (MCP) server for Google Sheets API integration. Enables reading, writing, and managing Google Sheets documents directly from your MCP client (e.g., Claude Desktop).
- Node.js v18 or higher
- Google Cloud Project with Sheets API enabled
- Service Account with JSON key file
# Clone the repository
git clone https://github.com/freema/mcp-gsheets.git
# Or using SSH
# git clone [email protected]:freema/mcp-gsheets.git
cd mcp-gsheets
# Install dependencies
npm install
# Build the project
npm run build
- Go to Google Cloud Console
- Create a new project or select existing
- Enable Google Sheets API:
- Navigate to "APIs & Services" β "Library"
- Search for "Google Sheets API" and click "Enable"
- Create Service Account:
- Go to "APIs & Services" β "Credentials"
- Click "Create Credentials" β "Service Account"
- Download the JSON key file
- Share your spreadsheets:
- Open your Google Sheet
- Click Share and add the service account email (from JSON file)
- Grant "Editor" permissions
Run the interactive setup script:
npm run setup
This will:
- Guide you through the configuration
- Automatically detect your Node.js installation (including nvm)
- Find your Claude Desktop config
- Create the proper JSON configuration
- Optionally create a .env file for development
If you prefer manual configuration, add to your Claude Desktop config:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- Linux:
~/.config/claude/claude_desktop_config.json
{
"mcpServers": {
"mcp-gsheets": {
"command": "node",
"args": ["/absolute/path/to/mcp-gsheets/dist/index.js"],
"env": {
"GOOGLE_PROJECT_ID": "your-project-id",
"GOOGLE_APPLICATION_CREDENTIALS": "/absolute/path/to/service-account-key.json"
}
}
}
}
Restart Claude Desktop after adding the configuration.
# Development mode with hot reload
npm run dev
# Build for production
npm run build
# Type checking
npm run typecheck
# Clean build artifacts
npm run clean
# Run MCP inspector for debugging
npm run inspector
# Run MCP inspector in development mode
npm run inspector:dev
If you have Task installed:
# Install dependencies
task install
# Build the project
task build
# Run in development mode
task dev
# Run linter
task lint
# Format code
task fmt
# Run all checks
task check
- Create
.env
file for testing:
cp .env.example .env
# Edit .env with your credentials:
# GOOGLE_PROJECT_ID=your-project-id
# GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
# TEST_SPREADSHEET_ID=your-test-spreadsheet-id
- Run in development mode:
npm run dev # Watch mode with auto-reload
sheets_get_values
- Read from a rangesheets_batch_get_values
- Read from multiple rangessheets_get_metadata
- Get spreadsheet infosheets_check_access
- Check access permissions
sheets_update_values
- Write to a rangesheets_batch_update_values
- Write to multiple rangessheets_append_values
- Append rows to a tablesheets_clear_values
- Clear cell contents
sheets_insert_sheet
- Add new sheetsheets_delete_sheet
- Remove sheetsheets_duplicate_sheet
- Copy sheetsheets_copy_to
- Copy to another spreadsheetsheets_update_sheet_properties
- Update sheet settings
sheets_format_cells
- Format cells (colors, fonts, alignment, number formats)sheets_update_borders
- Add or modify cell borderssheets_merge_cells
- Merge cells togethersheets_unmerge_cells
- Unmerge previously merged cellssheets_add_conditional_formatting
- Add conditional formatting rules
# Run ESLint
npm run lint
# Fix auto-fixable issues
npm run lint:fix
# Check formatting with Prettier
npm run format:check
# Format code
npm run format
# Run TypeScript type checking
npm run typecheck
"Authentication failed"
- Verify JSON key path is absolute and correct
- Check GOOGLE_PROJECT_ID matches your project
- Ensure Sheets API is enabled
"Permission denied"
- Share spreadsheet with service account email
- Service account needs "Editor" role
- Check email in JSON file (client_email field)
"Spreadsheet not found"
- Verify spreadsheet ID from URL
- Format:
https://docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/edit
MCP Connection Issues
- Ensure you're using the built version (
dist/index.js
) - Check that Node.js path is correct in Claude Desktop config
- Look for errors in Claude Desktop logs
- Use
npm run inspector
to debug
From the URL:
https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
β This is the spreadsheet ID
Use sheets_get_metadata
to list all sheets with their IDs.
- Always test with a copy of your data
- Use batch operations for better performance
- Set appropriate permissions (read-only vs edit)
- Check rate limits for large operations
- Use
sheets_check_access
to verify permissions before operations
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Run tests and linting (
npm run check
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.