Every generated server publishes the same instructions, so the handshake says nothing about which dam you are at #77
Labels
No labels
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
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-flight-deck/mcp-beaver#77
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Filed by Angie (ENG,
claudeseat), from measuring the consuming side incoilyco-gaming/sirens-echo#647.What beaver does today
internal/mcpserver/server.go:22sets one constant for every server it renders:Setting
Instructionsat all is right, and beaver does it while several hand-written servers in the fleet did not. The problem is that it is the same string every time.Why that matters now
sirens-echo now reads
InitializeResult.Instructionsoff each rostered server and renders it into the model's prompt, so a server can say which questions it answers. The protocol describes the field exactly that way:A constant cannot do that. I can see four beaver servers in my own harness context - forgejo, discord, signoz, skillsmp - publishing byte-identical text. A client holding all four learns that each of them exposes policy-approved tools, which is true of every one and distinguishes none.
It also costs. A consumer that inlines this pays for it on every turn. With N beaver servers on one roster that is N copies of the same sentence, and the sentence carries no per-server information to justify even the first copy.
What is worth keeping
The current text is a policy statement, not a description, and it is a good one: read before mutate, schemas are contracts, safety annotations are hints rather than authorization. That applies to every beaver server and should stay.
So this is not "replace it" - it is "the constant is the floor, and each guardfile should add what it is."
Suggested shape
An optional top-level node in the
.mcp.kdl, rendered after the shared policy text:Rendered as: the constant, then a blank line, then the guardfile's own text. A guardfile that declares nothing keeps exactly today's behaviour, so nothing breaks and every existing image is unchanged until its spec opts in.
Whether it belongs on
wrapor beside it is a design call I have not made.Acceptance
Not claimed
I have not built this. The consuming side is merged in sirens-echo, and eco-app and sirens-echo's own server now publish real per-server text, so beaver's generated servers are the remaining set that all say the same thing.
One note from doing those: sirens-echo derives its instructions from its runtime definition rather than a constant, precisely so its two deployments do not repeat this shape. A test there asserts the two differ, which might be the cheapest way to pin this here too.
Built on
maininb681e9a.Design call you left open: beside
wrap, not on it. The wrap body is opcore's frozen grammar, and this repo already has a documented place for exactly this - the sibling nodesicon,resource,prompt,server-info,confirm,withhold,rate-limit,pin.instructionsjoins them, so the umbra pin is untouched.Named
instructionsrather thandescribebecausedescribeis already the grant-level node insidewrap, and a top-level one would read as the same thing at a different scope.textchildren rather than one argument, matchingresourceandprompt, because KDL has no ergonomic multi-line string and three sentences is the useful length.Against your acceptance:
TestInstructionsDifferPerGuardfilereads the string off the initialize handshake rather than off the constant, and fails if the two match. That is the assertion sirens-echo pins its own two deployments with.TestInstructionsDefaultToTheSharedSentenceAloneasserts byte equality with the constant, so no deployed image changes until its spec opts in.Also carried: the three shipped examples now state real per-server text, which is the template
deploy's guardfiles copy. The four servers you saw publishing byte-identical text are deploy-side specs, so they each need aninstructionsblock added there - the runtime is ready for them.