bin/sh: ./gitlab-mcp-server: not found (Alpine/musl)
Fixes the GitLab MCP server binary failing to start on Alpine Linux with a not found error. Use when the file exists but the shell says it is not found. Not for missing downloads or permission errors.
/bin/sh: ./gitlab-mcp-server: not found (Alpine/musl)
TL;DR: The binary is built for glibc; Alpine uses musl, so the loader is missing and the shell reports not found. Switch to a glibc-based image, or use the published ghcr.io image with --transport stdio. Do not chase the filename; the file is there, the dynamic linker is not.
The error
/bin/sh: ./gitlab-mcp-server: not foundFix it
- Confirm you are on Alpine or another musl-based distro.
Expected: cat /etc/os-release shows Alpine.
- Option A: switch your container base to a glibc distro (debian-slim works).
Expected: The binary executes normally.
- Option B: run the published ghcr.io image with --transport stdio instead of the local binary.
Expected: The server starts over stdio without the musl problem.
When this applies
The gitlab-mcp-server binary exists and is executable, but running it on Alpine prints not found. Common in minimal Docker images.
When this does NOT apply
If the file truly does not exist, download it first. Permission denied is a chmod issue, not this one.
Tool compatibility
jmrplens/gitlab-mcp-server, Alpine-based containers
Also seen as
- gitlab-mcp-server not found Alpine
- gitlab MCP binary will not execute in docker
- musl gitlab-mcp-server
Why it happens
The release binary is dynamically linked against glibc. On musl systems the expected loader path does not exist, and the kernel reports the file as not found, which the shell repeats verbatim.
Edge cases
- Static builds would avoid this but are not published; use the image.
- The same failure hits any glibc binary on Alpine, a useful pattern to recognize.
- If you must stay on Alpine, install gcompat, but the glibc image is more reliable.
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.