From 1398e4a9733b1486307956d3e9b6b09dca465c7d Mon Sep 17 00:00:00 2001 From: launchdavewilliams Date: Wed, 25 Jun 2025 22:01:45 -0700 Subject: [PATCH 1/8] adding Dockerfile. adding github action to push image to ecr. --- .dockerignore | 2 ++ .github/workflows/docker_build_and_push.yaml | 38 ++++++++++++++++++++ Dockerfile | 25 +++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/docker_build_and_push.yaml create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..94aa63b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.devcontainer/* +.github/* \ No newline at end of file diff --git a/.github/workflows/docker_build_and_push.yaml b/.github/workflows/docker_build_and_push.yaml new file mode 100644 index 0000000..bbe5414 --- /dev/null +++ b/.github/workflows/docker_build_and_push.yaml @@ -0,0 +1,38 @@ +name: Docker Build and Push +permissions: + checks: write + contents: write + pull-requests: write + statuses: write + id-token: write +"on": + push: +jobs: + build_push_image: + runs-on: ubuntu-latest + needs: test_and_lint + permissions: + id-token: write + contents: read + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: launchdarkly/common-actions/init@main + - uses: launchdarkly/common-actions/short-sha@main + id: short-sha + - uses: launchdarkly/common-actions/aws-auth@main + with: + role-session-name: 'McpServer' + ecr-login: 'true' + iam-role-arn: 'arn:aws:iam::011970158519:role/mcp-server-ecr-publisher' + - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + with: + context: . + file: Dockerfile + platforms: linux/amd64,linux/arm64 + tags: | + ${{ format('{0}/launchdarkly/mcp:{1}', '709825985650.dkr.ecr.us-east-1.amazonaws.com', steps.short-sha.outputs.sha) }} + labels: | + org.opencontainers.image.title="mcp-server" + org.opencontainers.image.description="LaunchDarkly MCP Server" + org.opencontainers.image.version=${{ steps.short-sha.outputs.sha }} + push: ${{ github.ref == 'refs/heads/main' }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..00a89d0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM node:24-bookworm-slim AS builder + +WORKDIR /app + +RUN npm install -g bun + +COPY package*.json ./ + +RUN bun install + +COPY . . + +RUN npm run build + +FROM gcr.io/distroless/nodejs24-debian12:970bec506fed86941afb61c21983f25b3b3fe68c + +WORKDIR /app + +# Copy built application from builder stage +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/bin ./bin +COPY --from=builder /app/package.json ./ + +EXPOSE 8080 +ENTRYPOINT ["/nodejs/bin/node", "/app/bin/mcp-server.js", "start", "--transport", "sse", "--port", "8080"] From 818a9cf3f0fbeb0bbee17eaa791acd248ed39272 Mon Sep 17 00:00:00 2001 From: launchdavewilliams Date: Wed, 25 Jun 2025 22:02:59 -0700 Subject: [PATCH 2/8] fixing end of line --- .dockerignore | 2 +- .github/workflows/docker_build_and_push.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index 94aa63b..15a7d55 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,2 @@ .devcontainer/* -.github/* \ No newline at end of file +.github/* diff --git a/.github/workflows/docker_build_and_push.yaml b/.github/workflows/docker_build_and_push.yaml index bbe5414..ec0d666 100644 --- a/.github/workflows/docker_build_and_push.yaml +++ b/.github/workflows/docker_build_and_push.yaml @@ -35,4 +35,4 @@ jobs: org.opencontainers.image.title="mcp-server" org.opencontainers.image.description="LaunchDarkly MCP Server" org.opencontainers.image.version=${{ steps.short-sha.outputs.sha }} - push: ${{ github.ref == 'refs/heads/main' }} \ No newline at end of file + push: ${{ github.ref == 'refs/heads/main' }} From 09aab3816ca1ff2f4cfdc0f7470d851df635e62a Mon Sep 17 00:00:00 2001 From: launchdavewilliams Date: Thu, 26 Jun 2025 08:45:26 -0700 Subject: [PATCH 3/8] Apply suggestions from code review Co-authored-by: Behn <7383025+BehnH@users.noreply.github.com> --- .github/workflows/docker_build_and_push.yaml | 9 +++------ Dockerfile | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/docker_build_and_push.yaml b/.github/workflows/docker_build_and_push.yaml index ec0d666..1e72ae5 100644 --- a/.github/workflows/docker_build_and_push.yaml +++ b/.github/workflows/docker_build_and_push.yaml @@ -1,12 +1,7 @@ name: Docker Build and Push -permissions: - checks: write - contents: write - pull-requests: write - statuses: write - id-token: write "on": push: + jobs: build_push_image: runs-on: ubuntu-latest @@ -24,6 +19,8 @@ jobs: role-session-name: 'McpServer' ecr-login: 'true' iam-role-arn: 'arn:aws:iam::011970158519:role/mcp-server-ecr-publisher' + - uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 + - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 with: context: . diff --git a/Dockerfile b/Dockerfile index 00a89d0..1812ad1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:24-bookworm-slim AS builder +FROM oven/bun:1-debian AS builder WORKDIR /app From 24b652cac9e4ae18fdb4119115fd37616f48964c Mon Sep 17 00:00:00 2001 From: launchdavewilliams Date: Thu, 26 Jun 2025 09:18:07 -0700 Subject: [PATCH 4/8] removing launch darkly private actions --- .github/workflows/docker_build_and_push.yaml | 26 +++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.github/workflows/docker_build_and_push.yaml b/.github/workflows/docker_build_and_push.yaml index 1e72ae5..bceb66e 100644 --- a/.github/workflows/docker_build_and_push.yaml +++ b/.github/workflows/docker_build_and_push.yaml @@ -1,24 +1,28 @@ name: Docker Build and Push -"on": +on: push: +env: + ECR_REGISTRY: "709825985650.dkr.ecr.us-east-1.amazonaws.com/launchdarkly" jobs: build_push_image: runs-on: ubuntu-latest - needs: test_and_lint permissions: id-token: write contents: read steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: launchdarkly/common-actions/init@main - - uses: launchdarkly/common-actions/short-sha@main - id: short-sha - - uses: launchdarkly/common-actions/aws-auth@main + - uses: zvonimirsun/read-package-version-actions@v2 + id: get-semver + - uses: aws-actions/configure-aws-credentials@v4 with: - role-session-name: 'McpServer' - ecr-login: 'true' - iam-role-arn: 'arn:aws:iam::011970158519:role/mcp-server-ecr-publisher' + audience: "https://github.com/launchdarkly" + role-to-assume: "arn:aws:iam::011970158519:role/mcp-server-ecr-publisher" + role-session-name: "McpServerPublish" + aws-region: "us-east-1" + - uses: aws-actions/amazon-ecr-login@v2 + with: + registries: ${{ env.ECR_REGISTRY }} - uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 @@ -27,9 +31,9 @@ jobs: file: Dockerfile platforms: linux/amd64,linux/arm64 tags: | - ${{ format('{0}/launchdarkly/mcp:{1}', '709825985650.dkr.ecr.us-east-1.amazonaws.com', steps.short-sha.outputs.sha) }} + ${{ format('{0}/launchdarkly/mcp:{1}', env.ECR_REGISTRY, steps.get-semver.outputs.version) }} labels: | org.opencontainers.image.title="mcp-server" org.opencontainers.image.description="LaunchDarkly MCP Server" - org.opencontainers.image.version=${{ steps.short-sha.outputs.sha }} + org.opencontainers.image.version=${{ steps.get-semver.outputs.version }} push: ${{ github.ref == 'refs/heads/main' }} From f6f7101f2d2c6cdc99388a2f658993ffa4864134 Mon Sep 17 00:00:00 2001 From: launchdavewilliams Date: Fri, 27 Jun 2025 11:43:03 -0700 Subject: [PATCH 5/8] updating repo uri to match auth --- .github/workflows/docker_build_and_push.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker_build_and_push.yaml b/.github/workflows/docker_build_and_push.yaml index bceb66e..6963964 100644 --- a/.github/workflows/docker_build_and_push.yaml +++ b/.github/workflows/docker_build_and_push.yaml @@ -3,7 +3,7 @@ on: push: env: - ECR_REGISTRY: "709825985650.dkr.ecr.us-east-1.amazonaws.com/launchdarkly" + ECR_REGISTRY: "709825985650.dkr.ecr.us-east-1.amazonaws.com/launchdarkly/mcp" jobs: build_push_image: runs-on: ubuntu-latest @@ -31,7 +31,7 @@ jobs: file: Dockerfile platforms: linux/amd64,linux/arm64 tags: | - ${{ format('{0}/launchdarkly/mcp:{1}', env.ECR_REGISTRY, steps.get-semver.outputs.version) }} + ${{ format('{0}:{1}', env.ECR_REGISTRY, steps.get-semver.outputs.version) }} labels: | org.opencontainers.image.title="mcp-server" org.opencontainers.image.description="LaunchDarkly MCP Server" From 5c8ca60687d6daf3dcdfe4aecd6ba44f97b1194d Mon Sep 17 00:00:00 2001 From: launchdavewilliams Date: Fri, 27 Jun 2025 12:05:33 -0700 Subject: [PATCH 6/8] updating registry for ecr login --- .github/workflows/docker_build_and_push.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker_build_and_push.yaml b/.github/workflows/docker_build_and_push.yaml index 6963964..f201c57 100644 --- a/.github/workflows/docker_build_and_push.yaml +++ b/.github/workflows/docker_build_and_push.yaml @@ -22,7 +22,7 @@ jobs: aws-region: "us-east-1" - uses: aws-actions/amazon-ecr-login@v2 with: - registries: ${{ env.ECR_REGISTRY }} + registries: "709825985650" - uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 From f3d97e039126d233d8b52177992087731661cbce Mon Sep 17 00:00:00 2001 From: launchdavewilliams Date: Fri, 27 Jun 2025 12:09:25 -0700 Subject: [PATCH 7/8] updating dockerfile to use bun instead of npm --- Dockerfile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1812ad1..d4432ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,15 +2,13 @@ FROM oven/bun:1-debian AS builder WORKDIR /app -RUN npm install -g bun - COPY package*.json ./ RUN bun install COPY . . -RUN npm run build +RUN bun run build FROM gcr.io/distroless/nodejs24-debian12:970bec506fed86941afb61c21983f25b3b3fe68c From 6ce80329fbf13963c87d21696420f2970eebf830 Mon Sep 17 00:00:00 2001 From: launchdavewilliams Date: Fri, 27 Jun 2025 12:23:53 -0700 Subject: [PATCH 8/8] changing GHA to only run on push to main. updating readme --- .github/workflows/docker_build_and_push.yaml | 2 ++ README.md | 22 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/.github/workflows/docker_build_and_push.yaml b/.github/workflows/docker_build_and_push.yaml index f201c57..8ca43bc 100644 --- a/.github/workflows/docker_build_and_push.yaml +++ b/.github/workflows/docker_build_and_push.yaml @@ -1,6 +1,8 @@ name: Docker Build and Push on: push: + branches: + - main env: ECR_REGISTRY: "709825985650.dkr.ecr.us-east-1.amazonaws.com/launchdarkly/mcp" diff --git a/README.md b/README.md index 8f7244b..c24f222 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,28 @@ Then, configure your server definition to reference your local clone. For exampl } ``` +### Installation steps for Docker + +If installing the MCP server from the AWS Markeplace, pull the image using an authenticated role using the provided instructions in the marketplace listing. + +To run the container: + +```bash +docker run --rm -p 8080:8080 709825985650.dkr.ecr.us-east-1.amazonaws.com/launchdarkly/mcp --api-key api-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx +``` + +Then, configure your server definition to reference your local clone. For example: + +```json +{ + "mcpServers": { + "launchdarkly": { + "url": "http://localhost:8080/sse" + } + } +} +``` + ## Requirements