fine-tuning-os
Allows scheduling meetings via the Calendly API.
Pushes Docker images to a container registry.
Enables self-updating the MCP server by pulling from a remote Git repository.
Allows caching and downloading base models from the Hugging Face Hub.
Sends notifications to Slack channels via an incoming webhook.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fine-tuning-osPrepare my training data for fine-tuning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fine-tuning-os
The Zero-Data Model Context Protocol control plane for LLM fine-tuning — 64 tools across 10 dimensions to prepare, build, train in the client enclave, evaluate, secure, package, and deliver a fine-tuned model — without ever seeing the client's data.
Quickstart · Architecture · The 10 dimensions · Zero-Data · Testing · Security
Table of Contents
Related MCP server: MCP Presidio
Overview
fine-tuning-os is a zero-dependency-on-secrets MCP server that exposes 64 domain tools (+ 1 health tool) for the entire LLM fine-tuning delivery workflow. It integrates into any MCP-compatible host — Claude Desktop, Claude Code, or a custom orchestrator — with no mandatory secrets at boot.
Tools that require external services (SSH, HuggingFace, SFTP, SMTP, Slack, registries) advertise their requirements via a dry_run response rather than failing silently or faking execution. This means you get a fully operational server and actionable CLI commands from day one, and can progressively enable live execution by setting environment variables.
✨ Highlights
64 tools / 10 dimensions. prep · synthetic · pipeline · execution · evaluation · security · packaging · docs · client · maintenance — the full fine-tuning delivery lifecycle, callable from any MCP host.
Zero-Data by construction. C1/C3 tools cannot open a socket; C2 tools dry-run (the exact command, with env-name placeholders) until you set the env var — never a faked success. Enforced by
tests/test_zero_data.pyon every CI run.Trains where the data lives. The server embeds no
torch/unsloth; heavy GPU work runs in the client enclave (or a routed engine) — only sanitized metrics/logs come back.Real artifacts you own. AES-256-GCM encrypted deliverables + SHA256, French-law contract / NDA / data-destruction-certificate templates, performance & security reports — generated, not black-boxed.
Companion skill. A
fine-tuning-osClaude skill (SKILL.md+ 16 references) maps every phase to the exact tool, with go/no-go gates and a Zero-Data playbook.657 tests, ≥95% coverage,
ruff+black+mypyclean, Hypothesis property tests + mutation config, CI on Python 3.10–3.13 across Linux / macOS / Windows.
Zero-Data Contract
Every tool belongs to one of three classes:
Class | Behaviour | Network | Secrets required |
C1 — Pure/Offline | Generates text, configs, or analysis from local state only | Never | None |
C2 — Emit/Dry-run | Builds and returns an actionable command or payload; if the required env var is absent returns | Only when env is configured | Optional (enables live mode) |
C3 — Static Audit | Reads local files/config and returns a structured report | Never | None |
Guarantees enforced by tests/test_zero_data.py on every CI run:
C1 and C3 tools cannot open sockets (socket patched to raise on any attempt).
C2 tools with no env configured return
executed=False, dry_run=Trueand open no sockets.65 tools registered at server boot with zero env vars set.
No file written outside the configured workspace root (
FTOS_WORKSPACE).
Architecture
flowchart TB
subgraph Host["MCP Host (Claude Code / Claude Desktop)"]
CC["Claude Code"]
end
subgraph Server["fine-tuning-os MCP Server (stdio)"]
S["server.py<br/>FastMCP + 65 tools"]
subgraph Socle["Socle / Infrastructure"]
ST["store.py<br/>Filesystem abstraction"]
TG["targets.py<br/>gate() — env-based C2 activation"]
MD["models.py<br/>Response dataclasses"]
CR["crypto.py<br/>AES-256-GCM encryption"]
SN["sanitize.py<br/>Secret / PII stripping"]
RE["render.py<br/>Markdown to PDF"]
end
subgraph Tools["10 Tool Modules"]
T1["prep<br/>9 tools"]
T2["synthetic<br/>1 tool"]
T3["pipeline<br/>7 tools"]
T4["execution<br/>8 tools"]
T5["evaluation<br/>7 tools"]
T6["security<br/>6 tools · C3"]
T7["packaging<br/>8 tools"]
T8["docs<br/>8 tools"]
T9["client<br/>6 tools"]
T10["maintenance<br/>4 tools"]
end
end
subgraph Boundary["Zero-Data Boundary"]
direction LR
ZD["C1/C3: socket = BLOCKED<br/>C2: dry_run when no env<br/>All writes: FTOS_WORKSPACE only"]
end
subgraph Enclave["Client Enclave (optional)"]
HF["HuggingFace API"]
SSH["Remote GPU server<br/>SSH"]
REG["Container Registry"]
SFTP["SFTP / SMTP / Slack"]
end
CC <-->|"MCP stdio protocol"| S
S --> Socle
S --> Tools
Tools --> Boundary
Boundary -.->|"C2 live mode<br/>only when env set"| EnclaveThe server registers all 65 tools at startup. C2 tools call gate() from targets.py to check whether the required environment variable is set; if not, they return the dry-run command without touching the network.
Install
# Clone
git clone https://github.com/Casius999/fine-tuning-os.git
cd fine-tuning-os
# Create virtual environment (Python 3.10+)
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux / macOS
# Install (dev mode with test dependencies)
pip install -e ".[dev]"Optional PDF export support (requires system libraries):
pip install -e ".[pdf]"Run
stdio transport (Claude Desktop / Claude Code)
python -m fine_tuning_os
# or: fine-tuning-osClaude Desktop config (claude_desktop_config.json)
{
"mcpServers": {
"fine-tuning-os": {
"command": "python",
"args": ["-m", "fine_tuning_os"],
"env": {
"FTOS_WORKSPACE": "/path/to/your/workspace"
}
}
}
}Configuration
All configuration is through environment variables. Setting none of them is valid — the server starts and all tools respond (C2 tools return dry-run commands).
Variable | Class | Description | Default |
| All | Root directory for all project files |
|
| C2 | Path to Python interpreter for local training/merge/quantize | — |
| C2 | Hugging Face token for | — |
| C2 | Remote training server hostname | — |
| C2 | Path to SSH private key for remote operations | — |
| C2 | Container registry URL for | — |
| C2 | Registry authentication token | — |
| C2 | SFTP host for | — |
| C2 | SFTP username | — |
| C2 | Path to SFTP private key | — |
| C2 | SMTP host for | — |
| C2 | SMTP username | — |
| C2 | SMTP password | — |
| C2 | Slack incoming webhook URL for notifications | — |
| C2 | Calendly API token for | — |
| C2 | Git remote URL for | — |
Tool Catalogue
prep — Data Preparation (9 tools, C1/C2)
Tool | Class | Description |
| C1 | Generate a full training configuration (LoRA, hyperparams, scheduler) |
| C2 | Emit |
| C1 | Produce |
| C1 | Scaffold a project directory tree under workspace |
| C1 | Load and render a named project template |
| C1 | Return schema documentation for a task type |
| C1 | Validate a dataset sample against the expected schema |
| C1 | Mask PII in a dataset sample for safe preview |
| C1 | Generate train/eval/test split configuration |
synthetic — Synthetic Data (1 tool, C1)
Tool | Class | Description |
| C1 | Generate a synthetic instruction-tuning dataset from a schema |
pipeline — Local Pipeline (7 tools, C1/C2)
Tool | Class | Description |
| C2 | Emit |
| C2 | Emit |
| C2 | Emit local training command via |
| C1 | Parse and return metrics from a local training log file |
| C1 | Validate remote training config without connecting |
| C1 | Suggest hyperparameter adjustments based on metrics |
| C1 | Generate pytest unit tests for a training script |
execution — Remote Execution (8 tools, C1/C2)
Tool | Class | Description |
| C2 | Emit |
| C1 | Build deployment command string for a given engine and host |
| C2 | SSH-trigger training job or emit command if SSH not configured |
| C2 | SSH-tail training logs or emit SSH command |
| C2 | SSH-poll metrics endpoint or emit monitoring command |
| C1 | Analyse a metrics series and flag anomalies |
| C2 | SSH-send pause/resume signal or emit command |
| C1 | Evaluate early-stopping criteria from a metrics snapshot |
evaluation — Model Evaluation (7 tools, C1/C2)
Tool | Class | Description |
| C2 | Fetch checkpoint metadata from remote or emit command |
| C1 | Run evaluation loop on synthetic dataset locally |
| C2 | Run evaluation on remote validation set or emit command |
| C1 | Compute BLEU, ROUGE, and task-specific metrics |
| C1 | Generate a sample of model predictions for review |
| C1 | Compare current metrics to a stored baseline |
| C1 | Run bias and fairness checks on evaluation outputs |
security — Security Auditing (6 tools, C3)
Tool | Class | Description |
| C3 | Static security scan of training code (no network) |
| C3 | Audit a Dockerfile for security misconfigurations |
| C3 | Scan dataset for PII and data-leakage patterns |
| C3 | Verify model license compatibility for commercial use |
| C3 | Aggregate audit results into a structured security report |
| C3 | Strip secrets and PII from logs before sharing with Claude |
packaging — Model Packaging (8 tools, C1/C2)
Tool | Class | Description |
| C2 | Emit merge command or execute via |
| C2 | Emit quantization command (GGUF/GPTQ/AWQ) or execute |
| C2 | Write Dockerfile to workspace and emit |
| C1 | Generate vLLM/SGLang/TGI inference configuration |
| C2 | Emit curl test command or execute against live endpoint |
| C1 | Encrypt a deliverable file with AES-256 and return key hex |
| C2 | Emit SFTP upload command or execute if SFTP configured |
| C1 | Generate a signed delivery note document |
docs — Documentation (8 tools, C1)
Tool | Class | Description |
| C1 | Generate a service contract from project metadata |
| C1 | Generate a non-disclosure agreement |
| C1 | Generate a full training performance report |
| C1 | Generate end-user guide for a fine-tuned model |
| C1 | Generate deployment and operations guide |
| C1 | Generate data destruction certificate (RGPD) |
| C1 | Render a markdown document to PDF locally |
| C1 | Hash-sign a document and return verification metadata |
client — Client Management (6 tools, C1/C2)
Tool | Class | Description |
| C1 | Create client project record and onboarding checklist |
| C2 | Send status email/Slack or emit message if not configured |
| C2 | Create Calendly event or emit scheduling command |
| C1 | Append a timestamped event to the project log |
| C1 | Generate an approval request document |
| C1 | Generate a project invoice from billing metadata |
maintenance — Maintenance (4 tools, C1/C2)
Tool | Class | Description |
| C1 | Analyse metric drift to detect model rot |
| C1 | Recommend retraining schedule based on drift analysis |
| C1 | Generate update plan for a new base model version |
| C2 | Emit |
health (1 tool)
Tool | Class | Description |
| C1 | Return server version, tool count, and workspace status |
Testing
# Full suite with coverage
pytest --cov=src/fine_tuning_os --cov-report=term-missing --cov-fail-under=95
# Zero-Data invariant tests only
pytest tests/test_zero_data.py -v
# Tool registration check (65 tools)
pytest tests/test_registration.py -v
# Run the synthetic demo bundle (no network, no secrets needed)
python scripts/demo_bundle.pyCoverage gate: ≥95% (CI enforced).
Test structure (tests/):
tests/
├── conftest.py # workspace / store / project_id fixtures
├── test_registration.py # 65-tool registration check
├── test_zero_data.py # Zero-Data invariants (C1/C2/C3 × network × filesystem)
├── test_prep.py
├── test_synthetic.py
├── test_pipeline.py
├── test_execution.py
├── test_evaluation.py
├── test_security.py
├── test_packaging.py # TDD + confinement regression
├── test_docs.py
├── test_client.py
├── test_maintenance.py
├── test_error_paths.py # error-path coverage (OSError, TemplateError, missing-project, bad-crypto)
└── test_property.py # Hypothesis property-based tests (sanitize, crypto, metrics, Store)Security Notes
No secret on disk. All credentials are read from environment variables at call time via
targets.py:gate(). No secret is ever written to files or returned in tool output values.Filesystem confinement. Every tool that writes files resolves the destination through
Store.project_dir(project_id), anchored underFTOS_WORKSPACE. Writing outside is rejected with an explicit error.Sanitize before returning. Use
sanitize_logs_for_claudeto strip secrets and PII from logs before passing output to any LLM.C2 dry_run is safe. The returned
commandstring contains only env var name references (e.g.,$HF_TOKEN), never literal secret values.No network for C1/C3. Verified by the test suite on every CI run.
Found a vulnerability? See SECURITY.md — report privately, do not open a public issue.
Contributing
Contributions are welcome! Please read CONTRIBUTING.md and our Code of Conduct. Commits follow Conventional Commits.
Legal Notice
Ce logiciel est fourni à titre d'outil d'assistance technique. Il ne constitue pas un conseil juridique, fiscal, ou professionnel. Les documents générés (contrats, NDA, factures) sont des modèles à soumettre à un professionnel qualifié avant tout usage. L'utilisateur reste seul responsable de l'usage qu'il fait des outils et des sorties produites.
License
Licensed under the Apache-2.0 license. © 2026 Casius999.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Casius999/fine-tuning-os'
If you have feedback or need assistance with the MCP directory API, please join our Discord server