mcp-skillbox
This server provides an MCP interface for discovering and loading agent skills from skills.sh or GitHub, optimized for context usage.
List Skills (
list_skills): Browse available skills with compact metadata (id, name, source, installs). Supportsview(all-time/trending/hot),page,per_page, and optional truncated descriptions (include_description, ≤300 chars).Search Skills (
search_skills): Search by keyword (min 2 chars) in name/description. Supportslimit,owner, and optional truncated descriptions.Load Skill (
load_skill): Fetch fullSKILL.mdand optional supporting files by skill ID. Supportsinclude_supporting_filesandmax_bytes(500–100,000) to control context.Context-budget design: List/search return only metadata by default; full content loaded only on demand.
Registry abstraction: skills.sh (optional
SKILLS_SH_TOKEN) and GitHub (unauthenticated).Robustness: TTL caching, retries with exponential backoff, and
Retry-Afterhandling.Configurable: Environment variables for registry type, GitHub repos, max bytes, tokens, and debug logging.
Note: Project is archived; functionality consolidated into opencode-beanie-plugin (
skillboxfeature).
Aggregates agent skills from GitHub repositories, providing tools to list, search, and load skill content via the GitHub API and raw.githubusercontent.com.
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., "@mcp-skillboxsearch for a skill to convert markdown to pdf"
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.
mcp-skillbox
⚠️ Archived — This repository is archived. Its functionality (skill discovery via
list_skills/search_skills/load_skill) has been consolidated into the opencode-beanie-plugin (feature:skillbox). Please use that instead.
An MCP (Model Context Protocol) server that aggregates agent skills from skills.sh and compatible GitHub skill repositories and exposes exactly three tools — list_skills, search_skills, load_skill — so agents can discover and load skills without bloating their context window: metadata-first browsing (compact summaries, no descriptions by default), and full skill content fetched only on demand, with byte caps and size reporting.
Features
Context-budget design:
list_skillsandsearch_skillsreturn compact metadata only (no descriptions by default); full skill content is fetched only viaload_skill, on demand.Description truncation at 300 chars when descriptions are requested (
include_description).size_bytesreporting on every loaded file, plusmax_bytescaps — both per-call (load_skill) and registry-level (SKILL_MAX_BYTES).TTL caching (list/search 60s, details 5 min, GitHub trees 10 min) to cut API calls.
Resilient HTTP: retries with exponential backoff + jitter, timeouts, and
Retry-Afterhandling for 429s.Registry abstraction with two adapters: skills.sh (OIDC token mode, richer data incl. install counts) and GitHub (unauthenticated mode that works out of the box).
Optional skills.sh OIDC token mode for install counts and leaderboard data.
Related MCP server: suggest-skills
Tools
Tool | Purpose | Key params | Context cost |
| Browse available skills; compact metadata (id, name, source, installs) |
| Low (no descriptions by default; ≤300 chars if requested) |
| Find skills by keyword in name/description |
| Low (≤300-char previews) |
| Fetch the FULL |
| High — the only expensive call; use only after picking a skill |
load_skillis the only context-heavy call;list_skills/search_skillsare intentionally cheap.
How it works / architecture
src/server.ts registers the 3 tools; factory.createRegistry() picks the adapter (auto: token → skills.sh, else GitHub); each adapter implements the SkillRegistry interface (listSkills/searchSkills/loadSkill); both use TTL caches and retry/backoff. GitHub mode reads repo trees via the GitHub API and fetches SKILL.md files from raw.githubusercontent.com.
┌─────────────┐ stdio JSON-RPC ┌───────────────────────────────┐
│ Agent / │ ◄────────────────► │ mcp-skillbox (src/server.ts) │
│ MCP client │ │ list_skills / search_skills │
└─────────────┘ │ / load_skill (3 tools) │
└───────────────┬───────────────┘
│ SkillRegistry
┌───────────────▼───────────────┐
│ factory.createRegistry(config)│
│ auto: token ? skills.sh │
│ : github │
└──────┬──────────────────────────────────┬────────┘
│ │
┌▼───────────────────────┐ ┌──────▼─────────────────┐
│ skills.sh API │ │ GitHub API (trees) │
│ /api/v1/* │ │ + raw.githubusercontent│
│ Bearer OIDC │ │ (unauthenticated) │
└────────────────────────┘ └────────────────────────┘
TTL caches + retry/backoff live in both adaptersRequirements
Node.js >= 18
npm
Install & run
npm install
npm run build
npm run smoke:mcp # optional end-to-end check over a real stdio MCP sessionMCP client configuration
mcp-skillbox speaks MCP over stdio; register it in any MCP-capable client. All configs below assume a local checkout; swap in npx -y github:beremaran/mcp-skillbox (works today; once published, npx -y mcp-skillbox).
Claude Code
Add to .mcp.json (project) or ~/.claude.json (user):
{
"mcpServers": {
"skillbox": {
"command": "npx",
"args": ["-y", "mcp-skillbox"],
"env": {
"SKILLS_SH_TOKEN": "your-vercel-oidc-token"
}
}
}
}For local development use the built artifact directly:
{
"mcpServers": {
"skillbox": {
"command": "node",
"args": ["/absolute/path/to/agent-skillbox/dist/index.js"],
"env": {}
}
}
}Equivalent CLI form:
claude mcp add skillbox -- npx -y mcp-skillbox
claude mcp add skillbox -- node /absolute/path/to/agent-skillbox/dist/index.jsopencode
Add to opencode.json under the mcp key. Verified schema (opencode 1.18.x): a local stdio server uses "type": "local" and command is an ARRAY of strings (executable + args together — there is no separate args key):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"skillbox": {
"type": "local",
"command": ["node", "/absolute/path/to/agent-skillbox/dist/index.js"],
"enabled": true,
"environment": {
"SKILLS_SH_TOKEN": "your-vercel-oidc-token"
}
}
}
}Cursor / VS Code / any stdio MCP client
Generic mcpServers shape:
{
"mcpServers": {
"skillbox": {
"command": "node",
"args": ["/absolute/path/to/agent-skillbox/dist/index.js"]
}
}
}Published package
From the public GitHub repo (works today): npx -y github:beremaran/mcp-skillbox (command npx, args ["-y", "github:beremaran/mcp-skillbox"]). Once published to npm, any client can also use npx -y mcp-skillbox (command npx, args ["-y", "mcp-skillbox"]).
Environment variables
Variable | Default | Description |
| (none) | Optional. Enables the skills.sh API mode with richer data (install counts, leaderboard views). Obtainable from a Vercel project via OIDC, per the skills.sh docs. |
|
|
|
|
| Comma-separated |
|
| Registry-level byte cap applied to loaded skill content. |
| (none) | Optional GitHub token; sent as Authorization on |
| (none) | Set to |
How registry selection works
In auto mode: if SKILLS_SH_TOKEN is set → skills.sh registry (its API requires Authorization: Bearer <VERCEL_OIDC_TOKEN>; requests without it get 401, rate limit ~600 req/min). Otherwise → GitHub registry using the public GitHub API + raw.githubusercontent.com, which works immediately with no credentials. SKILL_REGISTRY=github or =skills-sh forces a specific adapter (skills-sh without a token throws a clear RegistryAuthError).
Example agent conversation (context-budget behavior)
Agent: I need to add tests for a React component. Let me find a skill.
Agent → search_skills({ query: "react testing", include_description: true })
mcp-skillbox → { count: 3, results: [
{ id: "vercel-labs/agent-skills/react-testing", name: "React Testing", source: "vercel-labs/agent-skills", description: "Setup and patterns for testing React components with Vitest..." },
{ id: "mattpocock/skills/react-hooks-testing", name: "React Hooks Testing", source: "mattpocock/skills", description: "Best practices for testing custom React hooks in isolation..." },
{ id: "prisma/skills/e2e-testing", name: "E2E Testing", source: "prisma/skills", description: "End-to-end testing setup for web apps..." }
] }
Agent: "react-testing" is the best fit.
Agent → load_skill({ id: "vercel-labs/agent-skills/react-testing" })
mcp-skillbox → { id: "vercel-labs/agent-skills/react-testing", name: "React Testing", files: [
{ path: "SKILL.md", size_bytes: 8421, contents: "# React Testing\n..." }
] }
Agent: Uses the full SKILL.md instructions to write the tests.The agent only ever paid for the full content of the skill it actually used — the two losing skills cost nothing beyond their ~300-char previews.
Development
npm test— vitest unit/integration tests (8 files)npm run typecheck—tsc --noEmitnpm run build— emitdist/npm run dev— watch buildnpm run smoke— real-network GitHub registry smoke (tsx src/smoke.ts)npm run smoke:mcp— full end-to-end MCP smoke over stdio (node scripts/mcp-smoke.mjs; spawnsdist/index.js, lists 3 tools, callslist_skills+load_skillfor real)Tests live in
tests/(cache, factory, frontmatter, github, http, index, server, skills-sh).
IMPORTANT: The
@modelcontextprotocol/sdkroot import is broken in v1.30.0 — always import from subpaths (@modelcontextprotocol/sdk/server/mcp.js,/server/stdio.js,/client/index.js,/inMemory.js). TheregisterTool(name, config, callback)form is the tool-registration API.
Limitations & roadmap
skills.sh install counts/leaderboard require the OIDC token; GitHub mode has no install counts.
GitHub unauthenticated API rate limits (~60 req/hr for contents/trees) — mitigated by tree caching (10 min TTL) and fetching file contents from
raw.githubusercontent.com(which is not rate-limited the same way).No write/install tools yet. Roadmap: install skills to a target directory, packs support, multi-registry federation, HTTP/SSE transport, resource endpoints for installed skills.
License
MIT — see LICENSE.
Available Tools
3 toolslist_skillsList SkillsA
List available agent skills from the registry (skills.sh / GitHub). Returns compact metadata only (id, name, source, installs) - NO descriptions or content, so it is cheap on context. Use this to browse what is available before searching.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| view | No | ||
| per_page | No | ||
| include_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that it returns only compact metadata (id, name, source, installs) and omits descriptions/content, which affects context usage. However, it does not mention pagination or sorting behavior beyond what the schema hints at.
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 two sentences, front-loaded with the core purpose and efficiently provides key behavioral and usage information. Every sentence earns its place with no redundancy.
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 is a simple list operation with optional parameters and no output schema. The description adequately explains the return value (compact metadata fields) and the context-efficiency benefit. However, it does not cover the effects of pagination or sorting options, which are inferable from parameter names but not explicitly described.
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 explain any parameter semantics. It only mentions the output format, leaving the meaning of page, view, per_page, and include_description entirely to the parameter names and defaults. The description adds minimal value for parameter understanding.
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 lists available agent skills from the registry, with a specific verb and resource. It also distinguishes itself from siblings by emphasizing its compact output and positioning as a pre-search browsing tool.
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 explicit guidance: 'Use this to browse what is available before searching.' This clearly indicates when to use the tool, though it does not name the alternative tool (search_skills) explicitly or provide when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_skillLoad SkillA
Load the FULL content of one skill by id (e.g. "vercel-labs/skills/find-skills" or "anthropics/skills/document-skills"). Returns the complete SKILL.md plus optional supporting files. Use ONLY when you have decided to use a specific skill and need its full instructions - this is the expensive (context-heavy) call; prefer list_skills/search_skills first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| max_bytes | No | ||
| include_supporting_files | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the call is 'expensive (context-heavy)' and that it returns 'complete SKILL.md plus optional supporting files', which are useful behavioral traits beyond the basic operation. However, it does not cover error handling or define 'supporting files' in detail, so a small gap remains.
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?
Two sentences, no wasted words. The first sentence front-loads the purpose and gives examples; the second delivers usage guidance. Perfectly sized and structured.
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 load tool with 3 parameters and no output schema or annotations, the description covers the main return value, usage context, and parameter hints. The omission of 'max_bytes' semantics is the primary gap, but overall the description is quite complete for its complexity.
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 compensate. It provides valuable examples for 'id' and hints at 'include_supporting_files' via 'optional supporting files', but 'max_bytes' is left unexplained. This partial compensation falls short of fully documenting all parameters.
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 'Load' with a clear resource ('one skill by id') and gives concrete examples. It distinguishes from sibling tools by emphasizing 'FULL content' and the requirement of a specific skill id, clearly separating it from listing/searching.
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?
Explicitly states when to use ('when you have decided to use a specific skill and need its full instructions') and when not to, with alternatives named ('prefer list_skills/search_skills first'). This is textbook usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_skillsSearch SkillsA
Search for agent skills by keyword (name or description). Returns compact results: id, name, source, installs, and a short description preview (<=300 chars) when include_description is true. Use this to find a skill for a task. Query must be at least 2 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| owner | No | ||
| query | Yes | ||
| include_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the search scope (name or description), the compact result format, and that include_description controls the preview. But it omits behavior around the limit and owner parameters, and doesn't describe pagination, sorting, or error/null-result behavior, leaving meaningful transparency gaps.
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 two short sentences with no fluff. The first sentence front-loads the verb, resource, and search scope, while the second adds the most critical behavior (return format, include_description effect, and query length constraint). Every sentence earns its place.
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 4-parameter search tool with no output schema and no annotations, the description covers the core search and result shape but omits details on owner and limit parameters, and doesn't distinguish when to use this versus sibling tools beyond the single 'use this' line. It is sufficient for basic usage but not fully complete given the schema/annotation void.
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 explain all parameters. It adds meaningful semantics for query (keyword in name or description, min 2 chars) and include_description (returns preview if true). However, it gives no explanation for limit (max results) or owner (filtering), leaving half the parameters under-specified in a zero-coverage schema context.
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') with a clear resource ('agent skills') and scope ('by keyword (name or description)'). It also immediately distinguishes itself from siblings like list_skills (which implies listing all) and load_skill (which implies loading a full skill), making the tool's purpose unambiguous.
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 explicit guidance: 'Use this to find a skill for a task.' It clearly indicates the intended use case. However, it does not mention when not to use it or name alternatives such as list_skills or load_skill, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct role: list for browsing, search for finding by keyword, load for retrieving full content. There is no overlap in functionality or purpose.
Tools follow a verb_noun pattern, but 'list_skills' and 'search_skills' use plural while 'load_skill' uses singular. This minor inconsistency is predictable and does not cause confusion.
With 3 tools, the server is well-scoped for a skill registry: browse, search, and retrieve full content. Each tool serves a necessary function without unnecessary bloat.
The tool surface covers the full workflow for discovering and using skills: listing available skills, searching them, and loading the full content when needed. No obvious gaps exist for the stated purpose.
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
Hosted MCP server for live public-data APIs and Skills for AI agents.
Search and discover Agent Skills from the skills.sh registry. Powered by HAPI MCP server.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Search engine for AI agents to find MCP servers, A2A agents, and skills on their own.
Related MCP Servers
AlicenseAqualityFmaintenanceMCP server for discovering and installing AI agent skills from agentskill.sh. Search skills across platforms, browse trending skills, and install them with built-in security scanning.4133MIT- AlicenseNot gradedqualityCmaintenanceAn MCP server that generates skill manifests from GitHub skills directories and provides tools to recommend and download AI agent skills.25Apache 2.0
- AlicenseAqualityCmaintenanceThis MCP server enables AI agents to search, discover, and install skills from the SkillsMP marketplace, with support for keyword and semantic search, skill content retrieval, and installation to various coding agents.51,6473MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides on-demand skill discovery for AI coding agents by querying GitHub repositories, using BM25 search to return relevant SKILL.md content.16MIT
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/beremaran/mcp-skillbox'
If you have feedback or need assistance with the MCP directory API, please join our Discord server