mcp-skills-go
An MCP (Model Context Protocol) server that serves Claude Code skills from a directory of SKILL.md files.
Uses Go's fs.FS interface for filesystem access, which provides path traversal protection by design. Works with both embed.FS (compile-time) and os.DirFS (runtime).
The server exposes 5 MCP tools:
| Tool |
Description |
list-skills |
List all available skills with metadata (name, description, version) |
get-skill |
Get a skill's full content (frontmatter + markdown body) |
list-skill-resources |
List all resource files in a skill's directory |
get-skill-resource |
Get a resource file from a skill's subdirectory |
search-skills |
Search skills by keyword (OR mode by default) against name, description, and body |
Skills Directory Structure
skills-dir/
my-skill/
SKILL.md # Required: frontmatter + body
references/ # Optional: supporting docs
guide.md
scripts/ # Optional: executable code
agents/ # Optional: sub-agent definitions
---
name: my-skill
description: When to use this skill
version: 1.0.0
---
Skill instructions go here.
Usage
As a library (embed.FS)
import (
"embed"
"io/fs"
skills "github.com/meinside/mcp-skills-go"
)
//go:embed my-skills
var skillsFS embed.FS
sub, _ := fs.Sub(skillsFS, "my-skills")
server, tools := skills.NewServer(sub)
As a library (os.DirFS)
import (
"os"
skills "github.com/meinside/mcp-skills-go"
)
fsys := os.DirFS("/path/to/skills")
server, tools := skills.NewServer(fsys)
As a standalone STDIO server
go build -o skills-mcp-stdio-server ./cmd/skills-mcp-stdio-server/
./skills-mcp-stdio-server --skills-dir /path/to/skills
Claude Code MCP configuration
{
"mcpServers": {
"skills": {
"command": "/path/to/skills-mcp-stdio-server",
"args": ["--skills-dir", "/path/to/skills"]
}
}
}
Build
go build ./...
Test
go test ./...
License
MIT