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: skillhub-mcp
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.
Available Tools
7 toolsdelete_skillC
Delete a skill you own.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| agent_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| ok | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It does not mention that deletion is permanent, what happens to child resources (e.g., agent_key), or any side effects. The description is too sparse to inform the agent of consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and front-loaded, but it is under-specified. It avoids verbosity but fails to include critical information, making it more terse than genuinely concise. The sentence is simple and clear, yet lacks substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has two parameters, an output schema, and no annotations, the description is incomplete. It fails to address deletion side effects, when to use the tool, or what the output entails. A mutation tool with ownership constraints needs more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention either parameter (id, agent_key). While 'id' is self-explanatory, 'agent_key' is ambiguous and undocumented. The description adds no value in explaining parameter meaning or relationships.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (delete), the resource (a skill), and the ownership requirement (you own). It unambiguously distinguishes from sibling tools like update_skill or list_my_skills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, when not to use it, or any prerequisites beyond ownership. The 'you own' phrase implies a condition but does not elaborate on permissions, irreversibility, or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_skillA
Fetch the full content of a skill by id or version id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| version | No | ||
| agent_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| body | Yes | |
| name | Yes | |
| tags | No | |
| owner | Yes | |
| trust | Yes | |
| version | Yes | |
| verified | Yes | |
| description | Yes | |
| content_hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It communicates a read-only operation via 'Fetch' and that it returns 'full content', but it does not disclose behavior around missing IDs, version semantics (integer vs version ID), or the role of agent_key. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It communicates the core action in 12 words, making it easy for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal but adequate for a simple get tool; however, it leaves significant gaps around the optional parameters (especially agent_key) and how this tool relates to search_skills and listing tools. The output schema exists, so return format is not required, but the parameter semantics gap hurts overall completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify parameters. It explains 'id' and 'version' indirectly, but omits 'agent_key' entirely and uses the phrase 'version id' which conflicts with the schema's integer 'version' type. The description does not add enough meaning beyond the bare schema names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Fetch' with a clear resource 'the full content of a skill' and identifies key identifiers ('id or version id'). This distinguishes it from siblings like delete_skill, search_skills, and update_skill, which focus on different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage when the agent already has a skill ID or version ID and needs the full content, but it does not explicitly state when to prefer this over search_skills or list_* tools, nor does it mention any exclusion criteria or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_global_skillsA
Browse the global (public) skill store with pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses pagination behavior, which is useful, but it does not mention additional behavioral aspects such as read-only nature, sort ordering, or whether only published skills are included. The description is minimally adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately states the action and scope. Every word earns its place, and it is well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (two optional parameters, an output schema exists), the description is fairly complete. It identifies the resource and pagination. However, it could be more complete by explicitly distinguishing from search_skills and noting any default behavior, but it is sufficient for a basic listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It mentions 'pagination,' which adds meaning to the 'limit' and 'offset' parameters by indicating their role. However, it does not explicitly define these parameters or their syntax, leaving some ambiguity for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to browse the global (public) skill store with pagination. It uses a specific verb ('browse') and resource ('global skill store'), which distinguishes it from sibling tools like 'list_my_skills'. The term 'global (public)' differentiates it from personal skill lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: to browse the public skill store, with pagination. It implies a distinction from search_skills (browse vs. search) and list_my_skills (global vs. personal), but does not explicitly state when NOT to use it or name alternatives. This constitutes clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_skillsB
List the skills in your personal vault.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. The verb 'List' clearly indicates a read-only operation, but the description does not disclose details such as output format, pagination, or the role of the agent_key parameter. It is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no fluff. It earns its place, though it is arguably too terse and sacrifices valuable context for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with an optional parameter and an output schema, the description is mostly adequate. However, it lacks any explanation of the agent_key parameter and does not mention the alternative global list, leaving notable gaps for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description does not mention the agent_key parameter at all. The agent receives no semantic help for this parameter beyond its name, which is ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the specific resource ('skills in your personal vault'). It effectively distinguishes itself from the sibling tool list_global_skills by emphasizing 'personal'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'personal vault' implies usage for one's own skills, and the sibling list_global_skills suggests an alternative. However, there is no explicit guidance about when to choose this tool over alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_skillA
Publish a new skill to your vault (global or personal).
| Name | Required | Description | Default |
|---|---|---|---|
| skill | Yes | ||
| agent_key | No | ||
| visibility | No | personal |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| ok | Yes | |
| version | Yes | |
| content_hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden, but it only states the action and scope. It does not disclose whether an existing skill is overwritten, what permissions are required, or any side effects of publishing (e.g., making a global skill visible to all).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the verb and key information, containing no filler or redundant phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal for a tool with a required nested object and no annotations. It omits critical context such as whether publishing is additive or overwrites, how visibility interacts with agent_key, and what the output schema (response) represents, making it incomplete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a nested skill object and 3 parameters, but the description provides no parameter-level guidance beyond hinting at 'global or personal' (visibility). With 0% schema_description_coverage, this leaves the agent to guess the meaning of agent_key, meta, tags, triggers, and the required body/description fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('publish') and resource ('skill') with a location ('vault') and scope ('global or personal'), clearly distinguishing this from sibling operations like update_skill, delete_skill, and search_skills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the action (publish new skill) and the scope options (global/personal), implying this is the tool for creating a new skill rather than updating or deleting. However, it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_skillsB
Semantic search for relevant skills by natural-language query.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| scope | No | global | |
| agent_key | No | ||
| min_trust | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden but only states 'semantic search' without disclosing whether the operation is read-only, how results are ordered, whether it requires authentication, or what the response structure is. It does not mention any side effects or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the core function immediately. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters and no annotations, a one-sentence description is insufficient. It omits parameter behavior, scoping options, and return details, making it incomplete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 5 parameters and 0% schema-description coverage, so the description must compensate. It only explains 'natural-language query' for the query param, leaving limit, scope, agent_key, and min_trust entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('search') and resource ('skills'), and clarifies that it performs semantic, natural-language-based search, which distinguishes it from exact-match tools like get_skill and listing tools like list_global_skills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to choose this tool over siblings such as list_my_skills or get_skill, and does not mention exclusions or use cases. The verb 'search' implies one usage, but no contrasts or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_skillA
Update an existing skill you own (creates a new version).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| skill | Yes | ||
| agent_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| ok | Yes | |
| version | Yes | |
| content_hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It reveals that updating a skill creates a new version (rather than overwriting in place), and that ownership is a prerequisite. This is meaningful behavior disclosure, though it does not mention side effects like old version retention or permission details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the verb 'Update' and includes a parenthetical clarification about versioning. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a nested skill object with multiple required and optional fields, plus an agent_key parameter, yet the description is minimal and provides no guidance on how to structure the update. With no annotations and low parameter transparency, the description is insufficient for an agent to safely and correctly invoke this tool without additional schema exploration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate by explaining parameters. It barely does: 'existing skill you own' implies 'id' identifies the skill and 'skill' contains the update, but it does not explain the nested fields (name, description, body, meta, tags, triggers) or the 'agent_key' parameter. Most parameter meaning is left to the schema, which has no descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update'), the resource ('an existing skill'), and the scope ('you own'), distinguishing it from sibling tools like delete_skill, get_skill, and publish_skill. It also adds the specific behavior of creating a new version, which clarifies the update semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool is for updating skills owned by the user, which implies it is not for creating new skills or modifying others' skills. It does not explicitly name alternatives or exclusions, but the ownership qualifier and the update verb make the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
delete_skill - First observed
get_skill - First observed
list_global_skills - First observed
list_my_skills - First observed
publish_skill - First observed
search_skills - First observed
update_skill
TDQS
Each tool targets a distinct operation: search, fetch, publish, update, delete, and two separate list scopes. The only potential overlap is between search_skills and get_skill, but search returns relevant results while get returns full content by id. No tool ambiguously duplicates another.
All tools follow a consistent verb_noun pattern with snake_case: delete_skill, search_skills, get_skill, publish_skill, update_skill, list_my_skills, list_global_skills. The pluralization correctly reflects whether the tool returns multiple items or operates on one.
With exactly 7 tools, the set covers the core operations for a skill vault without being bloated or sparse. Each tool earns its place in the lifecycle (create, read, update, delete, search, list). This is a well-scoped collection for the server's purpose.
The toolset provides complete CRUD coverage: publish (create), get and list (read), update (update), and delete (delete). Additionally, search and the differentiation between personal and global lists round out the expected workflows for a vault. No missing operations that would force agents to work around gaps.
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 Connectors
Governed AI agent skills — one library, distributed to devs and exposed to remote agents over MCP.
A registry of 5,900+ peer-authored skills any MCP agent can search and load on demand.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
AI agent registry — search, discover, register, and connect agents via MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceA self-hostable, open-source, semantically-searchable Agent Skills registry delivered over MCP, with a three-tier progressive disclosure architecture.7137Apache 2.0
- AlicenseNot gradedqualityAmaintenanceAn MCP server that lets AI agents search, view, install, and validate skills from the skillhub registry through tool calls.MIT
- AlicenseBqualityBmaintenanceA self-hosted registry and MCP server for reusable AI-agent skills that enables agents to discover, retrieve, and install skills with guardrails.57MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that lets AI agents browse and fetch skills from remote registries — GitHub repositories or direct HTTP URLs — without installing them locally first.MIT
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