skill-vault
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., "@skill-vaultfind me a verified skill to parse PDFs"
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.
Skill Vault
Stop shipping a thousand skill files into your agent's context. Point your agent at one MCP endpoint; it pulls exactly the skills it needs, on demand, and can verify they haven't been tampered with.
One endpoint.
search_skills("postgres schema migration")→ ranked, lightweight skill cards →get_skill(id)for the full body only when needed.Private + public. Every agent gets its own personal skill vault and read access to a curated global store.
Trusted supply chain. Skills are content-addressed (sha256) and optionally ed25519-signed. A
verifiedtier means a curator vouched for the content — not just that someone uploaded it.Self-hosted. SQLite + local embeddings + optional pgvector. No managed service, no third party sees your skills, no per-query cost.
Why Skill Vault (positioning vs skills-mcp / agentregistry)
The Problem
Every skill costs context. Progressive-disclosure skill systems pay roughly ~50 tokens per skill just to keep the description in context, and far more for the full instructions.
# of skills in context | ~tokens of pure skill metadata |
100 | 5k |
1,000 | 50k |
10,000 | 500k+ — exceeds most context windows |
Local skill files don't sync across machines, teams, or agents. Thousands of files also become a maintenance nightmare — duplicated, stale, unversioned, and unverified (you have no idea who wrote them or whether they're safe to follow).
Related MCP server: Skillsmith
The Solution
Skill Vault is a registry + retrieval layer, not another file format.
Skills live in a centralized, versioned, content-addressed store.
The agent wires in exactly one MCP endpoint.
search_skills(query)returns light cards (name + one-liner + trust tier + cosine score) — cheap.get_skill(id)returns the full SKILL.md body only for the skill the agent actually wants.A personal vault lets each agent push its own hard-won capabilities and pull them back anywhere, alongside the curated global library.
The result: an agent with access to 10,000 skills carries only ~50 tokens of registry description in context, and retrieves the one it needs at the moment it needs it.
Features
🧭 Semantic search — local
all-MiniLM-L6-v2embeddings (384-d) over skill name, description, tags, and triggers; ranked by cosine similarity. Embed metadata, not whole bodies, to keep the index small.🔑 Per-agent identity — API keys (sha256-at-rest, shown once at onboarding) with
global/personal/ owner-only scope enforcement at the tool layer.📦 Private skill vaults — every agent publishes and retrieves its own skills; cross-agent private access is always denied.
🔏 Trust & supply chain — sha256 content hashing (integrity pin) + optional ed25519 signatures. Trust tiers:
verified(curator-signed) ·user(owner's own) ·public(community).🧬 Versioned & immutable — skills are versioned, content-addressed, forward-only. Previous versions remain addressable and hash-pinned.
🖥️ Web dashboard + homepage — agent management, onboarding, per-agent skill browser, key rotation/revocation, and a ready-to-copy
/configureguide.🍱 17 curated seed skills (with one
verifiedsample) so the registry is useful out of the box.🚀 Self-hosted & transport-flexible — stdio for local agents, streamable-HTTP/SSE for remote. SQLite + sqlite-vec by default; pgvector drop-in for scale-out.
Why Skill Vault
There are two adjacent tools worth benchmarking against. We occupy the open middle: self-hosted + per-agent identity + verifiable supply chain.
Dimension | Skill Vault | skills-mcp | agentregistry |
Hosting | Self-hosted (your infra) | Managed (Cloudflare Worker) | Self-hosted (org) |
Vector store | SQLite + sqlite-vec (or pgvector) | Qdrant (managed) | Varies |
Embeddings | Local, free, private | Managed API | — |
Per-agent identity | ✅ Yes (API key, hash-at-rest) | ❌ No (shared public library) | Partially (org accounts) |
Private per-agent vault | ✅ Yes | ❌ No | ❌ Not per-agent |
Trust / supply chain | ✅ verified/user/public + ed25519 sigs | ⚠️ Limited | ⚠️ Governance only |
Content integrity | ✅ sha256 + client verification | ❌ | ⚠️ |
Skill versioning | ✅ Immutable versions | Partially | Yes |
Primary purpose | Capability registry + retrieval | Shared free skill library | Org catalog/governance |
The short version: skills-mcp is a big shared library with no identity and no verification; agentregistry is org governance with no per-agent personal vaults. Skill Vault is both a personal capability vault and a verifiable public registry — for a single agent or a whole team, on your own hardware.
Architecture
flowchart LR
subgraph "Your Agent"
A[AI Agent / LLM]
end
subgraph "Skill Vault"
MCP["MCP endpoint<br/><b>skill-vault serve</b><br/>stdio / streamable-http"]
TOOLS["MCP Tools<br/>search · get · publish · update<br/>delete · list_mine · list_global"]
AUTH["Auth<br/>API-key resolve · scope<br/>rate-limit"]
INDEX["Semantic Index<br/>embeddings + cosine rank"]
TRUST["Trust Layer<br/>sha256 hash · ed25519 sig<br/>verified/user/public"]
DB[("SQLite<br/>skills · versions · keys · trust<br/>+ sqlite-vec sidecar")]
WEB["Web + Dashboard<br/><b>skill-vault web</b><br/>FastAPI / uvicorn"]
MCP --> TOOLS
TOOLS --> AUTH
TOOLS --> INDEX
TOOLS --> TRUST
TOOLS --> DB
INDEX --> DB
TRUST --> DB
MCP --- WEB
WEB --> DB
end
A -->|"one endpoint"| MCP
A -.->|"retrieve SKILL.md content"| GET["get_skill(id)"]Flow: the agent calls the MCP endpoint once → the tool layer authenticates the caller and enforces scope → the semantic index ranks matching skill cards → the trust layer reports + verifies integrity → SQLite persists everything. For full-body retrieval, get_skill(id) re-derives the content hash and refuses to return tampered content.
Two processes share one data path: skill-vault serve (MCP, :8000/mcp) and skill-vault web (dashboard, :8080).
Quickstart
From source
git clone https://github.com/vikasudasi/skill-vault.git
cd skill-vault
make install # creates .venv + installs deps
# 1. Initialize the database
.venv/bin/skill-vault init
# 2. Seed the curated library (17 skills, incl. 1 verified)
.venv/bin/skill-vault seed
# 3. Run the local MCP server (stdio) for one agent
.venv/bin/skill-vault serveFor a remote/HTTP setup (web + MCP):
.venv/bin/skill-vault serve --transport streamable-http # :8000/mcp
.venv/bin/skill-vault web # :8080Docker
docker compose up --build
# MCP streamable-http: http://localhost:8000/mcp
# Dashboard: http://localhost:8080/dashboardCreate your first agent + key
.venv/bin/skill-vault onboard --name "my-agent"
# prints a raw api key (sv_...) ONCE — save itOr via the dashboard: http://<host>:8080/dashboard/onboard
MCP Configuration
Add Skill Vault to any MCP-capable client. Server name: skill-vault.
Local / stdio
{
"mcpServers": {
"skill-vault": {
"command": "/absolute/path/to/.venv/bin/skill-vault",
"args": ["serve"]
}
}
}Remote / streamable-http
{
"mcpServers": {
"skill-vault": {
"url": "https://your-host/mcp",
"headers": { "Authorization": "Bearer sv_YOUR_AGENT_KEY" }
}
}
}Auth note: Skill Vault passes the agent key as a per-tool argument (
agent_key=...) for private/global operations — no connection-level key header is strictly required. On streamable-http, forward theAuthorizationheader for convenience.
On the running instance, the /configure page renders copy-paste-ready snippets for both transports.
Trust & Security Model
Integrity (content-addressed)
Every skill version stores content_hash = sha256(canonical(skill)). On get_skill, the server re-derives the hash and compares — if the stored body doesn't match its pin, the server raises SV_INTEGRITY and never returns tampered content.
Signatures (verifiable supply chain)
Skills can additionally carry an ed25519 signature over the canonical payload, produced by a curator holding SKILL_VAULT_CURATOR_KEY. Consumers call verify (or read the verified flag on get_skill) before following a pulled skill.
Trust tiers
Tier | Meaning |
| Curator-signed — a known verifier vouched for the exact content |
| Owner's own personal skill |
| Community/global, unsigned |
Hosts control what they serve via SKILL_VAULT_TRUST_ALLOW (default verified,user). The trust scope/crypto is policy-driven so enterprise governance (RBAC/audit/policy) can be layered on without rearchitecting.
Security posture
API keys stored sha256-hashed only — raw keys never persisted, shown once at onboarding.
Per-key rate limiting on the public endpoint.
Dashboard uses HTTP Basic with credentials distinct from agent keys.
Remote access expected behind TLS (Caddy/nginx/Traefik) — see Deployment.
Vulnerability reporting: see SECURITY.md.
API Reference
All tools return a JSON tool-result. Errors use stable codes.
Code | Meaning |
| Missing/invalid agent key |
| Valid key, no access (cross-agent/private) |
| Skill/version not found |
| Malformed skill / missing required frontmatter |
| Content hash mismatch (tamper) |
| Key over quota |
| Duplicate name in scope |
search_skills(query, scope="global", limit=10, min_trust=None, agent_key=None)
Semantic search. Returns lightweight cards (id, name, description, tags, trust, score, version). scope: global (no key needed) · all / personal (requires agent_key).
get_skill(id, version=None, agent_key=None)
Full SKILL.md body + {trust, verified, content_hash}. Re-verifies integrity; raises SV_INTEGRITY on mismatch. Global skills readable by anyone; personal only by owner.
publish_skill(skill, visibility="personal", agent_key)
skill = {name, description, tags[], triggers[], body, meta{}}. Creates a new skill (version 1, hashed, user or public tier). SV_CONFLICT if name exists in the agent's scope — use update_skill.
update_skill(id, skill, agent_key)
Owner/curator only. Appends a new immutable version (version = max+1), updates current_version_id. Previous versions stay addressable and hash-pinned.
delete_skill(id, agent_key)
Owner-only removal (keeps version history for audit).
list_my_skills(agent_key, scope="all")
Cards (no bodies) for the authenticated agent's personal vault (+ optionally global).
list_global_skills(limit=20, offset=0)
Paged cards from the curated global store — no key needed.
CLI
skill-vault init Initialize DB + apply migrations
skill-vault migrate Apply pending forward-only migrations
skill-vault onboard Create an agent + issue first API key (shown once)
skill-vault whoami Resolve an API key to an identity
skill-vault seed Seed curated skills from the library (--curator-key to sign)
skill-vault reindex (Re)embed skill versions into the vector index
skill-vault verify Check integrity + signature for a skill version
skill-vault curator gen-key Generate a curator ed25519 keypair
skill-vault serve Run the MCP server (stdio or --transport streamable-http)
skill-vault web Run the web dashboard (FastAPI/uvicorn)
skill-vault backup Snapshot DB + vector sidecars
skill-vault restore Restore a snapshotExamples:
# Sign seed skills as verified
export SKILL_VAULT_CURATOR_KEY="<base64 ed25519 privkey>"
.venv/bin/skill-vault seed
# One-command public launcher (no systemd)
./scripts/run-public.shRoadmap
Now / current release (v0.1)
✅ Core MCP registry + semantic search + auth + trust
✅ Web dashboard, homepage,
/configure✅ Deployment (two-process, Docker, systemd, backup/restore)
✅ Test suite (111 tests, 88% cov) + CI
✅ Seed library (17 skills)
Next
📦 Release automation, signed release tags, PyPI publishing
🧪 More curated skills + community submission flow
🔬 pgvector backend hardening + horizontal scale notes
📊 Usage analytics / skill health signals
Later (open-core tier, monetization deferred)
🔐 Org governance: SSO, RBAC, audit, compliance policies
🤖 Shared public library federation / multi-tenant hosting
🔌 Native agent integrations beyond the MCP tool surface
FAQ
Q: How is this different from just pasting a folder of skills into my agent? A: A folder floods context with every skill's description (~50 tokens each) and doesn't sync or verify. Skill Vault keeps only a tiny registry endpoint in context and retrieves the one skill you need at the moment — verified.
Q: Do I need a GPU or an embedding API key?
A: No. Embeddings run locally via all-MiniLM-L6-v2 (sentence-transformers). Works on a CPU-only box.
Q: Is my data sent anywhere?
A: No third party by default. Everything runs on your host; the default vector backend is local SQLite. (If you opt into pgvector, it goes to your own Postgres.)
Q: Who can see my personal skills? A: Only you. Cross-agent private access is always rejected at the tool layer, and scope filtering happens at query time.
Q: What does "verified" actually mean? A: A skill with a valid ed25519 signature from a curator whose public key you trust. It proves the exact content you pulled is what the curator signed — nothing more, nothing less.
Q: Can one agent access another agent's vault?
A: No, unless the skills are global. Personal scope is owner-only, always.
Q: How do I run this in production? A: See Deployment — two processes behind a TLS reverse proxy, with systemd units and a no-systemd fallback launcher.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for the full guide.
Quick pointers:
Python ≥ 3.11,
from __future__ import annotations, type hints throughout.Run the gates before submitting:
make check(ruff + format + mypy) andpytestwith ≥85% coverage.Add skills to
skill_vault/data/skills/(see the format of existing entries) and runskill-vault seedto ingest.Open an issue first for behaviour changes; keep PRs focused.
License
Copyright © 2026 Vik Udasi. Licensed under the Apache License, Version 2.0. See LICENSE. You may use, modify, and distribute this software, including in commercial products; attribution required.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceA self-hostable, open-source, semantically-searchable Agent Skills registry delivered over MCP, with a three-tier progressive disclosure architecture.Last updated7135Apache 2.0
- Alicense-qualityAmaintenanceAn agent skill discovery, recommendation, and management system for MCP-compatible AI tools, enabling search, install, validate, and compare skills from GitHub.Last updated174MIT
- Alicense-qualityAmaintenanceAn MCP server that lets AI agents search, view, install, and validate skills from the skillhub registry through tool calls.Last updatedMIT
- AlicenseBqualityBmaintenanceA self-hosted registry and MCP server for reusable AI-agent skills that enables agents to discover, retrieve, and install skills with guardrails.Last updated57MIT
Related MCP Connectors
A registry of 5,900+ peer-authored skills any MCP agent can search and load on demand.
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
Agent registry with Nostr identity, reputation, escrow, observability, and Lightning payments.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/vikasudasi/skill-vault'
If you have feedback or need assistance with the MCP directory API, please join our Discord server