| Crates.io | tiller-sync |
| lib.rs | tiller-sync |
| version | 0.2.1 |
| created_at | 2026-01-10 01:57:31.788446+00 |
| updated_at | 2026-01-25 07:58:45.412713+00 |
| description | A tool for downloading, uploading and manipulating Tiller Google sheet data using CLI or MCP |
| homepage | |
| repository | https://github.com/webern/tiller-sync |
| max_upload_size | |
| id | 2033301 |
| size | 1,915,877 |
A CLI tool and MCP server for syncing data between a Tiller Google Sheet and a local SQLite database. Download your transactions, query and edit them locally, then sync changes back to your sheet - all from the command line or through an AI agent.
Install Tiller Sync using Cargo:
cargo install tiller-sync
The binary will be installed to $CARGO_HOME/bin/tiller (typically ~/.cargo/bin/tiller).
If you don't have Rust installed, you'll need to install it first:
$CARGO_HOME/bin is in your PATH (the installer usually does this
automatically)cargo install tiller-syncNote: CARGO_HOME defaults to ~/.cargo on Unix systems and %USERPROFILE%\.cargo on Windows.
The installed binary will be at $CARGO_HOME/bin/tiller.
Setting up Tiller Sync requires a few steps. Please follow them in order:
First, you need to create OAuth credentials in Google Cloud Console. This process is somewhat involved but only needs to be done once.
Follow the detailed instructions in SETUP.md to:
Once you've completed those steps and have your downloaded client_secret_*.json file, return here
to continue.
After completing the Google Cloud Console setup, initialize your Tiller directory with the
tiller init command. You'll need:
# Initialize with default location ($HOME/tiller)
tiller init \
--sheet-url "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID" \
--client-secret ~/Downloads/client_secret_*.json
# Or specify a custom location
tiller init \
--tiller-home /path/to/custom/location \
--sheet-url "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID" \
--client-secret ~/Downloads/client_secret_*.json
This command will:
.secrets/client_secret.jsonconfig.json with your sheet URLNow authenticate Tiller Sync to access your Google Sheets:
tiller auth
The command will:
In the browser:
After clicking "Allow", you should see a success message in your browser and in your terminal:
✓ Authorization successful!
✓ Tokens saved to: /Users/you/tiller/.secrets/token.json
Verify your authentication:
tiller auth verify
You should see:
✓ Authentication verified successfully
Spreadsheet: Tiller Foundation Template
Access: Read/Write
You're all set! You can now use the sync commands below.
Download your Tiller data to a local SQLite database:
tiller sync down
This will:
~/tiller/tiller.sqlite (if it doesn't exist)Upload local changes back to your Tiller sheet:
tiller sync up
This will:
Execute SQL queries against your local database:
# Query recent transactions (JSON output)
tiller query "SELECT date, description, amount FROM transactions ORDER BY date DESC LIMIT 10"
# Get results as a markdown table
tiller query --format markdown "SELECT category, SUM(amount) as total FROM transactions GROUP BY category"
# Export to CSV
tiller query --format csv "SELECT * FROM transactions WHERE amount < 0" > expenses.csv
# Show data tables (transactions, categories, autocat)
tiller schema
# Include metadata tables
tiller schema --include-metadata
The default configuration file is located at ~/tiller/config.json. You can customize:
client_secret.json (relative or absolute)token.json (relative or absolute)Example configuration:
{
"app_name": "tiller",
"config_version": "v0.1.0",
"tiller_sheet": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID",
"backup_copies": 5,
"client_secret_path": ".secrets/client_secret.json",
"token_path": ".secrets/token.json"
}
By default, Tiller Sync uses ~/tiller as the home directory. You can override this:
# Using environment variable
export TILLER_HOME=/path/to/custom/location
tiller sync down
# Using command-line flag
tiller --dir /path/to/custom/location sync down
Tiller Sync includes an MCP (Model Context Protocol) server that allows AI agents like Claude Code to interact with your financial data.
After installing Tiller Sync and completing the setup steps above, add it as an MCP server to Claude Code:
claude mcp add tiller -- tiller --tiller-home ~/tiller mcp
If you're using a custom tiller home directory, adjust the path accordingly:
claude mcp add tiller -- tiller --tiller-home /path/to/your/tiller mcp
Once configured, Claude Code can use the following tools:
With Claude Code and Tiller Sync, you can:
Your OAuth token may have expired. Refresh it with:
tiller auth verify
If that doesn't work, re-authenticate:
tiller auth
Ensure you've placed client_secret.json in the correct location:
ls -la ~/tiller/.secrets/client_secret.json
If the file is missing, you'll need to download the OAuth credentials again from Google Cloud Console.
This is expected for personal OAuth applications. To proceed:
This warning appears because you created the OAuth credentials yourself rather than using a verified public application. Your data is safe - you're authenticating with your own credentials.
If the browser doesn't open automatically during tiller auth:
Ensure credential files have the correct permissions:
chmod 600 ~/tiller/.secrets/client_secret.json
chmod 600 ~/tiller/.secrets/token.json