Let agents send content-free push notifications to a paired phone via MCP.
Maintain this server? Claim it
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.
Abort a pairing you started with register_agent. Works while pending and after approval: an already-approved connection is revoked (the API key stops working) so a pairing approved by the wrong account can be undone. Available until the pairing expires, and for 15 minutes after you pick up the API key; later than that, use revoke_self. Then call register_agent again.
The claim_token returned by register_agent (authorizes the cancellation)
The pairing code returned by register_agent
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Abort a pairing you started with register_agent. Works while pending and after approval: an already-approved connection is revoked (the API key stops working) so a pairing approved by the wrong account can be undone. Available until the pairing expires, and for 15 minutes after you pick up the API key; later than that, use revoke_self. Then call register_agent again.
| Argument | Type | Description |
|---|---|---|
| claim_token* | string | The claim_token returned by register_agent (authorizes the cancellation) |
| pairing_code* | string | The pairing code returned by register_agent |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"pairing_code",
"claim_token"
],
"properties": {
"claim_token": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The claim_token returned by register_agent (authorizes the cancellation)"
},
"pairing_code": {
"type": "string",
"maxLength": 16,
"minLength": 1,
"description": "The pairing code returned by register_agent"
}
}
}Check the status of a pairing code from register_agent. On the first poll after the user approves, the response includes the api_key exactly once — store it immediately in your secret mechanism — plus paired_with, the account the agent is now connected to, which you MUST show the user.
| Argument | Type | Description |
|---|---|---|
| claim_token | string | The claim_token returned by register_agent; required to receive the api_key |
| pairing_code* | string | The pairing code returned by register_agent |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"pairing_code"
],
"properties": {
"claim_token": {
"type": "string",
"maxLength": 64,
"description": "The claim_token returned by register_agent; required to receive the api_key"
},
"pairing_code": {
"type": "string",
"maxLength": 16,
"minLength": 1,
"description": "The pairing code returned by register_agent"
}
}
}Register this agent with Yo (unauthenticated). Returns a pairing URL and code to show the user, who approves the connection in the Yo app. Then poll check_registration to obtain the API key.
| Argument | Type | Description |
|---|---|---|
| platform | string | Agent platform (e.g. "cursor", "devin", "claude-code") |
| description | string | Short description of what this agent does |
| proposed_name* | string | Proposed display name for the agent (e.g. "banana", "devin-home-repo") |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposed_name"
],
"properties": {
"platform": {
"type": "string",
"maxLength": 64,
"description": "Agent platform (e.g. \"cursor\", \"devin\", \"claude-code\")"
},
"description": {
"type": "string",
"maxLength": 500,
"description": "Short description of what this agent does"
},
"proposed_name": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Proposed display name for the agent (e.g. \"banana\", \"devin-home-repo\")"
}
}
}Permanently revoke THIS agent using its API key as the Bearer token. Use when you discover (at any time) that paired_with is not your owner’s account and cancel_registration no longer works. The key stops working immediately; call register_agent to start over.
| Argument | Type | Description |
|---|---|---|
| confirm* | boolean | Must be true — revocation is immediate and irreversible |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"confirm"
],
"properties": {
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true — revocation is immediate and irreversible"
}
}
}Send a Yo push notification to your owner. Recommended: include a short subject explaining what the notification is about, and a context_url when there is a useful link to open. The subject appears on the lock screen and in the app; avoid secrets. Requires an agent API key as the Bearer token.
| Argument | Type | Description |
|---|---|---|
| subject | string | Recommended: a short, specific subject explaining why you are notifying the user (1–120 characters, counted as Unicode code points), e.g. "PR ready for review". Plain text, one line; avoid secrets because it appears on the lock screen. Optional for compatibility with older agents. |
| context_url | string | Optional https or app deep-link URL opened when the user taps the notification |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"subject": {
"type": "string",
"minLength": 1,
"description": "Recommended: a short, specific subject explaining why you are notifying the user (1–120 characters, counted as Unicode code points), e.g. \"PR ready for review\". Plain text, one line; avoid secrets because it appears on the lock screen. Optional for compatibility with older agents."
},
"context_url": {
"type": "string",
"maxLength": 2048,
"description": "Optional https or app deep-link URL opened when the user taps the notification"
}
}
}