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