fathyshalaby / fathyshalaby/multiplayer-cli

Should there be an MCP server? (and if so, which way should it point?)

Open
#10 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
0
Forks
0
Avg merge
1h 57m
Merged PRs (30d)
11

Description

Opening this as a question rather than a plan. I have deliberately **not** built it, because I am not sure the obvious version is the right one — and I would rather hear what people would actually use.

## What already exists

You can drive `mpx` from an agent today, three ways:

- **CLI** — any agent that can run a command can start a room
- **Claude Code plugin** — `/plugin marketplace add fathyshalaby/multiplayer-cli`
- **Gemini CLI extension** — adds `/share` and `/join`
- **VS Code / Cursor / Windsurf extension**

## The tempting idea

Every one of those agents speaks MCP. One MCP server would replace N bespoke integrations — Claude Code, Codex, Cursor, Windsurf, OpenCode, Gemini, all of it, one implementation.

## Why I stopped

**It inverts the product.** The whole point of this tool is that a room of humans gates what reaches the model. An MCP server exposes the room *to* the agent as tools — which makes the agent the one driving the thing that is supposed to be constraining it.

"The agent votes on whether to send its own prompt" is a strange sentence, and I do not think it becomes less strange with a good implementation.

## Two shapes it could take

**A. Narrow — the agent asks, the room answers.**

Only the direction that already fits the grain. The agent can see room state and raise a crossroads; it cannot propose, vote, or land anything.

```
room_state() → who is here, what is open, what the lanes are doing
ask_room(question, options[]) → blocks until the room ratifies one
```

This is roughly what the `ask_room` tool and `[[crossroads]]` already do inside a hosted session, lifted out so *any* MCP-speaking agent can use it — including one that is not the room's backend at all.

**B. Broad — the agent operates the room.**

`share`, `join`, `propose`, `vote`, `race`, `split`, `land`. Powerful, and genuinely useful for "set this up for me" automation. But it hands the agent the controls of its own gate, and I cannot yet describe a threat model where that is fine.

There may be a **C** where the server is scoped per-seat and the agent holds a seat with no vote — an observer that can ask. That is closer to A than B.

## What would actually help

If you have a use for this, please say **which one** and **what for**. Concretely:

1. Which agent are you in, and what would you want it to do that it cannot do today by running `mpx`?
2. If it could only *ask* the room and never act on it (shape A), would that still be worth having?
3. Is there a case for B that is not "convenience for the person who is already the host"?

👍 on the issue if you want one at all. Comment if you want a specific shape — that is the part I cannot guess.

## Non-goals for now

- Replacing the CLI. This is a CLI tool; MCP would be an additional door, not the main one.
- Replacing the plugin or the Gemini extension. Those teach an agent *when* to reach for a room, which is a different job from giving it buttons.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.