ADR-0000: Project Naming and Scope Confirmation
Status · proposed · Date · 2026-07-05 · Deciders · Joe Stump
Context and Problem Statement
Before the specs solidify around a name, two things need pinning down: what this project is called, and what is in and out of scope. switchboard began under the placeholder name webhook-mcp; this ADR settles the permanent name and ratifies the scope the rest of the documents assume. What name best captures what this system is — a hub that receives inbound lines from many sources and patches each one through to where it needs to go — while staying legible in the StumpCloud org?
Decision Drivers
- Name the metaphor, not the mechanism. This system receives inbound connections (webhooks over HTTP, events off a Redis queue) from many sources, verifies them, and patches each through to its destinations (MCP clients, the web UI). That is a switchboard. A name that captures the metaphor communicates the whole architecture at a glance.
- Accurate and memorable. The best name is both. A purely descriptive name (
webhook-mcp) is legible but forgettable; a purely evocative name risks hiding what the thing does. "Switchboard" is the rare name that is both precise and vivid. - The interface is not the identity. MCP is one of the surfaces this exposes (the other is a web UI), and the ingestion side speaks HTTP webhooks and a Redis queue. Baking
-mcporwebhookinto the name overweights one facet of a multi-surface system. - Discoverability. Short, lowercase, unambiguous — typed into
git clone, MCP client config, and search. - Scope legibility. The naming ADR is the natural place to also ratify the MVP/session boundary so it is not silently widened later.
- Reversibility. A rename is cheap now (fresh repo, no external consumers) and expensive later. If a rename happens, it happens here.
Considered Options
- Option 1 —
webhook-mcp(keep the placeholder). - Option 2 —
switchboard(name the metaphor). - Option 3 — a hyphenated descriptive name (
webhook-receiver-mcp,inbound-webhooks-mcp).
Decision Outcome
Chosen option: "Option 2 — switchboard." An operator switchboard is precisely this system's job: many incoming lines arrive at one place, an operator verifies each caller, and patches the line through to its destination. Here the "lines" are webhooks and queue events, the "operator" is the per-provider verification and normalization layer (ADR-0003), and the "destinations" are the MCP tools/resources (ADR-0005) and the live web UI. The name is both accurate and memorable, which is rare enough to be worth choosing over the literal-but-forgettable placeholder.
This reverses the instinct to default to the <domain>-mcp convention (paperless-mcp): that convention optimizes for legibility, but switchboard delivers legibility through metaphor while also being distinctive. The -mcp suffix is dropped deliberately — MCP is one interface this project exposes, not its identity (it also serves a web UI and consumes a Redis queue). The descriptive hyphenated names (Option 3) are longer without adding information the metaphor doesn't already carry.
The metaphor also gives the project a coherent visual identity: the UI palette and docs-site theme draw on the era of manual telephone exchanges — brass, bakelite, operator-cream, oxblood, and patch-cable tones (see ADR-0001 and static/tokens.css).
Scope confirmation
This ADR also ratifies the scope the rest of the documents assume:
In scope for the MVP:
- Receive and persist events from at least two signed providers end-to-end (GitHub + one other) to prove the abstraction.
- Prove all three trust models: one signed provider, the generic/unverified endpoint (Docker Hub routed through it), and the Redis queue consumer (ADR-0003).
- MCP tool surface exposing history / detail / replay (ADR-0005).
- A local-only, 4-screen web UI updating live via SSE.
- PostgreSQL persistence and retention (ADR-0002).
Out of scope for the MVP:
- Outbound webhook delivery/retries (the
replaytool re-emits on demand; it is not a delivery scheduler). - Multi-user auth / RBAC on the web UI — localhost-bound, behind Caddy
forward_authif ever exposed (ADR-0001). - Standing up PostgreSQL's own HA/replication — the app tier can run multiple instances against one PostgreSQL (ADR-0002), but operating Postgres in HA is deferred.
- Provider-side webhook management (registering webhooks via provider APIs).
The canonical design record is the ADRs (docs/adrs/) and specs (docs/openspec/specs/) under docs/.
Application code is written fresh from these documents; there is none yet beyond placeholder package files under the service tree.
Consequences
- Good, because the name encodes the architecture — a reader who knows what a switchboard is already understands the system's shape.
- Good, because it is distinctive and memorable while remaining accurate, and it seeds a coherent visual identity (the throwback theme).
- Good, because dropping
-mcpkeeps the name honest about a multi-surface system (MCP + web UI + Redis). - Neutral, because it breaks the
<domain>-mcpnaming convention used elsewhere in the org — an acceptable trade for a name this apt. - Bad, because "switchboard" is a common word and could collide with other projects/namespaces — mitigated by it living under the
joestump/namespace and being an internal tool. - Bad, because a reader unfamiliar with manual telephone exchanges may not get the metaphor immediately — mitigated by the README's one-line framing.
Confirmation
- The repo is
joestump/switchboard; the docs site publishes to GitHub Pages. - Every subsequent ADR and spec refers to the project as
switchboardand cites the scope statement above. - The MCP server name, the resource URI scheme (
switchboard://), and the distribution name are allswitchboard. - No application code beyond placeholder package files exists yet; it is written fresh from these documents.
Pros and Cons of the Options
Option 1: webhook-mcp (rejected)
- Good, because maximally descriptive and matches the
<domain>-mcpconvention. - Good, because self-documenting at a glance.
- Bad, because forgettable, and it overweights the MCP interface while underselling the web UI and the Redis ingestion path.
Option 2: switchboard (chosen)
- Good, because it names the metaphor — receive many lines, verify, patch each through — which is the architecture.
- Good, because accurate and memorable at once, and it grounds a distinctive visual identity.
- Good, because interface-agnostic: it does not privilege MCP over the UI or HTTP over the queue.
- Neutral, because it departs from the
-mcpconvention. - Bad, because it is a common word (namespace-collision risk) — mitigated by the
joestump/namespace.
Option 3: webhook-receiver-mcp / inbound-webhooks-mcp (rejected)
- Good, because unambiguous that it receives.
- Bad, because longer without adding information, and still interface-biased toward webhooks/MCP.
Architecture Diagram
More Information
- The
webhook-mcpworking name is from the project brief §1; the "rename if a better name lands during ADR-0000" instruction is honored here by choosingswitchboard. - Scope statement consolidates brief §2 (goals/non-goals) and the §5/§13 "docs-only this session" instruction.
- Visual identity (throwback switchboard-era palette): ADR-0001,
static/tokens.css. - Related decisions: ADR-0001, ADR-0003, ADR-0005.