Namespace
samanhappy
Image / Tag
mcphub:1.0.13
Content Digest
sha256:72f9290ea7a945f3249b0f6307bbcce64396f5b878af7c44f344173219f909b3
Details
Created

2026-06-08 14:42:58 UTC

Size

550 MB

Content Digest
Labels
  • org.opencontainers.image.created
    2026-06-08T14:42:03.674Z
  • org.opencontainers.image.description
    A unified hub for centrally managing and dynamically orchestrating multiple MCP servers/APIs into separate endpoints with flexible routing strategies.
  • org.opencontainers.image.licenses
    Apache-2.0
  • org.opencontainers.image.revision
    be40426bd741599abc8a44f29efb586dbb13c5d7
  • org.opencontainers.image.source
    https://github.com/samanhappy/mcphub
  • org.opencontainers.image.title
    mcphub
  • org.opencontainers.image.url
    https://github.com/samanhappy/mcphub
  • org.opencontainers.image.version
    1.0.13

Environment
GPG_KEY

7169605F62C751356D054A26A821E680E5FA6305

PATH

/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PYTHON_SHA256

2ab91ff401783ccca64f75d10c882e957bdfd60e2bf5a72f8421793729b78a71

PYTHON_VERSION

3.13.13


Layers

[#000] sha256:068fedd6b0f109b8186d00d49327b6fc6747c428fd3c9a8739424ff5f38d7531 - 4.9% (26.9 MB)

[#001] sha256:6f59d65eb126bdbbfafbdc6551ec22d189bcf11e4c4f556e1cb95f03dd424f5c - 0.61% (3.36 MB)

[#002] sha256:59dae010ffdc12f24a794eec2ca47e675613b78a165c26b389ea7f670919f998 - 2.17% (11.9 MB)

[#003] sha256:36d1aa696f899174752f594312e62a77a068b3f1a7a751bffafecdff61b55dcb - 0.0% (250 Bytes)

[#004] sha256:fd07f0c8b1381a2e275421759d1375b75786dde119327551cd7df82f12f35942 - 4.23% (23.2 MB)

[#005] sha256:ddb9d1dcd1cbf886b710e652c1e2d8ccee70c9e109732c67a344347a1d53a2d9 - 35.81% (197 MB)

[#006] sha256:b38ffe2efca45cd5f5bdf5c37ef3f5c9a42d007760ad84a8b99d4280c2181893 - 0.77% (4.22 MB)

[#007] sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 - 0.0% (32 Bytes)

[#008] sha256:91b80f1ec082895e61c8030b44c757cff1827ea4fd037df646b23d7d5a42beba - 3.77% (20.7 MB)

[#009] sha256:37fdafb3a818d1628d0c1bc5467c1e80b9473eec00a0fe24cfa416001a2a8c71 - 0.0% (93 Bytes)

[#010] sha256:dc176a1fba51a35c6975a35e0d04544313f8a7e43cae3db5f7905a8c86660740 - 0.02% (110 KB)

[#011] sha256:b0adfc95ed6def5ed88ce9df273f3b122766e2ba320ebf79789bd5cdf45f9196 - 46.58% (256 MB)

[#012] sha256:fbef1574549a08276a7db32c8e364c7ee708066a310ac89dbee68ca84d3ff3ca - 0.03% (163 KB)

[#013] sha256:12f64906ae47030b116ff4eb2eecc509d1faad0be9d5a0f22b192c3e6ed6a8df - 0.51% (2.83 MB)

[#014] sha256:4eb9347d746e136cacb56f9eb1559423fbb6c53f030559234eb7274911734074 - 0.07% (402 KB)

[#015] sha256:782144af871fc1401705738556533e0668bb255b5c614f96b362dbc9cb3a8915 - 0.53% (2.94 MB)

[#016] sha256:f27167580ec21c9543c2235b87b0acadc1595394ea8db9df9e3aee5aa4e0747b - 0.0% (833 Bytes)

[#017] sha256:a6b140909484f43a1b35fb890cf49bd8ca2d14f79f1c2b1770fb8941a4fea1e4 - 0.0% (829 Bytes)


History
2026-05-18 00:00:00 UTC (debuerreotype 0.17)

# debian.sh --arch 'amd64' out/ 'bookworm' '@1779062400'

2026-05-19 23:41:15 UTC (buildkit.dockerfile.v0)

ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2026-05-19 23:41:15 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; rm -rf /var/lib/apt/lists/* # buildkit

2026-05-19 23:41:15 UTC (buildkit.dockerfile.v0)

ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305

2026-05-19 23:41:15 UTC (buildkit.dockerfile.v0)

ENV PYTHON_VERSION=3.13.13

2026-05-19 23:41:15 UTC (buildkit.dockerfile.v0)

ENV PYTHON_SHA256=2ab91ff401783ccca64f75d10c882e957bdfd60e2bf5a72f8421793729b78a71

2026-05-19 23:50:49 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev ; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; LDFLAGS="${LDFLAGS:-} -Wl,--strip-all"; arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; case "$arch" in amd64|arm64) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"; ;; i386) ;; *) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer"; ;; esac; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\$\$ORIGIN/../lib'" python ; make install; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark; find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' | sort -u | xargs -rt dpkg-query --search | awk 'sub(":$", "", $1) { print $1 }' | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; rm -rf /var/lib/apt/lists/*; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit

2026-05-19 23:50:49 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit

2026-05-19 23:50:49 UTC (buildkit.dockerfile.v0)

CMD ["python3"]

2026-06-04 09:28:48 UTC (buildkit.dockerfile.v0)

COPY /uv /uvx /bin/ # buildkit

2026-06-04 09:29:12 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c apt-get update && apt-get install -y curl gnupg git build-essential && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && apt-get install -y nodejs && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit

2026-06-04 09:29:14 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c corepack enable && corepack prepare pnpm@10.12.4 --activate # buildkit

2026-06-04 09:31:58 UTC (buildkit.dockerfile.v0)

ARG INSTALL_EXT=false

2026-06-04 09:31:58 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c if [ "$INSTALL_EXT" = "true" ]; then ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then npx -y playwright install --with-deps chrome firefox; else echo "Skipping Chrome and Firefox installation on non-amd64 architecture: $ARCH"; fi; apt-get update && apt-get install -y ca-certificates curl iptables && install -m 0755 -d /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && chmod a+r /etc/apt/keyrings/docker.asc && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io && apt-get clean && rm -rf /var/lib/apt/lists/*; fi # buildkit

2026-06-04 09:29:15 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c uv tool install mcp-server-fetch # buildkit

2026-06-04 09:29:15 UTC (buildkit.dockerfile.v0)

WORKDIR /app

2026-06-08 14:42:24 UTC (buildkit.dockerfile.v0)

COPY package.json pnpm-lock.yaml ./ # buildkit

2026-06-08 14:42:36 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c pnpm config set store-dir /pnpm/store && pnpm fetch --frozen-lockfile # buildkit

2026-06-08 14:42:39 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c pnpm config set store-dir /pnpm/store && pnpm install --frozen-lockfile --offline # buildkit

2026-06-08 14:42:40 UTC (buildkit.dockerfile.v0)

COPY . . # buildkit

2026-06-08 14:42:40 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c curl -s -f --connect-timeout 10 https://mcpm.sh/api/servers.json -o servers.json || echo "Failed to download servers.json, using bundled version" # buildkit

2026-06-08 14:42:58 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c pnpm build # buildkit

2026-06-08 14:42:58 UTC (buildkit.dockerfile.v0)

COPY entrypoint.sh /usr/local/bin/entrypoint.sh # buildkit

2026-06-08 14:42:58 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c chmod +x /usr/local/bin/entrypoint.sh # buildkit

2026-06-08 14:42:58 UTC (buildkit.dockerfile.v0)

EXPOSE map[3000/tcp:{}]

2026-06-08 14:42:58 UTC (buildkit.dockerfile.v0)

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

2026-06-08 14:42:58 UTC (buildkit.dockerfile.v0)

CMD ["pnpm" "start"]

Details
Created

2026-06-08 14:46:16 UTC

Size

532 MB

Content Digest
Labels
  • org.opencontainers.image.created
    2026-06-08T14:42:03.674Z
  • org.opencontainers.image.description
    A unified hub for centrally managing and dynamically orchestrating multiple MCP servers/APIs into separate endpoints with flexible routing strategies.
  • org.opencontainers.image.licenses
    Apache-2.0
  • org.opencontainers.image.revision
    be40426bd741599abc8a44f29efb586dbb13c5d7
  • org.opencontainers.image.source
    https://github.com/samanhappy/mcphub
  • org.opencontainers.image.title
    mcphub
  • org.opencontainers.image.url
    https://github.com/samanhappy/mcphub
  • org.opencontainers.image.version
    1.0.13

Environment
GPG_KEY

7169605F62C751356D054A26A821E680E5FA6305

PATH

/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PYTHON_SHA256

2ab91ff401783ccca64f75d10c882e957bdfd60e2bf5a72f8421793729b78a71

PYTHON_VERSION

3.13.13


Layers

[#000] sha256:f400d36d7784570c9fb7558e367d2b5d38e8b2f1d6faee041815acea7f87e669 - 5.04% (26.8 MB)

[#001] sha256:c25ba0749ef3a82f5ef8d1ec0faa92c0ef39b97d67d4bfe13ed99a0ac757ec03 - 0.6% (3.2 MB)

[#002] sha256:4fa1415133f17333dc45075a2a9ec73d04e8856502d2f2bee4e812d3aa99ea07 - 2.22% (11.8 MB)

[#003] sha256:bea3e78864a8889b7fe3bf62966bebbf6e332b9446fce80803c012a5d81d66bf - 0.0% (250 Bytes)

[#004] sha256:75da8386db23dc4d2ab1bb576138c7150d83c9d44fdbed2800361662c4fa90d0 - 4.18% (22.3 MB)

[#005] sha256:71eb8a8149923af28b9da3286b49deadcb1c38dd86225f45359d292ce0254da6 - 35.39% (188 MB)

[#006] sha256:bb0fa2380bd63ed297c55598072a603ec7e645b68353242179e0c815f7dfe805 - 0.79% (4.22 MB)

[#007] sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 - 0.0% (32 Bytes)

[#008] sha256:b6236ff93f47363503778534d0c981e0a08790fa350e0cce9285642ba44dd84b - 3.84% (20.4 MB)

[#009] sha256:36696d6c59dbe613adad6e8dfa4015b1ddca38320e73c1142d2056fec320f54b - 0.0% (93 Bytes)

[#010] sha256:dc176a1fba51a35c6975a35e0d04544313f8a7e43cae3db5f7905a8c86660740 - 0.02% (110 KB)

[#011] sha256:c5f1c8b472475fa77b39bb62e1e36fc9a3369e9e4861e7765c3fde2e14d40fe4 - 46.72% (249 MB)

[#012] sha256:ed0c4df312f8ed9cecfefcda32cce79fe7231b39e1c7df3a08f0c227a5f0b785 - 0.03% (163 KB)

[#013] sha256:12f64906ae47030b116ff4eb2eecc509d1faad0be9d5a0f22b192c3e6ed6a8df - 0.53% (2.83 MB)

[#014] sha256:c897c7c1e1f78c9b6f7282452346d6504475be9f84e1f33164fd49bd8fd1fc4d - 0.07% (402 KB)

[#015] sha256:b09ed676236ef880d249383e39f5ed6f81e67cbe3ee10570fc8d5f3ec679ca90 - 0.55% (2.94 MB)

[#016] sha256:ce8daa903dbb8d4af728c27f1cf4c4a348f424a7ac3bbdd1083051e71ea3a23a - 0.0% (833 Bytes)

[#017] sha256:ce646348d6ca10bc4ce192d2fd61a52774f1d8d91fced5f31469edffb2b1e9a9 - 0.0% (828 Bytes)


History
2026-05-18 00:00:00 UTC (debuerreotype 0.17)

# debian.sh --arch 'arm64' out/ 'bookworm' '@1779062400'

2026-05-19 23:44:20 UTC (buildkit.dockerfile.v0)

ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2026-05-19 23:44:20 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; rm -rf /var/lib/apt/lists/* # buildkit

2026-05-19 23:44:20 UTC (buildkit.dockerfile.v0)

ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305

2026-05-19 23:44:20 UTC (buildkit.dockerfile.v0)

ENV PYTHON_VERSION=3.13.13

2026-05-19 23:44:20 UTC (buildkit.dockerfile.v0)

ENV PYTHON_SHA256=2ab91ff401783ccca64f75d10c882e957bdfd60e2bf5a72f8421793729b78a71

2026-05-19 23:58:26 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev ; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; LDFLAGS="${LDFLAGS:-} -Wl,--strip-all"; arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; case "$arch" in amd64|arm64) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"; ;; i386) ;; *) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer"; ;; esac; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\$\$ORIGIN/../lib'" python ; make install; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark; find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' | sort -u | xargs -rt dpkg-query --search | awk 'sub(":$", "", $1) { print $1 }' | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; rm -rf /var/lib/apt/lists/*; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit

2026-05-19 23:58:26 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit

2026-05-19 23:58:26 UTC (buildkit.dockerfile.v0)

CMD ["python3"]

2026-06-04 09:28:48 UTC (buildkit.dockerfile.v0)

COPY /uv /uvx /bin/ # buildkit

2026-06-04 09:31:49 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c apt-get update && apt-get install -y curl gnupg git build-essential && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && apt-get install -y nodejs && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit

2026-06-04 09:31:58 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c corepack enable && corepack prepare pnpm@10.12.4 --activate # buildkit

2026-06-04 09:31:58 UTC (buildkit.dockerfile.v0)

ARG INSTALL_EXT=false

2026-06-04 09:31:58 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c if [ "$INSTALL_EXT" = "true" ]; then ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then npx -y playwright install --with-deps chrome firefox; else echo "Skipping Chrome and Firefox installation on non-amd64 architecture: $ARCH"; fi; apt-get update && apt-get install -y ca-certificates curl iptables && install -m 0755 -d /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && chmod a+r /etc/apt/keyrings/docker.asc && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io && apt-get clean && rm -rf /var/lib/apt/lists/*; fi # buildkit

2026-06-04 09:32:05 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c uv tool install mcp-server-fetch # buildkit

2026-06-04 09:32:05 UTC (buildkit.dockerfile.v0)

WORKDIR /app

2026-06-08 14:42:24 UTC (buildkit.dockerfile.v0)

COPY package.json pnpm-lock.yaml ./ # buildkit

2026-06-08 14:43:15 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c pnpm config set store-dir /pnpm/store && pnpm fetch --frozen-lockfile # buildkit

2026-06-08 14:43:31 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c pnpm config set store-dir /pnpm/store && pnpm install --frozen-lockfile --offline # buildkit

2026-06-08 14:43:31 UTC (buildkit.dockerfile.v0)

COPY . . # buildkit

2026-06-08 14:43:32 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c curl -s -f --connect-timeout 10 https://mcpm.sh/api/servers.json -o servers.json || echo "Failed to download servers.json, using bundled version" # buildkit

2026-06-08 14:46:16 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c pnpm build # buildkit

2026-06-08 14:46:16 UTC (buildkit.dockerfile.v0)

COPY entrypoint.sh /usr/local/bin/entrypoint.sh # buildkit

2026-06-08 14:46:16 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=false /bin/sh -c chmod +x /usr/local/bin/entrypoint.sh # buildkit

2026-06-08 14:46:16 UTC (buildkit.dockerfile.v0)

EXPOSE map[3000/tcp:{}]

2026-06-08 14:46:16 UTC (buildkit.dockerfile.v0)

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

2026-06-08 14:46:16 UTC (buildkit.dockerfile.v0)

CMD ["pnpm" "start"]