with one click
with one click
| 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
[HINT] Download the complete skill directory including SKILL.md and all related files