Skip to content

gryt-mcp shows when it's working, and has a face (GRYT-2005) - #22

Merged
grytchat merged 2 commits into
mainfrom
claude/GRYT-2005-presence
Nov 3, 2026
Merged

grytchat merged 2 commits into
mainfrom
claude/GRYT-2005-presence

Conversation

@grytchat

@grytchat grytchat commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Sivert asked for three things after trying the MCP on beta: show it's working, show typing, and give it a picture.

  • typing() sends chat:typing, which the server keeps for 8 seconds. The show_typing tool repeats it every 6 seconds until the bot posts in that channel or thread, or 90 seconds pass.
  • setActivity() sends presence:activity. Every tool that works in a channel sets "Reading #" under the bot's name, and it clears after two idle minutes.
  • setAvatar() posts to /api/uploads/avatar with the bot's token, the same route a person's app uses, behind upload_avatar_image. --avatar <file> uploads once per picture per server. The hash of the last upload sits next to the key.

The bot now also asks for set_activity and upload_avatar_image when it knocks. A bot that knocked before keeps its old list, so it needs a new key to get these.

Look at

  • show_typing is marked read-only, so it can be allowlisted with the reads. It posts nothing and ends on its own, but it is visible to people, so say if you'd rather it asked every time.
  • The avatar upload runs on every reconnect. The hash file is what stops it uploading again.

Docs: Gryt-chat/docs#182

🤖 Generated with Claude Code

grytchat and others added 2 commits November 3, 2026 12:30
- typing(): chat:typing, which lasts 8 seconds on the server. The
  show_typing tool repeats it every 6 seconds until the bot posts in that
  channel or thread, or 90 seconds pass.
- setActivity(): presence:activity. Every tool that resolves a channel
  sets "Reading #<channel>" and it clears after two idle minutes, so the
  member list shows the bot is busy.
- setAvatar(): POST /api/uploads/avatar with the bot's token, the route a
  person's app uses, behind upload_avatar_image. --avatar uploads once
  per picture per server; the hash of the last one sits next to the key.

WANTS gains set_activity and upload_avatar_image. A bot that knocked
before keeps its old list, so it needs a new key to ask for these.

show_typing is marked read-only so it can be allowlisted with the reads:
it posts nothing and ends on its own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The server only stops typing on chat:stop_typing or after 8 seconds, and
a person's app sends the stop itself. The bot didn't, so "typing…"
outlived its own message. stopTyping() sends it, and show_typing calls
it on send_message and when the 90 seconds run out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@grytchat
grytchat merged commit 68e75ae into main Nov 3, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant