feat(commands): add /mcp, the per-server detail /mcps has no room for #1001
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/sirens-echo!1001
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/mcp-singular-command"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
You asked for a singular
/mcpthat puts server detail in a thread, and whether/mcpsshould thread too. This adds the singular and argues against the threading, for a reason that only shows up in the declaration.Why neither threads
/mcpsis already ephemeral.Ephemeral: truein itsCommandDefinition, so it answers the caller alone and nobody else in the channel sees it.That decides the threading question, because
threadForReplyhangs a thread off a real channel message (MessageThreadStartComplex(channelID, message.ID, …)) and an ephemeral interaction response is not one. Threading either command means making the roster public first. So it is not a rendering change, it is a change to who may read the answer, and it would trade a private diagnostic for a channel artifact plus a nesting fallback (the code already refuses nesting) plus extra API calls inside the three-second interaction deadline.Length already has an answer:
boundMCPRostercuts to fit and says it cut.If you want a durable shareable record rather than a private read, that is a real want and threading serves it. It is a different decision from this one, and I have not made it here.
What
/mcp <server>addsThe half an index can never carry: what each tool does.
/mcpsgives names only, and a description per tool is exactly what does not fit in a list of every server.choices, not a pattern. The doctrine indocs/sirens-echo-commands.mdsays a value naming a thing takes the tightest bound available, and the roster's own stability note records that every entry is fixed at image build. So the set is closed and Discord's picker can offer it.JobCommands, so registration and dispatch read the same set. A published choice that outlived its roster is refused at dispatch rather than trusted./mcp, rather than a command whose only required argument names nothing a caller could pick.Validatealso now refuses a required string closed to an empty choice set, which is that same mistake made a different way.SIRENS_ECHO_MCP_TOOL_SUMMARY_RUNES(90).n tools/no tools/did not answer this turn) preserved.Why this is worth doing now
Dowel has 11 configured servers, and #932/#943 put its tool surface around 86 tools against
mcpsReplyBudgetof 1800 characters. My arithmetic says the roster renders around 1900, so/mcpsis probably already dropping a server behind the truncation notice on that lane. That is an estimate from counting the roster, not a measurement:sirens_echo.commandsdoes not exist as a metric yet, so no invocation has been recorded anywhere I can read.One thing to look at in review
docs/sirens-echo-commands.mdwas at 7958 of its 8000-character cap, so there was room for about 40 characters of new documentation. Adding a 41st page is not available either: the docs count is at 40 of 40, and the hook says splitting to clear a size cap "trades one violation for another."So I merged the
/mcpssection into one covering both commands and compressed it to fit. Every fact in the original survives (what it reads, the three states, no addresses, ephemeral, the job guard, the truncation notice) and the wording is tighter. Nothing outside that section was touched. Worth a read as prose rather than as a diff, since compression is where meaning goes missing.The underlying issue is that this page is full, and the next command to be documented hits the same wall harder. Not fixed here.
Verification
just gatepasses: build, policy-check, vet, test, test-skips, pre-commit.go test -race ./...clean.Seven new tests: the singular names what each tool does and does not leak another server's, a verbose description cannot spend the whole reply, a multi-line description is flattened, a silent server stays distinct from an empty one, the argument is closed to the roster and binds accordingly, no roster publishes no command, and the registered form carries its choices to Discord.
Not exercised against Discord. Nobody has invoked any slash command on any lane yet (#988), so this is the same untested surface as the rest of the command set, one command wider.