MCP server that exposes Claude-style skills to any MCP client.
Project description
Skillz MCP Server
⚠️ Experimental proof‑of‑concept. Potentially unsafe. Treat skills like untrusted code and run in sandboxes/containers. Use at your own risk.
skillz is a Python package and CLI that exposes Anthropic‑style skills (directories with a SKILL.md that starts with YAML front‑matter) to any MCP client using FastMCP. It recursively discovers skills, registers one tool per skill, returns the authored instructions and resource paths, and can optionally run helper scripts inside a temporary workspace. The package is published on PyPI, so you can launch it anywhere with uvx skillz.
Features
- Recursively discovers every
SKILL.mdbeneath the provided skills root (default:~/.skillz) and creates one MCP tool per skill slug (derived from the skillname). - Tool calls return the skill instructions, metadata, and an absolute path list for every file shipped with the skill so clients can fetch resources directly or via
ctx.read_resource. - Optional
scriptexecution copies the skill to a temp directory, applies file/env/stdin payloads, runs the script with the right interpreter, and returns stdout/stderr/output metadata. - Supports
stdio,http, andssetransports through FastMCP so you can connect the server to a variety of MCP clients.
Prerequisites
- Python 3.12 or newer (managed automatically when using
uv) uvpackage manager (the script metadata declares runtime dependencies)
Quick Start
-
Populate a directory with skills following Anthropic’s format (
SKILL.md+ optional resources). The CLI looks for~/.skillzby default, but any directory can be supplied explicitly. -
Run the server. Supplying a directory path is optional—the CLI defaults to
~/.skillzwhen no positional argument is provided (the path is expanded like any shell~reference):# Use explicit directory uvx skillz /path/to/skills # Or rely on the default ~/.skillz location uvx skillz
The server listens over
stdioby default. Pass--transport httpor--transport sseand combine with--host,--port, and--pathfor network transports. -
Use
--list-skillsto validate parsing without starting the transport:uvx skillz /path/to/skills --list-skills
-
Add
--verbosefor console debug logs or--logfor extremely verbose output written to/tmp/skillz.log.
CLI reference
skillz understands the following flags:
| Flag | Description |
|---|---|
positional skills_root |
Directory of skills (optional, defaults to ~/.skillz). |
--timeout |
Per-script timeout in seconds (default: 60). |
--transport {stdio,http,sse} |
Transport exposed by FastMCP (default: stdio). |
--host, --port, --path |
Network settings for HTTP/SSE transports (--path applies to HTTP only). |
--list-skills |
Print discovered skills and exit. |
--verbose |
Emit debug logging to the console. |
--log |
Mirror detailed logs to /tmp/skillz.log. |
Tool responses & script execution
Each tool invocation expects a non-empty task string and responds with:
skill: the slug derived from the skillname.task: echo of the task that triggered the tool call.metadata: name, description, license (if provided), allowed tools, and any extra front-matter fields.resources: absolute paths to theSKILL.mdand every other file shipped with the skill.instructions: the Markdown body fromSKILL.md.usage: a convenience block containing a suggested MCP prompt, integration guidance, and script execution instructions.
Provide script to run a helper program bundled with the skill. The optional
script_payload mapping supports:
args: iterable of command-line arguments.env: mapping of environment variables merged into the sandbox.files: list of{path, content, encoding}entries written relative to the copied skill directory.stdin: raw text or{content, encoding}to feed to the process.workdir: working directory relative to the copied skill root.
Scripts inherit PATH and locale variables, run from a temporary copy of the
skill, honor the configured timeout (overridden by script_timeout), and return
script_execution metadata containing the executed command, working directory,
exit code, stdout, stderr, and duration_seconds.
Local development workflow
-
Install uv and Python 3.12+.
-
Sync an isolated environment with all runtime and developer dependencies (only needed when developing locally in the repo):
uv sync -
Run the test suite:
uv run pytest
-
Launch the CLI against your local checkout while iterating:
uv run python -m skillz /path/to/skills --list-skills
Packaging status
- The repository ships a
pyproject.toml,src/skillz/package layout, anduv.lockfor reproducible builds. - Console entry point
skillzresolves topython -m skillzwhen installed as a package. - GitHub Actions workflows run tests on every push (
.github/workflows/tests.yml) and publish to PyPI via trusted publisher when a GitHub Release is approved (.github/workflows/publish.yml).
Discovery and tool registration
- Recursively walks the skills root and loads every
SKILL.md(nesting supported). - One MCP tool is registered per skill. Tool name = the slug of
name(e.g.,algorithmic-art). - Tool description = the
descriptionfrom front‑matter (no extra metadata included).
Note: Skillz responds with absolute paths for every resource. FastMCP clients can call ctx.read_resource to stream the file contents or read them directly from disk when running locally.
Security & Safety Notice
- This code is experimental, untested, and should be treated as unsafe.
- Script execution runs outside any hardened sandbox besides a temporary directory with a pared-down environment. Use only with trusted skill content and within controlled environments.
- Review and harden before exposing to real users or sensitive workflows.
License
Released under the MIT License (see LICENSE).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skillz-0.1.3.tar.gz.
File metadata
- Download URL: skillz-0.1.3.tar.gz
- Upload date:
- Size: 12.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0cdbc03e72bdb6a8104fe846014415c897321a903c9a1d547d0c1023947ef94f
|
|
| MD5 |
45db3ddcfabcb1cc03381bfeac9b0279
|
|
| BLAKE2b-256 |
fd610ef36a361d4df8fd4e4465eaa50082e8e34813726e5c04d53327ca45a2c5
|
Provenance
The following attestation bundles were made for skillz-0.1.3.tar.gz:
Publisher:
publish.yml on intellectronica/skillz
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillz-0.1.3.tar.gz -
Subject digest:
0cdbc03e72bdb6a8104fe846014415c897321a903c9a1d547d0c1023947ef94f - Sigstore transparency entry: 634517203
- Sigstore integration time:
-
Permalink:
intellectronica/skillz@9e7418572e5641af61a0bba392a1720b86b9ba1a -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/intellectronica
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e7418572e5641af61a0bba392a1720b86b9ba1a -
Trigger Event:
release
-
Statement type:
File details
Details for the file skillz-0.1.3-py3-none-any.whl.
File metadata
- Download URL: skillz-0.1.3-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a48b0e2742177cd6e01045e9d93cfd69fc761c529d89fa8b7896e846fb5a604f
|
|
| MD5 |
4a2109073aadfe0bd4604713a8b5732f
|
|
| BLAKE2b-256 |
ed188142278848cda9732f197d63d3f91ea99695a7b0873aee89bb9d703d4f54
|
Provenance
The following attestation bundles were made for skillz-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on intellectronica/skillz
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillz-0.1.3-py3-none-any.whl -
Subject digest:
a48b0e2742177cd6e01045e9d93cfd69fc761c529d89fa8b7896e846fb5a604f - Sigstore transparency entry: 634517205
- Sigstore integration time:
-
Permalink:
intellectronica/skillz@9e7418572e5641af61a0bba392a1720b86b9ba1a -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/intellectronica
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e7418572e5641af61a0bba392a1720b86b9ba1a -
Trigger Event:
release
-
Statement type: