FROM python:3.13-slim-bookworm AS base COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ RUN apt-get update && apt-get install -y curl gnupg git \ && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ && apt-get install -y nodejs \ && apt-get clean && rm -rf /var/lib/apt/lists/* RUN npm install -g pnpm ENV PNPM_HOME=/usr/local/share/pnpm ENV PATH=$PNPM_HOME:$PATH RUN mkdir -p $PNPM_HOME && \ pnpm add -g @amap/amap-maps-mcp-server @playwright/mcp@latest tavily-mcp@latest @modelcontextprotocol/server-github @modelcontextprotocol/server-slack ARG INSTALL_EXT=false RUN if [ "$INSTALL_EXT" = "true" ]; then \ ARCH=$(uname -m); \ if [ "$ARCH" = "x86_64" ]; then \ npx -y playwright install --with-deps chrome; \ else \ echo "Skipping Chrome installation on non-amd64 architecture: $ARCH"; \ fi; \ fi RUN uv tool install mcp-server-fetch WORKDIR /app COPY package.json pnpm-lock.yaml ./ RUN pnpm install COPY . . # Download the latest servers.json from mcpm.sh and replace the existing file RUN curl -s -f --connect-timeout 10 https://mcpm.sh/api/servers.json -o servers.json || echo "Failed to download servers.json, using bundled version" RUN pnpm frontend:build && pnpm build COPY entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh EXPOSE 3000 ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] CMD ["pnpm", "start"]