Thanks for considering a contribution. This project is small enough that the bar is low — a focused PR with a changeset is usually all it takes.
Requires Node 22 LTS or newer.
git clone https://github.com/akoskomuves/appstoreconnect-mcp.git
cd appstoreconnect-mcp
npm install
cp .env.example .env # fill in your ASC credentials for local testing
npm run dev- Branch from
main(feat/...,fix/...,docs/...). - Run
npm run lintandnpm testbefore pushing. - Add a changeset:
npm run changeset. Pickpatchfor bugfixes,minorfor new tools/domains,majorfor breaking changes. - Open a PR. CI runs typecheck, lint, tests, and build on every push.
- The release workflow on
mainopens a "Release PR" that batches changesets — merging it publishes to npm.
The architecture is plug-in: each App Store Connect domain lives in src/domains/<name>.ts and exports one register<Name>(server, client) function. To add e.g. TestFlight:
- Create
src/domains/testflight.ts. - Register tools with
server.registerTool(name, { title, description, inputSchema }, handler). - Wire it up in
src/index.ts. - Add a section to the README under Tools.
- Tests in
tests/domains/testflight.test.tsmocking the HTTP layer.
Keep tool names prefixed asc_<domain>_<verb> for grep-ability.
- Biome handles lint + format. CI fails on violations; run
npm run lint:fixlocally. - TypeScript: strict,
noUncheckedIndexedAccess,verbatimModuleSyntax. Useimport type { ... }for type-only imports. - Imports use the
.jsextension on relative paths (NodeNext ESM).
Vitest. Mock the HTTP boundary, not the JWT signing — the auth layer's correctness is the hardest thing about this codebase, so it gets real tests against generated keys.
Conventional Commits encouraged but not enforced (changesets handles changelog generation, not the commit log).
Be kind. Issues and PRs that aren't are closed without further engagement.
Releases are driven by changesets and changesets/action. The flow:
- Every PR that changes user-visible behaviour adds a
.changeset/*.md(patch/minor/major) describing the change. - When changesets are present on
main, the release workflow opens a "chore: release" PR that bumpspackage.jsonversion, regeneratesCHANGELOG.md, and consumes the changesets. - Merging the release PR triggers the publish step:
npm run buildproduces thedist/artifacts.changeset publishpushes the new version to npm with provenance enabled.createGithubReleases: trueauto-creates a GitHub Release for the new tag with the changelog notes.
Authentication: npm Trusted Publishing (OIDC). No static token needed. Configured once at https://www.npmjs.com/package/@akoskomuves/appstoreconnect-mcp/access by listing this repo's release.yml workflow as a Trusted Publisher. The id-token: write permission in release.yml is what mints the short-lived publish credential at runtime.
Repo settings: Settings → Actions → General → Workflow permissions must be set to "Read and write" with "Allow GitHub Actions to create and approve pull requests" for the version-PR step to work.