skills-compat-manager

skills-compat-manager

MCP server for managing AI agent skills with pre-flight compatibility checks, ensuring missing dependencies are detected before execution.

Category
访问服务器

README

<p align="center"> <img src="docs/architecture.svg" alt="Skills Compat Manager" width="640"/> </p>

<h1 align="center">Skills Compat Manager</h1>

<p align="center"> <strong>Stop your AI agent from failing halfway through a skill.</strong><br/> One library for all your agent skills — with a pre-flight check built in. </p>

<p align="center"> <a href="#quick-start"><img src="https://img.shields.io/badge/Get_Started-2_min-blue?style=for-the-badge" alt="Quick Start"/></a> <img src="https://img.shields.io/badge/MCP-native-orange?style=for-the-badge" alt="MCP native"/> <img src="https://img.shields.io/badge/Python-3.11+-green?style=for-the-badge" alt="Python 3.11+"/> <img src="https://img.shields.io/badge/License-MIT-lightgrey?style=for-the-badge" alt="MIT License"/> </p>

<p align="center"> <a href="#quick-start">Quick Start</a> · <a href="#how-it-works">How It Works</a> · <a href="#cli-reference">CLI</a> · <a href="#mcp-server">MCP Server</a> · <a href="README.zh-CN.md">中文文档</a> </p>


Why You'll Want This

You've built (or downloaded) a bunch of AI agent skills. They work on your machine — until they don't.

"It worked in Claude Code but Cursor can't run it." "The agent started the task, then died on ModuleNotFoundError: pandas." "I set OPENAI_API_KEY locally but the agent still returned an empty string."

Skills Compat Manager fixes this in two moves:

🗂️ One library, every agent. Drop your skills into a single folder. Claude Code, Cursor, Codex CLI, OpenCode — they all read from the same place via MCP. No more copy-pasting skills across tool configs.

🛡️ Pre-flight check before execution. Every time an agent loads a skill, we scan your environment against the skill's declared dependencies (packages · CLI tools · env vars · platform capabilities) and inject a hard compatibility protocol at the top. Missing pandas? The agent stops and asks before burning 10k tokens.

Think of it as package.json + a lockfile checker — but for AI agent skills.


See It In Action

Agent: loading skill "pdf-tools" via MCP...

⚠ COMPATIBILITY DELTA — pdf-tools @ claude_code
Status: BLOCKED

Code Dependencies:
  - pandas: missing → pip install pandas
  - pypdf: available (4.0.1)

External Services:
  - OPENAI_API_KEY: missing

─── AGENT PROTOCOL ───
If Status is BLOCKED:
  1. DO NOT execute the skill body below.
  2. Report the missing dependencies to the user, verbatim.
  3. Ask the user how to proceed.

Agent (to you): Before I run pdf-tools, I need two things installed:
  1. pandas (pip install pandas)
  2. OPENAI_API_KEY environment variable
How would you like to proceed?

The agent knows what's missing before it writes a single line of code.

<p align="center"> <img src="docs/screenshots/ph-scan.png" alt="skills-compat scan output" width="860"/> </p>


What This Tool Does — and Doesn't

Does

  • Detects presence of Python packages, CLI binaries, environment variables, and declared platform capabilities
  • Surfaces missing deps to the agent before skill execution via a structured Delta
  • Provides a standardized, agent-readable compatibility protocol (OK / DEGRADED / BLOCKED)
  • Generates COMPAT.yaml via AI inference or static rules

Doesn't (yet)

  • Validate package versions unless explicitly declared in COMPAT.yaml
  • Verify API keys are valid, active, or have quota remaining
  • Runtime-test platform capabilities — it trusts the platform's declared caps
  • Prevent a non-compliant agent from ignoring the compatibility block

This is an advisory layer with a hard protocol, not a sandbox.


The Problem, In Detail

AI agent "skills" are reusable instruction files (SKILL.md) that tell an agent how to perform a task — parse a PDF, manage an Obsidian vault, generate a frontend design.

A skill can silently depend on things that aren't always there:

Dimension Example What goes wrong
Python packages pandas, python-docx ModuleNotFoundError mid-task
CLI tools pdftotext, ffmpeg Agent generates a command that doesn't exist
Env variables VAULT_PATH, OPENAI_API_KEY Silent empty-string fallback, corrupted output
Platform capabilities bash, web_search Agent tries to use a tool the platform doesn't have

Without a pre-flight check, the agent loads the skill, starts working, and fails halfway through — wasting tokens, time, and user trust.


The Solution

Skills Compat Manager scans your skills before the agent runs them, computes a structured Delta (gap analysis), and injects it into the skill content at load time.

┌─────────────────────────────────┐
│  Agent loads "pdf" skill via MCP │
└────────────────┬────────────────┘
                 ▼
   ┌─────────────────────────────┐
   │  Scanner checks COMPAT.yaml │
   │  against runtime environment │
   └────────────────┬────────────┘
                    ▼
   ┌─────────────────────────────────────────────┐
   │  ⚠ Compatibility Delta — pdf @ claude_code  │
   │                                              │
   │  Code Deps:                                  │
   │    ✓ pypdf ........ installed (4.0.1)        │
   │    ✗ camelot-py ... missing [optional]       │
   │      → pip install camelot-py                │
   │                                              │
   │  System Tools:                               │
   │    ✗ pdftotext .... missing [optional]       │
   │      → brew install poppler                  │
   │                                              │
   │  Status: DEGRADED                            │
   │  Proceed with caution — optional deps missing│
   └─────────────────────────────────────────────┘
                    ▼
   ┌─────────────────────────────┐
   │  Agent sees the Delta BEFORE │
   │  the skill content begins    │
   │  → adapts or warns the user  │
   └─────────────────────────────┘

The agent now knows what's missing before it writes a single line of code.


Architecture

<p align="center"> <img src="docs/architecture.svg" alt="Skills Compat Manager architecture" width="860"/> </p>


The Four-Dimensional Framework

Every skill's dependencies are classified into four dimensions:

<p align="center"> <img src="docs/fourdim.svg" alt="COMPAT.yaml four dimensions" width="720"/> </p>

<p align="center"> <img src="docs/screenshots/ph-compat.png" alt="COMPAT.yaml example" width="860"/> </p>

Example COMPAT.yaml:

schema_version: "2.0"
requires:
  code_deps:
    - name: pandas
      description: "Data manipulation and analysis"
      required: true
    - name: seaborn
      description: "Statistical visualization"
      required: false

  system_tools:
    - name: pdftotext
      required: false

  external_services:
    - name: VAULT_PATH
      description: "Obsidian vault location"
      required: true

  runtime_capabilities:
    - name: bash
      required: true
    - name: file_write
      required: true

Don't want to write this by hand? Run skills-compat infer <skill> and AI generates it from your SKILL.md.


Quick Start

Install

pip install git+https://github.com/hnaymyh123-henry/skills-compat-manager.git

# Optional: enable AI-powered COMPAT.yaml inference
pip install "git+https://github.com/hnaymyh123-henry/skills-compat-manager.git#egg=skills-compat[ai]"

Setup

# Auto-detect installed platforms (Claude Code, Cursor, etc.)
# and configure MCP server entries
skills-compat setup --skill-library ~/my-skills

Scan

# Scan a single skill
skills-compat scan pdf

# Scan all skills in your library
skills-compat scan

# JSON output for automation
skills-compat scan --json

Infer COMPAT.yaml with AI

# Let AI analyze your SKILL.md and generate COMPAT.yaml
skills-compat infer my-skill

# Infer for all skills that don't have COMPAT.yaml yet
skills-compat infer --all

# Choose AI provider: openai, claude, or rules (no API key needed)
skills-compat infer my-skill --provider rules

How It Works

<p align="center"> <img src="docs/screenshots/ph-howitworks.png" alt="How It Works — 4 steps" width="860"/> </p>

For AI Agents (MCP Server)

The MCP server is the primary runtime interface. When an agent calls get_skill:

  1. Reads the original SKILL.md content
  2. Scans the runtime environment (installed packages, CLI tools, env vars)
  3. Computes a Delta against the platform's capability profile
  4. Injects the Delta block at the top of the skill content
  5. Returns the augmented content to the agent

The agent sees the compatibility status before the skill instructions begin, and can decide how to proceed.

For Developers (CLI)

The CLI is your setup and diagnostic tool:

skills-compat setup     →  Auto-detect platforms, configure MCP
skills-compat status    →  Overview of library health
skills-compat scan      →  Run Delta analysis, see what's missing
skills-compat verify    →  CI-friendly status check (exit code = status)
skills-compat infer     →  AI-generate COMPAT.yaml from SKILL.md
skills-compat fix       →  Interactive fix: suggest → run → re-verify
skills-compat serve     →  Start the MCP server manually
skills-compat config    →  View/update configuration

verify returns exit code 0 (OK), 1 (DEGRADED), 2 (BLOCKED), 3 (UNSCANNED), or 4 (error) — drop it into CI with skills-compat verify pdf && deploy.

fix closes the loop: for every missing dep it asks the LLM for 2–3 fix paths (each tagged SAFE/MANUAL + agent_or_user/user_only), runs the SAFE ones through a sandbox allowlist, re-scans, and prints the status transition (e.g. BLOCKED → DEGRADED). Use --auto for CI, --yes to skip confirmation prompts.


MCP Server

Configuration

Add to your MCP client configuration:

Claude Code (~/.claude/settings.json):

{
  "mcpServers": {
    "skills-compat": {
      "command": "skills-compat",
      "args": ["serve"],
      "env": {
        "SKILL_LIBRARY": "/path/to/your/skills"
      }
    }
  }
}

Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "skills-compat": {
      "command": "skills-compat",
      "args": ["serve"],
      "env": {
        "SKILL_LIBRARY": "/path/to/your/skills"
      }
    }
  }
}

Or let the CLI do it automatically:

skills-compat setup --skill-library /path/to/your/skills

Available Tools

Tool Description
list_skills List all skills in the library
get_skill Load skill content with Delta block injected
scan_skills Run compatibility scan across all skills
get_skill_info Get metadata and COMPAT.yaml for a skill
search_skills Search skills by keyword
suggest_fix Get AI-powered fix suggestions (each path tagged with actor + safety)
apply_fix Execute a SAFE fix command through a sandbox allowlist, then re-scan
refresh_runtime Re-detect the runtime environment

Supported Platforms

<p align="center"> <img src="docs/screenshots/ph-platforms.png" alt="Supported platforms" width="860"/> </p>

Platform Capabilities Confidence Auto-detected
Claude Code bash file_read file_write web_search web_fetch python_runtime lsp notebook subagent monitor verified
Cursor bash file_read file_write web_search partial
Codex CLI bash file_read file_write python_runtime verified
OpenCode bash file_read file_write web_search web_fetch python_runtime lsp verified
Claude Desktop file_read file_write partial

Confidence levels reflect how well the capability list has been verified against official documentation (verified = sourced from official docs, partial = docs incomplete or inaccessible, unverified = best-effort estimate). See data/platform_profiles.yaml for sources and verification dates.

A few platform-specific notes worth knowing: Codex CLI has network blocked by default in all sandbox modes — there is no built-in web_search. Claude Desktop's native tool set is minimal; most capabilities (web, shell, full filesystem) come from user-installed MCP servers, not built-ins.

Platform detection happens automatically via the MCP handshake (clientInfo.name) — no manual configuration needed. Adding a new platform requires only editing data/platform_profiles.yaml. If your agent platform supports self-reporting via capabilities.experimental["skills-compat:platform-tools"] in the MCP initialize handshake, its capabilities are used directly and take priority over the static profile.


AI Features

Multi-Provider Inference

COMPAT.yaml inference supports three providers with automatic fallback:

OpenAI (gpt-4o) → Anthropic Claude → Rules-based (no API key)

The AI analyzes your SKILL.md content and produces a complete COMPAT.yaml with:

  • stdlib filtering — Python standard library modules are automatically excluded
  • PyPI name resolution — Import names are mapped to correct pip package names (yamlpyyaml, cv2opencv-python)
  • required/optional classification — Each dependency is judged as required or optional based on its role in the skill

Fix Suggestions

When the scanner finds a missing dependency, suggest_fix generates 2–3 actionable solution paths. Every path is classified on two axes so the agent knows exactly what it can do autonomously:

Path A: Install                     [SAFE · agent_or_user · low effort]
  → pip install camelot-py

Path B: Use alternative library    [MANUAL · user_only · medium effort]
  → Edit SKILL.md to use tabula-py instead

Path C: Mark as optional            [MANUAL · user_only · low effort]
  → Accept graceful degradation
  • SAFE + agent_or_user → the agent may execute it via apply_fix (or skills-compat fix --auto), subject to the allowlist (pip/npm/yarn/mkdir/touch) and a hard denylist (sudo, rm, |sh, >/etc, &&rm, etc.).
  • MANUAL or user_only → the agent surfaces the commands to the human, never runs them.

Project Structure

skills-compat-manager/
├── app/
│   ├── cli.py                 # CLI entry point (9 commands)
│   ├── mcp_server.py          # MCP stdio server (8 tools)
│   ├── scanner.py             # Delta computation engine; reads COMPAT.yaml from central store
│   ├── ai_engine.py           # AI inference (OpenAI / Claude / rules)
│   ├── models.py              # Pydantic data models
│   ├── config.py              # Settings & paths; loads platform profiles from data/
│   ├── runtime_detector.py    # OS / pip / CLI / env detection
│   ├── skill_manager.py       # Skill discovery; writes COMPAT.yaml to central store
│   ├── platform_resolver.py   # MCP handshake resolution + experimental capability hook
│   ├── platform_detector.py   # Installed platform detection
│   ├── tool_registry.py       # MCP tool registry & platform capability lookup
│   └── mcp_configurator.py    # Auto-configure MCP entries for detected platforms
├── data/
│   └── platform_profiles.yaml # Platform capability definitions — edit to add/update platforms
└── tests/
    ├── test_scanner.py
    ├── test_mcp_server.py
    ├── test_ai_engine.py
    └── test_cli.py

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选