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…/ssetostreamable-http+ url…/mcpin librechat.yaml and SKILL.md -
Task 1 — Fix MCP server startup lag caused by env var access
- Audit every MCP server — determine
startup: falsevs auto-start - Set
startup: falseon 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
- Audit every MCP server — determine
-
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
tsxglobally in Dockerfile - Pre-install
mcp-server-gitif possible (added to uv pip install) - Rebuild and push Docker image — done (image deployed on Railway)
- Verify:
npx tsx --versionand MCP commands run without download delay - Update
Forge_Infrastructure.mdwith 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-slimtoFROM 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 checkandastro buildsucceed inside container - Update
Forge_Infrastructure.mdto reflect Node 22
- Update Dockerfile: change
-
Task 5 — Update infrastructure documentation
- Update MCP Server Details with startup behavior changes
- Update Debian-slim Container Notes with pre-installed packages
- Document
startup: falsestrategy - Document
railway_env.pyinjection pattern - Remove/update outdated Alpine references
-
Task 6 — Create State document
- State 4 created (this document)
Test Results (Task 3)
Environment baseline
| Check | Result |
|---|---|
| Node.js | v22.22.2 ✅ |
| npm | 10.9.7 ✅ |
| tsx | v4.21.0 (no download delay) ✅ |
| uvx | 0.11.7 ✅ |
| Python | 3.11.2 ✅ |
| mcp (Python) | 1.27.0 OK ✅ |
| pymongo | 4.17.0 OK ✅ (had to install into uv’s Python — see Issue below) |
| dnspython | OK ✅ (same) |
| astro check | 0 errors, 2 hints ✅ |
| astro build | 324 pages, 18.44s ✅ |
| git commit/pull | OK ✅ |
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 Server | Test Action | Result |
|---|---|---|---|
| 1 | uvilo-filesystem | read/write/search | ✅ Working |
| 2 | uvilo-shell | execute commands | ✅ Working |
| 3 | uvilo-typesense | search_knowledge | ✅ Working |
| 4 | uvilo-trash | trash file | ✅ Working |
| 5 | vercel | getDeployments | ✅ Working (returned uvilo-os deployment) |
| 6 | github | search_repositories | ✅ Working |
| 7 | context7 | resolve-library-id | ✅ Working |
| 8 | railway | project_environments | ✅ Working |
| 9 | neon | describe_project | ✅ Working (API key updated) |
| 10 | notion | API-get-users / search | ✅ Working |
| 11 | linear | create_issue | ✅ Working (created test issue UVI-151) |
| 12 | posthog | insights-list / dashboards / experiments | ✅ Working |
| 13 | playwright | streamable-http connection | ✅ Working (changed from SSE to streamable-http transport) |
| 14 | surveymonkey | (deleted) | ✅ Deleted — Composio-based, non-functional as deferred tool |
| 15 | suprsend-dev | (removed from agents) | ✅ Removed from Master agent |
| 16 | suprsend-staging | (removed from agents) | ✅ Removed from Master agent |
| 17 | suprsend-prod | (removed from agents) | ✅ Removed from Master agent |
Skill Tests
| # | Skill | Status |
|---|---|---|
| 1 | Update_Agents | [UNVERIFIED] — requires running /update-agents with dry-run flag, which involves skill execution |
| 2 | Deploy_Config | [UNVERIFIED] — requires running validation script |
| 3 | Reindex_Typesense | [UNVERIFIED] — requires running indexing script |
| 4 | NPM | [UNVERIFIED] — requires checking pinned deps |
Pre-installed npm packages (verified)
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