with one click
fill-sheet
Use the sheet-filler MCP server to safely auto-fill tabular data.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Use the sheet-filler MCP server to safely auto-fill tabular data.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | fill-sheet |
| description | Use the sheet-filler MCP server to safely auto-fill tabular data. |
The sheet-filler server manages objects (rows) with fields (columns). It prevents overwriting existing values, making it safe for incremental data collection.
If not authenticated, use the device code flow:
# 1. Check status
filler_google_auth({ action: "status" })
→ { status: "Not authenticated. Use start_auth to begin authentication." }
# 2. Start auth
filler_google_auth({ action: "start_auth" })
→ { verification_url: "https://www.google.com/device", user_code: "ABCD-EFGH", device_code: "xyz123", instructions: "Visit ... and enter code: ABCD-EFGH" }
# 3. Tell user to visit URL and enter code, wait for confirmation
# 4. Complete auth
filler_google_auth({ action: "complete_auth", device_code: "xyz123" })
→ { status: "Authenticated to Google Sheets" }
If the spreadsheet doesn't have data and fields tabs yet, create them:
filler_init()
→ { success: true, fieldsTab: "fields", dataTab: "data", keyField: "name" }
This creates both tabs with their header rows. Errors if either tab already exists.
To work with a different Google Sheet:
filler_use_sheet_id({ sheet_id: "1ABC...xyz" })
# or with full URL:
filler_use_sheet_id({ sheet_id: "https://docs.google.com/spreadsheets/d/1ABC...xyz/edit" })
First, get the field definitions to understand what data to collect: filler_list_fields().
Fields with auto: true are candidates for auto-filling. Each field has:
name - field identifiertype - validation type (string, number, date, url, email, json, enum:...)instructions - how to collect this valueexample - example valueTwo options for retrieving objects:
Option A: Get the next object with missing fields
filler_get_next_missing_fields_objects({ limit: 1 })
Returns objects with missing auto fields (default limit 1). If found: false, all objects are complete.
Pass skip_filled_fields: true to omit already-filled values from object.values, reducing response size for sheets with many columns.
Option B: Get specific objects by name
filler_get_objects_by_name({ names: ["Acme Corp"] })
Returns objects with their missing auto fields. Useful when you know which objects to work on.
Option A returns { found, objects, count, remain }. Option B returns { objects: [{ found, object, missing }] }. Both provide object data and fields that need filling.
For each missing field, follow the instructions to collect the value. Ensure values match the field type:
| Type | Format |
|---|---|
string | Any text |
number | Numeric value |
date | YYYY-MM-DD |
datetime | ISO-8601 |
url | Full URL with protocol |
email | Valid email address |
json | Valid JSON string |
enum:a|b|c | One of the listed values |
Save collected values (won't overwrite existing data):
filler_save_objects_no_overwrite({
objects: [{
name: "Acme Corp",
values: {
"website": "https://acme.com",
"founded": "1990"
}
}]
})
Check the result for each field:
saved - value was storedskipped_already_set - field already has a value (not overwritten)rejected_unknown_field - field not in schemarejected_invalid_type - value failed type validationContinue with step 2 until no missing auto fields remain.
filler_add_fields({
fields: [{
name: "revenue",
description: "Annual revenue",
type: "number",
auto: true,
instructions: "Find the company's annual revenue in USD",
example: "1000000"
}]
})
filler_add_objects_by_name({ names: ["New Company"] })
# 1. Check schema
filler_list_fields()
→ fields: [name, website (auto), email (auto), founded]
# 2. Get object
filler_get_next_missing_fields_objects({ limit: 1 })
→ { found: true, objects: [{ object: { name: "Acme Corp" }, missing: [{ name: "website", type: "url", instructions: "Find official website" }] }], count: 1, remain: 0 }
# 2b. Or get a specific object
filler_get_objects_by_name({ names: ["Acme Corp"] })
→ { objects: [{ found: true, object: { name: "Acme Corp" }, missing: [{ name: "website", ... }] }] }
# 3. Collect and save
filler_save_objects_no_overwrite({ objects: [{ name: "Acme Corp", values: { website: "https://acme.com" } }] })
→ result: { website: "saved" }
## Key Rules
1. **Never guess values** - only save data you have verified
2. **Check field types** - ensure values match the expected format before saving
3. **Trust the no-overwrite** - the server protects existing data, but don't rely on this as a crutch
4. **Follow instructions** - each field's `instructions` describe how to collect that specific value
5. **Handle rejections** - if a value is rejected, check the type and fix accordingly