@skilt/sync
v0.2.0
Published
Download skills from any MCP server to a local directory
Maintainers
Readme
@skilt/sync
Download skills from any MCP server to a local directory.
Install & Run
# Via npx (zero install — auto-installs Python deps if needed)
npx @skilt/sync ./skills https://your-skills-server.com/mcp
# Via uvx (Python)
uvx skilt-sync ./skills https://your-skills-server.com/mcp
# Force latest version
npx @skilt/sync@latest ./skills https://your-skills-server.com/mcpUsage
# Download all skills (overwrites by default)
sync-skills ./skills https://your-skills-server.com/mcp
# Download a single skill
sync-skills ./skills https://your-skills-server.com/mcp --skill pdf-processing
# Skip existing (don't overwrite)
sync-skills ./skills https://your-skills-server.com/mcp --no-overwrite
# List available skills without downloading
sync-skills --list https://your-skills-server.com/mcpHow it works
Uses fastmcp.utilities.skills under the hood:
- Connects to the MCP server
- Discovers skills via
list_resources()(matchesskill://{name}/SKILL.md) - Reads each skill's
_manifestfor the file listing - Downloads files via
skill://{name}/{path}
Works with any SkillsDirectoryProvider server
Any MCP server using FastMCP's SkillsDirectoryProvider is compatible:
from fastmcp import FastMCP
from fastmcp.server.providers.skills import SkillsDirectoryProvider
mcp = FastMCP("my-skills")
mcp.add_provider(SkillsDirectoryProvider(roots="./skills"))
mcp.run()Then sync from it:
sync-skills ~/.claude/skills http://localhost:8000/mcpPython API
from pathlib import Path
from fastmcp import Client
from fastmcp.utilities.skills import download_skill, sync_skills, list_skills
async with Client("https://your-skills-server.com/mcp") as client:
# List
skills = await list_skills(client)
# Download one
path = await download_skill(client, "pdf-processing", Path("./skills"))
# Download all
paths = await sync_skills(client, Path("./skills"))See also
@skilt/tools— CLI to search, grep, and read skills without downloading
