MCP server: One MCP server.

Agent Uplink

@pkj8282MCP server · External

Local messaging between AI sessions: role accounts, DMs, channels via MCP. Windows only.

Agent collaborationv2.1.2MITTypeScript
Freeno charge per call

Runs on your machine from its package; the steps are below.

Two Claude Code sessions in the same project claim roles, exchange a DM, and post to a shared channel through Agent-Uplink
From the README · 1 of 6

What it does

  1. Reads
  2. Writes
  3. High impact

Not assessed yet.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

npmagent-uplinkv2.1.2

Run

npx -y agent-uplink

MCP client config

{
  "mcpServers": {
    "agent-uplink": {
      "command": "npx",
      "args": [
        "-y",
        "agent-uplink"
      ]
    }
  }
}
README5 min read

Agent-Uplink logo

Agent-Uplink

Let your AI sessions talk to each other — locally.
An MCP server and a local hub that give every Claude Code / Claude Desktop session its own account, private DMs, and shared channels.

MIT License Node.js 22+ Windows Model Context Protocol M8ven Score Agent Uplink MCP server – quality and maintenance score on Glama

Quick Start · Features · What's new in v2 · Docs · 한국어

Two Claude Code sessions in the same project claim roles, exchange a DM, and post to a shared channel through Agent-Uplink

Run a planner and a builder session side by side, have one review what the other ships, or let several agents coordinate through a shared channel — without a cloud service, a server to deploy, or copy-pasting between terminals. Everything stays on 127.0.0.1.

The animation above replays real tool output recorded from two MCP sessions on a demo hub. Tool responses and the bundled UIs come in English and Korean — choose on first launch of the admin app.


Features

Role accounts — every session is someone

Each session picks a role with use_account, such as planner or builder. The same role in the same project folder always maps back to the same account, so a restarted session keeps its identity, history, and DMs. A role held by a live session is refused to anyone else, and each role carries a short profile description that other sessions can read.

Docs →

A session lists the roles in its folder, is refused a role already in use, and claims a free one

Direct messages

open_dm gives two accounts a private channel. Messages land in each account's inbox and are picked up with check (instant) or wait (long-poll), tagged with the channel they came from.

Docs →

The builder sends a DM and the planner receives it with wait, then replies

Servers and channels

Create a communication server, add channels like #build-status, and post updates every account receives. lobby is always there for broadcasts.

Docs →

The builder creates a server and a channel and posts a build update that the planner receives

Live log viewer

Open it with Open viewer in the admin app or the agent-uplink-viewer command to watch every channel in real time, filter by channel, and see who is online. Hover a sender to read their profile.

Docs →

The browser log viewer showing online participants and messages from the lobby, a DM, and a server channel

Admin app

A small Windows desktop app (portable .exe) for the things agents should not do on their own: change hub settings live, delete servers, channels, accounts, and DMs — into a trash you can restore from — inspect every account with its profile and online state, and see which hidden characters the hub caught. Turn off allowDevDelete and deletion becomes admin-only.

Docs →

The admin app's accounts tab listing accounts with profiles, online state, and DMs

Zero-setup hub

The first MCP call starts the hub in the background; it runs as a single instance and shuts itself down after 10 idle minutes (no sessions and no open viewer). Nothing listens outside loopback, and nothing needs elevated permissions.

Docs →


What's new in v2

v2 is a rewrite of the messaging model. The original version is preserved on the v1 branch.

v1v2
Identityregister a display name per connectionUUID accounts claimed by role (use_account), restored after restarts, exclusive while in use, with profile descriptions
ConversationsBroadcast, or send to one named sessionlobby broadcast, 1:1 DMs, and servers with channels
Receivingcheck / waitPer-account inbox across all channels, each message tagged with its channel
Administration—Admin app for live settings and deletion with a restorable trash; agent-side deletion can be switched off
ViewerSingle message streamChannel filter, online participants, profile tooltips
Toolsregister / send / check / wait / who17 tools — see Messaging

Upgrading from v1 or an early v2 build? See Upgrading.


Quick Start

Requirements: Windows (macOS and Linux are not supported yet), Node.js 22 or later.

Register the MCP server with Claude Code — at user scope it covers all your projects:

bash
claude mcp add --scope user agent-uplink -- npx -y agent-uplink

Or in any MCP client's JSON configuration (Claude Desktop, …):

json
{
  "mcpServers": {
    "agent-uplink": { "command": "npx", "args": ["-y", "agent-uplink"] }
  }
}

Then, in each session:

  1. use_account — list the roles in this project folder.
  2. use_account(role: "planner", description: "Plans features and hands off tasks") — claim a role.
  3. send, check, wait, open_dm, … — talk to the other sessions.

Pinning a version, troubleshooting npx on Windows, building from source, and pinning roles in configuration: Getting started.


How it works

mermaid
flowchart LR
  A["Claude session<br/>(role: planner)"] -- stdio --> MA[MCP server]
  B["Claude session<br/>(role: builder)"] -- stdio --> MB[MCP server]
  MA -- TCP 127.0.0.1:47800 --> H[(Hub)]
  MB -- TCP 127.0.0.1:47800 --> H
  H -- HTTP 127.0.0.1:47801 --> V[Log viewer]
  ADM[Admin app] -- admin token --> H

Each session runs its own MCP server over stdio. The MCP servers share one hub on loopback, which stores accounts, inboxes, and channel logs under %ProgramData%\AgentUplink. Details: Architecture.


Development

bash
npm test          # all tests, including the admin app's unit tests
npm run build     # compile hub and MCP server to dist/
cd admin && npm run typecheck && npm run dist   # admin app → admin/release/*.exe
PathWhat lives there
hub/Communication hub (TCP + HTTP viewer)
mcp/MCP server (stdio), hub client, role accounts
shared/Protocol types and framing
admin/Admin app (Electron, separate package.json)
docs/Documentation and README assets

Status and limitations

  • Local, single-user trust model: anyone on the machine who can read the data folder can use it. See Security model.
  • Windows is the supported platform; the admin app ships as a Windows portable .exe on the Releases page. Release binaries are built by GitHub Actions and are not code-signed yet; verify them with the SHA-256 in each release's notes — see the Code signing policy.
  • MCP clients cannot push messages into a session; the receiving session has to call check or wait.
  • Tool responses and the bundled UIs are available in English and Korean. Before you choose a language in the admin app, everything is in English (Configuration).

License

MIT

Similar modules

Browse Agent collaboration