The stack
FastAPI service
A FastAPI + Uvicorn application (Python ≥ 3.11) exposing REST endpoints, an OpenAPI/Swagger UI, and an MCP control surface. Uses fastapi-mcp and fastapi-versioning.
React + PatternFly UI
React 18 + TypeScript, built with Vite, using PatternFly (IBM's design system), TanStack Query for data fetching, and React Router for navigation.
CLI & Python SDK
The sbs CLI wraps restish to auto-generate commands from the OpenAPI spec; the Python SDK lets you consume the service programmatically.
Pluggable vector DBs
Semantic search over embeddings (384-dim by default) with faiss as the default backend, plus Chroma and LanceDB options.
Docker sandbox
Tools run with parameters inside a Docker or Podman container, isolating agent-generated code from the host. A local execution mode is available for development.
Plugin system
Plugins subclass PluginBase and contribute event handlers and REST routes — discovered and loaded automatically. See Plugins.
MCP frontend vs. backend
Skillberry Store sits on both sides of the Model Context Protocol:
| MCP Frontend | MCP Backend | |
|---|---|---|
| Direction | SBS serves tools to agents | SBS consumes tools from other servers |
| How | Virtual MCP servers (VMCP) per skill, plus the control API at /control_sse | Register a backend with packaging_format="mcp" and route calls to it |
| Use it to | Connect Claude, Cursor, LangGraph, or any MCP client to your library | Import and route tools from multiple external MCP servers |
Storage & persistence
All resources persist under a single base directory (SBS_BASE_DIR, defaulting to the system temp directory), with separate folders for tools, skills, snippets, metadata, VMCP definitions, and their embeddings. Persistence backends include the local filesystem and GitHub repositories via version-controlled shell hooks.
Every directory is individually overridable through environment variables — see the repository's configuration guide for the full list.
Observability
The service emits Prometheus metrics (prefixed SBS_, on port 8090 by default) and OpenTelemetry traces (via the OTLP exporter, with FastAPI and requests instrumentation). Point Prometheus and a Jaeger all-in-one instance at the service to watch usage in real time. Observability can be disabled entirely by setting OBSERVABILITY=False.
Source layout
The backend lives under src/skillberry_store/:
| Module | Responsibility |
|---|---|
fast_api/ | REST API layer |
services/ | Service / logic layer |
modules/ | Core domain logic |
schemas/ | Pydantic models |
plugins/ | Plugin base classes (PluginBase, PluginMetadata, PluginType) |
vdbs/ | Vector database backends |
tools/ | Tool handling, including the Anthropic skill format |
ui/ | The React web UI |
Ready to run it? Head to Getting Started, or drive the service from your shell with the sbs CLI.