AIX - AI eXtensions for quantitative development
Collection of MCP servers, agents, and extensions for quantitative development/research with Qubx.
XLMCP - Jupyter MCP Server
XLMCP gives Claude Code tools to interact with Jupyter notebooks running on JupyterHub or a standalone Jupyter Server — read/edit cells, manage kernels, and execute code.
Note: knowledge/RAG search and project-management tools were moved out of xlmcp (to the
crtx-serverproject) as of v0.5.0. xlmcp is now a focused Jupyter server.
Total Tools: 17 (Jupyter notebook, kernel, and execution operations)
Quick Reference
Jupyter Tools (17)
# - Notebook operations
await jupyter_list_notebooks(directory="")
await jupyter_find_notebook(filename)
await jupyter_get_notebook_info(notebook_path)
await jupyter_read_cell(notebook_path, cell_index)
await jupyter_read_all_cells(notebook_path)
await jupyter_append_cell(notebook_path, source, cell_type="code")
await jupyter_insert_cell(notebook_path, cell_index, source, cell_type="code")
await jupyter_update_cell(notebook_path, cell_index, source)
await jupyter_delete_cell(notebook_path, cell_index)
# - Kernel operations
await jupyter_list_kernels()
await jupyter_start_kernel(kernel_name="python3")
await jupyter_stop_kernel(kernel_id)
await jupyter_restart_kernel(kernel_id)
await jupyter_interrupt_kernel(kernel_id)
# - Execution
await jupyter_execute_code(kernel_id, code, timeout=None)
await jupyter_connect_notebook(notebook_path)
await jupyter_execute_cell(notebook_path, cell_index, timeout=None)
Connecting to a notebook's kernel
jupyter_connect_notebook resolves the kernel for a notebook by normalised path match (absolute /
server-relative / VS Code -jvsc-<uuid> synthetic paths all map to the same notebook), so it reuses the
live kernel instead of spawning duplicates. Its status:
existing— one live kernel matched; use itskernel_id.ambiguous— several matched; pick akernel_idfromcandidates(or stop the extras).created— none matched, a new session was made.
Every response includes attach_url — paste it into VS Code → Select Kernel → Existing Jupyter
Server to join the same kernel from the editor (the token authenticates directly to the single-user
server, bypassing the Hub login dialog).
Installation
From PyPI (Recommended)
pip install xlmcp
# - or using uv
uv pip install xlmcp
From Source
cd ~/devs/aix
uv pip install -e .
Configuration
Environment Setup
- Copy
env.exampleto.env:
cp env.example .env
- Edit
.envand configure:
Jupyter Server (Required):
JUPYTER_SERVER_URL=http://localhost:8888
JUPYTER_API_TOKEN=your-token-here
JUPYTER_NOTEBOOK_DIR=~/
JUPYTER_ALLOWED_DIRS=~/projects,~/devs,~/research
MCP Server (Optional, defaults provided):
MCP_TRANSPORT=stdio
MCP_HTTP_PORT=8765
MCP_MAX_OUTPUT_TOKENS=25000
Get a Jupyter API Token
- JupyterHub: Admin panel → User → New API Token
- Jupyter Server:
jupyter server listshows the token
Global Setup (Multi-Project Environments)
For users with multiple projects and virtual environments:
1. Install xlmcp Globally
# Install in system Python (not in project venvs)
pip install xlmcp
# or: /usr/bin/python -m pip install xlmcp
2. Create Central Configuration
mkdir -p ~/.aix/xlmcp
cp env.example ~/.aix/xlmcp/.env
nano ~/.aix/xlmcp/.env # Add your JUPYTER_API_TOKEN
xlmcp finds config in this order:
.envin the current directory (project-specific override)~/.aix/xlmcp/.env(global default) ← Recommended- Environment variables
3. Register with Claude Code
cd /path/to/project
source .venv/bin/activate # if using a venv
claude mcp add --transport stdio xlmcp -- /usr/bin/python -m xlmcp.server
Replace /usr/bin/python with your system Python (which python outside any venv).
Verify:
claude mcp list
# Should show: xlmcp: /usr/bin/python -m xlmcp.server - ✓ Connected
Simple Setup (Single Project / Quick Start)
pip install xlmcp
cp env.example .env
nano .env # Add JUPYTER_API_TOKEN
claude mcp add --transport stdio xlmcp -- python -m xlmcp.server
Or with environment variables (no .env file needed):
claude mcp add \
-e JUPYTER_SERVER_URL=http://localhost:8888 \
-e JUPYTER_API_TOKEN=your-token \
--transport stdio \
xlmcp \
-- python -m xlmcp.server
The -- before python separates MCP options from the server command.
XLMCP CLI
xlmcp start # Start server in background
xlmcp status # Show server status
xlmcp ls # List available tools
xlmcp kernels # List active Jupyter kernels
xlmcp restart # Restart server
xlmcp stop # Stop server
Usage Examples
> Connect to my notebook and execute the first cell
> List all notebooks in research/momentum/
> Execute code: print("Hello from Jupyter!")
> Restart the kernel for research/analysis.ipynb
Transport Modes
stdio (default) — for local Claude Code:
MCP_TRANSPORT=stdio
http — for remote access:
MCP_TRANSPORT=http
MCP_HTTP_PORT=8765
claude mcp add xlmcp --transport http http://your-server:8765
Security
- Path validation: only allows access to configured directories
- Token authentication: uses Jupyter API tokens
- Timeout limits: prevents runaway executions
Documentation
- Usage Guide — installation, configuration, CLI, usage examples
- Implementation — technical architecture and design details
License
MIT
Metadata
Release files for xlmcp 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xlmcp-0.5.1.tar.gz | 184.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xlmcp-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 207.0 kB
Release files / xlmcp-0.5.1.tar.gz
| Download URL | xlmcp-0.5.1.tar.gz |
|---|---|
| Size | 184.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a33a514ebd16414dfa41d626fdb455791cf64a265fe32dbb4adef64f17be6dda
|
|
BLAKE2b-256 checksum How to use checksums |
bcb6642fedb40feed8bb474e8331dd19d5690284119efaba2c480016bb09cef4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / xlmcp-0.5.1-py3-none-any.whl
| Download URL | xlmcp-0.5.1-py3-none-any.whl |
|---|---|
| Size | 22.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ffd3ef25bfd8d87ed686a2af47cb0a62ee2db1c92aed8e575eb899ce507b0b61
|
|
BLAKE2b-256 checksum How to use checksums |
cc4a9375e2c646e7fb28d9eafc7a9d6231881db1d2e66f53de391eb6ff560c72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|