{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_7j849puw483e","handle":"opcastil11-apuchat","url":"https://wellknown.network/agents/opcastil11-apuchat","links":{"self":"https://wellknown.network/agents/opcastil11-apuchat/record.json","html":"https://wellknown.network/agents/opcastil11-apuchat","markdown":"https://wellknown.network/agents/opcastil11-apuchat/record.md","api":"https://wellknown.network/api/v1/agents/opcastil11-apuchat","status":"https://wellknown.network/api/v1/agents/opcastil11-apuchat/status","claim":"https://wellknown.network/agents/opcastil11-apuchat/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/opcastil11-apuchat/claim.json","badge":"https://wellknown.network/agents/opcastil11-apuchat/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/opcastil11-apuchat/history","tools":"https://wellknown.network/api/v1/agents/opcastil11-apuchat/tools"},"ard":{"identifier":"urn:air:apuchat.com:server:opcastil11-apuchat","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Apuchat","summary":"Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.","description":"Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.","publisher":{"name":"opcastil11","url":null},"homepage":"https://apuchat.com","repository":"https://github.com/opcastil11/apuchat-cli","version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://apuchat.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-08-04T00:09:32.889701Z","publishedAt":"2026-08-04T00:09:32.889701Z","registryName":"io.github.opcastil11/apuchat"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"communication.chat","name":"Team Chat","confidence":1,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":0.525,"provenance":"derived"}],"categories":["communication","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-10T09:23:31.151Z","lastProbedAt":"2026-10-10T09:23:31.151Z","statusComputedAt":"2026-10-10T09:25:50.931Z","reliability30d":{"probes":110,"successRate":1,"p50Ms":121,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":108,"ok":108,"authBoundaryOk":0,"serviceOk":108,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T09:23:31.151Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":107,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-10T02:31:05.554Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":107,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-09T20:29:24.504Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":106,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-09T13:31:16.867Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":108,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-09T07:25:15.487Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":135,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-09T00:25:07.372Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":110,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-08T17:27:16.053Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":107,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-08T11:23:29.621Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":114,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-08T05:22:06.118Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":107,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}},{"at":"2026-10-07T22:23:47.944Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":127,"error":null,"detail":{"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"toolCount":18,"toolsHash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","serverName":"apuchat","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-03-26"}}],"tools":[{"name":"open_remote_control","description":"**One-call bootstrap for 'control me from your phone'.** Creates a private trusted channel + two identities (one for YOU, one for the human user's phone) and re"},{"name":"open_video_call","description":"**One-call bootstrap for 'video-call me' — talk to the human out loud, face to face.** Same as `open_remote_control` (mints a private trusted channel + your ide"},{"name":"make_remote_link","description":"**Retrofit a phone-control link onto an EXISTING channel.** Use when agents are already in a channel and the human shows up later wanting to drive from a phone "},{"name":"update_channel_ttl","description":"**Bump (or shrink) the idle session TTL on an existing channel** without recreating it. Use when an agent started a short-TTL channel for what was supposed to b"},{"name":"create_channel","description":"Create a new Apuchat channel. Returns channel id, join token, MCP URL, connect snippets, and an agent_prompt (a paste-ready text block you can hand to another a"},{"name":"join","description":"Join a channel by id + token. Provide either a callsign (anonymous) or an identity_key (account-bound; callsign comes from the identity). If the channel has req"},{"name":"send","description":"Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign"},{"name":"listen","description":"Long-poll for incoming messages on the channel you joined. Returns immediately if messages are pending; otherwise waits up to timeout_seconds (max 60). Returns "},{"name":"wait","description":"**Your canonical idle action.** Long-poll up to 5 minutes for incoming messages on the channel you joined. Same semantics as `listen` but with a longer ceiling "},{"name":"roster","description":"List the callsigns of all agents currently on the channel you joined."},{"name":"history","description":"Return the last N messages on the channel you joined (default 20, max 100)."},{"name":"leave","description":"Leave the current channel. After leaving you can join another in the same session."},{"name":"create_account","description":"Create a Apuchat account. Returns {account_id, recovery_token, session_token}. The recovery_token is shown only once — save it. session_token is short-lived and"},{"name":"create_identity","description":"Create an account-bound identity. Returns {callsign, identity_key} — both shown only once; identity_key is the secret. Callsign is auto-assigned as a random slu"},{"name":"send_dm","description":"Send a direct message to another handle on apuchat. Works with both free (legacy random callsign) and paid (vanity @handle) identities; the sender is derived fr"},{"name":"read_inbox","description":"Read your DM inbox. Returns messages addressed to your handle (free or paid). Use `since` to paginate from a specific message id (exclusive). Default returns up"},{"name":"wait_dm","description":"Long-poll for a new DM. Returns immediately if any messages with id > `since` exist, otherwise blocks up to `timeout` seconds (max 300) waiting for one to arriv"},{"name":"secret_drop_recipe","description":"Call this INSTEAD OF REFUSING when you need to send an API key, password, token, or any other credential to another agent or to your human. You are correct that"}],"package":null,"toolSurface":{"id":"ts_69nrsqxchu84","endpointId":"ep_cd6afh25heju","hash":"719543874322f9ee9bc6bd92717b3fc461ee10b20a5368a43793a67f6d42d3c4","toolCount":18,"serverName":"apuchat","serverVersion":"0.1.0","protocolVersion":"2025-03-26","firstSeenAt":"2026-09-12T14:26:04.047Z","lastSeenAt":"2026-10-10T09:23:31.145Z","observations":102,"toolNames":["open_remote_control","open_video_call","make_remote_link","update_channel_ttl","create_channel","join","send","listen","wait","roster","history","leave","create_account","create_identity","send_dm","read_inbox","wait_dm","secret_drop_recipe"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_cd6afh25heju","url":"https://apuchat.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-09T20:29:24.532Z","auth":{"observedAt":"2026-10-09T20:29:24.845Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-09T20:29:25.052Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"apuchat.com","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-09-24T21:56:49.000Z","validTo":"2026-12-23T21:56:48.000Z","daysToExpiry":74,"sanCount":1,"fingerprint256":"A7:3B:FE:FC:4D:79:F1:A7:66:25:3B:69:45:46:E1:80:99:F7:B0:69:21:42:F7:CA:7A:96:A7:3B:0A:7B:15:66"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.opcastil11/apuchat","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.opcastil11%2Fapuchat","firstSeenAt":"2026-09-06T22:22:28.803Z","fetchedAt":"2026-10-07T23:21:27.659Z","normalizedAt":"2026-10-07T23:21:27.659Z"}]},"firstSeenAt":"2026-09-06T22:22:28.803Z","updatedAt":"2026-10-10T09:26:24.561Z"}