Metadata-Version: 2.4
Name: slmn
Version: 0.0.1
Summary: Slammin' Language Model Nest: sundry utils + MCP 
Author-email: "Scott H. Hawley" <scott@scotthawley.com>
License: Apache-2.0
Project-URL: Repository, https://github.com/drscotthawley/slmn
Project-URL: Documentation, https://drscotthawley.github.io/slmn/
Keywords: nbdev
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: nbformat
Requires-Dist: pymupdf
Requires-Dist: fastcore
Requires-Dist: httpx
Provides-Extra: mcp
Requires-Dist: fastmcp; extra == "mcp"
Provides-Extra: dev
Requires-Dist: fastmcp; extra == "dev"
Requires-Dist: pysym2md; extra == "dev"
Requires-Dist: llms-txt; extra == "dev"
Dynamic: license-file

# slmn


<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

## What’s inside

slmn is a small collection of independent tools, each in its own notebook/module:

| module | what it does |
|----|----|
| [`nbtools`](nbtools.html) | read, grep, and edit Jupyter notebook cells by id – no hand-rolled JSON surgery |
| [`misc`](misc.html) | read a PDF’s text; check whether a local GPU is free |
| [`remote`](remote.html) | 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)](publish.html) | 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`](dead_drop.html) | file-based async IPC – one side drops a message file, another picks it up (with a streaming variant) |
| [`cli`](cli.html) | the `slmn <tool> [args...]` dispatcher that exposes all of the above from the shell |
| [`mcp`](mcp.html) | 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:

``` sh
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):

``` sh
pip install "slmn[mcp] @ git+https://github.com/drscotthawley/slmn.git"
```

## How to use

The same tools are reachable three ways.

**Import them directly:**

``` python
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):

``` sh
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:

``` sh
claude mcp add slmn -- slmn-mcp
```

## Documentation

Full documentation is hosted on the project’s GitHub
[pages](https://drscotthawley.github.io/slmn/); the source for each page is the
correspondingly-named notebook under `nbs/`.

## For developers

slmn is built with [nbdev](https://nbdev.fast.ai/): 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:

``` sh
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`](https://drscotthawley.github.io/slmn/publish.html#publish) tool (nbdev-clean/export -\> reviewed commit -\> push -\> wait for CI -\> merge a
PR to main):

``` sh
slmn publish "your commit message"
```

``` python
from slmn.misc import gpu_free
gpu_free()
```

    2
