Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
5ecfd5e
chore: Update repository URLs to getlatedev/late-python-sdk
carlosmgv02 Dec 11, 2025
c75c624
fix: Resolve lint errors and update MCP test imports
carlosmgv02 Dec 11, 2025
49cf5dc
fix: Resolve mypy errors and add params to HTTP methods
carlosmgv02 Dec 11, 2025
5085c5f
ci: Improve release workflow with better visibility and PyPI check
carlosmgv02 Dec 11, 2025
bf3071b
ci: Add release preview comment on PRs to main
carlosmgv02 Dec 11, 2025
4360447
chore: trigger workflow re-run
carlosmgv02 Dec 11, 2025
359e5bb
fix: Add explicit permissions for checkout in private repo
carlosmgv02 Dec 11, 2025
842ca46
fix: Add explicit token and permissions to all workflows for private …
carlosmgv02 Dec 11, 2025
061ac30
feat: Add typed responses with Pydantic models (v1.1.0)
carlosmgv02 Dec 15, 2025
a98b89b
feat(mcp): Add is_draft parameter and centralized tool definitions
carlosmgv02 Dec 15, 2025
e2db7a4
fix: Move Callable imports to TYPE_CHECKING block and fix trailing wh…
carlosmgv02 Dec 15, 2025
5b5abba
fix: Fix mypy errors and format code
carlosmgv02 Dec 15, 2025
a22f903
Merge branch 'main' into develop
carlosmgv02 Dec 15, 2025
33f0933
feat(ai): Add model property to OpenAI provider
carlosmgv02 Dec 15, 2025
72f764d
Refactor MCP server to use typed models and tool docs
carlosmgv02 Dec 15, 2025
d99d54d
Merge branch 'main' into develop
carlosmgv02 Dec 15, 2025
529ab35
Update lint config and import Any in server.py
carlosmgv02 Dec 16, 2025
c461bd7
feat(mcp): Add docs_search tool for documentation search
carlosmgv02 Jan 8, 2026
4a19cac
Merge branch 'main' into develop
carlosmgv02 Jan 8, 2026
5d0e11c
feat: add HTTP/SSE transport for remote MCP access (#5)
getlatedev Jan 14, 2026
9a0211e
Feat/http sse transport (#6)
getlatedev Jan 14, 2026
39b8b10
Feat/http sse transport (#7)
getlatedev Jan 14, 2026
637b459
Feat/http sse transport (#8)
getlatedev Jan 14, 2026
5fa1825
Feat/http sse transport (#9)
getlatedev Jan 14, 2026
2fb41a5
fix: add Dockerfile for Railway deployment
carlosmgv02 Jan 14, 2026
7b4908d
fix: remove cache mount from Dockerfile for Railway compatibility
carlosmgv02 Jan 14, 2026
1ed01cb
fix: use correct uv Docker image tag
carlosmgv02 Jan 14, 2026
97bd08f
refactor: use user's Late API key instead of server-wide key
carlosmgv02 Jan 14, 2026
76a75f0
fix: correct Late API URL for authentication
carlosmgv02 Jan 14, 2026
cdae014
refactor: simplify auth to only use Bearer token
carlosmgv02 Jan 14, 2026
c2678c2
feat: add auto-generation for Python resources from OpenAPI
mikipalet Jan 15, 2026
3a41897
fix: resolve ruff linting errors in generated resources
mikipalet Jan 15, 2026
ca21568
feat: rebrand SDK to match Node SDK style
mikipalet Jan 15, 2026
71053b6
chore: regenerate uv.lock for package rename to getlate
mikipalet Jan 15, 2026
6aa8745
feat(mcp): auto-generate MCP tools from OpenAPI spec
mikipalet Jan 15, 2026
7009148
fix(mcp): handle header params and underscore-prefixed names
mikipalet Jan 15, 2026
0e8567f
fix: strip trailing whitespace in generated MCP tool docstrings
mikipalet Jan 15, 2026
8dc30ad
fix: revert package name to late-sdk for PyPI compatibility
mikipalet Jan 16, 2026
b682247
fix: update README with correct package name and method names
mikipalet Jan 16, 2026
c412358
docs: fix README method names to match actual SDK
mikipalet Jan 16, 2026
2fc70a9
docs: add missing connect methods to README
mikipalet Jan 16, 2026
dcfe9a1
feat: auto-generate README SDK Reference section
mikipalet Jan 16, 2026
6f85f9a
fix: use consistent CRUD-style ordering for README methods
mikipalet Jan 16, 2026
140712f
docs: fix README examples to match actual implementation
mikipalet Jan 16, 2026
ee5cdb6
chore: add CHANGELOG.md, remove test file with hardcoded keys
mikipalet Jan 16, 2026
87a5445
feat: auto-generate SDK reference and tests from OpenAPI spec
mikipalet Jan 16, 2026
e9c2d4b
ci: add endpoint tests generation to regenerate workflow
mikipalet Jan 16, 2026
4b17c7f
fix: make generated tests ruff-compliant
mikipalet Jan 16, 2026
53e4f3f
fix: regenerate tests with ruff-compliant output
mikipalet Jan 16, 2026
9a8c770
fix: remove auto-generated endpoint tests
mikipalet Jan 16, 2026
6072ccc
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 18, 2026
9df5237
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 21, 2026
137452e
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 22, 2026
2ac3201
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 22, 2026
b6a417c
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 22, 2026
c05c296
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 23, 2026
47f6262
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 23, 2026
45b0491
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 23, 2026
440ebd0
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 26, 2026
481fbfa
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 26, 2026
a873f2f
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 27, 2026
81a901a
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 27, 2026
20a2bda
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 27, 2026
84c411d
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 28, 2026
2252d2c
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 29, 2026
6656282
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 30, 2026
fdcf961
chore: regenerate from OpenAPI spec
github-actions[bot] Jan 31, 2026
ea30d91
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 2, 2026
9233fc1
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 2, 2026
1e109de
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 3, 2026
8db389e
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 3, 2026
6c91d27
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 3, 2026
5914183
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 3, 2026
141e6d4
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 4, 2026
900021f
fix: add inbox tags to README generation script
mikipalet Feb 4, 2026
3039ab8
refactor: auto-discover new OpenAPI tags in README generation
mikipalet Feb 4, 2026
361d97d
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 4, 2026
3a98a13
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 5, 2026
4fd0e85
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 5, 2026
7b2f018
fix: add missing GMB tag mappings to prevent invalid Python function …
mikipalet Feb 7, 2026
1176b9b
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 7, 2026
9826537
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 8, 2026
c220702
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 9, 2026
778276e
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 10, 2026
6ede65f
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 11, 2026
54c9521
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 11, 2026
eb0c146
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 11, 2026
e179f7d
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 12, 2026
3b31b3b
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 15, 2026
74e5168
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 16, 2026
a1de6b1
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 16, 2026
b0958e9
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 16, 2026
025cecd
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 16, 2026
9c883ae
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 16, 2026
2bf10cc
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 16, 2026
9e6139c
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 16, 2026
4774d62
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 17, 2026
c2867fc
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 17, 2026
c02ff60
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 17, 2026
1be0305
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 17, 2026
e5db063
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 18, 2026
f1a2387
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 18, 2026
866e3f7
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 20, 2026
66e7441
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 20, 2026
ba2c2b0
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 23, 2026
fc266dc
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 24, 2026
ca336b6
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 25, 2026
d884cd7
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 26, 2026
f2e46a3
chore: regenerate from OpenAPI spec
github-actions[bot] Feb 27, 2026
cbba631
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 1, 2026
f2f6461
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 1, 2026
c90777f
fix: rename TikTokSettings to TikTokPlatformData to match generated m…
mikipalet Mar 2, 2026
74f2b69
fix: prevent broken SDK releases from stale model imports
mikipalet Mar 2, 2026
a55689c
fix: ignore TCH003 lint rule for auto-generated models
mikipalet Mar 2, 2026
69dd812
fix: update tests to match generated model field names
mikipalet Mar 2, 2026
afdba0b
Merge pull request #13 from getlate-dev/fix/tiktok-settings-import
mikipalet Mar 2, 2026
80328b0
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 2, 2026
00b5d0b
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 2, 2026
8ca0280
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 3, 2026
4fd5c70
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 3, 2026
90a5c56
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 3, 2026
062a80b
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 3, 2026
59b6298
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 3, 2026
4df3ea0
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 6, 2026
d705e48
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 6, 2026
fa7878f
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 8, 2026
a9b8bda
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 8, 2026
c5be424
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 8, 2026
f41d80b
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 8, 2026
cb312ca
fix: typo in release notes (getlate -> late-sdk)
mikipalet Mar 8, 2026
2b70096
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 11, 2026
88b53bb
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 11, 2026
25635fd
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 11, 2026
7498e7e
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 11, 2026
aff593f
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 11, 2026
7c0544b
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 12, 2026
0901d84
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 12, 2026
e902e50
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 12, 2026
dd07a35
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 12, 2026
bbd0b6a
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 12, 2026
44bf3ca
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 12, 2026
3e0d1dc
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 12, 2026
84c10e7
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 13, 2026
a4d81ea
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 13, 2026
26b4f14
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 13, 2026
548595e
fix: update platform count to 14 and add WhatsApp to supported platfo…
mikipalet Mar 13, 2026
3ea800b
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 16, 2026
6de40b7
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 16, 2026
0fc06b6
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 16, 2026
a30215b
feat: dual publish as late-sdk and zernio-sdk
mikipalet Mar 17, 2026
4ef9767
fix: update OpenAPI spec URL to zernio.com
mikipalet Mar 17, 2026
d09cca7
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 17, 2026
9a71bcb
docs: update README branding to Zernio
mikipalet Mar 17, 2026
cf9e895
chore: regenerate from OpenAPI spec
github-actions[bot] Mar 17, 2026
c785cb1
fix: update getlate.dev URLs to zernio.com in source code
mikipalet Mar 17, 2026
5c0ad86
docs: update README logo to Zernio brand icon
mikipalet Mar 17, 2026
3665316
fix: update PyPI package name references in release workflow
mikipalet Mar 17, 2026
d6b4a05
fix: add zernio-mcp executable and rebrand package to zernio-sdk
mikipalet Mar 18, 2026
bb54c32
fix: keep late-sdk as primary package name for release workflow compa…
mikipalet Mar 18, 2026
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
63 changes: 63 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Python cache
__pycache__/
*.py[cod]
*$py.class
*.so
.Python

# Virtual environments
.venv/
venv/
ENV/
env/

# Environment variables
.env
.env.local
.env.*.local

# Git
.git/
.gitignore
.gitattributes

# Documentation (keep README.md for hatchling build)
docs/
examples/

# Tests
tests/
.pytest_cache/
.coverage
htmlcov/
.tox/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# Build artifacts
build/
dist/
*.egg-info/
.eggs/

# Type checking
.mypy_cache/
.pytype/
.pyre/
.dmypy.json

# Linting
.ruff_cache/

# CI/CD
.github/
.gitlab-ci.yml

# Misc
*.log
.DS_Store
7 changes: 6 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
# Late API Configuration
# Late API Configuration (for STDIO mode with Claude Desktop)
# For HTTP/SSE mode, users provide their API key via request headers
LATE_API_KEY=your_api_key_here

# Server Configuration (optional, has defaults)
HOST=0.0.0.0
PORT=8080

# AI Provider (optional - for content generation)
OPENAI_API_KEY=sk-your_openai_key_here
# ANTHROPIC_API_KEY=sk-ant-your_anthropic_key_here
180 changes: 180 additions & 0 deletions .github/workflows/generate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
name: Regenerate

on:
# Triggered by the API repository when OpenAPI spec changes
repository_dispatch:
types: [openapi-updated]

# Allow manual trigger
workflow_dispatch:

jobs:
generate:
name: Regenerate from OpenAPI
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: "latest"

- name: Set up Python
run: uv python install 3.11

- name: Install dependencies
run: uv sync --all-extras

- name: Fetch latest OpenAPI spec
run: |
curl -f -o openapi.yaml https://zernio.com/openapi.yaml
echo "Fetched OpenAPI spec:"
head -20 openapi.yaml

- name: Generate resources
run: |
echo "Starting resource generation..."
uv run python scripts/generate_resources.py
echo "Resource generation complete."

- name: Generate models
run: |
echo "Starting model generation..."
uv run python scripts/generate_models.py || echo "Model generation skipped (requires local docs repo)"
echo "Model generation complete."

- name: Generate MCP tools
run: |
echo "Starting MCP tool generation..."
uv run --with pyyaml python scripts/generate_mcp_tools.py
echo "MCP tool generation complete."

- name: Generate README SDK Reference
run: |
echo "Starting README SDK Reference generation..."
uv run python scripts/generate_readme_reference.py
echo "README SDK Reference generation complete."

- name: Run linter (fix formatting)
run: |
uv run ruff check --fix src/late/resources/_generated/ || true
uv run ruff format src/late/resources/_generated/ || true
uv run ruff check --fix src/late/mcp/generated_tools.py || true
uv run ruff format src/late/mcp/generated_tools.py || true

- name: Run tests
run: uv run pytest tests -v --tb=short

- name: Check for changes
id: changes
run: |
git add -A
if git diff --staged --quiet; then
echo "has_changes=false" >> $GITHUB_OUTPUT
else
echo "has_changes=true" >> $GITHUB_OUTPUT
echo "Changes detected:"
git diff --staged --name-only
fi

- name: Bump version and commit
if: steps.changes.outputs.has_changes == 'true'
id: version
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

# Get current version
CURRENT_VERSION=$(uv run python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
echo "Current version: $CURRENT_VERSION"

# Bump patch version
IFS='.' read -ra VERSION_PARTS <<< "$CURRENT_VERSION"
MAJOR="${VERSION_PARTS[0]}"
MINOR="${VERSION_PARTS[1]}"
PATCH="${VERSION_PARTS[2]}"
NEW_PATCH=$((PATCH + 1))
NEW_VERSION="$MAJOR.$MINOR.$NEW_PATCH"
echo "New version: $NEW_VERSION"

# Update version in pyproject.toml
sed -i "s/version = \"$CURRENT_VERSION\"/version = \"$NEW_VERSION\"/" pyproject.toml

# Also update __init__.py if it has a version
sed -i "s/__version__ = \".*\"/__version__ = \"$NEW_VERSION\"/" src/late/__init__.py || true

echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT

# Stage all changes
git add -A

# Commit
git commit -m "chore: regenerate from OpenAPI spec

- Auto-generated SDK updates
- Version: $NEW_VERSION"
git push

- name: Build package
if: steps.changes.outputs.has_changes == 'true'
run: uv build

- name: Create GitHub Release
if: steps.changes.outputs.has_changes == 'true'
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ steps.version.outputs.new_version }}
name: v${{ steps.version.outputs.new_version }}
files: dist/*
generate_release_notes: true
body: |
## Auto-generated SDK Update

This release was automatically generated from the latest OpenAPI spec.

This package is published under two names:

```bash
pip install late-sdk==${{ steps.version.outputs.new_version }}
# or
pip install zernio-sdk==${{ steps.version.outputs.new_version }}
```

- name: Publish late-sdk to PyPI
if: steps.changes.outputs.has_changes == 'true'
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}

- name: Swap package name to zernio-sdk
if: steps.changes.outputs.has_changes == 'true'
run: |
python3 -c "
import re
with open('pyproject.toml', 'r') as f:
content = f.read()
content = re.sub(r'name = \"late-sdk\"', 'name = \"zernio-sdk\"', content)
with open('pyproject.toml', 'w') as f:
f.write(content)
"

- name: Build as zernio-sdk
if: steps.changes.outputs.has_changes == 'true'
run: |
rm -rf dist/
uv build

- name: Publish zernio-sdk to PyPI
if: steps.changes.outputs.has_changes == 'true'
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}
36 changes: 35 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,42 @@ jobs:
name: v${{ steps.version.outputs.version }}
files: dist/*
generate_release_notes: true
body: |
## Install

- name: Publish to PyPI
This package is published under two names:

```bash
pip install late-sdk==${{ steps.version.outputs.version }}
# or
pip install zernio-sdk==${{ steps.version.outputs.version }}
```

- name: Publish late-sdk to PyPI
if: steps.check_tag.outputs.exists == 'false'
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}

- name: Swap package name to zernio-sdk
if: steps.check_tag.outputs.exists == 'false'
run: |
python3 -c "
import re
with open('pyproject.toml', 'r') as f:
content = f.read()
content = re.sub(r'name = \"late-sdk\"', 'name = \"zernio-sdk\"', content)
with open('pyproject.toml', 'w') as f:
f.write(content)
"

- name: Build as zernio-sdk
if: steps.check_tag.outputs.exists == 'false'
run: |
rm -rf dist/
uv build

- name: Publish zernio-sdk to PyPI
if: steps.check_tag.outputs.exists == 'false'
uses: pypa/gh-action-pypi-publish@release/v1
with:
Expand Down
57 changes: 57 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Changelog

All notable changes to the Late Python SDK will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.2.0] - 2025-01-16

### Added
- MCP (Model Context Protocol) server support for Claude Desktop integration
- HTTP server mode for MCP (`late-mcp-http`)
- AI content generation module with OpenAI and Anthropic support
- Pipelines for common workflows (CSV scheduler, cross-poster)
- Large file upload support via Vercel Blob
- Progress callbacks for file uploads
- Comprehensive test suite with pytest

### Changed
- Improved error handling with specialized exception classes
- Better async support throughout the SDK

## [1.1.0] - 2025-01-10

### Added
- Upload module with `SmartUploader` for automatic upload strategy selection
- Direct upload for files under 4MB
- Multipart upload support for large files
- `upload_bytes()` and `upload_large_bytes()` methods

## [1.0.0] - 2025-01-01

### Added
- Initial public release
- Full coverage of Late API endpoints
- Support for all 13 social media platforms: Instagram, TikTok, YouTube, LinkedIn, X/Twitter, Facebook, Pinterest, Threads, Bluesky, Reddit, Snapchat, Telegram, and Google Business Profile
- Async support with `alist()`, `acreate()`, etc.
- Type hints and Pydantic models
- Error handling with `LateAPIError`, `LateRateLimitError`, `LateValidationError`

### API Coverage
- Posts: create, list, get, update, delete, retry, bulk upload
- Accounts: list, get, follower stats
- Profiles: create, list, get, update, delete
- Analytics: get metrics, usage stats
- Account Groups: create, list, update, delete
- Queue: slots management, preview
- Webhooks: settings management, logs, testing
- API Keys: create, list, delete
- Media: upload, generate upload token
- Tools: downloads, hashtag checking, transcripts, AI caption generation
- Users: list, get
- Usage: stats
- Logs: list, get
- Connect: OAuth flows for all platforms
- Reddit: feed, search
- Invites: platform invites management
21 changes: 21 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Late MCP HTTP Server - Railway Deployment
# Uses uv for fast, reliable dependency management

FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim

WORKDIR /app

# Copy dependency files
COPY pyproject.toml uv.lock README.md ./
COPY src ./src

# Install dependencies (no dev dependencies in production)
RUN uv sync --frozen --no-dev --extra mcp

# Expose port (Railway will set PORT env var)
EXPOSE 8080

# Health check for Railway monitoring (Railway will use /health endpoint)

# Run HTTP server (Railway sets PORT env var automatically)
CMD ["sh", "-c", "uv run late-mcp-http --host 0.0.0.0 --port ${PORT:-8080}"]
Loading
Loading