Namespace
samanhappy
Image / Tag
mcphub:1.0.13-full
Content Digest
sha256:347fff20d37bfd76e1b5ced801526f51fdefdee810537fb979be7d879e44f828
Details
Created

2026-06-08 14:44:02 UTC

Size

1.1 GB

Content Digest
Labels
  • org.opencontainers.image.created
    2026-06-08T14:41:59.860Z
  • 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-full

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 - 2.38% (26.9 MB)

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

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

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

[#004] sha256:d875f1db27ddac8789e0676447302e417902457d9969c31b7fdf2b2c214f490a - 2.05% (23.2 MB)

[#005] sha256:219151d0738ab6fcd1e8dbdc2e390f1a13f087a6f714b8b892b0d5c1751aa17f - 17.4% (197 MB)

[#006] sha256:49eb8046012202b3185172353d2dd45004cfb6d71d47a12ece24e0fd54c2fe8d - 0.37% (4.22 MB)

[#007] sha256:7b366f0372011e23049c786207f5643d5605e0f97c245b1113a49350b2858dce - 51.41% (581 MB)

[#008] sha256:175fc73be17d3dc5b9f745743ecdc15c9c38f9de351ee1a52ee5a777c23eac3a - 1.83% (20.7 MB)

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

[#010] sha256:8860a97bf8927ce27d6df1b6d613db1ac7883862582f3f7b513e4e3f1282e9e3 - 0.01% (110 KB)

[#011] sha256:a9d573279742f9d41ab4687f4c54ba07b2565bafa785afb834d3213039f184d6 - 22.63% (256 MB)

[#012] sha256:37c259559e5a381f89a8af612ce678310db87691c919e27fb54e192b7fbc2493 - 0.01% (163 KB)

[#013] sha256:3d6ac87e73aa51659e2fc07f7c286a71880dc1a0dc8c56755222f9e412c42e01 - 0.25% (2.83 MB)

[#014] sha256:c4874426656afe0eaa6fc7c3019a8f4e2641f47056f2bb43abb2f6865ca82e9b - 0.03% (402 KB)

[#015] sha256:363f04ada264ea3f55e0ef5f93892eb8de9cf107b59b6dc36e35c4a6985e87c8 - 0.26% (2.94 MB)

[#016] sha256:149c115eb3d000edabc3ded9b2e4f4c0a779af920acc42590ffc35fc8a158333 - 0.0% (831 Bytes)

[#017] sha256:1fcdd099c653ce75c1499f52f1201efd4458c24d0218373f5d0de7dd706447fd - 0.0% (826 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-08 14:42:05 UTC (buildkit.dockerfile.v0)

COPY /uv /uvx /bin/ # buildkit

2026-06-08 14:42:29 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-08 14:42:31 UTC (buildkit.dockerfile.v0)

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

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

ARG INSTALL_EXT=false

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

RUN |1 INSTALL_EXT=true /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-08 14:43:27 UTC (buildkit.dockerfile.v0)

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

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

WORKDIR /app

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

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

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

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

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

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

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

COPY . . # buildkit

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

RUN |1 INSTALL_EXT=true /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:44:02 UTC (buildkit.dockerfile.v0)

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

2026-06-08 14:44:02 UTC (buildkit.dockerfile.v0)

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

2026-06-08 14:44:02 UTC (buildkit.dockerfile.v0)

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

2026-06-08 14:44:02 UTC (buildkit.dockerfile.v0)

EXPOSE map[3000/tcp:{}]

2026-06-08 14:44:02 UTC (buildkit.dockerfile.v0)

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

2026-06-08 14:44:02 UTC (buildkit.dockerfile.v0)

CMD ["pnpm" "start"]

Details
Created

2026-06-08 14:51:16 UTC

Size

657 MB

Content Digest
Labels
  • org.opencontainers.image.created
    2026-06-08T14:41:59.860Z
  • 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-full

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 - 4.08% (26.8 MB)

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

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

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

[#004] sha256:bcc2db30ee7b0ac1a9471ea40a6a8836e1f985a2c9f7fc91db4da8f449a907fc - 3.39% (22.3 MB)

[#005] sha256:a1e3e0b2ccc9cb1e764f02ac2875f505c45c7a0dc5f1ab0870ff4cb2c14a92d2 - 28.67% (188 MB)

[#006] sha256:3094b5c022d0aed8b704527bde34421e713d728a31e3503ebf85be8ba83ad05d - 0.64% (4.22 MB)

[#007] sha256:21b8610c3b59f049bb26624abfb84ec35c545e98c8c4b05ef0993f07f9a63daa - 19.0% (125 MB)

[#008] sha256:7263746a06cbf62e31380f9a6bf1ab1bd928aced29bf83f6ef3805b499b88f9a - 3.11% (20.4 MB)

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

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

[#011] sha256:293210c79c59d333c7f866b860a2586a9e368878f420d0e8cf7941f93345debf - 37.85% (249 MB)

[#012] sha256:050c18eb898f27a9b1ab863cbe048499144060a39030cd84d5be3171bdd217db - 0.02% (163 KB)

[#013] sha256:3d6ac87e73aa51659e2fc07f7c286a71880dc1a0dc8c56755222f9e412c42e01 - 0.43% (2.83 MB)

[#014] sha256:7dbe2ba13cf46f58ea7f9e26b4325832dc009ea9d585a9c78b27e1d3052393d6 - 0.06% (402 KB)

[#015] sha256:e865a2ca77a52418acf418a9599bfb6cfb5f31adaeb698d00bfd4148f0cfa110 - 0.45% (2.94 MB)

[#016] sha256:67094aaac2db79a20b488ebe2d258bac30f86daecfb510e346a6bb2707df0e15 - 0.0% (832 Bytes)

[#017] sha256:9bfd3126b3243d241a77596a5fae390852c43fbd37ebb53ad5de38dc440b50fa - 0.0% (827 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-08 14:42:05 UTC (buildkit.dockerfile.v0)

COPY /uv /uvx /bin/ # buildkit

2026-06-08 14:45:20 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-08 14:45:29 UTC (buildkit.dockerfile.v0)

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

2026-06-08 14:47:05 UTC (buildkit.dockerfile.v0)

ARG INSTALL_EXT=false

2026-06-08 14:47:05 UTC (buildkit.dockerfile.v0)

RUN |1 INSTALL_EXT=true /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-08 14:47:13 UTC (buildkit.dockerfile.v0)

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

2026-06-08 14:47:13 UTC (buildkit.dockerfile.v0)

WORKDIR /app

2026-06-08 14:47:13 UTC (buildkit.dockerfile.v0)

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

2026-06-08 14:47:56 UTC (buildkit.dockerfile.v0)

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

2026-06-08 14:48:13 UTC (buildkit.dockerfile.v0)

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

2026-06-08 14:48:13 UTC (buildkit.dockerfile.v0)

COPY . . # buildkit

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

RUN |1 INSTALL_EXT=true /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:51:15 UTC (buildkit.dockerfile.v0)

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

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

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

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

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

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

EXPOSE map[3000/tcp:{}]

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

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

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

CMD ["pnpm" "start"]