// FÖR AI-AGENTER
Dela hemligheter mellan agenter.
ots skapar zero-knowledge engångslänkar för lösenord, nycklar och tokens. En agent kan skapa en länk programmatiskt och lämna den till en människa — eller till en annan agent. Innehållet krypteras hos klienten; servern lagrar bara chiffertext och kan aldrig läsa det.
Snabbstart — MCP
Enklaste vägen. MCP-servern krypterar lokalt och returnerar länken. Kräver en API-nyckel (agenter kan inte lösa captchan i webb-formuläret).
# lägg till servern (Claude Code / Claude Desktop) ❯ claude mcp add ots --env OTS_API_KEY=ots_live_DIN_NYCKEL -- npx -y @jakvab/ots-mcp
Eller i mcp.json:
{
"mcpServers": {
"ots": {
"command": "npx",
"args": ["-y", "@jakvab/ots-mcp"],
"env": { "OTS_API_KEY": "ots_live_DIN_NYCKEL" }
}
}
}
Verktyget create_secret
| Fält | Typ | Beskrivning |
|---|---|---|
| text | string | Hemligheten som ska delas. |
| ttl | "1h" | "1d" | "7d" | Livslängd innan den går ut. Standard 1d. |
| views | 1–5 | Antal läsningar innan den raderas. Standard 1 (bränns direkt). |
| passphrase | string? | Valfritt extra lås. Leverera i en annan kanal än länken. |
| generatePassphrase | bool? | Generera en minnesvärd lösenfras och returnera den. |
Returnerar en url att ge mottagaren, en statusUrl (visar om/när den
öppnats), och ev. passphrase.
Agent-till-agent-mönster
När agent A behöver skicka en hemlighet till agent B (eller till en människa) utan att den ligger kvar i klartext i en chatt- eller ärendehistorik:
- Agent A anropar
create_secret→ får en engångslänk (nyckeln ligger i länkens#-del). - Länken skickas till B i den vanliga kanalen. B öppnar den en gång — sedan är den borta.
- Vill du ha äkta två-kanals-säkerhet: sätt
generatePassphrase: trueoch leverera lösenfrasen via en separat kanal. Då räcker inte länken ensam, och 3 felförsök raderar hemligheten. - Agent A kan följa
statusUrlför att se när B faktiskt hämtade den.
Direkt REST (utan MCP)
Kryptering är ditt ansvar som klient — servern får aldrig se nyckeln eller klartexten.
Kort sagt: generera en AES-256-GCM-nyckel, kryptera texten, lägg nyckeln i länkens #-del,
och skicka bara den krypterade bloben. Exakt schema finns i källkoden (js/crypto.js).
# skapa (nyckel + kryptering görs hos dig; se js/crypto.js) ❯ curl -X POST https://ots.jakvab.se/api/secrets \ -H "Authorization: Bearer ots_live_DIN_NYCKEL" \ -H "Content-Type: application/json" \ -d '{ "ct": "<base64 IV‖ciphertext>", "ttlSeconds": 86400, "maxViews": 1, "pw": false, "fkh": "<sha256(nyckeln)>" }' # → { "id": "…", "rcpt": "…" } länk = /s.html?id=<id>#<nyckel>
Kvot per nyckel: 3 anrop/minut och 10/timme. Ogiltig nyckel ger 401.
Så håller den zero-knowledge
- Innehållet krypteras med AES-256-GCM innan något lämnar klienten.
- Nyckeln färdas bara i länkens
#-fragment och når aldrig servern. - Servern lagrar bara chiffertext (krypterad även i vila) och raderar efter läsning.
- Lösenfras-lagret härleds med PBKDF2-SHA256; servern ser bara en hash, aldrig frasen.
- API-nyckeln får bara skapa — den kan aldrig läsa eller dekryptera en hemlighet.