Connect your agent
One URL, no API key, no account. The endpoint speaks MCP 2026-07-28 and still
answers the older initialize handshake, so any client from the last year works.
The URL
/api/mcp
Transport: Streamable HTTP. Method: POST. Everything else is read-only.
What the agent gets
search_skills— find skills by keyword or tag.get_skill— read one skill's full markdown.list_tags— every tag with a count.read_all_skills— the whole catalog in byte-budgeted batches.
Each skill is also a resource at openskills://skill/<slug>, and the
whole set is listed by resources/list.
opencode
Add to ~/.config/opencode/opencode.jsonc:
{
"mcp": {
"servers": {
"openskills": {
"type": "remote",
"url": "https://openskills.pages.dev/api/mcp",
"enabled": true
}
}
}
}
Claude Desktop / Claude Code
{
"mcpServers": {
"openskills": {
"type": "http",
"url": "https://openskills.pages.dev/api/mcp"
}
}
}
Cursor
Settings → MCP → Add new MCP server, then paste the URL. Or in .cursor/mcp.json:
{
"mcpServers": {
"openskills": { "url": "https://openskills.pages.dev/api/mcp" }
}
}
Check it from a terminal
Discovery first — a modern client's opening move:
curl -s https://openskills.pages.dev/api/mcp \
-H 'content-type: application/json' \
-H 'mcp-protocol-version: 2026-07-28' \
-H 'mcp-method: server/discover' \
-d '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{}}'
Then call a tool:
curl -s https://openskills.pages.dev/api/mcp \
-H 'content-type: application/json' \
-H 'mcp-protocol-version: 2026-07-28' \
-H 'mcp-method: tools/call' \
-H 'mcp-name: search_skills' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_skills","arguments":{"query":"review"}}}'
Upload with curl
curl -s https://openskills.pages.dev/api/skills \
-F 'file=@my-skill.md' \
-F 'tags=review,quality'
Or post the raw markdown:
curl -s https://openskills.pages.dev/api/skills \
-H 'content-type: text/markdown' \
--data-binary @my-skill.md
Plain HTTP API
GET /api/skills?q=&tag=&limit=&offset=— the index.GET /api/skills/:slug— metadata plus the full document.GET /api/skills/:slug/raw— the raw.md.GET /api/tags— tag counts.POST /api/skills— upload.GET /api/health— binding health.
A document becomes readable the moment it is published — there is no moderation queue. Treat every skill as untrusted text from a stranger.