MCP Skills Server

io.github.srprasanna由 GitHub 帳號 srprasanna 發布v1.0.0更新於 Oct 24, 2026

MCP server that loads and serves skills from a mounted directory with hot reload.

已驗證STDIO僅桌面知識與記憶

概覽

AI 產生的概覽

從本機掛載目錄載入 SKILL.md 技能檔,讓助理搜尋、讀取並套用這些技能,且支援熱重載。

可以做什麼
搜尋技能:依關鍵字、分類、標籤或難度找出符合的技能。
適用情境
當你已有一批以 SKILL.md 撰寫的個人或團隊技能文件,想讓助理依需求搜尋、讀取並套用時;或希望在編輯技能檔後不必重啟伺服器即可生效時。
執行需求
需在本機以 Docker 容器或 Python 3.13 與 Poetry 執行;以 MCP_SKILLS_DIR 指定技能根目錄,技能須各自放在獨立資料夾並含 SKILL.md。可選用 MCP_SKILLS_HOT_RELOAD 與 MCP_SKILLS_LOG_LEVEL 調整行為。
安裝前請注意
伺服器會讀取 MCP_SKILLS_DIR 指向的整個目錄,請避免把含機密或私人檔案的資料夾設為技能目錄;技能內容會提供給連接的助理,撰寫時勿放入敏感資訊。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 MCP Skills Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

MCP Skills Server

[Python 3.13+] [Poetry] [License: MIT] [MCP Registry] [Docker] [Docker Pulls]

A production-ready Model Context Protocol (MCP) server that dynamically loads and exposes skills from a mounted volume with hot-reloading support.

📦 Available on MCP Registry - Install with one command!

Features

  • Dynamic Skill Loading: Automatically discovers and loads skills from a directory
  • Hot-Reloading: Detects changes to SKILL.md files and reloads without restart
  • Folder Structure Validation: Enforces best practices with clear error messages
  • MCP Protocol Compliant: Full implementation of resources and tools
  • Production Ready: Comprehensive error handling, logging, and validation
  • Docker Support: Run in containers with volume mounting
  • Type Safe: Full type hints using Python 3.13 features
  • Well Tested: >80% code coverage with comprehensive test suite

Table of Contents

Skills Directory Structure

CRITICAL REQUIREMENT: Each skill MUST be in its own dedicated folder within the skills directory. The server will ONLY recognize skills that follow this structure.

✅ Valid Structure

your-skills-directory/├── skill-one/│   └── SKILL.md          ← Required├── skill-two/│   ├── SKILL.md          ← Required│   └── examples/         ← Optional│       └── example.py└── skill-three/    ├── SKILL.md    ├── examples/    │   └── demo.py    └── templates/        └── template.txt

❌ Invalid Structures (Will Be Ignored)

your-skills-directory/├── SKILL.md                  ❌ Not in a folder - WILL BE SKIPPED├── random-file.txt           ❌ Not a skill folder├── .hidden-folder/           ❌ Hidden folder - WILL BE SKIPPED│   └── SKILL.md└── __pycache__/              ❌ System folder - WILL BE SKIPPED    └── SKILL.md

Folder Naming Conventions

Valid folder names:

  • Lowercase with hyphens: my-skill-name
  • Lowercase with underscores: excel_advanced
  • Alphanumeric: skill-name-v2

Invalid (will be skipped):

  • Hidden folders starting with .
  • Private folders starting with _
  • System folders: __pycache__, node_modules, .git, etc.

Quick Start

Using Docker (Recommended)

  1. Create your skills directory:
bash
mkdir -p ~/claude-skills/my-first-skill
  1. Create a skill file:
bash
cat > ~/claude-skills/my-first-skill/SKILL.md << 'EOF'---name: "my-first-skill"description: "My first Claude skill"---
# My First Skill
This is my first skill for Claude!
## Usage
Simply describe what your skill does here.EOF
  1. Run the server:
bash
docker run -i --rm \  -v ~/claude-skills:/skills:ro \  mcp-skill-hub

Using Poetry (Development)

  1. Clone and install:
bash
git clone https://github.com/srprasanna/mcp-skill-hub.gitcd mcp-skill-hubpoetry install
  1. Create your skills directory:
bash
mkdir -p ~/claude-skills/my-first-skill# Create SKILL.md as shown above
  1. Run the server:
bash
export MCP_SKILLS_DIR=~/claude-skillspoetry run mcp-skills

Installation

Prerequisites

  • Python 3.13+ (for development)
  • Poetry 1.7+ (for dependency management)
  • Docker (optional, for containerized deployment)

Install with Poetry

bash
# Clone the repositorygit clone https://github.com/srprasanna/mcp-skill-hub.gitcd mcp-skill-hub
# Install dependenciespoetry install
# Verify installationpoetry run mcp-skills --help

Build Docker Image

bash
# Build the imagedocker build -t mcp-skill-hub .
# Or use docker-composedocker-compose build

Usage

Running Locally

bash
# Set the skills directoryexport MCP_SKILLS_DIR=/path/to/your/skills
# Run the serverpoetry run mcp-skills

Running with Docker

bash
docker run -i --rm \  -v /path/to/your/skills:/skills:ro \  -e MCP_SKILLS_LOG_LEVEL=INFO \  mcp-skill-hub

Running with Docker Compose

bash
# Edit docker-compose.yml to set your skills directory pathdocker-compose up mcp-skills

Integrating with Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

json
{  "mcpServers": {    "skills": {      "command": "docker",      "args": [        "run",        "-i",        "--rm",        "-v",        "${HOME}/claude-skills:/skills:ro",        "mcp-skill-hub"      ]    }  }}

Or using Poetry:

json
{  "mcpServers": {    "skills": {      "command": "poetry",      "args": ["run", "mcp-skills"],      "cwd": "/path/to/mcp-skill-hub",      "env": {        "MCP_SKILLS_DIR": "/path/to/your/skills"      }    }  }}

Important: Make sure your ${HOME}/claude-skills directory contains skill folders, not loose SKILL.md files!

Configuration

Configuration is done via environment variables with the prefix MCP_SKILLS_:

VariableDefaultDescription
MCP_SKILLS_DIR/skillsRoot directory containing skill folders
MCP_SKILLS_HOT_RELOADtrueEnable automatic reloading
MCP_SKILLS_DEBOUNCE_DELAY0.5Delay (seconds) before reload
MCP_SKILLS_LOG_LEVELINFOLog level (DEBUG, INFO, WARNING, ERROR)
MCP_SKILLS_SCAN_DEPTH1Scan depth (always 1)

Example .env File

bash
MCP_SKILLS_DIR=/path/to/skillsMCP_SKILLS_HOT_RELOAD=trueMCP_SKILLS_DEBOUNCE_DELAY=0.5MCP_SKILLS_LOG_LEVEL=INFO

Skill File Format

Skills are defined in SKILL.md files with YAML frontmatter:

Minimal Example

markdown
---name: "my-skill"description: "Brief description"---
# My Skill
Your skill content here in Markdown.

Complete Example

markdown
---# Required fieldsname: "excel-advanced"description: "Advanced Excel automation techniques"
# Version and authorshipversion: "1.2.0"author: "Your Name"created: "2025-01-15"updated: "2025-10-23"
# Dependenciesdependencies:  python: ["openpyxl>=3.0.0", "pandas>=2.0.0"]  system: ["libreoffice"]
# Categorizationcategory: "office-automation"tags: ["excel", "spreadsheet", "automation"]complexity: "intermediate"  # beginner|intermediate|advanced
# Usage guidancewhen_to_use:  - "Automating Excel report generation"  - "Processing multiple Excel files"  - "Creating complex formulas programmatically"
# Relationshipsrelated_skills: ["csv-processing", "data-analysis"]
# Exampleshas_examples: trueexample_files: ["examples/report_generator.py", "templates/report_template.xlsx"]---
# Excel Advanced Automation
This skill covers advanced Excel automation techniques...
## Features
- Automated report generation- Formula creation- Bulk processing
## Examples
See `examples/report_generator.py` for a working example.

Available Metadata Fields

Required:

  • name: Unique identifier (kebab-case recommended)
  • description: Brief description

Optional:

  • version: Semantic version
  • author: Creator name
  • created, updated: ISO dates (YYYY-MM-DD)
  • dependencies: Python packages or system tools
  • category: Main category for grouping
  • tags: Array of tags for search
  • complexity: beginner, intermediate, or advanced
  • when_to_use: Array of usage scenarios
  • related_skills: Names of related skills
  • has_examples: Boolean flag
  • example_files: Paths to example files (relative to skill folder)

MCP Resources and Tools

Resources

The server exposes these MCP resources:

  1. skill://catalog - JSON catalog of all skills with metadata
  2. skill://{name} - Individual skill markdown content

Tools

Four tools are available for interacting with skills:

1. search_skills

Search for skills by query, category, tag, or complexity.

json
{  "query": "excel",  "category": "office-automation",  "tag": "automation",  "complexity": "intermediate"}
2. reload_skills

Manually trigger a reload of all skills from the directory.

json
{}
3. get_skill_info

Get metadata for a specific skill without loading full content.

json
{  "name": "excel-advanced"}
4. list_skill_folders

List all valid skill folders found in the skills directory.

json
{}

Development

Setup Development Environment

bash
# Clone repositorygit clone https://github.com/srprasanna/mcp-skill-hub.gitcd mcp-skill-hub
# Install dependencies (including dev dependencies)poetry install
# Activate virtual environmentpoetry shell

Running Tests

bash
# Run all testspoetry run pytest
# Run with coveragepoetry run pytest --cov=mcp_skills --cov-report=html
# Run specific test filepoetry run pytest tests/test_scanner.py
# Run with verbose outputpoetry run pytest -v

Code Quality

bash
# Format codepoetry run black .
# Lint codepoetry run ruff check .
# Type checkingpoetry run mypy src
# Run all quality checkspoetry run black . && poetry run ruff check . && poetry run mypy src

Development Workflow

  1. Create a branch:

    bash
    git checkout -b feature/my-feature
  2. Make changes and test:

    bash
    poetry run pytestpoetry run mypy src
  3. Format and lint:

    bash
    poetry run black .poetry run ruff check .
  4. Commit and push:

    bash
    git commit -m "Add feature: description"git push origin feature/my-feature

Project Structure

mcp-skill-hub/├── src/mcp_skills/          # Source code│   ├── models/              # Data models│   ├── parsers/             # Skill parsers│   ├── storage/             # Repository pattern│   ├── scanner.py           # Directory scanning│   ├── watcher.py           # Hot-reload watcher│   ├── server.py            # MCP server│   ├── config.py            # Configuration│   └── __main__.py          # CLI entry point├── tests/                   # Test suite├── examples/                # Example skills├── docs/                    # Documentation└── pyproject.toml           # Poetry configuration

Troubleshooting

Common Issues

Skills Not Loading

Problem: No skills are loaded when the server starts.

Solution:

  1. Check that your skills are in dedicated folders:
    /skills/my-skill/SKILL.md  ✓/skills/SKILL.md           ✗
  2. Verify folder names don't start with . or _
  3. Check logs for detailed error messages
Hot-Reload Not Working

Problem: Changes to SKILL.md files aren't detected.

Solution:

  1. Ensure MCP_SKILLS_HOT_RELOAD=true
  2. Check file is named exactly SKILL.md
  3. Verify file is in a valid skill folder
  4. Look for file watcher errors in logs
Parsing Errors

Problem: SKILL.md files fail to parse.

Solution:

  1. Validate YAML frontmatter syntax
  2. Ensure frontmatter is between --- delimiters
  3. Check required fields (name, description) are present
  4. Use a YAML validator to check syntax

Validation Command

Check your skills directory structure:

bash
poetry run mcp-skills --validate

Expected output:

✓ /skills/excel-advanced: Valid skill✓ /skills/python-automation: Valid skill✗ /skills/SKILL.md: Error - Skills must be in folders✗ /skills/.hidden: Skipped - Hidden folder⚠ /skills/empty-folder: Warning - No SKILL.md found
Summary: 2 valid, 1 error, 1 warning, 1 skipped

Logging

Enable debug logging for detailed information:

bash
export MCP_SKILLS_LOG_LEVEL=DEBUGpoetry run mcp-skills

Logs include:

  • Folder structure validation messages
  • Scan progress and results
  • Parse successes and failures
  • Hot-reload events
  • Detailed error context

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Quick Contributing Guide

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes with tests
  4. Ensure all tests pass and code is formatted
  5. Submit a pull request

Code Standards

  • Python 3.13+ with type hints
  • Black for formatting (88 char line length)
  • Ruff for linting
  • Mypy for type checking (strict mode)
  • Pytest for testing (>80% coverage)

Releases

This project uses automated releases via GitHub Actions.

Creating a Release

  1. Go to Actions → Release workflow
  2. Click Run workflow
  3. Choose version bump type:
    • patch - Bug fixes (0.1.0 → 0.1.1)
    • minor - New features (0.1.0 → 0.2.0)
    • major - Breaking changes (0.1.0 → 1.0.0)
    • Or specify exact version (e.g., 1.2.3)
  4. Select Docker registry (docker.io or ghcr.io)
  5. Click Run workflow

The workflow will:

  • ✅ Bump version in pyproject.toml
  • ✅ Create Git tag and GitHub release
  • ✅ Build and push Docker image
  • ✅ Run tests to verify release

Docker Images:

  • Docker Hub: {username}/mcp-skill-hub:{version}
  • GitHub: ghcr.io/{owner}/mcp-skill-hub:{version}

See RELEASING.md for detailed release documentation.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Built with MCP Python SDK
  • Inspired by the need for dynamic skill management in Claude
  • Thanks to all contributors!

Note: This server makes it impossible to misunderstand the folder structure requirement through:

  • Clear error messages with folder context
  • Comprehensive logging
  • Validation at multiple levels
  • Detailed documentation
  • Working examples

Each skill MUST be in its own folder. This design decision ensures clean organization, easy management, and unambiguous structure. 🎯

來源:README.md,提交 09b22be

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分