Skip to main content
Glama

Scan a skill before installing it

forge_scan
Read-onlyIdempotent

Use this when an agent skill, plugin, MCP server or install script is about to be installed and its text needs checking for hidden instructions, piped installs, credential reads or data sent to throwaway endpoints. Give text (the file's contents) or url (a public code host). Returns a verdict, rule ids, line numbers and the file's sha256. Other agents' reports on a named tool: forge_check.

Input Schema

NameRequiredDescriptionDefault
urlNoOr a public URL: raw.githubusercontent.com, github.com/…/blob/…, gist, gitlab, bitbucket, codeberg, unpkg, jsdelivr
nameNoThe skill or tool name, for the result page
textNoThe full text of the skill file (SKILL.md), tool descriptions or install script

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "bytes": {
      -        "type": "number"
      -      },
      -      "counts": {
      -        "additionalProperties": {
      -          "type": "number"
      -        },
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "findings": {
      -        "items": {
      -          "additionalProperties": {},
      -          "properties": {
      -            "column": {
      -              "type": "number"
      -            },
      -            "family": {
      -              "type": "string"
      -            },
      -            "line": {
      -              "type": "number"
      -            },
      -            "rule": {
      -              "type": "string"
      -            },
      -            "severity": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "rule",
      -            "family",
      -            "severity",
      -            "line",
      -            "column"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "fingerprint": {
      -        "type": "string"
      -      },
      -      "guarantee": {
      -        "const": false,
      -        "type": "boolean"
      -      },
      -      "page_url": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "related": {
      -        "items": {
      -          "additionalProperties": {},
      -          "properties": {
      -            "arguments": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "mcp_server": {
      -              "type": "string"
      -            },
      -            "relation": {
      -              "enum": [
      -                "full_answer",
      -                "scan_skill_file",
      -                "candidate",
      -                "watch_fingerprint",
      -                "check_match",
      -                "rescan"
      -              ],
      -              "type": "string"
      -            },
      -            "tool": {
      -              "enum": [
      -                "forge_check",
      -                "forge_scan",
      -                "forge_watch"
      -              ],
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "relation",
      -            "tool",
      -            "arguments"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "rules_url": {
      -        "type": "string"
      -      },
      -      "rules_version": {
      -        "type": "string"
      -      },
      -      "share": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "badge_markdown": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "page_url": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "receipt_badge_url": {
      -            "type": "string"
      -          },
      -          "receipt_markdown": {
      -            "type": "string"
      -          },
      -          "receipt_url": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "receipt_url"
      -        ],
      -        "type": "object"
      -      },
      -      "source_url": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "verdict": {
      -        "enum": [
      -          "flagged",
      -          "caution",
      -          "clear"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "verdict",
      -      "fingerprint",
      -      "rules_version",
      -      "counts",
      -      "findings",
      -      "rules_url",
      -      "page_url",
      -      "source_url",
      -      "bytes",
      -      "guarantee",
      -      "share"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "data_kind": {
      -        "const": "input_needed",
      -        "type": "string"
      -      },
      -      "detail": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "error": {
      -        "type": "string"
      -      },
      -      "examples": {
      -        "items": {
      -          "additionalProperties": {},
      -          "propertyNames": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "needed": {
      -        "type": "string"
      -      },
      -      "tool": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "data_kind",
      -      "tool",
      -      "needed",
      -      "detail",
      -      "examples"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "error": {
      -        "const": "rate_limited",
      -        "type": "string"
      -      },
      -      "limit": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "per_minute": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "per_month": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "plan": {
      -            "enum": [
      -              "anonymous",
      -              "free",
      -              "team",
      -              "volume",
      -              "enterprise"
      -            ],
      -            "type": "string"
      -          },
      -          "resets_at": {
      -            "type": "string"
      -          },
      -          "used_this_month": {
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "plan",
      -          "per_minute"
      -        ],
      -        "type": "object"
      -      },
      -      "reason": {
      -        "enum": [
      -          "per_ip_minute",
      -          "per_key_minute",
      -          "monthly_quota"
      -        ],
      -        "type": "string"
      -      },
      -      "retry_after_s": {
      -        "type": "number"
      -      },
      -      "upgrade": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "contact": {
      -            "type": "string"
      -          },
      -          "free_key": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "per_minute": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "per_month": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "per_minute",
      -              "per_month"
      -            ],
      -            "type": "object"
      -          },
      -          "keys_url": {
      -            "type": "string"
      -          },
      -          "paid_plans": {
      -            "enum": [
      -              "coming_soon",
      -              "available"
      -            ],
      -            "type": "string"
      -          },
      -          "plans": {
      -            "items": {
      -              "enum": [
      -                "team",
      -                "volume"
      -              ],
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "url": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "url",
      -          "keys_url",
      -          "plans",
      -          "paid_plans"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "retry_after_s"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "bytes": {
      +        "type": "number"
      +      },
      +      "counts": {
      +        "additionalProperties": {
      +          "type": "number"
      +        },
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "findings": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "column": {
      +              "type": "number"
      +            },
      +            "family": {
      +              "type": "string"
      +            },
      +            "line": {
      +              "type": "number"
      +            },
      +            "rule": {
      +              "type": "string"
      +            },
      +            "severity": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "rule",
      +            "family",
      +            "severity",
      +            "line",
      +            "column"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "fingerprint": {
      +        "type": "string"
      +      },
      +      "guarantee": {
      +        "const": false,
      +        "type": "boolean"
      +      },
      +      "owner_claim": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "enables": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "url": {
      +            "type": "string"
      +          },
      +          "what": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "url",
      +          "what",
      +          "enables"
      +        ],
      +        "type": "object"
      +      },
      +      "page_url": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "related": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "arguments": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "mcp_server": {
      +              "type": "string"
      +            },
      +            "relation": {
      +              "enum": [
      +                "full_answer",
      +                "scan_skill_file",
      +                "candidate",
      +                "watch_fingerprint",
      +                "check_match",
      +                "rescan"
      +              ],
      +              "type": "string"
      +            },
      +            "tool": {
      +              "enum": [
      +                "forge_check",
      +                "forge_scan",
      +                "forge_watch"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "relation",
      +            "tool",
      +            "arguments"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "rules_url": {
      +        "type": "string"
      +      },
      +      "rules_version": {
      +        "type": "string"
      +      },
      +      "share": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "badge_markdown": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "page_url": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "receipt_badge_url": {
      +            "type": "string"
      +          },
      +          "receipt_markdown": {
      +            "type": "string"
      +          },
      +          "receipt_url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "receipt_url"
      +        ],
      +        "type": "object"
      +      },
      +      "source_url": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "verdict": {
      +        "enum": [
      +          "flagged",
      +          "caution",
      +          "clear"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "verdict",
      +      "fingerprint",
      +      "rules_version",
      +      "counts",
      +      "findings",
      +      "rules_url",
      +      "page_url",
      +      "source_url",
      +      "bytes",
      +      "guarantee",
      +      "share"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "data_kind": {
      +        "const": "input_needed",
      +        "type": "string"
      +      },
      +      "detail": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "error": {
      +        "type": "string"
      +      },
      +      "examples": {
      +        "items": {
      +          "additionalProperties": {},
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "needed": {
      +        "type": "string"
      +      },
      +      "tool": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "data_kind",
      +      "tool",
      +      "needed",
      +      "detail",
      +      "examples"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "error": {
      +        "const": "rate_limited",
      +        "type": "string"
      +      },
      +      "limit": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "per_minute": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "per_month": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "plan": {
      +            "enum": [
      +              "anonymous",
      +              "free",
      +              "team",
      +              "volume",
      +              "enterprise"
      +            ],
      +            "type": "string"
      +          },
      +          "resets_at": {
      +            "type": "string"
      +          },
      +          "used_this_month": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "plan",
      +          "per_minute"
      +        ],
      +        "type": "object"
      +      },
      +      "reason": {
      +        "enum": [
      +          "per_ip_minute",
      +          "per_key_minute",
      +          "monthly_quota"
      +        ],
      +        "type": "string"
      +      },
      +      "retry_after_s": {
      +        "type": "number"
      +      },
      +      "upgrade": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "contact": {
      +            "type": "string"
      +          },
      +          "free_key": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "per_minute": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "per_month": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "per_minute",
      +              "per_month"
      +            ],
      +            "type": "object"
      +          },
      +          "keys_url": {
      +            "type": "string"
      +          },
      +          "paid_plans": {
      +            "enum": [
      +              "coming_soon",
      +              "available"
      +            ],
      +            "type": "string"
      +          },
      +          "plans": {
      +            "items": {
      +              "enum": [
      +                "team",
      +                "volume"
      +              ],
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "url",
      +          "keys_url",
      +          "plans",
      +          "paid_plans"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "retry_after_s"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "bytes": {
      -        "type": "number"
      -      },
      -      "counts": {
      -        "additionalProperties": {
      -          "type": "number"
      -        },
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "findings": {
      -        "items": {
      -          "additionalProperties": {},
      -          "properties": {
      -            "column": {
      -              "type": "number"
      -            },
      -            "family": {
      -              "type": "string"
      -            },
      -            "line": {
      -              "type": "number"
      -            },
      -            "rule": {
      -              "type": "string"
      -            },
      -            "severity": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "rule",
      -            "family",
      -            "severity",
      -            "line",
      -            "column"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "fingerprint": {
      -        "type": "string"
      -      },
      -      "guarantee": {
      -        "const": false,
      -        "type": "boolean"
      -      },
      -      "page_url": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "related": {
      -        "items": {
      -          "additionalProperties": {},
      -          "properties": {
      -            "arguments": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "mcp_server": {
      -              "type": "string"
      -            },
      -            "relation": {
      -              "enum": [
      -                "full_answer",
      -                "scan_skill_file",
      -                "candidate",
      -                "watch_fingerprint",
      -                "check_match",
      -                "rescan"
      -              ],
      -              "type": "string"
      -            },
      -            "tool": {
      -              "enum": [
      -                "forge_check",
      -                "forge_scan",
      -                "forge_watch"
      -              ],
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "relation",
      -            "tool",
      -            "arguments"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "rules_url": {
      -        "type": "string"
      -      },
      -      "rules_version": {
      -        "type": "string"
      -      },
      -      "share": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "badge_markdown": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "page_url": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "receipt_badge_url": {
      -            "type": "string"
      -          },
      -          "receipt_markdown": {
      -            "type": "string"
      -          },
      -          "receipt_url": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "receipt_url"
      -        ],
      -        "type": "object"
      -      },
      -      "source_url": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "verdict": {
      -        "enum": [
      -          "flagged",
      -          "caution",
      -          "clear"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "verdict",
      -      "fingerprint",
      -      "rules_version",
      -      "counts",
      -      "findings",
      -      "rules_url",
      -      "page_url",
      -      "source_url",
      -      "bytes",
      -      "guarantee",
      -      "share"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "data_kind": {
      -        "const": "input_needed",
      -        "type": "string"
      -      },
      -      "detail": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "error": {
      -        "type": "string"
      -      },
      -      "examples": {
      -        "items": {
      -          "additionalProperties": {},
      -          "propertyNames": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "needed": {
      -        "type": "string"
      -      },
      -      "tool": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "data_kind",
      -      "tool",
      -      "needed",
      -      "detail",
      -      "examples"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "error": {
      -        "const": "rate_limited",
      -        "type": "string"
      -      },
      -      "retry_after_s": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "retry_after_s"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "bytes": {
      +        "type": "number"
      +      },
      +      "counts": {
      +        "additionalProperties": {
      +          "type": "number"
      +        },
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "findings": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "column": {
      +              "type": "number"
      +            },
      +            "family": {
      +              "type": "string"
      +            },
      +            "line": {
      +              "type": "number"
      +            },
      +            "rule": {
      +              "type": "string"
      +            },
      +            "severity": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "rule",
      +            "family",
      +            "severity",
      +            "line",
      +            "column"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "fingerprint": {
      +        "type": "string"
      +      },
      +      "guarantee": {
      +        "const": false,
      +        "type": "boolean"
      +      },
      +      "page_url": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "related": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "arguments": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "mcp_server": {
      +              "type": "string"
      +            },
      +            "relation": {
      +              "enum": [
      +                "full_answer",
      +                "scan_skill_file",
      +                "candidate",
      +                "watch_fingerprint",
      +                "check_match",
      +                "rescan"
      +              ],
      +              "type": "string"
      +            },
      +            "tool": {
      +              "enum": [
      +                "forge_check",
      +                "forge_scan",
      +                "forge_watch"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "relation",
      +            "tool",
      +            "arguments"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "rules_url": {
      +        "type": "string"
      +      },
      +      "rules_version": {
      +        "type": "string"
      +      },
      +      "share": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "badge_markdown": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "page_url": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "receipt_badge_url": {
      +            "type": "string"
      +          },
      +          "receipt_markdown": {
      +            "type": "string"
      +          },
      +          "receipt_url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "receipt_url"
      +        ],
      +        "type": "object"
      +      },
      +      "source_url": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "verdict": {
      +        "enum": [
      +          "flagged",
      +          "caution",
      +          "clear"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "verdict",
      +      "fingerprint",
      +      "rules_version",
      +      "counts",
      +      "findings",
      +      "rules_url",
      +      "page_url",
      +      "source_url",
      +      "bytes",
      +      "guarantee",
      +      "share"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "data_kind": {
      +        "const": "input_needed",
      +        "type": "string"
      +      },
      +      "detail": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "error": {
      +        "type": "string"
      +      },
      +      "examples": {
      +        "items": {
      +          "additionalProperties": {},
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "needed": {
      +        "type": "string"
      +      },
      +      "tool": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "data_kind",
      +      "tool",
      +      "needed",
      +      "detail",
      +      "examples"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "error": {
      +        "const": "rate_limited",
      +        "type": "string"
      +      },
      +      "limit": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "per_minute": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "per_month": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "plan": {
      +            "enum": [
      +              "anonymous",
      +              "free",
      +              "team",
      +              "volume",
      +              "enterprise"
      +            ],
      +            "type": "string"
      +          },
      +          "resets_at": {
      +            "type": "string"
      +          },
      +          "used_this_month": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "plan",
      +          "per_minute"
      +        ],
      +        "type": "object"
      +      },
      +      "reason": {
      +        "enum": [
      +          "per_ip_minute",
      +          "per_key_minute",
      +          "monthly_quota"
      +        ],
      +        "type": "string"
      +      },
      +      "retry_after_s": {
      +        "type": "number"
      +      },
      +      "upgrade": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "contact": {
      +            "type": "string"
      +          },
      +          "free_key": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "per_minute": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "per_month": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "per_minute",
      +              "per_month"
      +            ],
      +            "type": "object"
      +          },
      +          "keys_url": {
      +            "type": "string"
      +          },
      +          "paid_plans": {
      +            "enum": [
      +              "coming_soon",
      +              "available"
      +            ],
      +            "type": "string"
      +          },
      +          "plans": {
      +            "items": {
      +              "enum": [
      +                "team",
      +                "volume"
      +              ],
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "url",
      +          "keys_url",
      +          "plans",
      +          "paid_plans"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "retry_after_s"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "anyOf": [
      +    {
      +      "additionalProperties": {},
      +      "properties": {
      +        "bytes": {
      +          "type": "number"
      +        },
      +        "counts": {
      +          "additionalProperties": {
      +            "type": "number"
      +          },
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "findings": {
      +          "items": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "column": {
      +                "type": "number"
      +              },
      +              "family": {
      +                "type": "string"
      +              },
      +              "line": {
      +                "type": "number"
      +              },
      +              "rule": {
      +                "type": "string"
      +              },
      +              "severity": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "rule",
      +              "family",
      +              "severity",
      +              "line",
      +              "column"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "fingerprint": {
      +          "type": "string"
      +        },
      +        "guarantee": {
      +          "const": false,
      +          "type": "boolean"
      +        },
      +        "page_url": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "related": {
      +          "items": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "arguments": {
      +                "additionalProperties": {},
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "mcp_server": {
      +                "type": "string"
      +              },
      +              "relation": {
      +                "enum": [
      +                  "full_answer",
      +                  "scan_skill_file",
      +                  "candidate",
      +                  "watch_fingerprint",
      +                  "check_match",
      +                  "rescan"
      +                ],
      +                "type": "string"
      +              },
      +              "tool": {
      +                "enum": [
      +                  "forge_check",
      +                  "forge_scan",
      +                  "forge_watch"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "relation",
      +              "tool",
      +              "arguments"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "rules_url": {
      +          "type": "string"
      +        },
      +        "rules_version": {
      +          "type": "string"
      +        },
      +        "share": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "badge_markdown": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "page_url": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "receipt_badge_url": {
      +              "type": "string"
      +            },
      +            "receipt_markdown": {
      +              "type": "string"
      +            },
      +            "receipt_url": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "receipt_url"
      +          ],
      +          "type": "object"
      +        },
      +        "source_url": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "verdict": {
      +          "enum": [
      +            "flagged",
      +            "caution",
      +            "clear"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "verdict",
      +        "fingerprint",
      +        "rules_version",
      +        "counts",
      +        "findings",
      +        "rules_url",
      +        "page_url",
      +        "source_url",
      +        "bytes",
      +        "guarantee",
      +        "share"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": {},
      +      "properties": {
      +        "data_kind": {
      +          "const": "input_needed",
      +          "type": "string"
      +        },
      +        "detail": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "error": {
      +          "type": "string"
      +        },
      +        "examples": {
      +          "items": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "needed": {
      +          "type": "string"
      +        },
      +        "tool": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "error",
      +        "data_kind",
      +        "tool",
      +        "needed",
      +        "detail",
      +        "examples"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": {},
      +      "properties": {
      +        "error": {
      +          "const": "rate_limited",
      +          "type": "string"
      +        },
      +        "retry_after_s": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "error",
      +        "retry_after_s"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so this is a safe read operation. The description goes beyond them by naming the specific threat classes it looks for and the return payload ('verdict, rule ids, line numbers and the file's sha256'). It does not mention rate limits, whether submitted text is retained, or how URL fetching behaves on large repos, but the core behavior is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The triggering condition is front-loaded in a single long first sentence, followed by input and output in two short ones. Every sentence carries signal, though the return-value sentence partly duplicates an existing output schema and the prose is dense enough to require a second read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, a rich output schema, and 100% parameter coverage supplied, the description only needs to supply trigger, input mode, and sibling routing, and it does all three. Nothing an agent needs in order to call forge_scan correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does add one piece of meaning the schema does not encode: that text and url are alternatives ('Give text (the file's contents) or url (a public code host)'), which matters because the schema lists zero required parameters and enforces no either/or. Beyond that it mostly restates the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('scan ... text ... before installing') and enumerates what is being checked for: hidden instructions, piped installs, credential reads, and exfiltration to throwaway endpoints. It also names the sibling tool it is not ('Other agents' reports on a named tool: forge_check'), so an agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Use is anchored to an explicit trigger: 'when an agent skill, plugin, MCP server or install script is about to be installed'. The alternative is named with the condition that selects it (forge_check for existing reports on a named tool), leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.