Skip to main content

A tiny cross-machine relay MCP server: a shared mailbox so coding agents on different machines can message each other.

Project description

crosstalk-mcp (Python edition)

A tiny cross-machine relay MCP server — a shared "mailbox" two coding agents connect to so they can message each other and run a back-and-forth until they're done. Unlike file- or SQLite-on-one-box approaches, this relay speaks streamable-HTTP MCP over the network, so the two agents can live on different machines (same LAN, a VPN, or a tunnel).

This is the Python (FastMCP) edition. A functionally equivalent Java edition lives on the java folder — pick whichever fits your stack.

  • MCP (for agents): streamable HTTP at POST /mcp — tools post_message, get_messages, list_channels.
  • REST mirror (for humans/tools): GET /api/channels, GET|POST /api/channels/{channel}/messages.
  • Storage: SQLite file (relay.db), durable across restarts.
  • Auth: optional shared bearer token (RELAY_TOKEN) — off by default, strongly recommended whenever the relay is reachable beyond localhost.

Quick start

Option A — Docker (recommended)

docker build -t crosstalk-mcp .
docker run -d --name relay -p 8765:8765 \
  -e RELAY_TOKEN=$(openssl rand -hex 16) \
  -v relay-data:/data \
  crosstalk-mcp

Option B — Python (3.10+)

pip install -r requirements.txt          # or: pip install .
RELAY_TOKEN=your-shared-secret PORT=8765 python crosstalk_mcp.py
# (after `pip install .` you can also run the console script: crosstalk-mcp)

The host must allow inbound TCP on the port (default 8765) for other machines to connect.

Connect your agents (run on each machine)

# same machine:
claude mcp add --transport http crosstalk http://localhost:8765/mcp \
  --header "Authorization: Bearer your-shared-secret"

# another machine (use the host's reachable IP/hostname):
claude mcp add --transport http crosstalk http://<HOST>:8765/mcp \
  --header "Authorization: Bearer your-shared-secret"

(Drop the --header if you run without RELAY_TOKEN.) Allowlist the crosstalk tools on each side so polling doesn't prompt for permission every time.

Tools

Tool Args Returns
post_message channel, sender, type, body {id, channel, created_at}
get_messages channel, since_id (0 = all) messages with id > since_id
list_channels channels with counts + last activity

Pick any channel name; both sides use the same one. type is a free-text label (NOTE, QUESTION, ANSWER, DONE, …) you define for your workflow.

How two agents converse

  1. Agent A: post_message(channel, "agent-a", "QUESTION", "...").
  2. Agent B polls get_messages(channel, since_id) (track the highest id seen), replies with post_message(...).
  3. Repeat until both post a DONE. Drive it turn-by-turn ("check the relay and reply") or let each side poll on a loop.

Security

  • The relay moves data between machines. Set RELAY_TOKEN for anything beyond localhost, and prefer HTTPS (terminate TLS at a reverse proxy / tunnel) when exposed publicly.
  • Treat a channel as a shared bus: don't post credentials, secrets, or PII.
  • The token is a single shared secret; rotate it if it leaks.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crosstalk_mcp-1.0.0.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

crosstalk_mcp-1.0.0-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

Details for the file crosstalk_mcp-1.0.0.tar.gz.

File metadata

  • Download URL: crosstalk_mcp-1.0.0.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for crosstalk_mcp-1.0.0.tar.gz
Algorithm Hash digest
SHA256 194fcac0c87d10a0e2eba1ab9369d3adf7e7e9173268779ecfa1e1b964e8f8eb
MD5 aed2be21257230e97029d19aee7e919d
BLAKE2b-256 6feaa284d4e2ee448033d8de0a53abb2876e696437846a1f319ab12e7e00cb9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for crosstalk_mcp-1.0.0.tar.gz:

Publisher: release.yml on Humbre-tonto/crosstalk-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file crosstalk_mcp-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: crosstalk_mcp-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for crosstalk_mcp-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8e6aa143b43f1cf78f190a537f0c8be2dbcaffc045169e556a2bc62a9523801b
MD5 f649d541baf6959ca3b6898520420105
BLAKE2b-256 15015842b8a8bb55c81d00bfb6be8f8db23973efa5aa88f3d4a19bdfb9e87f2d

See more details on using hashes here.

Provenance

The following attestation bundles were made for crosstalk_mcp-1.0.0-py3-none-any.whl:

Publisher: release.yml on Humbre-tonto/crosstalk-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page