Skip to main content
Glama

af-jupyterlab-mcp

Servidor MCP que permite a los usuarios de AF crear, inspeccionar y eliminar sus propios servidores JupyterLab por usuario en el clúster Kubernetes de la UChicago ATLAS Analysis Facility — los mismos notebooks que af-portal despliega hoy, expuestos como herramientas para LLMs.

Arquitectura

LLM <--MCP/HTTP--> af-jupyterlab-mcp <--k8s API--> notebook namespace (Pod/Service/Secret/Ingress)
                         ^
                         | Authorization: Bearer <broker-issued JWT>
                         |
              af-mcp-platform credential broker

La fase 1 (este repositorio, hoy) incluye seis herramientas que gestionan la cuádruple Pod/Service/Secret/Ingress de un notebook, portadas desde portal/jupyterlab.py de af-portal y sus cuatro plantillas Jinja. La fase 2 (en seguimiento, aún no construida) añade un proxy tipado al jupyter-mcp-server de Datalayer que se ejecuta dentro del propio notebook — véase maniaclab/af-mcp-platform#189.

Related MCP server: rucio-mcp

Estructura del proyecto

src/af_jupyterlab_mcp/
├── cli.py               # argparse: `af-jupyterlab-mcp serve` (HTTP only)
├── config.py            # env-driven Settings: namespace, domain, image allowlist, quotas
├── server.py            # FastMCP setup, lifespan (k8s client + broker verifier), tool registration
├── auth/
│   └── broker.py        # extract_bearer(), get_broker_claims() -- broker-issued JWT verification
├── k8s/
│   ├── errors.py         # GuardrailError, NameConflictError, NotFoundOrNotYoursError, ...
│   ├── guardrails.py     # CPU/memory/duration range + image allowlist validation
│   ├── names.py          # sanitize_k8s_pod_name, name availability, name generation
│   ├── templates.py      # Jinja rendering of the four ported manifests
│   ├── notebooks.py      # create/get/list/delete notebook (ported portal logic)
│   ├── gpu.py            # get_gpu_availability (ported portal logic)
│   └── templates/        # pod.yaml.j2, service.yaml.j2, secret.yaml.j2, ingress.yaml.j2
│                          # (ported verbatim from af-portal/portal/templates/jupyterlab/)
└── tools/
    └── jupyterlab.py     # the six @mcp.tool() functions

Superficie de herramientas

  • create_jupyter_server

  • list_jupyter_servers

  • get_jupyter_server

  • delete_jupyter_server

  • get_gpu_availability

  • list_supported_images

El propietario de cada servidor es siempre claims.unixname del JWT de broker verificado — ninguna herramienta acepta un argumento de propietario/nombre de usuario.

Comandos de compilación y prueba

pixi run test          # quick tests
pixi run lint          # pre-commit + pylint
pixi run helm-lint      # lint + smoke-render the Helm chart

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    An MCP server that enables LLMs to execute Python code on GPU-accelerated compute nodes within SLURM-managed HPC environments. It bridges local clients to remote clusters by launching JupyterLab sessions via SLURM jobs to facilitate high-performance notebook-based computation.
    7
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that exposes Rucio distributed data management operations as tools for LLMs. Designed for ATLAS physicists working with grid data on analysis facilities, but usable with any Rucio instance.
    42 PyPI
    6
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables code execution in isolated Docker containers with persistent IPython, Node.js, or R kernels, supporting file import/export and cross-session transfers via MCP tools.
    6
    MIT