Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 32 additions & 1 deletion TODO.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,34 @@
# TODO

See [docs/roadmap.md](docs/roadmap.md) for the full feature roadmap.
Prioritized work queue. See [docs/roadmap.md](docs/roadmap.md) for full context and credits.

## Up next

1. **Fix A1 notation bugs** β€” `_parse_a1_notation` returns wrong `endRowIndex` for open-ended ranges (e.g. `B2:D`) and silently returns `{}` for empty string instead of raising. [Issue #11](https://github.com/khuisman/mcp-gee-sweet/issues/11)
2. **SQLite cache migration** β€” replace `/tmp/*.json` file-backed caches with SQLite; unblocks cache unit tests
3. **Cache unit tests** β€” after SQLite migration
4. **PyPI publish** β€” set up trusted publishing (OIDC) on PyPI, do a test release; CI workflow already written

## Tier 1 features

5. `clear_values` β€” clear cell content in a range without touching formatting
6. `delete_sheet` β€” delete a tab by name or sheetId
7. `delete_rows` / `delete_columns` β€” remove rows or columns by index range
8. `update_sheet_properties` β€” set tab color, freeze rows/cols, hide/show gridlines
9. Drive file ops β€” `rename_file`, `move_file`, `copy_file`, `delete_file`

## Tier 2 features

10. Cell formatting β€” `format_cells`, `update_borders`, `merge_cells` / `unmerge_cells`
11. Data validation β€” `add_data_validation`, `get_data_validation`
12. Row/column sizing β€” `resize_rows` / `resize_columns`, `hide_rows` / `hide_columns`

## Tier 3+ features

13. Conditional formatting, named/protected ranges, permissions, filters _(see roadmap for details)_

## Testing

14. **Formatting integration spike** β€” explore what `get_sheet_data(include_grid_data=True)` returns for formatted cells; determine fixture strategy (dedicated test sheet vs. ephemeral); assess whether API-level assertions cover formatting without a browser
15. **Integration tests** β€” API-level smoke tests against a dedicated test Drive folder using service account credentials; one test per tool
16. **OAuth integration tests** β€” verify auth fallback chain and tool behavior under user credentials; required for `create_doc`/`create_spreadsheet` in personal Drive
15 changes: 9 additions & 6 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,20 @@ Features are grouped by category and ordered by practical priority within each t

## Testing

- [ ] Add `pytest` and `pytest-cov` as dev dependencies
- [x] Add `pytest` and `pytest-cov` as dev dependencies
- [ ] Unit tests for cache logic β€” TTL expiry, dirty flag, file persistence, partial invalidation (`SheetStructureCache`, `SheetDataCache`, `DriveFolderCache`, `DocContentCache`) _(after SQLite migration β€” see Infrastructure)_
- [ ] Unit tests for A1 notation helpers β€” `_parse_a1_notation`, `_column_index_to_letter`, `_letter_to_column_index`
- [ ] Unit tests for HTML↔Doc conversion (`_html_to_text`, `_html_to_doc_requests`)
- [ ] Unit tests for tool filtering β€” tools excluded when not in `ENABLED_TOOLS`
- [ ] Integration tests (optional, requires live credentials + test spreadsheet/doc) β€” smoke tests for each tool against a dedicated test Drive folder
- [x] Unit tests for A1 notation helpers β€” `_parse_a1_notation`, `_column_index_to_letter`, `_letter_to_column_index`
- [x] Unit tests for HTML↔Doc conversion (`_html_to_text`, `_html_to_doc_requests`)
- [x] Unit tests for tool filtering β€” tools excluded when not in `ENABLED_TOOLS`
- [ ] Formatting integration spike β€” explore `effectiveFormat` API response shape; determine fixture strategy; assess whether API-level assertions cover formatting without a browser
- [ ] Integration tests β€” API-level smoke tests against a dedicated test Drive folder (service account)
- [ ] OAuth integration tests β€” verify auth fallback chain and tool behavior under user credentials; needed for `create_doc`/`create_spreadsheet` in personal Drive

## Infrastructure / internal

- [ ] Revisit cache persistence β€” all caches write JSON to `/tmp/*.json`; evaluate whether SQLite would be more appropriate as the number of cached entries grows
- [ ] Open PR to xing5 from `upstream-observability` branch (structured logging, per-tool timing, `cache_discovery=False`) before fully cutting loose
- [ ] PyPI publish β€” set up trusted publishing (OIDC), create package on PyPI, do a test release; CI workflow already written
- [x] Open PR to xing5 from `upstream-observability` branch (structured logging, per-tool timing, `cache_discovery=False`) β€” [PR #79](https://github.com/xing5/mcp-google-sheets/pull/79)
- [x] Fork repo and rename to `mcp-gee-sweet`; README credits xing5, freema, and piotr-agier

## Inspiration and credits
Expand Down