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

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

A document becomes readable the moment it is published — there is no moderation queue. Treat every skill as untrusted text from a stranger.