Architecture

Remote & Mobile Architecture

How jobContext exposes its tools over HTTP, SSE, and WebSocket for iPad, browser, and Open WebUI clients without breaking existing local stdio MCP support.

Goal

Add remote and mobile access so jobContext can be used from iPad, browser clients, Open WebUI, VS Code tunnels, and future web UIs without touching the existing Claude Desktop stdio path.

Current

Claude Desktop
    ↓ stdio
jobContextMCP

Target

                ┌─────────────────────┐
                │ Claude Desktop      │
                │ (existing stdio)    │
                └──────────┬──────────┘
                           │ stdio
                ┌──────────▼──────────┐
                │   jobContextMCP     │
                │ core tools/services │
                └──────────┬──────────┘
                           │
         ┌─────────────────┼─────────────────┐
         │                 │                 │
       REST              SSE             WebSocket
         │                 │                 │
         ▼                 ▼                 ▼
   Open WebUI         Browser UI        iPad clients
   Custom app         Streaming         Remote agents

Critical design requirement

Business logic must not be tightly coupled to any transport layer. The layered architecture:

transport/
    mcp_stdio/    ← existing Claude Desktop path (untouched)
    http/         ← FastAPI REST + SSE
    websocket/    ← future iPad/agent clients

services/
    resume_service.py
    job_analysis_service.py
    retrieval_service.py
    tone_service.py
    langgraph_service.py

repositories/
    vector_store/
    documents/
    embeddings/

workflows/
    langgraph/

MCP tools become thin wrappers around the shared service layer. No duplicated logic between HTTP and MCP.

Transport layers

REST

HTTP API

FastAPI endpoints for job analysis, resume generation, story retrieval, and tone search. JSON in, structured data out.

SSE

Server-Sent Events

Streaming progress for resume generation, live job analysis, and multi-step LangGraph workflows. Essential for browser and iPad UX.

WebSocket

WebSocket

Bidirectional channel for iPad clients and remote agent sessions requiring low-latency two-way communication.

stdio

MCP stdio

Existing Claude Desktop transport. Preserved exactly as-is. MCP tools delegate to services rather than owning logic.

Key REST endpoints

Job analysis

POST /api/jobs/analyze
{
  "job_description": "...",
  "target_role": "...",
  "resume_id": "default"
}

Returns keyword extraction, match score, missing skills, recommended STAR stories, and suggested resume edits.

Resume generation

POST /api/resumes/generate

Returns a tailored resume in markdown and ATS-optimized form. PDF export available via the LaTeX pipeline.

Streaming workflow

GET /api/workflows/stream/{session_id}

SSE stream of multi-step LangGraph workflow progress. Resumable sessions planned.

Story & tone search

POST /api/stories/search
POST /api/tone/search

Semantic search over STAR stories and tone samples with relevance scores.

Authentication

API keys initially, JWT when needed.

Authorization: Bearer <token>

Token stored in .env. Microsoft Entra ID (MSAL) integration for the hosted dashboard.

Remote access

Tailscale-compatible, LAN-safe by default, configurable host binding. Not exposed publicly without explicit opt-in.

HOST=127.0.0.1
PORT=8000
ENABLE_REMOTE=false

Non-goals & priorities

Do NOT

  • Rewrite the MCP server
  • Remove stdio support
  • Tightly bind UI to backend
  • Make LangGraph the only orchestration path
  • Over-engineer auth initially

Prioritize

  • Modularity
  • Transport independence
  • Mobile and browser usability
  • Clean service abstraction

See also