# Changelog of skill-to-mcp - Model Context Protocol Server Generator (`opportunity-biz/skill-to-mcp`) Actor

- **URL**: https://apify.com/opportunity-biz/skill-to-mcp/changelog.md
- **Full Actor documentation**: https://apify.com/opportunity-biz/skill-to-mcp.md

## 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-07-01

#### Added

- **Apify Actor integration**: `actor.py`, `Dockerfile`, `apify.json`, `.actor/input_schema.json`
  for running skill-to-mcp as an Apify Actor on the Apify Store
- **ZIP output**: Apify actor now saves a ZIP archive of the generated files to the key-value store
- **`parse_skill_text()`**: New function in parser.py for parsing raw skill text without filesystem access
- **Security hardening**:
  - `sanitize_skill_text()` with 10 KB size limit and null-byte stripping
  - `_mask_api_key()` to protect API keys in log output
  - `_validate_output_path()` to prevent path traversal attacks
- **Exponential backoff**: Rate limit (429) and server error (5xx) handling with exponential backoff in `llm.py`
- **Dynamic versioning**: `__version__` now uses `importlib.metadata` as single source of truth
- **Smithery support**: `smithery.yaml` for deploying on Smithery
- **New files**:
  - `skill_to_mcp/__main__.py` — enable `python -m skill_to_mcp`
  - `tests/conftest.py` — shared pytest fixtures
  - `tests/test_actor.py` — Apify actor pipeline tests
  - `CHANGELOG.md` — version history
  - `CONTRIBUTING.md` — contributor guide
  - `USAGE.md` — advanced use cases documentation
  - `MIGRATION.md` — breaking change migration guide
  - `examples/webpage-reader/` — real-world example
  - `examples/calculator/` — simple newcomer example
- **Test coverage**: +20 new tests (99 → 119), covering:
  - `infer_handler_impl()` with mock API
  - `_json_to_python_literal()` edge cases (string "true"/"false"/"null")
  - `parse_skill_text()` with raw text input
  - `--templates-dir` custom templates
  - Batch processing (2+ files) with summary table
  - `--with-example-impl` end-to-end
  - Backoff exponential, mask API key, sanitize skill text, validate output path
- **CI/CD**: Coverage reporting with pytest-cov + Codecov badge
- **README badges**: Coverage, License, Python Versions, PyPI Downloads

#### Changed

- **`_json_to_python_literal()`**: Refactored to use recursive JSON parsing, preventing
  false replacements inside JSON string values
- **`pyproject.toml`**: Added `jsonschema>=4.0` to dev dependencies, `apify>=2.0` as optional dependency
- **`.gitignore`**: Added Apify runtime paths (`apify_storage/`, `apify_dataset/`, `apify_kv_store/`)

#### Fixed

- `_json_to_python_literal()` no longer corrupts JSON string values containing "true"/"false"/"null"

### \[0.1.0] — 2026-06-30

#### Added

- **CLI** with `generate` command (9 flags) and `version` command
- **Core pipeline**: Parser → LLM inference → Validator → Renderer
- **5 Jinja2 templates**: `server.py`, `models.py`, `handler.py`, `pyproject.toml`, `README.md`
- **Transport**: stdio (default) + HTTP SSE
- **Advanced features**:
  - `--with-example-impl`: LLM generates handler implementation
  - `--templates-dir`: Custom Jinja2 templates directory
  - Batch processing: multiple SKILL.md files at once
- **99 unit/integration/E2E tests**
- **CI/CD**: GitHub Action for test + PyPI publish, matrix Python 3.10/3.11/3.12
- **Documentation**: README.md (EN), README.it.md (IT), project\_state.md, architecture.md
- **API key fallback**: `DEEPSEEK_API_KEY` → `OPENAI_API_KEY`
- **Retry logic**: 3 automatic retry attempts for schema inference
- **LLM model**: Default `deepseek-v4-flash`, configurable via `--model`
- **Output validation**: snake\_case, JSON Schema types, required fields, array items
- **Colored CLI output**: Rich library with panels, tables, syntax highlighting
- **MCP compatibility**: Validated against Claude Desktop, Cursor IDE, Continue.dev
