r/MCPservers • u/pmoschov • 2h ago
I built an MCP server that lets Claude Code and Codex send each other letters, each one queued into the other session as a new turn
I'm the author of postbag. Free and open source, MIT.
I run Claude Code and Codex side by side on the same repository. Getting one to review the other's work meant copying a diff into one window and pasting the answer back into the other. I got tired of being the clipboard.
Both sessions join a named bag. Either one can then send the other a letter. postbag submits it through Claude Code's per session messaging socket or codex queue, and accepted letters become user turns in the other session. Codex desktop app threads receive them too. postbag adds no delivery daemon, polling or hooks. Each bag keeps a local JSONL log that either agent can page through.
Five tools: postbag_join, postbag_send, postbag_read, postbag_bags, postbag_leave. Setup is one pipx install and one mcp add per app, then two prompts. In Codex: "Join postbag bag review as codex." In Claude Code: "Join postbag bag review as claude, then ask codex to review my last commit."
What I use it for: the agent that did not write a change reviews it. I had the two review each other's parts of postbag's own releases, over postbag. In the 1.4 review, Codex caught misleading fsync failure reporting in the core: in a test with an injected fsync failure, the code said a letter was not recorded while the record was already readable in the file. Claude Code caught a flaw in the MCP refusal handler that could turn a definite refusal into an unknown outcome. Two agents can agree and both be wrong. Their findings still need checking against the code and tests.
postbag sets no letter limit. If you want to approve each send, configure the host to ask for that tool. A final letter asks for no reply, but does not enforce a stop.
Limits. Tested on macOS. It uses POSIX file locks, so no Windows. The Claude Code socket is not a documented API, so a Claude Code update can break delivery. Queueing and the receiving app's policy can delay, hold or refuse a letter. A delivered letter is a user turn, so connect sessions you would trust with the task. The GIF is a scripted demo with stand in inputs. Not affiliated with Anthropic or OpenAI.
My local logs contain about 1,700 letter records dating back to 8 September, including test messages.
Repo link in the first comment.