appsheet-mcp-server
v1.0.1
Published
Open-source MCP server for Google AppSheet — CRUD, schema discovery, and automation tools
Maintainers
Readme
AppSheet MCP Server
Open-source MCP server for Google AppSheet — enabling AI assistants (Claude, Gemini, Cursor, etc.) to interact with your AppSheet apps via the Model Context Protocol.
Features
- 🔍 CRUD Operations — Find, add, update, delete rows in any AppSheet table
- 📋 Schema Discovery — List apps, tables, and column structure
- ⚡ Custom Actions — Trigger AppSheet actions and automation bots
- 🏢 Multi-App Support — Configure multiple apps with a single server
- 🔒 Secure — API keys stay local, never exposed to AI models
- 🚀 Zero Config — Works with just 2 environment variables
Prerequisites
- Node.js 18+
- AppSheet Core plan or higher (API access requires a paid plan)
- AppSheet API Key — generated in AppSheet Editor → Settings → Integrations
Quick Start
1. Get Your API Key
- Open your AppSheet app in the editor
- Go to Settings → Integrations → IN: from cloud services
- Enable the API and copy the Application Access Key
- Note your App ID from the URL:
https://www.appsheet.com/template/AppDef?appName=YOUR_APP_ID
2. Configure
Option A: Environment Variables (Single App)
export APPSHEET_APP_ID="your-app-id"
export APPSHEET_API_KEY="V2-your-api-key"
export APPSHEET_REGION="global" # or "eu" or "apac"
export APPSHEET_TABLES="Customers,Orders,Products" # optionalOption B: Config File (Multiple Apps)
Create ~/.appsheet-mcp.json:
{
"apps": {
"crm": {
"appId": "abc-123-def-456",
"apiKey": "V2-xxxxx-xxxxx",
"region": "global",
"tables": ["Customers", "Contacts", "Deals"]
},
"inventory": {
"appId": "ghi-789-jkl-012",
"apiKey": "V2-yyyyy-yyyyy",
"region": "eu",
"tables": ["Products", "Warehouses", "Orders"]
}
}
}3. Connect to Your AI Assistant
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"appsheet": {
"command": "npx",
"args": ["-y", "appsheet-mcp-server"],
"env": {
"APPSHEET_APP_ID": "your-app-id",
"APPSHEET_API_KEY": "V2-your-api-key",
"APPSHEET_REGION": "global"
}
}
}
}Cursor
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"appsheet": {
"command": "npx",
"args": ["-y", "appsheet-mcp-server"],
"env": {
"APPSHEET_APP_ID": "your-app-id",
"APPSHEET_API_KEY": "V2-your-api-key"
}
}
}
}VS Code
Add to your VS Code settings or .vscode/mcp.json:
{
"mcpServers": {
"appsheet": {
"command": "npx",
"args": ["-y", "appsheet-mcp-server"],
"env": {
"APPSHEET_APP_ID": "your-app-id",
"APPSHEET_API_KEY": "V2-your-api-key"
}
}
}
}Tools
Data Operations (CRUD)
| Tool | Description |
|------|-------------|
| appsheet_find_rows | Query/search rows with optional filter expression |
| appsheet_add_rows | Add one or more rows to a table |
| appsheet_update_rows | Update existing rows by key column |
| appsheet_delete_rows | Delete rows by key column values |
Schema Discovery
| Tool | Description |
|------|-------------|
| appsheet_list_apps | List all configured apps |
| appsheet_list_tables | List tables in an app |
| appsheet_describe_table | Discover column names and types from sample data |
Automation
| Tool | Description |
|------|-------------|
| appsheet_run_action | Execute a custom AppSheet action |
| appsheet_run_workflow | Trigger an AppSheet automation/bot |
Utility
| Tool | Description |
|------|-------------|
| appsheet_get_app_info | Get app configuration summary (without API key) |
Usage Examples
Once connected, ask your AI assistant:
"Show me all customers from the Customers table"
"Add a new order with customer 'Acme Corp', product 'Widget', quantity 50"
"Update the status of order #123 to 'Shipped'"
"What tables are available in my CRM app?"
"Describe the structure of the Products table"
"Run the 'Send Invoice' action on order #456"
Filter Expressions
The appsheet_find_rows tool supports AppSheet filter expressions:
# Find active customers
selector: [Status] = "Active"
# Find orders over $1000
selector: [Total] > 1000
# Find by date range
selector: AND([Date] >= "2024-01-01", [Date] <= "2024-12-31")
# Find by name (contains)
selector: CONTAINS([Name], "Smith")See AppSheet expression documentation for full syntax.
Environment Variables
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| APPSHEET_APP_ID | Yes* | — | Your AppSheet app ID |
| APPSHEET_API_KEY | Yes* | — | Your AppSheet API key |
| APPSHEET_REGION | No | global | API region: global, eu, apac |
| APPSHEET_TABLES | No | — | Comma-separated table names |
| APPSHEET_CONFIG_PATH | No | ~/.appsheet-mcp.json | Path to multi-app config file |
| APPSHEET_DEBUG | No | false | Enable debug logging |
*Required unless using a config file.
Debugging
Enable debug logging to see API calls:
export APPSHEET_DEBUG=trueDebug output goes to stderr (not stdout, which is reserved for MCP protocol).
Regions
| Region | Base URL | Use for |
|--------|----------|---------|
| global | www.appsheet.com | Default, most apps |
| eu | eu.appsheet.com | EU data residency |
| apac | asia-southeast.appsheet.com | Asia-Pacific |
Troubleshooting
"AppSheet API error (403)"
- Verify your API key is correct
- Ensure API access is enabled in AppSheet Settings → Integrations
- Check that your AppSheet plan supports API access (Core or higher)
"AppSheet API error (404)"
- Verify the table name matches exactly (case-sensitive)
- Check the app ID is correct
"No AppSheet configuration found"
- Set
APPSHEET_APP_IDandAPPSHEET_API_KEYenvironment variables - Or create a config file at
~/.appsheet-mcp.json
Contributing
Contributions welcome! Please open an issue or PR on GitHub.
License
MIT © Islom Ilkhom / Antigravity
