My skills library lives on my laptop. Over 100 of them. Claude Desktop could see them, but claude.ai never could, because a cloud app has no route to localhost:8080 on my machine.
Every new agent setup meant the same ritual. Re-register skills one by one, then watch thousands of tokens burn as the model waded through all of them to find the three that mattered. I tolerated that for months because fixing it properly looked like a weekend project, and my weekends kept filling up with all the urgent nonsense that never makes it into any retrospective.
Skills MCP Server is the fix. It's a Python MCP server, MIT licensed, built on MCP SDK 2.2.0. Point it at your skills folder and it exposes the library two ways. STDIO for local hosts. HTTP/SSE for remote ones.
The claude.ai part is the one people ask about. Short version. One SSH command. You run ssh -R 80:localhost:8080 tinyfi.sh and get a public URL like https://.tinyfi.sh/mcp/sse. Paste it into Claude.ai under Settings, then Integrations, as a remote MCP server. Add the bearer token if you enabled auth. Your local library is now searchable from a browser tab. ngrok or a Cloudflare Tunnel works the same way if you prefer those.
Day to day, the model searches with search_skills and loads with get_skill. Only the relevant skill enters context. That's the entire idea. It also runs profiles, named bundles like product-builder or researcher that load several skills in one call. Right now it talks to Claude Desktop, Cursor, Zed, Neovim, Windsurf, Cline, Roo Code, Tasklet, and the Claude Code CLI.
It's a month old and 14 good first issues are labeled, all small and self-contained. The repo is linked below. PRs get reviewed fast.
Top comments (1)
The search_skills / get_skill split is the right call. Loading 100+ skill descriptions up front is where most of the token burn comes from. The same principle matters for us at Auten (I'm on the team), where learned tasks pile up fast: only the one that matches should enter context.
One thing I'd flag on the claude.ai path: with ssh -R to a public tunnel, the URL is reachable by anyone who finds it, and auth is optional. A skills library often holds internal prompts and file paths, so I'd make the token on by default whenever the HTTP transport is enabled, and refuse to start SSE without one unless someone passes an explicit --no-auth.
How does search_skills rank today: keyword match on name and description, or embeddings? With 100+ skills, near-duplicate descriptions look like the place it would pick the wrong one.