whichguy/gas_mcp
If you are the rightful owner of gas_mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The MCP Google Apps Script Server is a robust server designed to integrate AI assistants with Google Apps Script, enabling seamless project management and execution.
gas_auth
Manage OAuth 2.0 authentication.
gas_project_create
Create new Google Apps Script projects.
gas_write
Write content to files within a project.
gas_run
Execute JavaScript code dynamically in the GAS environment.
gas_deploy_create
Create deployments for web apps and APIs.
MCP Google Apps Script Server
A powerful Model Context Protocol server for seamless Google Apps Script integration
Features โข Quick Start โข Installation โข Usage โข API Reference โข Contributing
๐ Table of Contents
- Overview
- Features
- Prerequisites
- Installation
- Quick Start
- Usage
- API Reference
- Configuration
- Examples
- Development
- Testing
- Troubleshooting
- Contributing
- Security
- License
- Support
๐ฏ Overview
The MCP Google Apps Script Server bridges the gap between AI assistants and Google Apps Script, enabling seamless creation, execution, and management of Google Apps Script projects directly from your development environment. Built with TypeScript and following the Model Context Protocol specification, it provides a robust, type-safe interface for Google Apps Script operations.
Key Benefits
- ๐ Direct Code Execution: Run JavaScript/Apps Script code instantly without manual deployment
- ๐ Full Project Management: Create, edit, organize, and deploy complete GAS projects
- ๐ Secure OAuth Integration: Industry-standard PKCE OAuth 2.0 flow with Google
- ๐ Real-time Synchronization: Live sync between local development and Google Apps Script
- ๐ ๏ธ Developer-Friendly: Comprehensive error handling, logging, and debugging tools
- ๐ฑ Drive Integration: Seamless binding with Google Sheets, Docs, Forms, and Sites
โจ Features
๐ง Core Functionality
- Project Management: Create, list, delete, and manage GAS projects
- Smart File Operations: Read, write, copy, move, and organize files with automatic module wrapper
- Dynamic Code Execution: Execute JavaScript code directly in GAS environment with
require()
support - Deployment Management: Create, update, and manage web app and API deployments
- Version Control: Create and manage project versions with detailed metadata
- Module System: Automatic
require()
wrapper for seamless inter-module dependencies
๐ Integration Capabilities
- Google Drive: Find and bind scripts to Sheets, Docs, Forms, and Sites
- OAuth 2.0: Secure authentication with PKCE flow
- MCP Protocol: Standards-compliant Model Context Protocol implementation
- TypeScript: Full type safety and IntelliSense support
๐ Monitoring & Analytics
- Execution Metrics: Track script performance and usage statistics
- Process Monitoring: View execution history and debug failed runs
- Error Reporting: Comprehensive error tracking and diagnostics
๐ Prerequisites
Before getting started, ensure you have:
- Node.js v18.0.0 or higher (Download)
- npm v8.0.0 or higher (comes with Node.js)
- Google Account with access to Google Cloud Console
- Cursor IDE or another MCP-compatible client
- Google Cloud Project with Apps Script API enabled
๐ฏ Recommended Tools
For optimal development experience, use these preferred tools that provide automatic module wrapper functionality:
โ Smart File Operations
gas_write
: Automatically wraps JavaScript code with_main()
function forrequire()
systemgas_cat
: Intelligent local/remote file reading with project contextgas_run
: Code execution with current project context
โ ๏ธ Advanced Tools (Use with Caution)
gas_raw_write
: Direct file writing (clobbers files, no module wrapper)gas_raw_cat
: Direct file reading (no local caching)gas_raw_run
: Direct code execution (requires explicit script ID)
๐ Key Advantage: Smart tools automatically wrap your JavaScript code with the proper _main()
function signature, enabling seamless require()
functionality across your modules without manual wrapper management.
๐ Installation
1. Clone and Install
# Clone the repository
git clone https://github.com/whichguy/mcp_gas.git
cd mcp_gas
# Install dependencies
npm install
# Build the project
npm run build
2. OAuth Configuration
Create Google OAuth credentials:
- Visit Google Cloud Console
- Create a new project or select existing one
- Enable the Google Apps Script API
- Go to Credentials โ Create Credentials โ OAuth client ID
- Choose Desktop Application
- Download the JSON file
Configure the server:
# Copy your OAuth credentials
cp path/to/your/credentials.json oauth-config.json
3. Verify Installation
# Run validation script
./validate-setup.sh
# Start the server
npm start
๐ Quick Start
Basic Workflow
// 1. Authenticate with Google
await gas_auth({ mode: "start" });
// 2. Create a new project
const project = await gas_project_create({
title: "My First Calculator"
});
// 3. Add source code
await gas_write({
path: `${project.scriptId}/calculator`,
content: `
function add(a, b) {
return a + b;
}
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
`
});
// 4. Execute code directly
const result = await gas_run({
scriptId: project.scriptId,
js_statement: "add(5, 3)"
});
console.log(result); // 8
// 5. Run complex calculations
const fibResult = await gas_run({
scriptId: project.scriptId,
js_statement: "fibonacci(10)"
});
console.log(fibResult); // 55
Integration with Cursor IDE
Add to your Cursor configuration:
{
"mcpServers": {
"mcp-gas": {
"command": "node",
"args": ["/path/to/mcp_gas/dist/src/index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}
โ๏ธ Configuration
The MCP Gas Server uses a single unified configuration file: mcp-gas-config.json
Unified Configuration Structure
{
"oauth": {
"client_id": "your-oauth-client-id.apps.googleusercontent.com",
"type": "uwp",
"redirect_uris": ["http://127.0.0.1/*", "http://localhost/*"],
"scopes": ["https://www.googleapis.com/auth/script.projects", "..."]
},
"projects": {
"my-project": {
"scriptId": "1ABC...XYZ",
"name": "my-project",
"description": "My project description"
}
},
"environments": {
"dev": { "scriptId": "1ABC...XYZ", "name": "my-project" }
},
"localRoot": {
"rootPath": "/Users/you/src/mcp_gas/gas-projects",
"lastUpdated": "2025-06-29T16:47:43.135Z"
},
"server": {
"defaultWorkingDir": "/Users/you/src/mcp_gas",
"configVersion": "1.0.0",
"lastModified": "2025-06-29T16:47:43.135Z"
}
}
Starting the Server
# Using npm (recommended)
npm start
# Direct invocation
node dist/src/index.js --config ./mcp-gas-config.json
# Custom config location
node dist/src/index.js --config /path/to/custom-config.json
Cursor IDE Integration
Update your Cursor configuration to include the config file:
{
"mcpServers": {
"mcp-gas": {
"command": "node",
"args": [
"/Users/you/src/mcp_gas/dist/src/index.js",
"--config",
"/Users/you/src/mcp_gas/mcp-gas-config.json"
],
"env": {
"NODE_ENV": "production"
}
}
}
}
๐ง All 43 Available Tools
๐ Tool Usage Guide
Tool Type | When to Use | Examples |
---|---|---|
โ RECOMMENDED | Normal development workflow | gas_write , gas_cat , gas_run |
๐ EXPLICIT | Multi-environment, troubleshooting | gas_pull , gas_push , gas_status |
โ ๏ธ ADVANCED | Power users, explicit control | gas_raw_write , gas_raw_cat , gas_raw_copy , gas_raw_run |
โ RECOMMENDED TOOLS (Normal Workflow)
Authentication (1 tool)
Tool | Description | Key Parameters |
---|---|---|
gas_auth | OAuth 2.0 authentication | mode , openBrowser? |
๐ Smart Filesystem Operations (6 tools)
Auto-sync: Automatically handles local/remote synchronization
Tool | Description | Key Parameters |
---|---|---|
gas_ls | List projects/files | path? , detailed? |
gas_cat | โ Smart reader (local-first, remote fallback) | path |
gas_write | โ Auto-sync writer (local + remote) | path (projectId/filename), content |
gas_rm | Delete files | path |
gas_mv | Move/rename files | from , to |
gas_cp | Copy files | from , to |
โ ๏ธ Advanced Filesystem Operations (3 tools)
Raw access: Direct remote operations with explicit project IDs
Tool | Description | Key Parameters |
---|---|---|
gas_raw_cat | Read files with explicit project ID | path (full projectId/filename) |
gas_raw_write | โ ๏ธ Write files with explicit project ID (CLOBBERS remote files - use gas_write for safe merging) | path , content |
gas_raw_copy | Copy files between projects | from , to |
๐ Smart Execution (1 tool)
Current project: Uses project context automatically
Tool | Description | Key Parameters |
---|---|---|
gas_run | โ Execute with current project | js_statement |
โ ๏ธ Advanced Execution (1 tool)
Raw execution: Direct execution with explicit project IDs
Tool | Description | Key Parameters |
---|---|---|
gas_raw_run | Execute with explicit project ID | scriptId , js_statement |
๐ฏ Project Workflow (1 tool)
Main workflow: Set project and start development
Tool | Description | Key Parameters |
---|---|---|
gas_project_set | โ Set project & auto-pull files | project |
๐ EXPLICIT TOOLS (Multi-Environment)
Project Management (4 tools)
Tool | Description | Key Parameters |
---|---|---|
gas_mkdir | Create logical directories | projectId , directoryPath |
gas_info | Get project information | projectId , includeContent? |
gas_reorder | Change file execution order | projectId , fileName , newPosition |
gas_project_metrics | Get project analytics | scriptId , metricsGranularity? |
Local Sync & Project Context (4 tools)
Tool | Description | Key Parameters |
---|---|---|
gas_project_set | Set current project & cache files | project? , workingDir? |
gas_pull | Pull remote files to local src | project? , force? |
gas_push | Push local files to remote | project? , dryRun? |
gas_status | Compare local vs remote files | project? , detailed? |
Execution Tools (2 tools)
Tool | Description | Key Parameters |
---|---|---|
gas_run_api_exec | Execute via API | scriptId , functionName , parameters? |
gas_proxy_setup | Setup HTTP proxy | scriptId , deploy? |
Deployment Management (7 tools)
Tool | Description | Key Parameters |
---|---|---|
gas_version_create | Create project version | scriptId , description? |
gas_deploy_create | Create deployment | scriptId , entryPointType , versionNumber? |
gas_deploy_list | List deployments | scriptId |
gas_deploy_get_details | Get deployment info | scriptId , deploymentId |
gas_deploy_delete | Delete deployment | scriptId , deploymentId |
gas_deploy_update | Update deployment | scriptId , deploymentId |
gas_project_create | Create new project | title , parentId? |
Version Management (2 tools)
Tool | Description | Key Parameters |
---|---|---|
gas_version_get | Get version details | scriptId , versionNumber |
gas_version_list | List all versions | scriptId , pageSize? |
Process Management (2 tools)
Tool | Description | Key Parameters |
---|---|---|
gas_process_list | List user processes | pageSize? , userProcessFilter? |
gas_process_list_script | List script processes | scriptId , scriptProcessFilter? |
Drive Integration (3 tools)
Tool | Description | Key Parameters |
---|---|---|
gas_find_drive_script | Find container scripts | fileName |
gas_bind_script | Bind script to container | containerName , scriptName |
gas_create_script | Create container script | containerName , scriptName? |
Local Root Management (4 tools)
Tool | Description | Key Parameters |
---|---|---|
gas_local_set_root | Set local root directory | rootPath , workingDir? |
gas_local_get_root | Get current local root | workingDir? |
gas_local_list_projects | List local projects | detailed? , workingDir? |
gas_local_show_structure | Show directory structure | depth? , workingDir? |
Trigger Management (3 tools)
Tool | Description | Key Parameters |
---|---|---|
gas_trigger_list | List installable triggers | scriptId , detailed? |
gas_trigger_create | Create new trigger | scriptId , functionName , triggerType |
gas_trigger_delete | Delete trigger | scriptId , triggerId? , functionName? |
For complete API documentation, see and .
๐ Usage
Authentication
// Check current authentication status
await gas_auth({ mode: "status" });
// Start OAuth flow (opens browser)
await gas_auth({ mode: "start" });
// Logout and clear credentials
await gas_auth({ mode: "logout" });
Project Operations
// Create a new project
const project = await gas_project_create({
title: "Data Analytics Suite",
parentId: "optional_drive_folder_id"
});
// List all accessible projects
const projects = await gas_ls({ path: "" });
// Get detailed project information
const info = await gas_info({
projectId: project.scriptId,
includeContent: true
});
File Management
// Write a new file
await gas_write({
path: `${scriptId}/utils/helpers`,
content: `
function formatDate(date) {
return new Date(date).toISOString().split('T')[0];
}
function validateEmail(email) {
const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return re.test(email);
}
`,
position: 0 // Execute first
});
// Read file contents
const content = await gas_cat({
path: `${scriptId}/utils/helpers`
});
// Copy file to new location
await gas_cp({
from: `${scriptId}/utils/helpers`,
to: `${scriptId}/shared/utilities`
});
// Move/rename file
await gas_mv({
from: `${scriptId}/shared/utilities`,
to: `${scriptId}/lib/common`
});
Code Execution
// Execute simple expressions
await gas_run({
scriptId: scriptId,
js_statement: "Math.PI * 2"
});
// Call custom functions
await gas_run({
scriptId: scriptId,
js_statement: "formatDate(new Date())"
});
// Access Google Services
await gas_run({
scriptId: scriptId,
js_statement: "DriveApp.getRootFolder().getName()"
});
// Execute complex operations
await gas_run({
scriptId: scriptId,
js_statement: `
const sheet = SpreadsheetApp.create('Analytics Data');
const id = sheet.getId();
sheet.getActiveSheet().getRange('A1').setValue('Hello World');
return id;
`
});
Deployment Management
// Create a version (required for deployment)
const version = await gas_version_create({
scriptId: scriptId,
description: "Initial release with analytics functions"
});
// Deploy as web app
const deployment = await gas_deploy_create({
scriptId: scriptId,
entryPointType: "WEB_APP",
webAppAccess: "ANYONE",
webAppExecuteAs: "USER_ACCESSING",
versionNumber: version.versionNumber
});
// Deploy as API executable
const apiDeployment = await gas_deploy_create({
scriptId: scriptId,
entryPointType: "EXECUTION_API",
accessLevel: "ANYONE",
versionNumber: version.versionNumber
});
// Execute via API (requires deployment)
const apiResult = await gas_run_api_exec({
scriptId: scriptId,
functionName: "formatDate",
parameters: [new Date()]
});
๐ API Reference
Authentication Tools
Tool | Description | Parameters |
---|---|---|
gas_auth | Manage OAuth authentication | mode : "start" | "status" | "logout" |
Project Management Tools
Tool | Description | Key Parameters |
---|---|---|
gas_project_create | Create new GAS project | title , parentId? |
gas_ls | List projects and files | path , detailed? , recursive? |
gas_info | Get project details | projectId , includeContent? |
File Operation Tools
Tool | Description | Key Parameters |
---|---|---|
gas_write | Write file content | path , content , position? |
gas_cat | Read file content | path |
gas_mv | Move/rename files | from , to |
gas_cp | Copy files | from , to |
gas_rm | Delete files | path |
Execution Tools
Tool | Description | Key Parameters |
---|---|---|
gas_run | Execute JavaScript dynamically | scriptId , js_statement |
gas_run_api_exec | Execute via API | scriptId , functionName , parameters? |
Deployment Tools
Tool | Description | Key Parameters |
---|---|---|
gas_version_create | Create project version | scriptId , description? |
gas_deploy_create | Create deployment | scriptId , entryPointType , versionNumber? |
gas_deploy_list | List deployments | scriptId |
gas_deploy_get_details | Get deployment info | scriptId , deploymentId |
For complete API documentation, see .
โ๏ธ Configuration
OAuth Configuration
The oauth-config.json
file contains your Google OAuth credentials:
{
"client_id": "your-client-id.apps.googleusercontent.com",
"client_secret": "your-client-secret",
"redirect_uris": ["http://localhost:3000/oauth/callback"],
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token"
}
Environment Variables
# Optional: Override OAuth client ID
export GOOGLE_OAUTH_CLIENT_ID="your-client-id"
# Optional: Set custom OAuth port
export OAUTH_PORT="3000"
# Optional: Enable debug logging
export DEBUG="mcp:*"
# Optional: Set custom timeout
export REQUEST_TIMEOUT="30000"
MCP Server Configuration
For Cursor IDE integration:
{
"mcpServers": {
"mcp-gas": {
"command": "node",
"args": ["/absolute/path/to/mcp_gas/dist/src/index.js"],
"env": {
"NODE_ENV": "production",
"DEBUG": "mcp:error"
}
}
}
}
๐ก Examples
Example 1: Spreadsheet Analytics
// Create analytics project
const project = await gas_project_create({
title: "Spreadsheet Analytics"
});
// Add analytics functions
await gas_write({
path: `${project.scriptId}/analytics`,
content: `
function analyzeSheet(sheetId) {
const sheet = SpreadsheetApp.openById(sheetId);
const data = sheet.getActiveSheet().getDataRange().getValues();
return {
rows: data.length,
columns: data[0]?.length || 0,
lastUpdate: sheet.getLastUpdate().toISOString()
};
}
function generateReport(sheetIds) {
return sheetIds.map(id => ({
sheetId: id,
analysis: analyzeSheet(id)
}));
}
`
});
// Execute analytics
const report = await gas_run({
scriptId: project.scriptId,
js_statement: `generateReport(["sheet_id_1", "sheet_id_2"])`
});
Example 2: Gmail Automation
// Create email automation project
const emailProject = await gas_project_create({
title: "Email Automation Suite"
});
// Add email functions
await gas_write({
path: `${emailProject.scriptId}/email`,
content: `
function sendWelcomeEmail(recipient, name) {
const subject = "Welcome to Our Platform!";
const body = \`
Hello \${name},
Welcome to our platform! We're excited to have you on board.
Best regards,
The Team
\`;
GmailApp.sendEmail(recipient, subject, body);
return \`Email sent to \${recipient}\`;
}
function getUnreadCount() {
return GmailApp.getInboxUnreadCount();
}
`
});
// Send welcome email
await gas_run({
scriptId: emailProject.scriptId,
js_statement: `sendWelcomeEmail("user@example.com", "John Doe")`
});
// Check unread emails
const unreadCount = await gas_run({
scriptId: emailProject.scriptId,
js_statement: "getUnreadCount()"
});
Example 3: Drive Integration
// Find existing spreadsheet and bind script
const driveFiles = await gas_find_drive_script({
fileName: "Sales Data"
});
if (driveFiles.containers.length > 0) {
// Bind script to spreadsheet
const binding = await gas_bind_script({
containerName: "Sales Data",
scriptName: "Data Processor"
});
// Add functions to bound script
await gas_write({
path: `${binding.scriptId}/processor`,
content: `
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Data Tools')
.addItem('Process Data', 'processCurrentSheet')
.addToUi();
}
function processCurrentSheet() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
// Process data logic here
Browser.msgBox('Data processed successfully!');
}
`
});
}
More examples available in the directory.
๐ ๏ธ Development
Project Structure
mcp_gas/
โโโ src/ # TypeScript source code
โ โโโ tools/ # MCP tool implementations
โ โ โโโ auth.ts # Authentication tools
โ โ โโโ execution.ts # Code execution tools
โ โ โโโ filesystem.ts # File operation tools
โ โ โโโ project.ts # Project management tools
โ โโโ auth/ # OAuth authentication
โ โโโ api/ # Google Apps Script API client
โ โโโ server/ # MCP server implementation
โ โโโ index.ts # Main server entry point
โโโ test/ # Comprehensive test suite
โโโ docs/ # Documentation
โโโ examples/ # Usage examples
โโโ gas-projects/ # Local project templates
Development Commands
# Development workflow
npm run dev # Watch mode compilation
npm run build # Production build
npm run clean # Clean build artifacts
# Code quality
npm run lint # Run ESLint
npm run lint:fix # Fix linting issues
# Testing
npm test # Run core tests
npm run test:unit # Unit tests only
npm run test:system # System integration tests
npm run test:workflow # End-to-end workflow tests
npm run test:all # Run all test suites
Adding New Tools
- Create tool implementation in
src/tools/
- Extend the base tool class
- Add comprehensive TypeScript types
- Write unit tests in
test/tools/
- Update API documentation
Example tool structure:
import { BaseTool } from './base.js';
export class MyNewTool extends BaseTool {
public name = "my_new_tool";
public description = "Description of what this tool does";
public inputSchema = {
type: "object" as const,
properties: {
parameter1: {
type: "string",
description: "Parameter description"
}
},
required: ["parameter1"]
};
async execute(args: any): Promise<any> {
// Implementation here
}
}
๐งช Testing
Test Categories
- Unit Tests: Individual function and class testing
- System Tests: MCP protocol and authentication testing
- Integration Tests: End-to-end workflow testing with real Google APIs
- Security Tests: OAuth flow and permission validation
Running Tests
# Quick validation
npm test
# Comprehensive testing
npm run test:all
# Integration tests (requires OAuth setup)
npm run test:workflow
# Specific test suites
npm run test:unit # Unit tests only
npm run test:system # System tests only
npm run test:gas-run # Execution engine tests
Test Configuration
For integration tests, set up environment:
# Enable integration testing
export GAS_INTEGRATION_TEST=true
# Optional: Use custom OAuth credentials
export GOOGLE_OAUTH_CLIENT_ID="test-client-id"
๐ง Troubleshooting
Common Issues
Authentication Problems
Issue: "OAuth client was not found" or "invalid_client"
# Solution: Check OAuth configuration
cat oauth-config.json # Verify credentials exist
./validate-setup.sh # Run comprehensive validation
Issue: Browser doesn't open during authentication
# Solution: Check browser setup
export BROWSER=chrome # Set preferred browser
npm start # Restart server
Connection Issues
Issue: MCP server not connecting in Cursor
# Check Cursor configuration
# Ensure absolute paths in mcpServers config
# Restart Cursor IDE after configuration changes
Issue: Server startup failures
# Validate Node.js version
node --version # Should be โฅ18.0.0
# Rebuild project
npm run clean && npm install && npm run build
Execution Problems
Issue: gas_run
timeouts or hangs
# Check Google Apps Script quota limits
# Verify project permissions
# Try simpler code execution first
Issue: File operation failures
# Check project permissions
# Verify file paths (no extensions needed)
# Ensure authentication is valid
Debug Mode
Enable comprehensive logging:
# Enable all debug output
export DEBUG=mcp:*
npm start
# Enable specific debug categories
export DEBUG=mcp:auth,mcp:execution
npm start
Validation Script
Run the comprehensive setup validator:
./validate-setup.sh
This script checks:
- โ Node.js and npm versions
- โ Project dependencies
- โ OAuth configuration
- โ Build process
- โ Server startup
- โ MCP protocol compliance
Getting Help
- Check Documentation: Review directory
- Search Issues: Look for similar problems in project issues
- Enable Debug Mode: Use
DEBUG=mcp:*
for detailed logs - Run Validation: Execute
./validate-setup.sh
- Check Examples: Review for working patterns
๐ค Contributing
We welcome contributions! Please see our for details.
Quick Start for Contributors
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Make your changes
- Add tests for new functionality
- Run the test suite:
npm run test:all
- Commit your changes:
git commit -am 'Add amazing feature'
- Push to your branch:
git push origin feature/amazing-feature
- Open a Pull Request
Development Guidelines
- Code Style: Follow TypeScript best practices
- Testing: Maintain >90% test coverage
- Documentation: Update README and docs for new features
- Backwards Compatibility: Don't break existing APIs without major version bump
Areas for Contribution
- ๐ Performance Optimization: Improve execution speed and memory usage
- ๐ Documentation: Enhance guides, examples, and API docs
- ๐งช Testing: Add more comprehensive test coverage
- ๐ Integration: Add support for more Google services
- ๐ ๏ธ Tools: Create new MCP tools for additional functionality
๐ Security
Security Best Practices
- OAuth Credentials: Never commit
oauth-config.json
to version control - Environment Variables: Use environment variables for sensitive configuration
- Scope Limitation: Request only necessary OAuth scopes
- Token Storage: Credentials are stored securely using OS keychain
- Regular Updates: Keep dependencies updated for security patches
Security Features
- PKCE OAuth Flow: Proof Key for Code Exchange for enhanced security
- State Parameter Validation: CSRF protection during OAuth flow
- Token Expiry Handling: Automatic token refresh with clock skew protection
- Secure Token Storage: OS-level credential storage
- Input Validation: Comprehensive validation of all inputs
Reporting Security Issues
If you discover a security vulnerability, please:
- DO NOT open a public issue
- Email security concerns to []
- Include detailed description and reproduction steps
- Allow time for investigation and resolution
๐ License
This project is licensed under the MIT License - see the file for details.
MIT License
Copyright (c) 2024 MCP Gas Server Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
๐ Support
Documentation
- ๐ - Organized documentation hub
- ๐ - Complete API documentation
- ๐ง - Technical documentation for developers
- ๐ ๏ธ - Schema design for AI assistants
Community
- ๐ฌ Discussions - Ask questions and share ideas
- ๐ Issues - Report bugs and request features
- ๐ง - Direct support for critical issues
Resources
- ๐ Model Context Protocol - MCP specification
- ๐ฑ Google Apps Script - Official GAS documentation
- ๐ Google OAuth 2.0 - OAuth implementation guide
Made with โค๏ธ by the MCP Gas Server team
โญ Star this repo โข ๐ Report a bug โข ๐ก Request a feature