MCP Skill Registry
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Skill Registrylist available skills"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🧩 MCP Skill Registry
A self-hostable Model Context Protocol server that turns a folder of "skills" into tools any MCP client can discover and run.
What It Does · Quick Start · Built-in Skills · Connect a Client · Author a Skill · Deploy · Contributing
📖 About
MCP Skill Registry is an open-source, self-hostable Model Context Protocol server that turns plain folders of skills and agents into tools any MCP client — Claude Code, Claude Desktop, GitHub Copilot — can discover and run. It ships with a curated catalogue (spec-driven development, legacy modernization, and ITSM integrations), a one-click Hugging Face deployment, and an Apple-inspired upload dashboard.
Live demo: https://sarveshtalele-mcp-skills-registry.hf.space
MCP endpoint:
https://sarveshtalele-mcp-skills-registry.hf.space/mcpLicense: MIT · Status: active · Stack: FastAPI · Pydantic · Next.js
New here? Jump to Quick Start or Connect an MCP Client.
Related MCP server: Skillz
🎯 What It Does
MCP Skill Registry is one server that hosts many skills and exposes each one as a callable tool.
A skill is just a folder containing a SKILL.md manifest and a small script. Drop the folder in, and the server:
Discovers it automatically (reads the manifest at startup).
Publishes it on two interfaces at once:
as an MCP tool — usable from Claude Code, Claude Desktop, VS Code, Cursor, or any MCP client;
as a REST endpoint — usable from
curl, scripts, or any HTTP app.
Executes it safely in an isolated subprocess with a hard timeout.
You add capabilities by adding folders or uploading a ZIP — never by editing the server.
┌─────────────┐ "list/run tools" ┌────────────────────┐
│ MCP client │ ────────────────────────► │ │
│ Claude Code │ │ MCP Skill │
│ Claude Dsk. │ ◄──────────────────────── │ Registry server │
│ VS Code │ tool results │ │
└─────────────┘ │ discovers every │
┌─────────────┐ POST /api/v1/... │ skills/<name>/ │
│ REST caller │ ◄────────────────────────►│ folder │
└─────────────┘ └─────────┬──────────┘
│ runs in
▼ subprocess
skills/text-statistics/
skills/your-skill/ ...🏗️ Architecture
MCP clients REST clients
(Claude Code / Desktop, (curl, scripts, the
GitHub Copilot, VS Code) Next.js dashboard)
│ │
▼ Streamable HTTP ▼ /api/v1
┌──────────────────────────────────────────────────────┐
│ FastAPI application │
│ api → mcp → services → repositories → db → models │
│ discovery · validation · sandboxed execution · audit │
└──────────────────────────────────────────────────────┘
│ discovers + runs │ persists
▼ ▼
skills/ + agents/ (self-contained folders) SQLite (history, audit)Skills and agents are self-contained folders the FastAPI server auto-discovers and exposes as MCP tools (Streamable HTTP) and REST endpoints. Skills run in isolated subprocesses with a hard timeout; uploads can auto-publish to GitHub, which redeploys the Hugging Face Space.
✨ Features
Feature | Description | |
🔌 | Dual interface | Every skill is an MCP tool and a REST resource |
🧭 | Zero-config discovery | Skills are plain folders; no registration code |
🛡️ | Sandboxed execution | Subprocess isolation, per-skill timeouts, output caps |
📤 | Live uploads | Install a skill from a ZIP via the API or dashboard; no restart |
🌐 | Native MCP | Streamable HTTP transport with sessions; no bridge needed |
🔍 | Search | Keyword out of the box, optional semantic (vector) search |
🏭 | Engineering Factory | Built-in skill suite for legacy modernization and governance |
📐 | Spec-Driven Development | SpecKit skills drive a project from idea to backlog |
🤖 | Agent orchestration | Agents compose skills into multi-step workflows |
🖥️ | Dashboard UI | Apple-inspired Next.js dashboard for browsing, searching, and uploading |
📝 | Audit trail | Append-only event log for every execution and catalogue change |
🧱 | Clean codebase | Layered, typed, 37+ tests, CI on Python 3.10–3.12 |
🚀 Quick Start
Local development
git clone https://github.com/sarveshtalele/mcp-skills-registry.git
cd mcp-skills-registry
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
skill-registry # serves on http://localhost:7860curl http://localhost:7860/health
# {"status":"ok","version":"0.2.0","skills_loaded":1}Docker
docker build -t mcp-skill-registry .
docker run -p 7860:7860 -v "$(pwd)/data:/data" mcp-skill-registryLive demo
A public instance runs at https://sarveshtalele-mcp-skills-registry.hf.space — try the dashboard, browse skills, or connect your MCP client directly.
🏗️ Built-in Skills
The registry ships with production-ready skill suites out of the box.
📐 SpecKit — Spec-Driven Development
Inspired by GitHub Spec Kit, these skills drive a project from idea to backlog — usable from any MCP client:
Skill | Produces |
| Project principles ( |
| A structured spec ( |
| A technical plan ( |
| An ordered task backlog ( |
Flow: constitution → specify → plan → tasks, committing each artifact as you go.
🏭 Factory — Governed Engineering
A modernization suite that takes a legacy system from discovery to a governed release:
Skill | Purpose |
| Reverse-engineer a legacy app (scans a repo URL or local path) → spec + architecture + inventory |
| Target architecture + phased migration plan + ADRs |
| Spec → dependency-ordered |
| Legacy UI → React component plan + starter stubs |
| Unit/integration/e2e test strategy + stubs |
| Compliance audit with a pass/fail gate and score |
Flow: legacy-discovery → topology-planning → task-decomposition → ui-modernization → test-generation → spec-governance
🔍 Change Impact Analysis
A graph-driven change impact analysis skill that builds dependency graphs, finds directly and transitively affected modules, validates API contracts for breaking changes, parses CODEOWNERS, and computes a 0–100 deployment risk score.
📊 Text Statistics
A simple, worked example skill — computes word count, character count, sentence count, and reading level for any text.
🔬 Real-World Example: Reverse-Engineering nopCommerce
The legacy-discovery skill can reverse-engineer entire codebases. Here's what it produces when pointed at the nopCommerce repository — a 3M+ download, enterprise-grade e-commerce platform:
The skill automatically produces:
System Design Document — full architectural analysis with layered architecture model
150+ domain entity inventory — Products, Orders, Customers, Payments, Shipping, etc.
50+ service module mapping —
ICatalogService,IOrderService,IPaymentService, etc.Plugin architecture breakdown — Payment, Shipping, Tax, Auth, Widget plugin taxonomies
Database schema analysis — entity relationships, migration history (1.90 → 5.00)
Security architecture — RBAC, AES encryption, GDPR compliance, OWASP headers
Event system documentation — pub/sub patterns, cache invalidation chains
100-point quality score — codebase health metrics
All from a single command:
# Via MCP client
"Reverse engineer https://github.com/nopSolutions/nopCommerce"
# Via REST API
curl -X POST http://localhost:7860/api/v1/skills/legacy-discovery/execute \
-H 'Content-Type: application/json' \
-d '{"inputs": {"repo_url": "https://github.com/nopSolutions/nopCommerce"}}'The returned analysis includes architectural diagrams, code patterns, entity relationships, and actionable modernization recommendations — no manual effort required.
🤖 Agents
Agents orchestrate skills through multi-step workflows. Load one in your MCP client to drive an end-to-end process:
Agent | Orchestrates | Purpose |
|
| Reverse-engineer & define target architecture |
|
| Build the modernization solution |
|
| Governance & compliance enforcement |
GET /api/v1/agents lists them; upload your own via the dashboard or POST /api/v1/agents/upload.
🔌 External Integrations
Skills under skills/integrations/ call external systems (creds via Space env vars,
never hard-coded; mutating skills require approval):
Skill | Creates | Required env vars |
| a Jira issue |
|
| a ServiceNow incident |
|
Add your own connector (Slack, GitHub issues, PagerDuty, …) the same way: a skill
folder whose scripts/main.py reads credentials from the environment and calls the
target API with the standard library. Missing credentials return a clear error.
🖥️ Dashboard UI
An Apple-inspired Next.js dashboard is the landing page (static export built into the image; served by FastAPI). It lets you:
Browse all skills and agents with search
Upload a skill, a speckit skill, or an agent — Validate format first, then Upload & Publish
Delete skills and agents directly from the UI
With SKILLREG_GITHUB_TOKEN set, publishing also commits to the repo's skills/ or agents/ folder, redeploying the Space.
Live: sarveshtalele-mcp-skills-registry.hf.space
🔗 Connect an MCP Client
The server speaks Streamable HTTP MCP transport at /mcp. Use your local URL (http://localhost:7860/mcp) or the hosted one (https://sarveshtalele-mcp-skills-registry.hf.space/mcp).
Claude Code
claude mcp add --transport http skill-registry \
https://sarveshtalele-mcp-skills-registry.hf.space/mcpVerify inside a session:
/mcp # lists connected servers and their toolsRemove with claude mcp remove skill-registry.
Claude Desktop
Open Settings → Developer → Edit Config (opens
claude_desktop_config.json).Add the server:
{ "mcpServers": { "skill-registry": { "command": "npx", "args": [ "-y", "mcp-remote", "https://sarveshtalele-mcp-skills-registry.hf.space/mcp" ] } } }Claude Desktop launches MCP servers as local processes, so it reaches a remote HTTP server through the
mcp-remotebridge (npxfetches it automatically; requires Node.js). Alternatively, Settings → Connectors → Add custom connector accepts the/mcpURL directly on supported plans.Restart Claude Desktop. The skills appear as tools (look for the 🔌 icon).
VS Code (GitHub Copilot / Continue)
Create .vscode/mcp.json:
{
"servers": {
"skill-registry": {
"type": "http",
"url": "https://sarveshtalele-mcp-skills-registry.hf.space/mcp"
}
}
}Any MCP client (raw protocol)
The endpoint is JSON-RPC 2.0 over HTTP POST.
# 1. initialize — returns an Mcp-Session-Id header
curl -i -X POST http://localhost:7860/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
# 2. list tools
curl -X POST http://localhost:7860/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# 3. call a tool
curl -X POST http://localhost:7860/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"text-statistics","arguments":{"text":"Hello world."}}}'Method | Behaviour |
|
|
|
|
| Terminate the session in the |
🧰 REST API
Every skill is reachable without MCP. Interactive API docs (/docs, /redoc,
/openapi.json) are disabled by default for safety — enable with
SKILLREG_ENABLE_DOCS=true in trusted environments.
Method & Path | Description |
| Service metadata + entry points |
| Liveness probe + skill count |
| List / search skills ( |
| Full skill manifest |
| Run a skill — body |
| Install a skill from a ZIP ( |
| Validate a skill ZIP without installing |
| Delete a skill |
| List all agents |
| Install an agent from a ZIP |
| Delete an agent |
| Re-scan the skills and agents directories |
# Example: run a skill
curl -X POST http://localhost:7860/api/v1/skills/text-statistics/execute \
-H 'Content-Type: application/json' \
-d '{"inputs": {"text": "The quick brown fox jumps over the lazy dog."}}'⚙️ Architecture
The server is a small, layered FastAPI application. Each layer depends only on the layers beneath it, keeping it testable and easy to extend.
┌──────────────────────────────────────────────────────────────────────┐
│ FastAPI application (port 7860) │
│ │
│ api/ Routers: / · /health · /mcp · /api/v1/skills │ ← transport
│ │ │
│ mcp/ Streamable HTTP transport · JSON-RPC 2.0 · sessions │ ← MCP protocol
│ │ │
│ services/ SkillRegistry (facade) │ ← application
│ │ ├─ loader parse & validate SKILL.md │ logic
│ │ ├─ validator check inputs against the manifest │
│ │ ├─ executor run skill in a sandboxed subprocess │
│ │ ├─ search keyword / optional semantic ranking │
│ │ ├─ installer safe ZIP upload (zip-slip/bomb guard)│
│ │ ├─ publisher auto-commit to GitHub on upload │
│ │ └─ audit append-only event log │
│ │ │
│ repositories/ execution history · audit trail │ ← persistence
│ │ │
│ db/ models/ config/ container/ main │ ← storage, types,
│ SQLite + schema.sql · pydantic models · settings · wiring │ wiring
└───────────────────────────────────┬──────────────────────────────────┘
│ discovers & executes
▼
skills/ self-contained skill folders
└─ <name>/ SKILL.md · scripts/ · references/ · assets/Request lifecycle (running a tool)
client → tools/call (MCP) or POST /api/v1/skills/{name}/execute (REST)
│
├─ 1. look up the skill in the in-memory catalogue (404 if unknown)
├─ 2. validate inputs against SKILL.md (types, required, enums)
├─ 3. spawn subprocess: python _runner.py <skill> run (isolated, timed)
│ inputs → JSON via stdin · output → JSON via stdout
├─ 4. enforce timeout + output-size cap (kill child on overrun)
├─ 5. record execution + audit entry (SQLite)
└─ 6. return { status, output | error, duration_ms }Why subprocesses? Process-level isolation, a clean import namespace per call, and a reliable hard timeout — a misbehaving skill can never hang or crash the server.
🧩 Authoring a Skill
A skill is one self-contained folder:
skill-name/
├── SKILL.md # Required: YAML frontmatter (manifest) + instructions
├── scripts/ # Optional: code — entrypoint exposes run(inputs) -> dict
├── references/ # Optional: supporting docs
├── assets/ # Optional: templates, resources, extra requirements.txt
└── ... # Any additional files1. Scaffold
python scripts/new_skill.py my-skill2. Define SKILL.md
---
name: my-skill
version: 1.0.0
description: What it does and the phrases that should trigger it.
execution:
type: python-script
entrypoint: scripts/main.py:run
timeout_seconds: 30
inputs:
- name: text
type: string
required: true
description: Text to process.
outputs:
- name: result
type: string
description: Processed text.
---
# My Skill
Instructions for the agent.3. Implement scripts/main.py
def run(inputs: dict) -> dict:
return {"result": inputs["text"].upper()}4. Register
# Option A: reload the running server
curl -X POST http://localhost:7860/api/v1/admin/reload
# Option B: upload a packaged skill (no restart needed)
zip -r my-skill.zip my-skill/
curl -X POST http://localhost:7860/api/v1/skills/upload -F 'file=@my-skill.zip'📖 Full guide: docs/ADDING_A_SKILL.md
🌍 Deployment
Hugging Face Spaces (recommended)
The project is designed for Hugging Face Docker Spaces out of the box.
GitHub (source of truth) ──push main──► HF Space (Docker build) ──► live MCP server
│ │
CI: lint + test Dockerfile → uvicorn :7860Create a Docker Space on huggingface.co/new-space
Add
HF_TOKENsecret andHF_USERNAME/HF_SPACEvariables to your GitHub repoPush to
main— CI runs lint + tests, then auto-deploys to the Space
Docker (anywhere)
docker build -t mcp-skill-registry .
docker run -p 7860:7860 -v "$(pwd)/data:/data" mcp-skill-registryManual deploy
pip install huggingface_hub
huggingface-cli login
huggingface-cli upload <user>/mcp-skill-registry . . --repo-type space📖 Full guide: docs/DEPLOYMENT.md
🔧 Configuration
All settings are environment variables with the SKILLREG_ prefix (see .env.example):
Variable | Default | Description |
|
| Bind address |
|
| HTTP port |
|
| Logging verbosity |
|
| Skill catalogue directory |
|
| Agent catalogue directory |
|
| SQLite database path |
|
| Default execution timeout |
|
| Upper bound on any timeout |
|
| Max skill output size (1 MB) |
|
| Allow the upload endpoint |
|
| Max upload archive size |
|
| Vector search (needs the |
|
| Sentence-transformer model for semantic search |
| (empty) | GitHub PAT for auto-publish on upload |
|
| Target repo for auto-publish |
|
| Serve the Next.js dashboard at |
|
| Path to the Next.js static export |
🧪 Development
make install # editable install with dev extras
make test # pytest (37+ tests)
make lint # ruff + black --check
make format # ruff --fix + black
make run # local dev serverCI runs lint + tests on every push and PR across Python 3.10, 3.11, and 3.12.
Running tests
pytest -q # all tests
pytest tests/test_api.py # specific test module
pytest -k "test_upload" # by name patternCode quality
Tool | Purpose | Config |
Linting (E/W/F/I/UP/B/N/C4) |
| |
Formatting (line-length 100) |
| |
Type checking |
| |
Testing (async mode) |
|
📁 Project Structure
mcp-skills-registry/
├── src/skill_registry/ # the server (layered package)
│ ├── api/ # HTTP routers (health, mcp, rest)
│ ├── mcp/ # JSON-RPC 2.0 protocol handler
│ ├── services/ # business logic
│ │ ├── registry.py # facade: coordinates all services
│ │ ├── loader.py # SKILL.md parser & skill discovery
│ │ ├── validator.py # input validation against manifests
│ │ ├── executor.py # subprocess execution + timeout
│ │ ├── _runner.py # child process skill runner
│ │ ├── search.py # keyword & semantic search
│ │ ├── installer.py # ZIP upload (zip-slip/bomb guards)
│ │ ├── github_publisher.py # auto-commit uploads to GitHub
│ │ ├── agent_loader.py # AGENT.md parser & agent discovery
│ │ └── audit.py # append-only audit trail
│ ├── repositories/ # execution history & audit persistence
│ ├── db/ # SQLite wrapper + schema.sql
│ ├── models/ # pydantic domain models
│ ├── config.py # env-driven settings (SKILLREG_*)
│ ├── container.py # composition root (build_container)
│ └── main.py # app factory + CLI entrypoint
│
├── skills/ # self-contained skills (auto-discovered)
│ ├── _template/ # scaffold skeleton for new skills
│ ├── text-statistics/ # worked example
│ ├── change-impact-analysis/ # graph-driven deployment risk analysis
│ ├── speckit/ # spec-driven development suite
│ │ ├── constitution/
│ │ ├── specify/
│ │ ├── plan/
│ │ └── tasks/
│ └── factory/ # governed engineering suite
│ ├── legacy-discovery/
│ ├── topology-planning/
│ ├── task-decomposition/
│ ├── ui-modernization/
│ ├── test-generation/
│ └── spec-governance/
│
├── agents/ # agent orchestration definitions
│ ├── arch-analyst/
│ ├── migration-eng/
│ └── gatekeeper/
│
├── frontend/ # Next.js dashboard (static export)
│ ├── app/ # Next.js app router pages
│ └── out/ # built static files (served by FastAPI)
│
├── scripts/ # utilities
│ ├── new_skill.py # scaffold a new skill
│ └── hf_entrypoint.sh # Hugging Face Spaces boot script
│
├── tests/ # pytest suite
│ ├── test_api.py # REST API tests
│ ├── test_mcp_transport.py # MCP protocol tests
│ ├── test_loader.py # skill loader tests
│ ├── test_validator.py # input validation tests
│ ├── test_executor.py # subprocess execution tests
│ ├── test_upload.py # ZIP upload + install tests
│ ├── test_agents.py # agent loading + API tests
│ └── test_github_publisher.py # GitHub auto-publish tests
│
├── docs/ # extended documentation
│ ├── ARCHITECTURE.md # layered design & execution model
│ ├── ADDING_A_SKILL.md # full skill authoring guide
│ ├── DEPLOYMENT.md # GitHub → HF Spaces pipeline
│ └── SKILL_AND_AGENT_REFERENCE.md # file-by-file reference
│
├── .github/workflows/
│ ├── ci.yml # lint + test on Python 3.10–3.12
│ └── deploy-hf.yml # auto-deploy to Hugging Face Spaces
│
├── Dockerfile # multi-stage: Node (frontend) + Python (server)
├── pyproject.toml # project metadata, deps, tool config
├── requirements.txt # HF Spaces runtime deps
├── Makefile # dev shortcuts (install, test, lint, run)
├── app.py # thin ASGI entrypoint shim
├── CONTRIBUTING.md # contributor guide
└── LICENSE # MIT🗺️ Roadmap
Authentication & API keys — per-skill access control
Skill versioning — run multiple versions side-by-side
Execution analytics dashboard — visualize usage, latency, and error rates
Webhook notifications — trigger on skill execution events
Plugin marketplace — community skill discovery and one-click install
Rate limiting — configurable per-skill and global throttling
Async / streaming execution — long-running skills with progress updates
Multi-language runtimes — support Node.js, Go, Rust skill scripts
🤝 Contributing
Contributions are welcome! See CONTRIBUTING.md for guidelines.
# Dev setup
python -m venv .venv && source .venv/bin/activate
make install
# Before opening a PR
make format # ruff --fix + black
make lint # ruff + black --check
make test # pytestAdding a skill
Submit a PR that adds a single skills/<name>/ folder with:
A valid
SKILL.mdwith YAML frontmatterAn entrypoint exposing
run(inputs) -> dictAt least one test
Conventions
Layered architecture:
api → services → repositories → db → models— don't reach across layersType-hint public functions; keep modules small and single-purpose
Line length 100; formatting by black; linting by ruff
📖 Documentation
Document | Description |
Layered design, execution model, data storage | |
Complete skill authoring guide with examples | |
GitHub → Hugging Face Spaces deployment pipeline | |
File-by-file reference for skill and agent packages | |
Contributor guidelines and conventions |
📄 License
MIT — see LICENSE.
Live Demo · Report a Bug · Request a Feature
Made with ❤️ by Sarvesh Talele
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sarveshtalele/mcp-skills-registry'
If you have feedback or need assistance with the MCP directory API, please join our Discord server