Skillz is a self-extending MCP server. Create WASM tools from Rust or register scripts in any languageβPython, Node.js, Ruby, Bashβat runtime. Now with automatic dependency management.
Get started in seconds
# Install WASM target
rustup target add wasm32-wasip1
# Install Skillz
cargo install skillz
β οΈ Important: Make sure ~/.cargo/bin is in
your PATH so your editor can find the executable.
Works with your favorite editor
Understanding how Skillz connects all the pieces
WASM Tools: AI sends Rust code β Skillz compiles to WebAssembly β Tool registered in Tool Registry β Available immediately
Script Tools: AI sends Python/Node.js code β Skillz creates tool directory with dependencies β Registers in Tool Registry β Ready to execute
Pipelines: AI defines tool chain β Skillz creates pipeline tool β Automatically handles variable substitution β Executes tools in sequence
Request: MCP Client calls tool β Skillz validates & prepares context β Runtime Engine executes
WASM: Loaded in WASI sandbox β Direct memory access β Fast execution β Returns result
Script: Process spawned β JSON-RPC over stdin/stdout β Can call back to server β Returns result
Response: Result formatted β Progress/logs included β Sent to MCP client
Memory API: Script sends
memory/set β Server stores in libSQL β Script sends memory/get
β Server retrieves β TTL support
Resources
API: Script sends resources/list β Server returns available
resources β Script sends resources/read β Server returns content
Elicitation: Script needs user input β
Sends elicitation/create β Server forwards to MCP client β User responds β
Script receives answer
Sampling:
Script needs LLM completion β Sends sampling/createMessage β Server
forwards to MCP client β LLM responds β Script receives completion
Tool
Calling: Script can call other Skillz tools β Sends tools/call
β Server executes target tool β Returns result to caller
Watch: File watcher monitors tools directory β Detects changes to tool files
Reload: Tool removed from registry β Reloaded from disk β Re-registered
Notify:
MCP notification sent to clients β tools/list_changed β
resources/updated for subscribed tools
Zero Downtime: Other tools continue working β No server restart needed
Auto-Backup: Tool updated β Current
version backed up to .versions/ β Timestamp added
List
Versions: Use version tool with action: "list" β
Returns all versions with timestamps
Rollback:
Use version tool with action: "rollback" β Restores selected
version β Current becomes backup
History: All versions preserved β Can rollback multiple times β Full version audit trail
HTTP Server: Skillz starts HTTP server β Accepts connections from web clients
SSE
Stream: Client connects to /sse β Server sends events β
Real-time notifications
Message
Endpoint: Client posts JSON-RPC to /message β Server processes
β Response sent via SSE
Multiple Clients: Each client gets own SSE connection β Isolated sessions β Concurrent execution
Service Definition: Use
services tool to define containers (Postgres, Redis, etc.) β Skillz manages
lifecycle
Auto-Injection: Connection strings automatically injected as env vars into Tools β Seamless integration
Pipelines: Chain multiple tools together β Tool A output becomes Tool B input β Complex workflows
Full Stack: Build complete applications: DB Service + Backend Tool + Frontend Tool β All managed by Skillz
CLI options and environment variables
Watch tools directory for changes and auto-reload.
skillz --hot-reload
Run as HTTP server with SSE for web apps.
skillz --transport http --port 8080
Colon-separated list of allowed workspace roots.
/home/user/project:/data
Isolation mode for script tools (Linux only).
bubblewrap | firejail | nsjail
Everything you need to build dynamic AI tools
Compile Rust code to WebAssembly at runtime. Tools run in a secure sandbox with memory isolation and near-native performance.
Register tools in Python, Node.js, Ruby, Bash, Perl, PHP, or any language. Scripts communicate via JSON-RPC 2.0 protocol.
Automatic pip/npm dependency installation. Each tool gets its own isolated virtual environment that persists across restarts.
Chain tools together declaratively with variable resolution ($input, $prev, $step_name).
Resources, roots, logging, progress updates, elicitation, and sampling support. Complete MCP compatibility.
Tools, dependencies, and environments persist across restarts. Build your AI's toolbox over time.
WASM tools run in isolated WebAssembly environment. Optional bubblewrap/firejail isolation for scripts.
Mark tools with hints: readOnlyHint, destructiveHint, idempotentHint. Helps AI understand tool behavior.
Compose multiple tools via Python/JS code. Reduces token usage by 98% (150k β 2k tokens)!
Scripts can request user input via MCP elicitation and use persistent storage for state.
Built-in skillz://guide resource that automatically updates when new tools are
added.
Import tools from GitHub repos or Gists. Share your tools with the community!
Import external stdio MCP servers. Tools exposed under namespaces, work in pipelines!
6 native prompts to help create tools: create_wasm_tool, create_python_tool, create_pipeline, and more!
Watch tools directory for changes. Auto-reload modified tools without server restart!
Define Docker services (databases, caches) that tools depend on. Auto-inject connection env vars!
Built-in tools for creating and managing your AI toolkit
| Tool | Description | Type |
|---|---|---|
| build_tool | Compile Rust code β WASM tool with crate dependencies. | Core |
| register_script | Register script tool (Python, Node.js, etc.) with dependencies. | Core |
| call_tool | Execute any registered tool (WASM, Script, Pipeline, or MCP). | Core |
| list_tools | List all available tools grouped by type. | Core |
| delete_tool | Delete a tool and clean up its files. | Core |
| import_tool | Import tools from Git repos or GitHub Gists. | Core |
| import_mcp | Register external stdio MCP servers under a namespace. | New |
| execute_code | Run Python/JS code that composes multiple tools. 98% token savings! | Core |
| pipeline | Create, list, delete pipeline tools (action: create|list|delete). | New |
| memory | Persistent storage for tools (action: store|get|list|delete|stats). | New |
| services | Define & manage Docker services for tools (action: define|start|stop|list|status). | New |
Create tools with just a few lines of code
// Build a Fibonacci generator
build_tool(
name: "fibonacci",
code: "fn main() {
let mut a = 0u64;
let mut b = 1;
for _ in 0..20 {
print!(\"{} \", a);
let t = a + b;
a = b;
b = t;
}
}",
description: "Generates Fibonacci numbers"
)
Clean, modular design
Visual overview of the tool creation and execution flow
From code to execution in seconds
AI writes Rust code for WASM tools or scripts in any language (Python, Node.js, etc.). Specify dependencies if needed.
WASM tools are compiled using cargo. Scripts are saved with appropriate interpreter. Dependencies are installed in isolated environments.
WASM runs in Wasmtime sandbox. Scripts execute via subprocess with JSON-RPC 2.0 protocol using their virtual environment.
Tools, dependencies, and environments are stored on disk. Available across server restarts. Build your AI's toolbox over time.