Skip to main content
Glama

Weekly check of installed skills

forge_watch
Read-onlyIdempotent

Use this when re-checking skills or tools that are already installed, such as once a week. Give fingerprints: up to 100 sha256 hashes of installed files, as forge_scan returns them. Returns, per fingerprint, whether it is flagged, needs a fresh scan, or has field reports (other agents' notes on that exact version). One tool by name or id: forge_check.

Input Schema

NameRequiredDescriptionDefault
fingerprintsYessha256 of each installed skill file, as forge_scan returns it

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": {
      -      "caution": {
      -        "type": "number"
      -      },
      -      "checked": {
      -        "type": "number"
      -      },
      -      "flagged": {
      -        "type": "number"
      -      },
      -      "items": {
      -        "items": {
      -          "additionalProperties": {},
      -          "properties": {
      -            "counts": {
      -              "anyOf": [
      -                {
      -                  "additionalProperties": {
      -                    "type": "number"
      -                  },
      -                  "propertyNames": {
      -                    "type": "string"
      -                  },
      -                  "type": "object"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "fingerprint": {
      -              "type": "string"
      -            },
      -            "known": {
      -              "type": "boolean"
      -            },
      -            "rescan_needed": {
      -              "type": "boolean"
      -            },
      -            "rules_version": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            },
      -            "scanned_at": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            },
      -            "verdict": {
      -              "anyOf": [
      -                {
      -                  "enum": [
      -                    "flagged",
      -                    "caution",
      -                    "clear"
      -                  ],
      -                  "type": "string"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "versions_with_reports": {
      -              "type": "number"
      -            }
      -          },
      -          "required": [
      -            "fingerprint",
      -            "known",
      -            "verdict",
      -            "counts",
      -            "rules_version",
      -            "rescan_needed",
      -            "scanned_at",
      -            "versions_with_reports"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "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"
      -      },
      -      "rescan_needed": {
      -        "type": "number"
      -      },
      -      "rules_version": {
      -        "type": "string"
      -      },
      -      "share": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "receipt_badge_url": {
      -            "type": "string"
      -          },
      -          "receipt_markdown": {
      -            "type": "string"
      -          },
      -          "receipt_url": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "receipt_url"
      -        ],
      -        "type": "object"
      -      },
      -      "unknown": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "rules_version",
      -      "checked",
      -      "flagged",
      -      "caution",
      -      "unknown",
      -      "rescan_needed",
      -      "items",
      -      "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": {
      +      "caution": {
      +        "type": "number"
      +      },
      +      "checked": {
      +        "type": "number"
      +      },
      +      "flagged": {
      +        "type": "number"
      +      },
      +      "items": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "counts": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": {
      +                    "type": "number"
      +                  },
      +                  "propertyNames": {
      +                    "type": "string"
      +                  },
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "fingerprint": {
      +              "type": "string"
      +            },
      +            "known": {
      +              "type": "boolean"
      +            },
      +            "rescan_needed": {
      +              "type": "boolean"
      +            },
      +            "rules_version": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "scanned_at": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "verdict": {
      +              "anyOf": [
      +                {
      +                  "enum": [
      +                    "flagged",
      +                    "caution",
      +                    "clear"
      +                  ],
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "versions_with_reports": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "fingerprint",
      +            "known",
      +            "verdict",
      +            "counts",
      +            "rules_version",
      +            "rescan_needed",
      +            "scanned_at",
      +            "versions_with_reports"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "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"
      +      },
      +      "rescan_needed": {
      +        "type": "number"
      +      },
      +      "rules_version": {
      +        "type": "string"
      +      },
      +      "share": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "receipt_badge_url": {
      +            "type": "string"
      +          },
      +          "receipt_markdown": {
      +            "type": "string"
      +          },
      +          "receipt_url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "receipt_url"
      +        ],
      +        "type": "object"
      +      },
      +      "unknown": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "rules_version",
      +      "checked",
      +      "flagged",
      +      "caution",
      +      "unknown",
      +      "rescan_needed",
      +      "items",
      +      "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 / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "anyOf": [
      +    {
      +      "additionalProperties": {},
      +      "properties": {
      +        "caution": {
      +          "type": "number"
      +        },
      +        "checked": {
      +          "type": "number"
      +        },
      +        "flagged": {
      +          "type": "number"
      +        },
      +        "items": {
      +          "items": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "counts": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": {
      +                      "type": "number"
      +                    },
      +                    "propertyNames": {
      +                      "type": "string"
      +                    },
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "fingerprint": {
      +                "type": "string"
      +              },
      +              "known": {
      +                "type": "boolean"
      +              },
      +              "rescan_needed": {
      +                "type": "boolean"
      +              },
      +              "rules_version": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "scanned_at": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "verdict": {
      +                "anyOf": [
      +                  {
      +                    "enum": [
      +                      "flagged",
      +                      "caution",
      +                      "clear"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "versions_with_reports": {
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "fingerprint",
      +              "known",
      +              "verdict",
      +              "counts",
      +              "rules_version",
      +              "rescan_needed",
      +              "scanned_at",
      +              "versions_with_reports"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "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"
      +        },
      +        "rescan_needed": {
      +          "type": "number"
      +        },
      +        "rules_version": {
      +          "type": "string"
      +        },
      +        "share": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "receipt_badge_url": {
      +              "type": "string"
      +            },
      +            "receipt_markdown": {
      +              "type": "string"
      +            },
      +            "receipt_url": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "receipt_url"
      +          ],
      +          "type": "object"
      +        },
      +        "unknown": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "rules_version",
      +        "checked",
      +        "flagged",
      +        "caution",
      +        "unknown",
      +        "rescan_needed",
      +        "items",
      +        "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"
      +}
  3. First observed

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description earns extra credit by enumerating the three per-fingerprint outcomes (flagged, needs a fresh scan, field reports from other agents), which is real behavioral context not in the annotations. It stops short of error/partial-failure behavior, so not a 5.

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

Conciseness5/5

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

Three tight sentences: trigger first, input contract second, return shape third, with the sibling pointer appended. No filler and nothing buried after the payload specification.

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?

Even though an output schema exists (so return values needn't be explained), the description still summarizes the three result states, and it covers the batch limit and input provenance. For a one-parameter read tool with full annotations, nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% and the single parameter is already documented with a regex pattern and 1-100 bounds, so the baseline is 3. The description adds genuine meaning by tying the hashes to their provenance ('as forge_scan returns them') and restating the 100 cap, which is the practical failure mode for this batch API.

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?

States a specific verb and resource ('re-checking skills or tools that are already installed') and immediately scopes it to fingerprint-based lookups of installed files. It explicitly names both sibling touchpoints: forge_scan as the source of fingerprints and forge_check as the single-tool alternative, so an agent can separate it from either without opening a 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 this when re-checking skills or tools that are already installed, such as once a week' gives an explicit trigger plus cadence, and 'One tool by name or id: forge_check' routes the single-item case elsewhere. The reference to 'as forge_scan returns them' implies a scan comes first, covering the remaining branch of the workflow.

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.