From 880f85a2d88c8dd21d3c5bca849887ada5e0b533 Mon Sep 17 00:00:00 2001 From: Bill Date: Thu, 1 Jan 2026 10:31:27 -0500 Subject: [PATCH] chore: release v1.0.0-alpha.1 - Add CHANGELOG.md documenting initial release features - Update version to 1.0.0 in pyproject.toml --- CHANGELOG.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..bd8a90a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,62 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [1.0.0] - 2026-01-01 + +Initial release of grist-mcp, an MCP server for AI agents to interact with Grist spreadsheets. + +### Added + +#### Core Features +- **MCP Server**: Full Model Context Protocol implementation with SSE transport +- **Token-based Authentication**: Secure agent authentication via `GRIST_MCP_TOKEN` +- **Granular Permissions**: Per-document access control with `read`, `write`, and `schema` scopes +- **Multi-tenant Support**: Configure multiple Grist instances and documents + +#### Discovery Tools +- `list_documents`: List accessible documents with their permissions + +#### Read Tools +- `list_tables`: List all tables in a document +- `describe_table`: Get column metadata (id, type, formula) +- `get_records`: Fetch records with optional filter, sort, and limit +- `sql_query`: Execute read-only SELECT queries + +#### Write Tools +- `add_records`: Insert new records into a table +- `update_records`: Modify existing records by ID +- `delete_records`: Remove records by ID + +#### Schema Tools +- `create_table`: Create new tables with column definitions +- `add_column`: Add columns to existing tables +- `modify_column`: Change column type or formula +- `delete_column`: Remove columns from tables + +#### Infrastructure +- **Docker Support**: Multi-stage Dockerfile with non-root user +- **Docker Compose**: Ready-to-deploy configuration with environment variables +- **Health Endpoint**: `/health` for container orchestration readiness checks +- **SSE Transport**: Server-Sent Events for MCP client communication +- **Environment Variable Substitution**: `${VAR}` syntax in config files + +#### Testing +- **Unit Tests**: Comprehensive coverage with pytest-httpx mocking +- **Integration Tests**: Docker-based tests with ephemeral containers +- **Rich Test Runner**: Progress display for test execution +- **Test Isolation**: Dynamic port discovery for parallel test runs + +#### Developer Experience +- **Makefile**: Commands for testing, building, and deployment +- **Dev Environment**: Docker Compose setup for local development +- **MCP Config Display**: Startup message with client configuration snippet + +### Security +- SQL injection prevention with SELECT-only query validation +- API key isolation per document +- Token validation at startup (no runtime exposure) +- Non-root container execution diff --git a/pyproject.toml b/pyproject.toml index fc06444..84aa6df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "grist-mcp" -version = "0.1.0" +version = "1.0.0" description = "MCP server for AI agents to interact with Grist documents" requires-python = ">=3.14" dependencies = [