MCPcopy Create free account
hub / github.com/FIND-Lab/AgentWard / scanSkillMetadata

Function scanSkillMetadata

layers/foundation-scan.ts:554–581  ·  view source on GitHub ↗
(
  skill: Skill,
  llmContext: LlmCallContext,
  logger?: LoggerLike,
)

Source from the content-addressed store, hash-verified

552}
553
554async function scanSkillMetadata(
555 skill: Skill,
556 llmContext: LlmCallContext,
557 logger?: LoggerLike,
558): Promise<{ metadataSummary: string; warning: Warning | null }> {
559 const metadataDetection = await detectSkillMetadataRisk(skill, llmContext, logger);
560 if (!metadataDetection) {
561 return { metadataSummary: "", warning: null };
562 }
563
564 if (metadataDetection.metadataRisk) {
565 logger?.warn(`[FoundationScan] metadata blocked: skill=${skill.name ?? "(unknown)"}, reason=${metadataDetection.reason || "metadata judged as risky"}`);
566 return {
567 metadataSummary: "",
568 warning: createMaliciousWarning(
569 `[METADATA ANALYSIS] Skill '${skill.name}' contains malicious intent in its definition.\n` +
570 `📋 Skill File: ${skill.filePath}\n` +
571 `⚠️ Detection Type: Metadata Risk (Semantic Analysis)\n` +
572 `🔍 Specific Reason: ${metadataDetection.reason || "Unspecified malicious intent detected in skill metadata"}\n` +
573 `💡 Impact: This skill's definition suggests it may attempt to bypass security controls or perform unauthorized actions.`
574 ),
575 };
576 }
577
578 const metadataSummary = metadataDetection.capabilitySummary || "";
579 logger?.info(`[FoundationScan] metadata summary generated: skill=${skill.name ?? "(unknown)"}, summaryLength=${metadataSummary.length}`);
580 return { metadataSummary, warning: null };
581}
582
583async function scanSkillFile(
584 skill: Skill,

Callers 1

scanSkillDirectoryFunction · 0.85

Calls 2

detectSkillMetadataRiskFunction · 0.85
createMaliciousWarningFunction · 0.85

Tested by

no test coverage detected