feat(sdk): metadata statiques contributes.mcpServers[].tools — #296 (type IdeAPluginMcpToolMetadata {name exact non vide, description optionnelle non vide} exporté public; validation manifest: tools optionnel, noms uniques par serveur — metadata d'affichage pour l'UI d'attribution de capacités, ne remplace ni ne cache MCP tools/list et n'enregistre rien; scripts/check-manifest-tools.mjs + npm run test:manifest intégré à check: optionnel/valide/doublon rejeté; doc manifest.md: exemple unity_get_scene/run_tests + règles; QA verte reconfirmée par Git: npm run check)
This commit is contained in:
38
scripts/check-manifest-tools.mjs
Normal file
38
scripts/check-manifest-tools.mjs
Normal file
@ -0,0 +1,38 @@
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
import { validatePluginManifest } from "../dist/index.js";
|
||||
|
||||
const base = {
|
||||
ideaPluginManifestVersion: 1,
|
||||
id: "dev.example.tools",
|
||||
displayName: "Tools",
|
||||
version: "1.0.0",
|
||||
main: "dist/index.js",
|
||||
trustLevel: "full",
|
||||
capabilities: ["mcp"],
|
||||
contributes: {
|
||||
mcpServers: [
|
||||
{
|
||||
id: "server",
|
||||
displayName: "Server",
|
||||
command: "bin/server",
|
||||
transport: "stdio"
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
assert.equal(validatePluginManifest(base).success, true, "tools metadata remains optional");
|
||||
|
||||
const withTools = structuredClone(base);
|
||||
withTools.contributes.mcpServers[0].tools = [
|
||||
{ name: "read_scene", description: "Read the active scene." },
|
||||
{ name: "run_tests" }
|
||||
];
|
||||
assert.equal(validatePluginManifest(withTools).success, true, "valid tools metadata is accepted");
|
||||
|
||||
const duplicate = structuredClone(withTools);
|
||||
duplicate.contributes.mcpServers[0].tools.push({ name: "read_scene" });
|
||||
const duplicateResult = validatePluginManifest(duplicate);
|
||||
assert.equal(duplicateResult.success, false, "duplicate tool metadata is rejected");
|
||||
assert.ok(duplicateResult.errors.some((error) => error.includes("must be unique")));
|
||||
Reference in New Issue
Block a user