agent-mcp-host

One-origin MCP host for the agent-* CLI family

Language
Go
Version
0.3.0
License
PolyForm Perimeter 1.0.0
Category
CLI Tool

An MCP host that serves the whole agent-* CLI family from one machine, behind one domain, with one OAuth authorization server and a separate login per tool. Each family CLI keeps being a full MCP server in its own binary — the host mounts it behind a path rather than re-implementing it, owning only the shared front door, token minting, and the unified browser-facing pairing and enrollment pages. A person adds one Claude connector per tool; every call thereafter carries their identity.

Features

01

One origin for the whole family — every mounted agent-* CLI's MCP tools served from one domain, e.g. a single Tailscale funnel

02

One connector per tool, not one merged surface — /slack/mcp and /lin/mcp stay isolated, independently versioned and authorized

03

Single OAuth authorization server — the host owns pairing codes, named principals, token minting, and the human-facing pages

04

Delegate-mode tools — each mounted CLI keeps being a full MCP server, validating host-minted tokens with no AS of its own

05

Per-tool audiences — a token minted for the Slack mount is useless at the Lin mount; bindings are namespaced <tool>:<key>=<value>

06

Login once, grow into tools — the pairing code sets an AS session; adding tool N enrolls only tool N and keeps tools 1..N-1

07

Ed25519 AS/RS split — tools receive only the verify key at spawn, so a delegate can validate tokens but never mint them

08

Mounts by exec, not linking — the host discovers each tool via mcp schema and bridges enrollment to its auth add; no tool code is linked

09

Family-wide revocation — pair remove drops a person's session, pairing code, and every per-tool refresh token at once

Install

Homebrew

>_
$ brew install shhac/tap/agent-mcp-host

AI Agent Skill

>_
$ npx skills add shhac/agent-skills --skill agent-mcp-host --global

GitHub Release (macOS)

>_
$ curl -L https://github.com/shhac/agent-mcp-host/releases/latest/download/agent-mcp-host-darwin-arm64.tar.gz | tar xz

Go Install

>_
$ go install github.com/shhac/agent-mcp-host/cmd/agent-mcp-host@latest

Build from Source

>_
$ git clone https://github.com/shhac/agent-mcp-host.git && cd agent-mcp-host && make build

Getting Started

agent-mcp-host is the operator's front door: one process runs the OAuth authorization server and reverse proxy, spawns each mounted family CLI as a loopback MCP server in delegate mode, and renders the shared pairing and enrollment pages. The host's signing key and pairing store live in the OS keychain.

01 · Serve the family behind one origin

>_
$ agent-mcp-host serve --public-url https://hub.tailnet.example --mount slack=agent-slack --mount lin=lin

Spawns each tool's MCP server on loopback and reverse-proxies /slack/mcp and /lin/mcp behind the shared front door; --public-url is the OAuth issuer.

02 · Pair a person once, family-wide

>_
$ agent-mcp-host pair add alice --bind slack:workspace=acme --bind lin:workspace=letsdothis

Mints one pairing code for alice. Namespaced bindings name the credential set each tool acts with; tokens carry only that tool's claims.

03 · Add one Claude connector per tool

>_
$ https://hub.tailnet.example/slack/mcp

The person enters their pairing code once; connecting a second tool reuses the session and prompts only for that tool's credentials.

04 · Revoke in one place

>_
$ agent-mcp-host pair remove alice

Drops the AS session, the pairing code, and every per-tool refresh token at once.

Usage

>_ Mount two family tools behind one funnel
$ agent-mcp-host serve --public-url https://hub.tailnet.example --mount slack=agent-slack --mount lin=lin
>_ Mint a pairing code with per-tool bindings
$ agent-mcp-host pair add alice --bind slack:workspace=acme
>_ List named principals and their bindings
$ agent-mcp-host pair list
>_ Re-print a principal's pairing code
$ agent-mcp-host pair show alice
>_ Issue a fresh code, preserving bindings
$ agent-mcp-host pair rotate alice
>_ Revoke a person across every tool
$ agent-mcp-host pair remove alice