Messaging between concurrent AI coding sessions, across clients, over MCP. Zero infrastructure.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
A radio for agentic coding sessions.
You have several sessions open at once β different worktrees, different tasks,
maybe different people driving them. They need to tell each other things:
"schema for rosters changed, the field is recipient_group now", "pushing the
refactor in ten minutes, hold your commits". YAAC is how they do that, and how
you talk into the same conversation by hand.
The mental model is a network of handheld radios, not a phone network. Buy one
and it works β it just has nobody to talk to. Buy a second and there's a
conversation. There is no config file, no environment variable, no port to choose,
no daemon, and nothing to run first. Sessions find each other at a fixed local
address β tcp://127.0.0.1:19116, and 19116 is 0x4AAC, which is where the
name comes from. Whichever session needs it first claims it and relays for the
others; if that session goes away, another takes over by itself, within a few
seconds and without anyone doing anything.
It connects sessions that were never designed to meet. Agents inside one harness could always talk β an orchestrator wires its own subagents, and that was never the problem. YAAC is for two (or more) unrelated sessions in unrelated clients, alive on your machine right now: a Claude Code session and a Claude Desktop chat, Codex, Gemini CLI β anything that can run a local MCP server. One conversation is 300k tokens into a task; another, 400k tokens in, holds exactly the experience it needs. Give them a radio. If you can talk to both of them, now they can talk to each other.
Configuration rounds to zero. If you can add a local MCP server, you are done β no Redis to stand up, no PostgreSQL to prepare, no broker, no port to choose. Adding YAAC hands each client a radio, switched off. Then, at any moment, you tell a session "connect to yaac" β and it deals with the rest.
* On Claude Code, installed as a plugin, these arrive on their own β see Instead: as a plugin. Everywhere else the listening session receives them next time it checks its inbox; see Messages do not arrive on their own below.
Two ways in. As an MCP server works in every MCP client and is the one to reach for by default. As a plugin is fewer steps and brings a skill along, but only on clients that implement one of the two plugin standards.
All of these need uv on your PATH. uvx fetches
the package and a suitable
Python by itself, so there is nothing else to install and no virtualenv to
manage.
-s user installs it for every project on the machine, which is usually what you
want: a radio only one of your sessions can hear is not much of a radio. Leave it
out to add YAAC to the current project only.
Check it took with claude mcp list, or /mcp inside a session.
Add YAAC to claude_desktop_config.json, then restart the app:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonIf Desktop reports that it cannot find uvx, give the absolute path instead β
which uvx will tell you where it is. GUI applications do not always inherit the
PATH your shell has.
YAAC is a plain stdio MCP server with no client-specific behaviour. Whatever your client's configuration looks like, the two things it needs are:
uvxyet-another-agentic-chatSessions on different clients can talk to each other, as long as they are on the same machine.
If your client speaks one of the two plugin standards, this replaces the configuration above and adds a skill explaining how to use the radio.
Claude Code, which has its own plugin format. This repository is the marketplace:
There it brings the one thing the MCP server alone cannot: messages arrive
without being asked for. A hook hands the session whatever came in β as it
works, when you type, and as a turn ends, which is the one that reopens a
finished turn so it can act on the news. It is a delivery, not a nudge: the
message text itself, already read, with check_inbox left for when you want to
look on purpose. The same hook fires after a compaction and hands the session
back the connections it holds, since a summary drops the identifiers the other
tools need. Nothing to configure, and silent when there is nothing to say.
Agent Plugins 1.0.0 β ChatGPT, Codex, Cursor,
GitHub Copilot, Kiro, VS Code. Point your client at this repository; the plugin
is the plugin/ directory. Claude Code is not part of that standard, which is
why there are two sets of instructions rather than one.
Either way the plugin runs the published package with uvx, so it carries no
copy of the server and picks up new releases without being reinstalled.
To sit on a channel yourself and watch it live:
It joins as an ordinary participant, so agents see you as one of them. Unlike an
MCP session it gets messages the moment they arrive β the pull-only limitation
below is MCP's, not YAAC's, and a terminal has no such problem. See
docs/tui.md.
To run the latest unreleased code, replace yet-another-agentic-chat with
git+https://github.com/amyodov/yet-another-agentic-chat in any command above.
To hack on a local checkout, see docs/development.md.
Append one of these as the final argument to any command above. All three name the same thing β where sessions meet β and which one you use says what this session is willing to do there:
--rendezvous tcp://127.0.0.1:<port> | Relay if this session gets there first, join whoever did otherwise. The default, and what happens with no flag at all. |
--bind tcp://127.0.0.1:<port> | Insist on relaying: refuse to join if another session already holds it. |
--connect tcp://127.0.0.1:<port> | Never relay for anybody. Join, talk, and leave the spine to someone else. |
Every session that should hear the others must be given the same address:
sessions on different ones are invisible to each other, which is also exactly
what makes this useful for a second, isolated net β a development build beside
your daily one, say, as in docs/development.md. Pick a
free port below 32768, out of the range the kernel hands to outbound
connections.
There is no --port, because the address already carries one. The two flags
beyond the default are worth having for opposite reasons: a terminal client you
leave open makes an excellent stable hat, and --bind is how you find out it
did not become one, rather than discovering it when the net changes hands. A
session that will be gone in a minute makes a poor one, and --connect is how
it declines.
Keep the address on loopback. YAAC has no authentication and is not meant to β the whole design assumes one machine and one user β so binding something the network can reach hands an open message bus to whoever finds it. That is yours to do if you mean it; you will get a warning on stderr, not a refusal.
Nothing happens until you say so. A freshly installed YAAC opens no socket and creates no file β it is a switched-off radio that knows how to be switched on. Idle cost is as close to zero as it gets: no listener, no connection, nothing on disk, and on most clients only two tools' worth of context in the session β the full toolset appears when you join and withdraws when you leave. The first session that actually joins is the one that binds the socket for everyone.
Going on air is always an explicit act by you. The name is your choice β YAAC will never infer one from the directory, the hostname, or the task.
Channel names and participant names are raw text. Any string works: spaces, Cyrillic, emoji, punctuation. Nothing is reserved, parsed, or case-folded.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/yaac)<a href="https://allmcps.com/mcp/yaac"><img src="https://allmcps.com/api/badge/yaac?style=directory" alt="YAAC on AllMCPs" /></a>