REST

The same tools, the same credential, over plain HTTP. MCP is not a requirement for using Selat.

List the catalog

curl -s https://api.selat.weekndlabs.com/v1/tools -H "Authorization: Bearer $SELAT_TOKEN"
{"tools":[{"name":"github__get_authenticated_user",
   "description":"Read the account this connection belongs to, with its public counts",
   "write":false,"inputSchema":{"type":"object","properties":{}},
   "provider":"github","maturity":"beta"}],
 "catalog_truncated":false,"request_id":"..."}

Add ?provider=github to narrow it. write tells you whether a tool changes anything upstream, which is worth checking before handing a tool to an autonomous agent.

Call a tool

curl -s -X POST https://api.selat.weekndlabs.com/v1/tools/github__get_authenticated_user/call \
  -H "Authorization: Bearer $SELAT_TOKEN" \
  -H 'content-type: application/json' -d '{}'
{"content":{"login":"fajarhide","name":"Fajar Hidayat","public_repos":16},
 "nextCursor":null,"hasMore":false,"request_id":"..."}

The arguments are the JSON body. hasMore and nextCursor are the honest answer about pagination: pass the cursor back to get the next page, and never guess that a short page means the end.

Retrying a write safely

Send an Idempotency-Key header on a write and a repeat of the same key returns the first result instead of doing the work twice. That matters when an agent retries after a timeout and cannot tell whether the first attempt landed.

curl -s -X POST https://api.selat.weekndlabs.com/v1/tools/github__create_issue/call \
  -H "Authorization: Bearer $SELAT_TOKEN" \
  -H 'Idempotency-Key: 9f2c1e...' \
  -H 'content-type: application/json' \
  -d '{"owner":"o","repo":"r","title":"Flaky test"}'

Everything else

GET  /v1/whoami        workspace, plan, connected providers. No secrets
GET  /v1/connections   what is available and what is connected
GET  /v1/health        liveness
GET  /v1/ready         readiness, including the database