> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skinai.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Connect a client and make your first calls.

## Connect a client

<CodeGroup>
  ```bash Claude Code theme={null}
  claude mcp add --transport http skan https://skan-connectors-staging.skan.workers.dev/mcp
  ```

  ```json Generic MCP config theme={null}
  {
    "mcpServers": {
      "skan": {
        "type": "http",
        "url": "https://skan-connectors-staging.skan.workers.dev/mcp"
      }
    }
  }
  ```
</CodeGroup>

For the account tier, use `/mcp/account` instead. The client runs the OAuth flow on first use.

## Raw JSON-RPC

Every call is a `POST` to the endpoint with `Accept: application/json, text/event-stream`. No initialization handshake or session header is required, because the server is stateless.

**List tools**

```bash theme={null}
curl -s -X POST https://skan-connectors-staging.skan.workers.dev/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

**Start a scan with an upload link**

```bash theme={null}
curl -s -X POST https://skan-connectors-staging.skan.workers.dev/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"start_skin_scan","arguments":{"source":"mcp"}}}'
```

The result's `structuredContent` carries `run_id`, `access_token` and `upload_url`. Give the `upload_url` to the person, then poll:

**Poll the scan**

```bash theme={null}
curl -s -X POST https://skan-connectors-staging.skan.workers.dev/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_skin_scan","arguments":{"run_id":"<run_id>","access_token":"<access_token>"}}}'
```

Follow `next_action` and `retry_after_seconds` in each response. See [scan lifecycle](/scan-lifecycle).

## Health

```bash theme={null}
curl -s https://skan-connectors-staging.skan.workers.dev/health
```

```json theme={null}
{"ok":true,"admissions_enabled":true,"catalog_tools_enabled":true,"photo_intake":"direct_or_link"}
```

If `admissions_enabled` is `false`, new scans return `admissions_paused`, while reads, deletion and the catalog tools keep working.
