resource pattern
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import yaml
|
||||
from fastmcp import FastMCP
|
||||
|
||||
catalog_server = FastMCP("catalog")
|
||||
|
||||
|
||||
def _skills_dir() -> Path:
|
||||
return Path(__file__).resolve().parents[1] / "skills"
|
||||
|
||||
|
||||
def _load_skill_registry() -> dict[str, Any]:
|
||||
registry: dict[str, Any] = {}
|
||||
for metadata_path in sorted(_skills_dir().glob("*/metadata.yaml")):
|
||||
with metadata_path.open("r", encoding="utf-8") as handle:
|
||||
metadata = yaml.safe_load(handle) or {}
|
||||
skill_key = metadata_path.parent.name
|
||||
registry[skill_key] = {
|
||||
"namespace": skill_key,
|
||||
"metadata": metadata,
|
||||
}
|
||||
return registry
|
||||
|
||||
|
||||
@catalog_server.resource("resource://catalog/skills_index")
|
||||
def skills_index() -> dict[str, Any]:
|
||||
"""Return a compact discovery index for all available pattern modules."""
|
||||
registry = _load_skill_registry()
|
||||
index = []
|
||||
for key, entry in registry.items():
|
||||
metadata = entry["metadata"]
|
||||
index.append(
|
||||
{
|
||||
"namespace": key,
|
||||
"id": metadata.get("id", key),
|
||||
"name": metadata.get("name", key),
|
||||
"version": metadata.get("version", "0.1.0"),
|
||||
"capabilities": metadata.get("capabilities", []),
|
||||
"tags": metadata.get("tags", []),
|
||||
}
|
||||
)
|
||||
return {"patterns": index}
|
||||
|
||||
|
||||
@catalog_server.resource("resource://catalog/skills_details")
|
||||
def skills_details() -> dict[str, Any]:
|
||||
"""Return full metadata for all mounted pattern modules."""
|
||||
return {"patterns": _load_skill_registry()}
|
||||
Reference in New Issue
Block a user