We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bobmatnyc/mcp-skills'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
# ============================================================================
# MCP Skills - Main Makefile
# ============================================================================
# Enhanced with python-project-template modular structure
# https://github.com/bobmatnyc/mcp-skillset
# ============================================================================
.DEFAULT_GOAL := help
# Include modular Makefile components from template
-include .makefiles/common.mk
-include .makefiles/quality.mk
-include .makefiles/testing.mk
-include .makefiles/deps.mk
-include .makefiles/release.mk
# ============================================================================
# Project Configuration
# ============================================================================
PROJECT_NAME := mcp-skillset
PYTHON_VERSION := 3.11
SRC_DIR := src/mcp_skills
TEST_DIR := tests
# ============================================================================
# Project-Specific Targets
# ============================================================================
.PHONY: mcp-server
mcp-server: ## Run the MCP Skills server
@echo "$(BLUE)Starting MCP Skills server...$(NC)"
python -m mcp_skills.mcp.server
.PHONY: index
index: ## Build/rebuild the skills index
@echo "$(BLUE)Indexing skills...$(NC)"
mcp-skillset index
.PHONY: search
search: ## Search skills (usage: make search QUERY="your query")
@echo "$(BLUE)Searching for: $(QUERY)$(NC)"
mcp-skillset search "$(QUERY)"
# ============================================================================
# Legacy Targets (preserved for compatibility)
# ============================================================================
.PHONY: install
install: ## Install package in development mode
pip install -e .
.PHONY: dev-install
dev-install: ## Install with dev dependencies
pip install -e ".[dev]"
.PHONY: lint-fix
lint-fix: ## Auto-fix linting issues (ruff + black)
@echo "$(BLUE)π§ Running ruff check with auto-fix...$(NC)"
ruff check --fix $(SRC_DIR) $(TEST_DIR)
@echo "$(BLUE)π¨ Running black formatter...$(NC)"
black $(SRC_DIR) $(TEST_DIR)
@echo "$(GREEN)β
Linting and formatting complete$(NC)"
.PHONY: test
test: ## Run tests with coverage
@echo "$(BLUE)π§ͺ Running tests with coverage...$(NC)"
pytest $(TEST_DIR) --cov=$(SRC_DIR) --cov-report=term-missing --cov-report=html
@echo "$(GREEN)β
Tests complete$(NC)"
.PHONY: benchmark
benchmark: ## Run performance benchmarks
@echo "$(BLUE)β‘ Running performance benchmarks...$(NC)"
pytest tests/benchmarks/ -v --benchmark-only --benchmark-autosave --benchmark-storage=.benchmarks
@echo "$(GREEN)β
Benchmarks complete$(NC)"
@echo ""
@echo "$(BLUE)π Benchmark results saved to .benchmarks/$(NC)"
.PHONY: benchmark-compare
benchmark-compare: ## Compare latest benchmark with baseline
@echo "$(BLUE)π Comparing benchmarks...$(NC)"
pytest tests/benchmarks/ --benchmark-only --benchmark-compare --benchmark-storage=.benchmarks
@echo "$(GREEN)β
Comparison complete$(NC)"
.PHONY: benchmark-fast
benchmark-fast: ## Run fast benchmarks only (skip slow tests)
@echo "$(BLUE)β‘ Running fast benchmarks...$(NC)"
pytest tests/benchmarks/ -v -m "not slow" --benchmark-only --benchmark-autosave --benchmark-storage=.benchmarks
@echo "$(GREEN)β
Fast benchmarks complete$(NC)"
.PHONY: quality
quality: ## Run comprehensive quality checks
@echo "$(BLUE)π Running comprehensive quality checks...$(NC)"
@echo ""
@echo "$(YELLOW)1οΈβ£ Checking code formatting...$(NC)"
ruff check $(SRC_DIR) $(TEST_DIR)
black --check $(SRC_DIR) $(TEST_DIR)
@echo ""
@echo "$(YELLOW)2οΈβ£ Running type checks...$(NC)"
uv run mypy $(SRC_DIR)
@echo ""
@echo "$(YELLOW)3οΈβ£ Running tests with coverage...$(NC)"
uv run pytest $(TEST_DIR)
@echo ""
@echo "$(GREEN)β
All quality checks passed$(NC)"
.PHONY: security-check
security-check: ## Run basic security vulnerability scan
@echo "$(BLUE)π Running basic security scan...$(NC)"
@echo ""
@echo "$(YELLOW)Installing security tools if needed...$(NC)"
@pip install -q safety pip-audit 2>/dev/null || true
@echo ""
@echo "$(YELLOW)1οΈβ£ Scanning dependencies with Safety...$(NC)"
@safety check --output text || true
@echo ""
@echo "$(YELLOW)2οΈβ£ Scanning dependencies with pip-audit...$(NC)"
@pip-audit --desc || true
@echo ""
@echo "$(GREEN)β
Security scan complete$(NC)"
.PHONY: security-check-full
security-check-full: ## Run comprehensive security audit
@echo "$(BLUE)π Running comprehensive security audit...$(NC)"
@echo ""
@echo "$(YELLOW)Installing security tools if needed...$(NC)"
@pip install -q safety pip-audit bandit 2>/dev/null || true
@echo ""
@echo "$(YELLOW)1οΈβ£ Scanning dependencies with Safety (full report)...$(NC)"
@safety check --full-report --output json > .security-reports/safety-report.json 2>/dev/null || true
@safety check --full-report || true
@echo ""
@echo "$(YELLOW)2οΈβ£ Scanning dependencies with pip-audit...$(NC)"
@pip-audit --desc --format json > .security-reports/pip-audit-report.json 2>/dev/null || true
@pip-audit --desc || true
@echo ""
@echo "$(YELLOW)3οΈβ£ Running Bandit security linter...$(NC)"
@bandit -r $(SRC_DIR) -f json -o .security-reports/bandit-report.json 2>/dev/null || true
@bandit -r $(SRC_DIR) -ll || true
@echo ""
@echo "$(BLUE)π Security reports saved to .security-reports/$(NC)"
@echo "$(GREEN)β
Comprehensive security audit complete$(NC)"
.PHONY: security-install
security-install: ## Install security scanning tools
@echo "$(BLUE)π¦ Installing security scanning tools...$(NC)"
pip install safety pip-audit bandit
@echo "$(GREEN)β
Security tools installed$(NC)"
.PHONY: pre-publish
pre-publish: quality security-check ## Quality checks + security scan + secret detection
@echo "$(BLUE)π Running secret detection...$(NC)"
detect-secrets scan
@echo "$(GREEN)β
Pre-publish checks complete$(NC)"
.PHONY: pre-publish-quick
pre-publish-quick: ## Quick pre-publish checks (skip mypy for initial release)
@echo "$(BLUE)π Running essential quality checks...$(NC)"
@echo ""
@echo "$(YELLOW)1οΈβ£ Checking code formatting...$(NC)"
ruff check $(SRC_DIR) $(TEST_DIR)
black --check $(SRC_DIR) $(TEST_DIR)
@echo ""
@echo "$(YELLOW)2οΈβ£ Running core tests (exclude benchmarks)...$(NC)"
pytest $(TEST_DIR) --ignore=tests/benchmarks --ignore=tests/test_cli.py --cov-fail-under=80
@echo ""
@echo "$(BLUE)π Running secret detection...$(NC)"
detect-secrets scan
@echo "$(GREEN)β
Quick pre-publish checks complete$(NC)"
.PHONY: safe-release-build
safe-release-build: pre-publish ## Full quality gate + build
@echo "$(BLUE)π¦ Building distribution packages...$(NC)"
python -m build
@echo "$(GREEN)β
Release build complete$(NC)"
@echo ""
@echo "$(BLUE)π¦ Distribution files created in dist/$(NC)"
@ls -lh dist/
.PHONY: clean
clean: ## Remove build artifacts
@echo "$(BLUE)π§Ή Cleaning build artifacts...$(NC)"
rm -rf build/
rm -rf dist/
rm -rf *.egg-info
rm -rf .pytest_cache/
rm -rf .mypy_cache/
rm -rf .ruff_cache/
rm -rf htmlcov/
rm -rf .coverage
rm -rf .security-reports/
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
@echo "$(GREEN)β
Clean complete$(NC)"
# ============================================================================
# Help Target
# ============================================================================
.PHONY: help
help: ## Show this help message
@echo "$(BLUE)ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ$(NC)"
@echo "$(BLUE)β MCP Skills - Development Commands β$(NC)"
@echo "$(BLUE)ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ$(NC)"
@echo ""
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)%-20s$(NC) %s\n", $$1, $$2}'
@echo ""
@echo "$(YELLOW)Environment:$(NC) ENV=$(ENV) (use: make ENV=production <target>)$(NC)"
@echo ""