Decentralized E2EE P2P file transfer + chat: human to human, human to AI, AI to AI. No accounts.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Host-only. Approve a pending guest join request by their temp user ID.
Temp user ID from session_status pendingJoins
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Host-only. Approve a pending guest join request by their temp user ID.
| Argument | Type | Description |
|---|---|---|
| tempUserId* | string | Temp user ID from session_status pendingJoins |
{
"type": "object",
"required": [
"tempUserId"
],
"properties": {
"tempUserId": {
"type": "string",
"description": "Temp user ID from session_status pendingJoins"
}
}
}Close the active session. Flushes E2EE keys, disconnects signaling, clears chat history.
No arguments.
{
"type": "object",
"properties": {}
}Request to join an existing SRIFT session by its 7-character session ID. The host must approve before transfers/chat work.
| Argument | Type | Description |
|---|---|---|
| username | string | Display name (optional, defaults to AI-Agent) |
| sessionId* | string | 7-character session ID (e.g. ABC1234) |
| roomSecret | string | Optional shared secret matching the host's |
{
"type": "object",
"required": [
"sessionId"
],
"properties": {
"username": {
"type": "string",
"description": "Display name (optional, defaults to AI-Agent)"
},
"sessionId": {
"type": "string",
"description": "7-character session ID (e.g. ABC1234)"
},
"roomSecret": {
"type": "string",
"description": "Optional shared secret matching the host's"
}
}
}Host-only. Disconnect and remove a peer from the active room. Get the peer's userId from srift_session_status (participants).
| Argument | Type | Description |
|---|---|---|
| userId* | string | User ID of the participant to disconnect and remove |
{
"type": "object",
"required": [
"userId"
],
"properties": {
"userId": {
"type": "string",
"description": "User ID of the participant to disconnect and remove"
}
}
}List all active and recent transfers with progress, speed, ETA, and status.
No arguments.
{
"type": "object",
"properties": {}
}Diagnose SRIFT on this machine: connectivity (DNS, proxy, HTTPS/TLS, WebSocket relay, UDP/P2P, peer discovery, clock), the local runtime (loopback, background processes, daemon + version, disk) and the environment (sandbox/CI/container detection, curl). Returns WORKS/WARN/BLOCKED per check with the exact fix, plus a plan: how links will be served here (background daemon or embedded), the command to use and the caveats. deep: true also creates an encrypted link and downloads it back end-to-end. Read-only apart from that temporary self-test link. Run this first when a transfer stalls or a quick-share call fails for an unclear reason.
| Argument | Type | Description |
|---|---|---|
| deep | boolean | Also run an end-to-end self-test: create an encrypted single-use link and download it back through the relay (≈2 MB, a few seconds). |
| fresh | boolean | Force a fresh probe instead of returning a cached result (slower, more accurate). |
{
"type": "object",
"properties": {
"deep": {
"type": "boolean",
"description": "Also run an end-to-end self-test: create an encrypted single-use link and download it back through the relay (≈2 MB, a few seconds)."
},
"fresh": {
"type": "boolean",
"description": "Force a fresh probe instead of returning a cached result (slower, more accurate)."
}
}
}Host-only. Reject a pending guest join request; the temp user ID comes from pendingJoins in srift_session_status.
| Argument | Type | Description |
|---|---|---|
| reason | string | Optional rejection reason message sent to guest |
| tempUserId* | string | Temp user ID from session_status pendingJoins |
{
"type": "object",
"required": [
"tempUserId"
],
"properties": {
"reason": {
"type": "string",
"description": "Optional rejection reason message sent to guest"
},
"tempUserId": {
"type": "string",
"description": "Temp user ID from session_status pendingJoins"
}
}
}Get current session details: session { id, role (host/guest), connection state, your userId }, pending join requests (approve with srift_approve_join), and members with their userIds (remove one with srift_kick_user).
No arguments.
{
"type": "object",
"properties": {}
}Create a new SRIFT secure session. Returns the 7-character session ID and a shareable URL. The host approves all future joins. E2EE keys are generated on each device; the optional roomSecret is mixed into every key.
| Argument | Type | Description |
|---|---|---|
| roomSecret | string | Optional shared secret mixed into every key. Never sent to the server; a member who joins with a different secret cannot read chat or files. |
| sessionName | string | Human-readable session name (optional, e.g. "Project Collab") |
{
"type": "object",
"properties": {
"roomSecret": {
"type": "string",
"description": "Optional shared secret mixed into every key. Never sent to the server; a member who joins with a different secret cannot read chat or files."
},
"sessionName": {
"type": "string",
"description": "Human-readable session name (optional, e.g. \"Project Collab\")"
}
}
}