Contribution Guide
We welcome contributions to the Flutter MCP Toolkit! Please feel free to submit pull requests or report issues on the GitHub repository.
Development Setup
-
Clone the repository.
-
Install the dependencies for both the server and the toolkit:
# Toolkit core package cd mcp_toolkit dart pub get # Server package cd ../../mcp_server_dart dart pub get # test app (if needed) cd ../../flutter_test_app dart pub get -
Run the tests:
dart test
Editing skills
Skill bodies are the canonical source of AI-agent guidance, located in
plugin/skills/<skill-id>/SKILL.md. After editing any skill:
make sync-skills # regenerates mcp_server_dart/lib/src/skill_assets.g.dart
CI fails if the generated file is out of sync with plugin/. Commit both the
SKILL.md change and the regenerated skill_assets.g.dart.
Repo root skills/ symlinks to plugin/skills/ so npx skills discovers bundles without a recursive search. End-user install docs live in AI agent overview; team lockfile template: .skills.json.example.
Maintainers: use bundled skill flutter-mcp-toolkit-repo-maintainer (local: .cursor/skills/flutter-mcp-toolkit-repo-maintainer) for releases and docs.
Marketplace listing copy: marketplace_copy.yaml. Submitting to Claude/Cursor/Codex stores: marketplace submission runbook.
Commit messages
Use Conventional Commits so release-please can build the changelog and version bumps:
feat:— new capability (minor bump)fix:— bug fix (patch bump)docs:— documentation (patch bump when it is the only change in a release)perf:— performance improvementchore:/refactor:/test:— usually hidden in the generated changelog
Example: feat: add fmt_wait_for_stable_snapshot tool.
Releases
Releases are automated on main via release-please:
- Merge PRs to
mainwith conventional commit titles. - release-please opens or updates a Release PR (e.g.
chore: release 3.0.1) withCHANGELOG.md,VERSION, pubspecs, plugin pins, and runtime version updates. - Review the Release PR, then merge it.
- release-please creates the
vX.Y.Ztag and GitHub release with changelog notes. .github/workflows/release.ymlruns on the tag and attachesflutter_mcp_*tarballs +checksums.txt.
Pending work belongs under ## [Unreleased] in CHANGELOG.md. release-please promotes that section when the Release PR merges.
CHANGELOG markdown: version headings use [3.0.1] brackets (Keep a Changelog); the file disables MD052 at the top. In bullets, wrap code symbols in backticks — never [Type.member] without a URL.
Config: release-please-config.json, .release-please-manifest.json.
Run make check-contracts locally — it includes check_version_sync.sh (version pins) and check_skill_assets_drift.sh (regenerated skill_assets.g.dart matches plugin/).
On Release PRs, .github/workflows/release_pr_sync_skills.yml auto-commits skill_assets.g.dart when drift is detected; the skill-assets-drift check must still pass before merge. If automation did not run, run make sync-skills locally and push.
