Skip to content

release: v1.2.92 - add zernio-mcp executable#17

Closed
mikipalet wants to merge 159 commits intomainfrom
develop
Closed

release: v1.2.92 - add zernio-mcp executable#17
mikipalet wants to merge 159 commits intomainfrom
develop

Conversation

@mikipalet
Copy link
Collaborator

Release to PyPI with zernio-mcp executable entry points.\n\nKey change: uvx zernio-mcp will now work (previously only late-mcp was registered).

carlosmgv02 and others added 30 commits December 11, 2025 19:02
- Add release summary in GitHub Actions
- Check if version exists on PyPI before publishing
- Show clear notices for skip/release decisions
- Bump version to 1.0.1
Shows version info and release status before merging:
- Version from pyproject.toml
- Whether git tag exists
- Whether version exists on PyPI
- Clear indication if release will happen or be skipped
- All resource methods now return typed Pydantic models instead of dicts
- Generate proper Enum classes instead of Literal types
- Add response models: PostsListResponse, ProfileGetResponse, etc.
- Add upload module with direct and Vercel Blob support
- Update tests to use attribute access syntax
- Sync version to 1.1.0 across pyproject.toml and __init__.py
- Add is_draft parameter to posts_create and posts_cross_post
- Create tool_definitions.py as single source of truth for MCP params
- Add script to generate MDX docs from definitions
Refactors MCP server to use typed model attributes instead of dicts for accounts, profiles, and posts, improving type safety and code clarity. Adds the @use_tool_def decorator to all MCP tool functions, automatically applying centralized docstrings from tool_definitions.py. Updates tool_definitions.py to expand tool documentation, add summaries, and improve MDX generation. Updates README examples to use enums and new tool names. Bumps version to 1.1.1 and regenerates models for improved type annotations.
Added per-file ignores for generated models in Ruff config to allow old-style annotations and trailing whitespace. Also imported 'Any' from typing in src/late/mcp/server.py.
- Add docs_search tool to search Late API documentation
- Fetch and cache llms-full.txt with 24h TTL
- Score-based search across markdown sections
- Returns top 5 relevant documentation sections
* feat: add HTTP/SSE transport for remote MCP access

Add HTTP server with Server-Sent Events (SSE) transport to enable
remote access to the MCP server from Claude Code CLI and other clients.

Features:
- Modular architecture with separated concerns (auth, config, routes)
- API key authentication with multiple methods (Bearer, X-API-Key, query)
- Health check endpoint for monitoring
- Dual transport support (STDIO + HTTP/SSE)
- Railway deployment ready with Dockerfile
- Comprehensive documentation

New files:
- src/late/mcp/constants.py - Global constants
- src/late/mcp/config.py - Configuration management
- src/late/mcp/auth.py - API key authentication
- src/late/mcp/routes.py - Route handlers
- src/late/mcp/http_server.py - Main HTTP server
- Dockerfile - Container configuration for Railway
- .dockerignore - Docker build optimization
- docs/HTTP_DEPLOYMENT.md - Deployment guide

Modified:
- pyproject.toml - Added starlette, uvicorn dependencies
- server.py - Added main() function for STDIO entry point
- README.md - Added HTTP deployment documentation
- .env.example - Added MCP server configuration

* fix: resolve linting errors (UP045, ARG001)

- Replace Optional[X] with X | None for modern type hints
- Prefix unused request parameters with underscore

---------

Co-authored-by: Carlos Martínez <carlimvg02@gmail.com>
* feat: add HTTP/SSE transport for remote MCP access

Add HTTP server with Server-Sent Events (SSE) transport to enable
remote access to the MCP server from Claude Code CLI and other clients.

Features:
- Modular architecture with separated concerns (auth, config, routes)
- API key authentication with multiple methods (Bearer, X-API-Key, query)
- Health check endpoint for monitoring
- Dual transport support (STDIO + HTTP/SSE)
- Railway deployment ready with Dockerfile
- Comprehensive documentation

New files:
- src/late/mcp/constants.py - Global constants
- src/late/mcp/config.py - Configuration management
- src/late/mcp/auth.py - API key authentication
- src/late/mcp/routes.py - Route handlers
- src/late/mcp/http_server.py - Main HTTP server
- Dockerfile - Container configuration for Railway
- .dockerignore - Docker build optimization
- docs/HTTP_DEPLOYMENT.md - Deployment guide

Modified:
- pyproject.toml - Added starlette, uvicorn dependencies
- server.py - Added main() function for STDIO entry point
- README.md - Added HTTP deployment documentation
- .env.example - Added MCP server configuration

* fix: resolve linting errors (UP045, ARG001)

- Replace Optional[X] with X | None for modern type hints
- Prefix unused request parameters with underscore

* fix: make Dockerfile compatible with Railway

- Add id parameter to cache mount (Railway requirement)
- Use PORT environment variable with fallback to 8080
- Remove HEALTHCHECK (Railway handles this externally)

---------

Co-authored-by: Carlos Martínez <carlimvg02@gmail.com>
* feat: add HTTP/SSE transport for remote MCP access

Add HTTP server with Server-Sent Events (SSE) transport to enable
remote access to the MCP server from Claude Code CLI and other clients.

Features:
- Modular architecture with separated concerns (auth, config, routes)
- API key authentication with multiple methods (Bearer, X-API-Key, query)
- Health check endpoint for monitoring
- Dual transport support (STDIO + HTTP/SSE)
- Railway deployment ready with Dockerfile
- Comprehensive documentation

New files:
- src/late/mcp/constants.py - Global constants
- src/late/mcp/config.py - Configuration management
- src/late/mcp/auth.py - API key authentication
- src/late/mcp/routes.py - Route handlers
- src/late/mcp/http_server.py - Main HTTP server
- Dockerfile - Container configuration for Railway
- .dockerignore - Docker build optimization
- docs/HTTP_DEPLOYMENT.md - Deployment guide

Modified:
- pyproject.toml - Added starlette, uvicorn dependencies
- server.py - Added main() function for STDIO entry point
- README.md - Added HTTP deployment documentation
- .env.example - Added MCP server configuration

* fix: resolve linting errors (UP045, ARG001)

- Replace Optional[X] with X | None for modern type hints
- Prefix unused request parameters with underscore

* fix: make Dockerfile compatible with Railway

- Add id parameter to cache mount (Railway requirement)
- Use PORT environment variable with fallback to 8080
- Remove HEALTHCHECK (Railway handles this externally)

* feat: configure Railway with Railpack instead of Dockerfile

- Add railway.toml with Railpack (NIXPACKS) configuration
- Rename Dockerfile to Dockerfile.docker to prevent auto-detection
- Railpack will auto-detect Python + uv from main.py
- Configure health check path and restart policy

---------

Co-authored-by: Carlos Martínez <carlimvg02@gmail.com>
* feat: add HTTP/SSE transport for remote MCP access

Add HTTP server with Server-Sent Events (SSE) transport to enable
remote access to the MCP server from Claude Code CLI and other clients.

Features:
- Modular architecture with separated concerns (auth, config, routes)
- API key authentication with multiple methods (Bearer, X-API-Key, query)
- Health check endpoint for monitoring
- Dual transport support (STDIO + HTTP/SSE)
- Railway deployment ready with Dockerfile
- Comprehensive documentation

New files:
- src/late/mcp/constants.py - Global constants
- src/late/mcp/config.py - Configuration management
- src/late/mcp/auth.py - API key authentication
- src/late/mcp/routes.py - Route handlers
- src/late/mcp/http_server.py - Main HTTP server
- Dockerfile - Container configuration for Railway
- .dockerignore - Docker build optimization
- docs/HTTP_DEPLOYMENT.md - Deployment guide

Modified:
- pyproject.toml - Added starlette, uvicorn dependencies
- server.py - Added main() function for STDIO entry point
- README.md - Added HTTP deployment documentation
- .env.example - Added MCP server configuration

* fix: resolve linting errors (UP045, ARG001)

- Replace Optional[X] with X | None for modern type hints
- Prefix unused request parameters with underscore

* fix: make Dockerfile compatible with Railway

- Add id parameter to cache mount (Railway requirement)
- Use PORT environment variable with fallback to 8080
- Remove HEALTHCHECK (Railway handles this externally)

* feat: configure Railway with Railpack instead of Dockerfile

- Add railway.toml with Railpack (NIXPACKS) configuration
- Rename Dockerfile to Dockerfile.docker to prevent auto-detection
- Railpack will auto-detect Python + uv from main.py
- Configure health check path and restart policy

* fix: include README.md in Docker build

README.md is required by hatchling build backend for the package

---------

Co-authored-by: Carlos Martínez <carlimvg02@gmail.com>
* feat: add HTTP/SSE transport for remote MCP access

Add HTTP server with Server-Sent Events (SSE) transport to enable
remote access to the MCP server from Claude Code CLI and other clients.

Features:
- Modular architecture with separated concerns (auth, config, routes)
- API key authentication with multiple methods (Bearer, X-API-Key, query)
- Health check endpoint for monitoring
- Dual transport support (STDIO + HTTP/SSE)
- Railway deployment ready with Dockerfile
- Comprehensive documentation

New files:
- src/late/mcp/constants.py - Global constants
- src/late/mcp/config.py - Configuration management
- src/late/mcp/auth.py - API key authentication
- src/late/mcp/routes.py - Route handlers
- src/late/mcp/http_server.py - Main HTTP server
- Dockerfile - Container configuration for Railway
- .dockerignore - Docker build optimization
- docs/HTTP_DEPLOYMENT.md - Deployment guide

Modified:
- pyproject.toml - Added starlette, uvicorn dependencies
- server.py - Added main() function for STDIO entry point
- README.md - Added HTTP deployment documentation
- .env.example - Added MCP server configuration

* fix: resolve linting errors (UP045, ARG001)

- Replace Optional[X] with X | None for modern type hints
- Prefix unused request parameters with underscore

* fix: make Dockerfile compatible with Railway

- Add id parameter to cache mount (Railway requirement)
- Use PORT environment variable with fallback to 8080
- Remove HEALTHCHECK (Railway handles this externally)

* feat: configure Railway with Railpack instead of Dockerfile

- Add railway.toml with Railpack (NIXPACKS) configuration
- Rename Dockerfile to Dockerfile.docker to prevent auto-detection
- Railpack will auto-detect Python + uv from main.py
- Configure health check path and restart policy

* fix: include README.md in Docker build

README.md is required by hatchling build backend for the package

* fix: use Dockerfile for Railway deployment

- Configure railway.toml to use DOCKERFILE builder
- Restore Dockerfile with proper MCP extras installation
- Remove main.py wrapper (no longer needed)
- Keep pyproject.toml clean with optional dependencies

This approach is more explicit and reproducible than relying on
auto-detection from Railpack/Nixpacks.

---------

Co-authored-by: Carlos Martínez <carlimvg02@gmail.com>
Rename Dockerfile.docker to Dockerfile to match railway.toml configuration
Railway has specific cache mount ID requirements. Removing the cache mount
since Railway has its own caching system and uv is fast enough without it.
Change from python3.12-slim to python3.12-bookworm-slim which is the
correct image tag format for ghcr.io/astral-sh/uv
BREAKING CHANGE: Remove MCP_SERVER_API_KEY requirement

- Users now provide their own Late API key when connecting
- Server validates API key by testing against Late API
- API keys stored per-connection using contextvars
- Simplifies deployment (no env vars needed)
- More secure (each user uses their own credentials)

Changes:
- Remove ENV_LATE_API_KEY and ENV_MCP_SERVER_API_KEY constants
- Refactor auth.py to extract and verify Late API keys
- Update routes.py to validate user API keys on connection
- Add set_late_api_key() and context variable in server.py
- Update _get_client() to use context API key or fall back to env
- Update documentation for new authentication flow
Change from https://api.getlate.dev to https://getlate.dev/api/v1/
The correct base URL is getlate.dev/api/v1/ as per documentation
- Remove X-Late-API-Key, X-API-Key, and query param support
- Use only standard 'Authorization: Bearer' header
- Simpler for users and more HTTP standard
- Better compatibility with OAuth-expecting tools
- Update all documentation and error messages
github-actions bot and others added 29 commits March 11, 2026 07:44
- Auto-generated SDK updates
- Version: 1.2.72
- Auto-generated SDK updates
- Version: 1.2.73
- Auto-generated SDK updates
- Version: 1.2.74
- Auto-generated SDK updates
- Version: 1.2.75
- Auto-generated SDK updates
- Version: 1.2.76
- Auto-generated SDK updates
- Version: 1.2.77
- Auto-generated SDK updates
- Version: 1.2.78
- Auto-generated SDK updates
- Version: 1.2.79
- Auto-generated SDK updates
- Version: 1.2.80
- Auto-generated SDK updates
- Version: 1.2.81
- Auto-generated SDK updates
- Version: 1.2.82
- Auto-generated SDK updates
- Version: 1.2.83
- Auto-generated SDK updates
- Version: 1.2.84
- Auto-generated SDK updates
- Version: 1.2.85
- Auto-generated SDK updates
- Version: 1.2.86
- Auto-generated SDK updates
- Version: 1.2.87
- Auto-generated SDK updates
- Version: 1.2.88
- Auto-generated SDK updates
- Version: 1.2.89
- Auto-generated SDK updates
- Version: 1.2.90
- Auto-generated SDK updates
- Version: 1.2.91
* fix: rebrand package name and add zernio-mcp executable entry points

The package was published as zernio-sdk on PyPI but the pyproject.toml
still had name="late-sdk" and only registered late-mcp/late-mcp-http
executables. Users running `uvx zernio-mcp` got an error because the
zernio-mcp executable didn't exist.

- Rename package from late-sdk to zernio-sdk
- Add zernio-mcp and zernio-mcp-http script entry points
- Keep late-mcp and late-mcp-http for backward compatibility
- Update description, author, and keywords for Zernio branding

* fix: update claude-desktop-config example to use zernio-mcp
…tibility

The release workflow builds late-sdk first, then swaps to zernio-sdk.
Keep name=late-sdk in pyproject.toml so the dual-publish flow works.
The zernio-mcp entry points are included in both packages.
@mikipalet mikipalet closed this Mar 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants