Files
youle_cocos/cocoscreator_projects/YouleNexus/extensions/cocos-mcp-server/scripts/batch-auto-knowledge-mcp.mjs
T
joywayerandClaude Opus 5 42bc0722b8 chore(mcp): 换用 cocos-mcp-server 扩展, .mcp.json 改 HTTP 直连
旧扩展 @iflow-mcp/harady-cocos-creator-mcp(164 个细粒度工具 + stdio-bridge
转发)整个删除, 换成 cocos-mcp-server v1.7.9(16 个聚合工具, 靠 action 分派)。

新扩展自身起 streamable-http 服务, 不再需要 stdio 桥, 故 .mcp.json 从
node + stdio-bridge.js 改为 { type: "http", url: "http://127.0.0.1:3000/mcp" }。
原配置指向的 client/stdio-bridge.js 已随旧扩展删除, MCP 因此加载失败。

服务器名保留 cocos-creator-mcp(而非 INSTALL.md 建议的 cocos-creator), 以免
打断 CLAUDE.md、cocos-mcp 技能与 settings.local.json 里的
mcp__cocos-creator-mcp__* 允许规则。

gitignore: 新扩展是商业付费产品(vberai), 非 npm 可重装, dist/sidecar/static
共约 16M 发行产物+加密载荷+平台二进制不入库; 顺带忽略 Claude Code 个人本地
配置与编辑器运行时端口文件。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 08:01:07 +08:00

95 lines
3.7 KiB
JavaScript

#!/usr/bin/env node
/**
* Batch auto_knowledge via MCP HTTP — gets runtime defaults from editor
* Requires: editor running with MCP on port 3000
*/
import http from 'http';
const MCP_URL = 'http://127.0.0.1:3000/mcp';
const ALL = [
'cc.Label','cc.Sprite','cc.Button','cc.Widget','cc.Layout',
'cc.UITransform','cc.RichText','cc.ScrollView','cc.Toggle',
'cc.ToggleContainer','cc.ProgressBar','cc.Slider','cc.PageView',
'cc.Mask','cc.Graphics','cc.UIOpacity','cc.SafeArea',
'cc.BlockInputEvents','cc.LabelOutline','cc.LabelShadow',
'cc.PageViewIndicator','cc.EditBox',
'cc.AudioSource','cc.VideoPlayer','cc.WebView',
'cc.ParticleSystem2D',
'cc.Camera','cc.Canvas','cc.Animation','cc.SkeletalAnimation',
'cc.MeshRenderer','cc.SkinnedMeshRenderer',
'cc.DirectionalLight','cc.PointLight','cc.SpotLight','cc.SphereLight',
'cc.RigidBody2D','cc.BoxCollider2D','cc.CircleCollider2D','cc.PolygonCollider2D',
'cc.RigidBody','cc.BoxCollider','cc.SphereCollider','cc.CapsuleCollider','cc.MeshCollider',
'cc.MotionStreak','cc.Billboard','cc.Line',
'cc.TiledMap','cc.TiledLayer',
'cc.HingeJoint2D','cc.DistanceJoint2D','cc.SpringJoint2D',
'cc.FixedJoint2D','cc.WheelJoint2D','cc.SliderJoint2D',
'cc.RelativeJoint2D','cc.MouseJoint2D',
'cc.HingeConstraint','cc.FixedConstraint','cc.PointToPointConstraint',
'cc.Terrain','cc.LODGroup','cc.ReflectionProbe',
'sp.Skeleton','dragonBones.ArmatureDisplay',
];
function callMcp(toolName, args) {
return new Promise((resolve, reject) => {
const body = JSON.stringify({
jsonrpc: '2.0', id: Date.now(), method: 'tools/call',
params: { name: toolName, arguments: args }
});
const req = http.request(MCP_URL, {
method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(body) },
timeout: 30000,
}, (res) => {
const chunks = [];
res.on('data', c => chunks.push(c));
res.on('end', () => {
try {
const data = JSON.parse(Buffer.concat(chunks).toString());
const content = data.result?.content || [];
const text = content.find(c => c.type === 'text')?.text;
resolve(text ? JSON.parse(text) : {});
} catch (e) { reject(e); }
});
});
req.on('error', reject);
req.on('timeout', () => { req.destroy(); reject(new Error('timeout')); });
req.write(body);
req.end();
});
}
// Check connectivity
try {
await callMcp('cocos_editor', { action: 'project_info' });
} catch {
console.error('❌ Cannot connect to MCP at', MCP_URL);
console.error(' Make sure editor is running and plugin is loaded.');
process.exit(1);
}
console.log(`Connected. Running auto_knowledge(save:true) for ${ALL.length} components...\n`);
let ok = 0, fail = 0, withDefaults = 0;
for (const comp of ALL) {
try {
const r = await callMcp('cocos_devtools', { action: 'auto_knowledge', componentType: comp, save: true });
if (r.success) {
ok++;
const hasRuntime = r.data?.hasRuntimeDefaults;
if (hasRuntime) withDefaults++;
const propCount = Object.keys(r.data?.recommendedKnowledge?.properties || {}).length;
console.log(` ✅ ${comp.padEnd(35)} ${propCount} props ${hasRuntime ? '(+defaults)' : '(dts only)'}`);
} else {
fail++;
console.log(` ❌ ${comp}: ${r.error}`);
}
} catch (e) {
fail++;
console.log(` ❌ ${comp}: ${e.message}`);
}
}
console.log(`\nDone: ${ok} ok, ${fail} fail, ${withDefaults} with runtime defaults`);