slmn
What’s inside
slmn is a small collection of independent tools, each in its own notebook/module:
| module | what it does |
|---|---|
nbtools |
read, grep, and edit Jupyter notebook cells by id – no hand-rolled JSON surgery |
misc |
read a PDF’s text; check whether a local GPU is free |
remote |
launch and monitor background jobs on a remote host over ssh; fetch a URL; check a repo’s GitHub CI |
[publish](https://drscotthawley.github.io/slmn/publish.html#publish) |
automate the nbdev edit->ship loop: clean/export, a reviewed commit, push, wait for CI, and (on a feature branch) merge a PR to main |
dead_drop |
file-based async IPC – one side drops a message file, another picks it up (with a streaming variant) |
cli |
the slmn <tool> [args...] dispatcher that exposes all of the above from the shell |
mcp |
an optional server exposing the same tools to any MCP client (slmn-mcp) |
Every tool is a plain, type-hinted function. That single definition is what the CLI turns into command-line flags and what the MCP server turns into a tool schema – so the three ways to call a tool (below) never drift apart.
Installation
slmn isn’t on PyPI or conda yet, so install it from GitHub. The default install is
“lite” – just the tools and the slmn CLI:
pip install git+https://github.com/drscotthawley/slmn.git
The MCP server is optional; add the mcp extra if you want it (it pulls in fastmcp and
friends):
pip install "slmn[mcp] @ git+https://github.com/drscotthawley/slmn.git"
How to use
The same tools are reachable three ways.
Import them directly:
from slmn.nbtools import grep_nb
print(grep_nb('nbs/01_nbtools.ipynb', 'def read_nb'))
From the shell, via the slmn dispatcher (run slmn with no arguments for the tool list):
slmn grep_nb nbs/01_nbtools.ipynb 'def read_nb'
slmn gpu_free
Over MCP (with the mcp extra installed), registered with any MCP-speaking client:
claude mcp add slmn -- slmn-mcp
Documentation
Full documentation is hosted on the project’s GitHub
pages; the source for each page is the
correspondingly-named notebook under nbs/.
For developers
slmn is built with nbdev: the notebooks under nbs/ are the
source of truth, and the slmn/ package is generated from them. To hack on it, install in
editable mode:
git clone https://github.com/drscotthawley/slmn.git
cd slmn
pip install -e ".[mcp]"
Edit the notebooks, then regenerate the package, run the tests, and ship – all via slmn’s
own publish tool (nbdev-clean/export -> reviewed commit -> push -> wait for CI -> merge a
PR to main):
slmn publish "your commit message"
from slmn.misc import gpu_free
gpu_free()
2
Metadata
Release files for slmn 0.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| slmn-0.0.2.tar.gz | 46.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| slmn-0.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 96.9 kB
Release files / slmn-0.0.2.tar.gz
| Download URL | slmn-0.0.2.tar.gz |
|---|---|
| Size | 46.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7e242f179bf9e75c6a5ce048035113a1fffb8223bfa8d3139b3f0a39a2b242b9
|
|
BLAKE2b-256 checksum How to use checksums |
2c51cf9d621c192d00e708fdc79d3b8b4b63830658784b6fdfff1023e40aa566
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.18
|
Release files / slmn-0.0.2-py3-none-any.whl
| Download URL | slmn-0.0.2-py3-none-any.whl |
|---|---|
| Size | 50.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
468c4eb00c8be252528f57b11cae41de3496c88bf621e853fb974bbcfb886ac8
|
|
BLAKE2b-256 checksum How to use checksums |
2abed853ed68f0b4d9afeef8b16c334d2e590103f0c9a0413ecacbd0cbb2f0af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.18
|