Skip to content
archived Visibility internal Owner erik@uvilo.com Approver _ Created 2026-04-22 Updated 2026-04-22

Container Base Image State 4

Related plan: Container Base Image Plan 4


Notes

  • Deleted SurveyMonkey MCP server (Composio-based, was non-functional as deferred tool)

  • Removed from Master agent: PostHog MCP, and all 3 SuprSend MCPs (suprsend-dev, suprsend-staging, suprsend-prod)

  • Updated Neon API key — now works correctly (was 404 due to old/placeholder key)

  • Updated Playwright MCP: changed type from sse + url …/sse to streamable-http + url …/mcp in librechat.yaml and SKILL.md

  • Task 1 — Fix MCP server startup lag caused by env var access

    • Audit every MCP server — determine startup: false vs auto-start
    • Set startup: false on servers not needed at session start
    • Verify env: blocks correctly inject all 12 Railway env vars
    • Verify Python MCP servers call inject_railway_env() before env var access
    • Test: new conversation starts in under 5 seconds (requires redeploy) — confirmed fast
  • Task 2 — Eliminate constant package reinstalls

    • Audit all npx-based MCP server commands for download-on-spawn
    • Pre-install frequently-used npm packages globally in Dockerfile
    • Pre-install tsx globally in Dockerfile
    • Pre-install mcp-server-git if possible (added to uv pip install)
    • Rebuild and push Docker image — done (image deployed on Railway)
    • Verify: npx tsx --version and MCP commands run without download delay
    • Update Forge_Infrastructure.md with pre-installed packages
  • Task 3 — Comprehensive component, tool, MCP server, and skill testing

    • Examine LibreChat logs for thrown errors; fix any found before proceeding
    • Test all 17 MCP servers with meaningful functional tests
    • [UNVERIFIED] Test Forge skills (Update_Agents, Deploy_Config, Reindex_Typesense, NPM)
    • Test environment tools (git, python3, npx, uvx, tsx)
    • Record all test results in State 4
  • Task 4 — Upgrade Node.js from v20 to v22

    • Update Dockerfile: change FROM node:20-slim to FROM node:22-slim (builder + runtime stages)
    • Rebuild and push Docker image locally
    • Redeploy on Railway and verify container starts with Node 22
    • Verify LibreChat serves correctly on Node 22
    • Verify all MCP servers start on Node 22
    • Verify astro check and astro build succeed inside container
    • Update Forge_Infrastructure.md to reflect Node 22
  • Task 5 — Update infrastructure documentation

    • Update MCP Server Details with startup behavior changes
    • Update Debian-slim Container Notes with pre-installed packages
    • Document startup: false strategy
    • Document railway_env.py injection pattern
    • Remove/update outdated Alpine references
  • Task 6 — Create State document

    • State 4 created (this document)

Test Results (Task 3)

Environment baseline

CheckResult
Node.jsv22.22.2 ✅
npm10.9.7 ✅
tsxv4.21.0 (no download delay) ✅
uvx0.11.7 ✅
Python3.11.2 ✅
mcp (Python)1.27.0 OK ✅
pymongo4.17.0 OK ✅ (had to install into uv’s Python — see Issue below)
dnspythonOK ✅ (same)
astro check0 errors, 2 hints ✅
astro build324 pages, 18.44s ✅
git commit/pullOK ✅

Issue: uv Python vs system Python path mismatch

python3 resolves to uv’s managed Python at /root/.cache/uv/archive-v0/.../bin/python3 (PATH priority), NOT /usr/bin/python3. The Dockerfile’s uv pip install --system pymongo dnspython installs to /usr/local/lib/python3.11/dist-packages/ (system Python), but uv’s Python doesn’t see those packages. Fix: Run uv pip install --python <uv-python-path> pymongo dnspython or set UV_SYSTEM_PYTHON=1 so uv targets the actual system interpreter. The suprsend-mcp-proxy.py uses #!/usr/bin/env python3 which resolves to uv’s Python, so it needs pymongo there too.

MCP Server Test Results

#MCP ServerTest ActionResult
1uvilo-filesystemread/write/search✅ Working
2uvilo-shellexecute commands✅ Working
3uvilo-typesensesearch_knowledge✅ Working
4uvilo-trashtrash file✅ Working
5vercelgetDeployments✅ Working (returned uvilo-os deployment)
6githubsearch_repositories✅ Working
7context7resolve-library-id✅ Working
8railwayproject_environments✅ Working
9neondescribe_project✅ Working (API key updated)
10notionAPI-get-users / search✅ Working
11linearcreate_issue✅ Working (created test issue UVI-151)
12posthoginsights-list / dashboards / experiments✅ Working
13playwrightstreamable-http connection✅ Working (changed from SSE to streamable-http transport)
14surveymonkey(deleted)✅ Deleted — Composio-based, non-functional as deferred tool
15suprsend-dev(removed from agents)✅ Removed from Master agent
16suprsend-staging(removed from agents)✅ Removed from Master agent
17suprsend-prod(removed from agents)✅ Removed from Master agent

Skill Tests

#SkillStatus
1Update_Agents[UNVERIFIED] — requires running /update-agents with dry-run flag, which involves skill execution
2Deploy_Config[UNVERIFIED] — requires running validation script
3Reindex_Typesense[UNVERIFIED] — requires running indexing script
4NPM[UNVERIFIED] — requires checking pinned deps

Pre-installed npm packages (verified)

@jasontanswe/railway-mcp@1.3.0
@modelcontextprotocol/server-filesystem@2026.1.14
@modelcontextprotocol/server-github@2025.4.8
@notionhq/notion-mcp-server@2.2.1
@touchlab/linear-mcp-integration@0.1.1
@upstash/context7-mcp@2.1.8
mcp-remote@0.1.38
npm@10.9.7
tsx@4.21.0
vercel-mcp@0.0.7

All 12 env vars verified present in /proc/1/environ

✅ VERCEL_API_KEY, GITHUB_TOKEN, NEON_API_KEY, NOTION_TOKEN, LINEAR_ACCESS_TOKEN, RAILWAY_API_TOKEN, POSTHOG_API_KEY, COMPOSIO_SM_MCP_URL, COMPOSIO_API_KEY, SUPRSEND_SERVICE_TOKEN, TYPESENSE_HOST, TYPESENSE_SEARCH_KEY

All 15 MCP servers have startup: false

✅ Confirmed — no servers auto-start at conversation creation