# Skill Mcp

> LLM-managed skills platform using MCP - create, edit, and execute skills programmatically in Claude, Cursor, and any MCP-compatible client without manual file uploads.

- **Type:** MCP server
- **Install:** `agentstack add mcp-fkesheh-skill-mcp`
- **Verified:** Pending review
- **Seller:** [fkesheh](https://agentstack.voostack.com/s/fkesheh)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [fkesheh](https://github.com/fkesheh)
- **Source:** https://github.com/fkesheh/skill-mcp

## Install

```sh
agentstack add mcp-fkesheh-skill-mcp
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Skill Management MCP Server

A Model Context Protocol (MCP) server that enables Claude to manage skills stored in `~/.skill-mcp/skills`. This system allows Claude to create, edit, run, and manage skills programmatically, including execution of skill scripts with environment variables.

## Quick Status

**Status:** ✅ Production Ready
**Test Coverage:** 86% (145/145 tests passing)
**Deployed:** October 18, 2025
**Architecture:** 22-module modular Python package with unified CRUD architecture

## Overview

**TL;DR:** Write Python code that unifies multiple skills in one execution - follows [Anthropic's MCP pattern](https://www.anthropic.com/engineering/code-execution-with-mcp) for 98.7% more efficient agents.

This project consists of two main components:

1. **MCP Server** (`src/skill_mcp/server.py`) - A Python package providing 5 unified CRUD tools for skill management
2. **Skills Directory** (`~/.skill-mcp/skills/`) - Where you store and manage your skills

## Key Advantages

### 🚀 Unified Multi-Skill Execution (Code Execution with MCP)

**Build once, compose everywhere** - Execute Python code that seamlessly combines multiple skills in a single run:

```python
# One execution, multiple skills unified!
# Imports from calculator, data-processor, and weather skills
from math_utils import calculate_average          # calculator skill
from json_fetcher import fetch_json                # data-processor skill
from weather_api import get_forecast               # weather skill

# Fetch weather data
weather = fetch_json('https://api.weather.com/cities')

# Calculate averages using calculator utilities
temps = [city['temp'] for city in weather['cities']]
avg_temp = calculate_average(temps)

# Get detailed forecast
forecast = get_forecast('London')
print(f"Average temperature: {avg_temp}°F")
print(f"London forecast: {forecast}")
```

**What makes this powerful:**
- ✅ **Context-efficient** - Dependencies and env vars auto-aggregated from all referenced skills
- ✅ **Composable** - Mix and match utilities from any skill like building blocks
- ✅ **No redundancy** - Declare PEP 723 dependencies once in library skills, reuse everywhere
- ✅ **Progressive disclosure** - Load only the skills you need, when you need them
- ✅ **Follows Anthropic's MCP pattern** - [Code execution with MCP](https://www.anthropic.com/engineering/code-execution-with-mcp) for efficient agents

**Efficiency gains:**
- 📉 **98.7% fewer tokens** when discovering tools progressively vs loading all upfront
- 🔄 **Intermediate results stay in code** - Process large datasets without bloating context
- ⚡ **Single execution** - Complex multi-step workflows in one code block instead of chained tool calls

This aligns with Anthropic's research showing agents scale better by writing code to call tools rather than making direct tool calls for each operation.

### 🔓 Not Locked to Claude UI

Unlike the Claude interface, this system uses the **Model Context Protocol (MCP)**, which is:

- ✅ **Universal** - Works with Claude Desktop, claude.ai, Cursor, and any MCP-compatible client
- ✅ **Not tied to Claude** - Same skills work everywhere MCP is supported
- ✅ **Future-proof** - Not dependent on Claude's ecosystem or policy changes
- ✅ **Local-first** - Full control over your skills and data

### 🎯 Use Skills Everywhere

Your skills can run in:
- **Cursor** - IDE integration with MCP support
- **Claude Desktop** - Native app with MCP access
- **claude.ai** - Web interface with MCP support
- **Any MCP client** - Growing ecosystem of compatible applications

### 📦 Independent & Modular

- ✅ Each skill is self-contained with its own files, scripts, and environment
- ✅ No dependency on proprietary Claude features
- ✅ Can be versioned, shared, and reused across projects
- ✅ Standard MCP protocol ensures compatibility

### 🔄 Share Skills Across All MCP Clients

- ✅ **One skill directory, multiple clients** - Create once, use everywhere
- ✅ **Same skills in Cursor and Claude** - No duplication needed
- ✅ **Seamless switching** - Move between tools without reconfiguring
- ✅ **Consistent experience** - Skills work identically across all MCP clients
- ✅ **Centralized management** - Update skills in one place, available everywhere

### 🤖 LLM-Managed Skills (No Manual Copy-Paste)

Instead of manually copying, zipping, and uploading files:

```
❌ OLD WAY: Manual process
   1. Create skill files locally
   2. Zip the skill folder
   3. Upload to Claude interface
   4. Wait for processing
   5. Can't easily modify or version

✅ NEW WAY: LLM-managed programmatically
   1. Tell Claude: "Create a new skill called 'data-processor'"
   2. Claude creates the skill directory and SKILL.md
   3. Tell Claude: "Add a Python script to process CSVs"
   4. Claude creates and tests the script
   5. Tell Claude: "Set the API key for this skill"
   6. Claude updates the .env file
   7. Tell Claude: "Run the script with this data"
   8. Claude executes it and shows results - all instantly!
```

**Key Benefits:**
- ✅ **No manual file operations** - LLM handles creation, editing, deletion
- ✅ **Instant changes** - No upload/download/reload cycles
- ✅ **Full version control** - Skills are regular files, can use git
- ✅ **Easy modification** - LLM can edit scripts on the fly
- ✅ **Testable** - LLM can create and run scripts immediately
- ✅ **Collaborative** - Teams can develop skills together via MCP

## Features

### Skill Management
- ✅ List all available skills
- ✅ Browse skill files and directory structure
- ✅ Read skill files (SKILL.md, scripts, references, assets)
- ✅ Create new skill files and directories
- ✅ Update existing skill files
- ✅ Delete skill files

### Script Execution
- ✅ Run Python, Bash, and other executable scripts
- ✅ **Automatic dependency management** for Python scripts using uv inline metadata (PEP 723)
- ✅ Automatic environment variable injection from secrets
- ✅ Command-line argument support
- ✅ Custom working directory support
- ✅ Capture stdout and stderr
- ✅ 30-second timeout for safety

### Direct Python Execution - Multi-Skill Unification 🚀
- ✅ **UNIFY MULTIPLE SKILLS in one execution** - Combine utilities from different skills seamlessly
- ✅ **Execute Python code directly** without creating script files
- ✅ **Cross-skill imports** - Import modules from ANY skill as reusable libraries
- ✅ **Automatic dependency aggregation** - Dependencies from ALL imported skills auto-merged
- ✅ **Environment variable loading** - .env files from ALL referenced skills auto-loaded
- ✅ **PEP 723 support** - Inline dependency declarations in code
- ✅ **98.7% more efficient** - Follows Anthropic's recommended MCP pattern for scalable agents
- ✅ Perfect for multi-skill workflows, quick experiments, data analysis, and complex pipelines

### Environment Variables
- ✅ List environment variable keys (secure - no values shown)
- ✅ Set or update environment variables per skill
- ✅ Persistent storage in per-skill `.env` files
- ✅ Automatic injection into script execution

## Directory Structure

```
~/.skill-mcp/
└── skills/                       # Your skills directory
    ├── example-skill/
    │   ├── SKILL.md             # Required: skill definition
    │   ├── .env                 # Optional: skill-specific environment variables
    │   ├── scripts/             # Optional: executable scripts
    │   ├── references/          # Optional: documentation
    │   └── assets/              # Optional: templates, files
    └── another-skill/
        ├── SKILL.md
        └── .env
```

**Note:** The MCP server is installed via `uvx` from PyPI and runs automatically. No local server file needed!

## Quick Start

### 1. Install uv

This project uses [uv](https://github.com/astral-sh/uv) for fast, reliable Python package management.

```bash
# Install uv (includes uvx)
curl -LsSf https://astral.sh/uv/install.sh | sh
```

### 2. Configure Your MCP Client

Add the MCP server to your configuration. The server will be automatically downloaded and run via `uvx` from PyPI.

**Claude Desktop** - Edit the config file:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- Linux: `~/.config/Claude/claude_desktop_config.json`

**Cursor** - Edit the config file:
- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`
- Linux: `~/.cursor/mcp.json`

```json
{
  "mcpServers": {
    "skill-mcp": {
      "command": "uvx",
      "args": [
        "--from",
        "skill-mcp",
        "skill-mcp-server"
      ]
    }
  }
}
```

That's it! No installation needed - `uvx` will automatically download and run the latest version from PyPI.

### 3. Restart Your MCP Client

Restart Claude Desktop or Cursor to load the MCP server.

### 4. Test It

In a new conversation:
```
List all available skills
```

Claude should use the skill-mcp tools to show skills in `~/.skill-mcp/skills/`.

## Common uv Commands

For development in this repository:
```bash
uv sync              # Install/update dependencies
uv run python script.py   # Run Python with project environment
uv add package-name  # Add a new dependency
uv pip list          # Show installed packages
uv run pytest tests/ -v   # Run tests
```

**Note:** uv automatically creates and manages `.venv/` - no need to manually create virtual environments!

## Script Dependencies (PEP 723)

**✅ BOTH `run_skill_script` AND `execute_python_code` support PEP 723!**

Python scripts and code can declare their own dependencies using uv's inline metadata. The server automatically detects this and uses `uv run` to handle dependencies:

```python
#!/usr/bin/env python3
# /// script
# dependencies = [
#   "requests>=2.31.0",
#   "pandas>=2.0.0",
# ]
# ///

import requests
import pandas as pd

# Your script code here - dependencies are automatically installed!
response = requests.get("https://api.example.com/data")
df = pd.DataFrame(response.json())
print(df.head())
```

**Benefits:**
- ✅ No manual dependency installation needed
- ✅ Each script/code execution has isolated dependencies
- ✅ Works automatically with **both** `run_skill_script` and `execute_python_code`
- ✅ Version pinning ensures reproducibility
- ✅ `execute_python_code` ALSO aggregates dependencies from skill imports!

**How it works with `run_skill_script`:**
1. You add inline metadata to your Python script file
2. When the script runs via `run_skill_script`, the server detects the metadata
3. uv automatically creates an isolated environment and installs dependencies
4. The script runs with access to those dependencies
5. No manual `pip install` or virtual environment management needed!

**How it works with `execute_python_code`:**
1. Include PEP 723 metadata directly in your code string
2. The server automatically detects the metadata
3. uv creates an isolated environment and installs dependencies
4. Your code runs with access to those dependencies
5. **BONUS:** If you import from skill files, their PEP 723 dependencies are automatically aggregated too!

**Example:** See `example-skill/scripts/fetch_data.py` for a working example.

**Testing locally:**
```bash
# Scripts with dependencies just work!
uv run example-skill/scripts/fetch_data.py
```

## Direct Python Code Execution - Unify Multiple Skills in One Run

The `execute_python_code` tool allows you to run Python code that **combines multiple skills in a single execution**. This is perfect for:
- 🔄 **Multi-skill workflows** - Import and compose utilities from different skills
- 🧪 **Quick experiments** - Test code without creating files
- 📊 **Data analysis** - Process data using libraries from multiple skills
- 🏗️ **Building on reusable skill libraries** - Create specialized utilities once, use everywhere

**Key insight from Anthropic's research:** Agents scale better by writing code to call tools instead of making direct tool calls. This approach reduces context usage by up to 98.7% and enables more efficient workflows.

### Basic Usage

```python
# Simple inline execution with dependencies
# /// script
# dependencies = [
#   "requests>=2.31.0",
# ]
# ///

import requests
response = requests.get("https://api.example.com/data")
print(response.json())
```

### Cross-Skill Imports - Unifying Multiple Skills

**The power of composition** - Create utility skills once and combine them in endless ways:

**Real-world example:** Process sales data by unifying calculator, data-processor, and CRM skills:

**Step 1: Create a calculator skill with reusable modules**
```python
# calculator:math_utils.py
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b
```

**Step 2: Create data-processor skill utilities**
```python
# data-processor:csv_parser.py
# /// script
# dependencies = ["pandas>=2.0.0"]
# ///
import pandas as pd

def parse_csv_url(url):
    return pd.read_csv(url)

def filter_by_status(df, status):
    return df[df['status'] == status]
```

**Step 3: Unify both skills in one execution!**
```python
# Execute with skill_references: ["calculator:math_utils.py", "data-processor:csv_parser.py"]
from math_utils import calculate_average
from csv_parser import parse_csv_url, filter_by_status

# Get sales data
sales_df = parse_csv_url('https://example.com/sales.csv')

# Filter active deals
active_deals = filter_by_status(sales_df, 'active')

# Calculate average deal size using calculator skill
deal_values = active_deals['amount'].tolist()
avg_deal = calculate_average(deal_values)

print(f"Active deals: {len(active_deals)}")
print(f"Average deal size: ${avg_deal:,.2f}")
```

**What just happened:**
- ✅ **Two skills unified** - calculator + data-processor in one execution
- ✅ **Zero redundancy** - pandas dependency declared once in csv_parser.py, auto-included
- ✅ **Composable** - Mix and match any skills like LEGO blocks
- ✅ **Context-efficient** - Only loaded the specific modules needed

### Automatic Dependency Aggregation

When you import from skill modules that have PEP 723 dependencies, they're automatically included:

**Library skill with dependencies:**
```python
# data-processor:json_fetcher.py
# /// script
# dependencies = ["requests>=2.31.0"]
# ///
import requests
def fetch_json(url):
    return requests.get(url).json()
```

**Your code - NO need to redeclare requests!**
```python
# Execute with skill_references: ["data-processor:json_fetcher.py"]
from json_fetcher import fetch_json
data = fetch_json('https://api.example.com')
print(data)
# Dependencies from json_fetcher.py are automatically aggregated!
```

### Environment Variables from Referenced Skills

When you import from a skill, its environment variables are **automatically loaded**:

**Skill with API credentials:**
```bash
# weather-skill/.env
API_KEY=your-secret-api-key
API_URL=https://api.weatherapi.com
```

**Your code - env vars automatically available:**
```python
# Execute with skill_references: ["weather-skill:api_client.py"]
from api_client import fetch_weather

# api_client.py can access API_KEY and API_URL from its .env file
data = fetch_weather('London')
print(data)
```

**Benefits:**
- ✅ No need to manually load .env files
- ✅ Each skill's secrets stay isolated
- ✅ Multiple skills' env vars are merged automatically
- ✅ Later skills override earlier ones if there are conflicts

### Use Cases

- 🔄 **Multi-skill workflows** - **THE KILLER FEATURE** - Unify utilities from multiple skills in one execution
  - Example: Combine API client + data parser + analytics calculator in single run
  - Example: Chain together scraper + NLP processor + notification sender
  - Example: Merge CRM data + payment processor + reporting tools
- ✅ **Quick data analysis** - Run pandas/numpy code without creating files
- ✅ **API testing** - Test HTTP requests with inline dependencies
- ✅ **Reusable libraries** - Build once, import everywhere
- ✅ **Rapid prototyping** - Experiment with code before committing to files
- ✅ **Complex pipelines** - Build multi-stage data processing in one code block

### Co

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [fkesheh](https://github.com/fkesheh)
- **Source:** [fkesheh/skill-mcp](https://github.com/fkesheh/skill-mcp)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: flagged — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-fkesheh-skill-mcp
- Seller: https://agentstack.voostack.com/s/fkesheh
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
