Every MCP tool declares its own contract, and the README links back to the directory - #13
Merged
Merged
Conversation
Glama publishes a score chip and a card badge for a listed server, and both only exist once there is a release. The header carries the chip under the tagline; the card closes the Model Context Protocol section, where the server it describes is already documented. Both SVGs were checked before being written in: HTTP 200, image/svg+xml. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WFQ2juk8bVSQQ8QivjopBR
… its reply All 157 input properties across the 30 tools carry a description, up from three. Closed protocol vocabularies declare an enum — card status, type, priority and effort, frozen in config/defaults.ts. Areas, document kinds, changelog types and memory statuses go through validateStringList, which accepts any string, so those stay open and point at project_workspace instead of pretending to be closed. Nineteen properties declare the default their implementation already had. Every tool declares an outputSchema, up from none. The shapes were validated against live replies rather than read off the code, and they are open objects on purpose: toolResult appends a truncated marker past maxToolResultBytes, so a closed schema would invalidate the server's own degradation path. project_card_transition took status as a free string while eight values are frozen in CARD_STATUSES, and its description named a constraint it never stated. That is what a caller pays for whether or not anyone is scoring it. Typing the required parameter of schema() and output() as string[] instead of inheriting never[] took tools.ts from 34 strictNullChecks errors to zero, so the baseline is re-recorded. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WFQ2juk8bVSQQ8QivjopBR
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Glama graded the MCP surface
C— 3.2/5 across all 30 tools, lowest 2.4. Its per-dimension breakdown put the deficit in Parameters, Completeness and Usage Guidelines, while Conciseness scored highest of the six. So nothing here pads prose; what was missing was declared structure.What changed
descriptionoutputSchemadefaultenumoutputSchemawas not read off the code: all 11 read tools were called against this workspace and their livestructuredContentvalidated against the declared shape. 11/11 conform.Two judgement calls
Enums only where the vocabulary is genuinely closed. Card
status,type,priorityandeffortcome from frozen constants inconfig/defaults.ts. Areas, document kinds, changelog types and memory statuses go throughvalidateStringList, which accepts any string — an enum there would refuse values a project has legitimately configured. Those point atproject_workspaceinstead.project_card_releaseis narrower than the protocol.releasedStatus()keeps the current status — a card just moved todoneis not demoted by releasing it — and onlydoingbecomesnext.doingis refused as an explicit target, so it is omitted from the enum rather than declared and wrong.The defect underneath the grade
project_card_transitionacceptedstatusas a free string while eight values are frozen inCARD_STATUSES, and its description named a constraint — "while enforcing claim and verification semantics" — that it never stated. A caller had to guess the vocabulary. It scored 1/5 on Completeness because it earned it.Side effect
Typing the
requiredparameter ofschema()andoutput()asstring[]instead of inheritingnever[]tooktools.tsfrom 34 strictNullChecks errors to zero. The ratchet asked for a new baseline; repo total is 554 across 56 files, none new.Verification
test— 269/269 passstrict— held, none newdoctor— 0 errors, 0 warningsCI runs Windows, which is why
T-0146is inreviewrather thandone.Also here
T-0147filed as discovered work:buildAgentContextreturnstruncated: booleanandtoolResultoverwrites it with{ records: N }pastmaxToolResultBytes. Two meanings, one key. Not reproduced — it needs a bundle over 512 KB — and the card says so instead of assuming a fix.🤖 Generated with Claude Code
https://claude.ai/code/session_01WFQ2juk8bVSQQ8QivjopBR