@getskillmd/mcp
v0.1.7
Published
Model Context Protocol server for skillmd — generate, fetch, and browse skill.md files from any IDE
Downloads
716
Maintainers
Readme
@getskillmd/mcp
Model Context Protocol server for skillmd. Paste a URL into Claude Code, Cursor, Windsurf, Antigravity, or any MCP-aware tool and get back a
skill.md— plus design tokens, fonts, brand assets, and screenshots.
The server gives your agent:
- Markdown skill files describing a product, API, or library
- A typed design-token contract (
tokens.json+globals.cssvariables + Tailwind preset) - Real brand screenshots (above-the-fold and full-page) as inline images
- Real brand assets (favicon, OG image, Twitter card, logo) as inline images
- A
verify_designround-trip that scores how closely the UI you built matches the source
Tools
| Tool | What it does |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| generate_skill(url, mode?, waitForCompletion?) | Generate a fresh skill.md from any public URL. Modes: design (default), api, library, generic. Polls to completion by default. |
| get_skill(slug, includeScreenshots?) | Fetch a saved bundle: markdown, token contract (tokens.json + globals.css vars + Tailwind preset), and brand screenshots as images. |
| get_skill_screenshot(slug, fold?) | Fetch one screenshot — above (hero / above-the-fold) or full (entire scrolled page). |
| get_skill_asset(slug, kind) | Fetch a brand asset — favicon, og (Open Graph image), twitter (Twitter card), or logo. Drops the real mark into your UI. |
| verify_design(slug, url) | Compare a publicly reachable preview URL against the skill's brand. Returns a fidelity score, mismatches, and concrete fixes. |
| list_skills(cursor?, limit?) | List skills owned or bookmarked by the authenticated user. Paginated (1–50 per page, default 20). |
| find_inspiration(cursor?, limit?) | Browse inspiration entries (Dribbble, Pinterest, Figma, image uploads, merges) saved by the user. |
Resources
| URI | Type | What you get |
| ------------------------- | --------------- | -------------------------------------------------------------------------------------------------- |
| skill://<slug> | text/markdown | The latest skill.md for a saved skill |
| skillshot://<slug> | image/png | The brand screenshot for a saved skill, as an image you can pin alongside your context |
Clients with a resource picker (Claude Desktop, Claude Code, Cursor) can browse and pin these next to other context.
Authentication
Pick whichever fits — all three work:
- Browser sign-in (recommended). Run
npx @getskillmd/cli loginonce. It opens your browser, you approve, and a token is cached at~/.config/getskillmd/credentials.json. Thenpx @getskillmd/mcpserver picks it up automatically — no API key, no env var. - API key. Create one at https://getskillmd.com/account and set
GETSKILLMD_API_KEY. Best for CI and headless setups. - OAuth (hosted endpoint). Connect a client to
https://getskillmd.com/api/mcp— clients that support OAuth (Claude Desktop, Cursor, …) open a browser to authorize. No key to copy or store.
Install
Claude Code / Claude Desktop
Add this to your MCP config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, or via claude mcp add in Claude Code).
After npx @getskillmd/cli login, no key is needed:
{
"mcpServers": {
"skillmd": {
"command": "npx",
"args": ["-y", "@getskillmd/mcp"]
}
}
}Or pin an API key explicitly:
{
"mcpServers": {
"skillmd": {
"command": "npx",
"args": ["-y", "@getskillmd/mcp"],
"env": {
"GETSKILLMD_API_KEY": "gskmd_pk_..."
}
}
}
}Cursor / Windsurf / Antigravity
Same JSON snippet under the editor's MCP settings panel.
Any other MCP client
npx -y @getskillmd/mcpSpeaks streamable HTTP and stdio MCP transports.
Hosted endpoint
Skip the npx install and connect to https://getskillmd.com/api/mcp from any client that supports the streamable HTTP MCP transport.
Clients that support OAuth just need the URL — they'll open a browser to authorize:
{
"mcpServers": {
"skillmd": {
"type": "http",
"url": "https://getskillmd.com/api/mcp"
}
}
}For clients without OAuth support, pass an API key (or a skillmd login token) instead:
{
"mcpServers": {
"skillmd": {
"type": "http",
"url": "https://getskillmd.com/api/mcp",
"headers": {
"Authorization": "Bearer gskmd_pk_..."
}
}
}
}Environment
| Var | Required | Purpose |
| ---------------------- | -------- | ------------------------------------------------------------------------------------ |
| GETSKILLMD_API_KEY | no* | API key from https://getskillmd.com/account |
| GETSKILLMD_TOKEN | no* | A token to use directly instead of the cached skillmd login credentials |
| GETSKILLMD_API_URL | no | Override the API base — defaults to https://getskillmd.com/api/v1 |
* Credentials are resolved in order: GETSKILLMD_API_KEY → GETSKILLMD_TOKEN → the skillmd login browser session. Set at least one, or just run npx @getskillmd/cli login.
Programmatic use
The package also exports a factory so you can embed the server in your own MCP runtime:
import { buildGetSkillMdServer } from "@getskillmd/mcp";
const server = buildGetSkillMdServer({
apiKey: process.env.GETSKILLMD_API_KEY!,
// baseUrl: "https://getskillmd.com/api/v1",
// name: "skillmd",
// version: "0.1.0",
});For multi-tenant setups where the API key depends on the caller, use the resolver form:
import { buildGetSkillMdServerFromResolver, createApiClient } from "@getskillmd/mcp";
const server = buildGetSkillMdServerFromResolver({
apiResolver: ({ authInfo }) =>
createApiClient({ apiKey: authInfo?.token ?? process.env.GETSKILLMD_API_KEY! }),
});License
MIT
