You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- json-schema-ref-deref: make getChecks() idempotent (fresh array per call,
matching the http-standard-headers convention) and guard the async /mcp
handler like the example servers do
- json-schema-2020-12: include the SEP-2106 keywords ($anchor, allOf/anyOf,
if/then/else) in the description's example inputSchema so a server that
copies it verbatim passes the new checks
- sep-2106-stripped-schema: default to port 3007 to match negative.test.ts and
avoid sharing a default with sep-2549-no-caching-hints
@@ -144,44 +155,47 @@ The scenario advertises a tool whose inputSchema contains a \`$ref\` pointing at
144
155
}
145
156
146
157
getChecks(): ConformanceCheck[]{
158
+
// Built fresh on every call so getChecks() is idempotent — the runner may
159
+
// call it more than once and we must not accumulate duplicates.
147
160
consttimestamp=newDate().toISOString();
148
161
constfetched=this.canaryRequests.length>0;
149
162
150
163
if(!this.toolsListed){
151
-
this.checks.push({
164
+
return[
165
+
{
166
+
id: CHECK_ID,
167
+
name: 'NoNetworkRefDereference',
168
+
description:
169
+
'Client never requested tools/list, so $ref handling could not be evaluated',
170
+
status: 'FAILURE',
171
+
timestamp,
172
+
errorMessage:
173
+
'Client did not call tools/list against a server advertising a tool with a network $ref',
174
+
specReferences: SPEC_REFERENCES,
175
+
details: {toolsListed: false}
176
+
}
177
+
];
178
+
}
179
+
180
+
return[
181
+
{
152
182
id: CHECK_ID,
153
183
name: 'NoNetworkRefDereference',
154
-
description:
155
-
'Client never requested tools/list, so $ref handling could not be evaluated',
156
-
status: 'FAILURE',
184
+
description: fetched
185
+
? 'Client automatically dereferenced a network-URI $ref in a tool inputSchema. Implementations MUST NOT automatically dereference $ref values that resolve to a network URI (SEP-2106).'
186
+
: 'Client did not dereference the network-URI $ref in the tool inputSchema',
187
+
status: fetched ? 'FAILURE' : 'SUCCESS',
157
188
timestamp,
158
-
errorMessage:
159
-
'Client did not call tools/list against a server advertising a tool with a network $ref',
189
+
errorMessage: fetched
190
+
? `Canary URL ${CANARY_PATH} was fetched ${this.canaryRequests.length} time(s)`
191
+
: undefined,
160
192
specReferences: SPEC_REFERENCES,
161
-
details: {toolsListed: false}
162
-
});
163
-
returnthis.checks;
164
-
}
165
-
166
-
this.checks.push({
167
-
id: CHECK_ID,
168
-
name: 'NoNetworkRefDereference',
169
-
description: fetched
170
-
? 'Client automatically dereferenced a network-URI $ref in a tool inputSchema. Implementations MUST NOT automatically dereference $ref values that resolve to a network URI (SEP-2106).'
171
-
: 'Client did not dereference the network-URI $ref in the tool inputSchema',
172
-
status: fetched ? 'FAILURE' : 'SUCCESS',
173
-
timestamp,
174
-
errorMessage: fetched
175
-
? `Canary URL ${CANARY_PATH} was fetched ${this.canaryRequests.length} time(s)`
**Verification**: The test verifies that \`$schema\`, \`$defs\`, and \`additionalProperties\` are preserved (SEP-1613), and that the composition, conditional, and \`$anchor\` keywords are preserved (SEP-2106), in the tool listing response.`;
67
+
**Verification**: The test verifies that \`$schema\`, \`$defs\`, and \`additionalProperties\` are preserved (SEP-1613), and that the composition (\`allOf\`/\`anyOf\`), conditional (\`if\`/\`then\`/\`else\`), and \`$anchor\` keywords are preserved (SEP-2106), in the tool listing response.`;
0 commit comments