Skip to main content
Glama
LiLara-AI

ShadowGraph

Official

shadowgraph_context

Build a project's working set of decisions, assumptions, and failures before a task. Evaluate reopen rules, persist signals, and commit a revision for current context.

Instructions

Build one project's working set before a consequential task: decisions, stale assumptions, failed attempts, open reviews. shadowgraph_search or shadowgraph_retrieve look one thing up, shadowgraph_recall reads scoped memory, shadowgraph_review only evaluates. Not a read: it evaluates reopen rules, can persist signals, and commits a revision.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
factsNoFact key/value overrides evaluated instead of the stored facts of the same key. Stored facts are used for every key not listed here, so reopen rules still work after a restart.
limitNoMaximum items per collection, 1-1000, applied to each collection independently. Omit for the default of 50.
projectNoProject namespace. Defaults to "default"; an empty string is rejected.
changedFactsNoFact keys that just changed. Only string-form reopenWhen rules match this list; it is an ephemeral signal, not durable state.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectYesThe project this context describes.
openReviewsYesDecisions currently due for reconsideration.
completenessYesPer-collection completeness. context returns five named collections, so one page object cannot describe it.
activeDecisionsYesDecisions in a current, actionable state: proposed, planned, in_progress, executed, validated, or reconsidered.
staleAssumptionsYesFacts that are no longer active, such as superseded or expired ones, which earlier decisions may still rest on.
suggestedQuestionsYesQuestions for the low-confidence decisions in this project.
failedAttemptsToAvoidYesAttempts whose result mentions failure, regression, or error.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed5 schema fields changedv0.40.1
    • addedInput schema / properties / changedFacts / description
      Added value: +"Fact keys that just changed. Only string-form reopenWhen rules match this list; it is an ephemeral signal, not durable state."
    • addedInput schema / properties / facts / description
      Added value: +"Fact key/value overrides evaluated instead of the stored facts of the same key. Stored facts are used for every key not listed here, so reopen rules still work after a restart."
    • addedInput schema / properties / limit / description
      Added value: +"Maximum items per collection, 1-1000, applied to each collection independently. Omit for the default of 50."
    • addedInput schema / properties / project / description
      Added value: +"Project namespace. Defaults to \"default\"; an empty string is rejected."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "The working set for one project.",
      +  "properties": {
      +    "activeDecisions": {
      +      "description": "Decisions in a current, actionable state: proposed, planned, in_progress, executed, validated, or reconsidered.",
      +      "items": {
      +        "description": "A stored decision, including its alternatives and auditable confidence basis.",
      +        "properties": {
      +          "actor": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Who performed the write."
      +          },
      +          "alternatives": {
      +            "description": "Rejected alternatives, each with id, label, reasonRejected, status, and the reopenWhen rules that make it reconsiderable.",
      +            "type": "array"
      +          },
      +          "assumptions": {
      +            "description": "Assumptions the decision rests on. Searchable content.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "chosen": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The option that was chosen."
      +          },
      +          "client": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Which client performed the write."
      +          },
      +          "confidence": {
      +            "description": "Auditable confidence: initial, current (0-1), policy, a history entry per move, and a basis summarising the contributions it was folded from. Legacy records may lack basis.",
      +            "type": "object"
      +          },
      +          "createdAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 creation time."
      +          },
      +          "evidence": {
      +            "description": "Normalised evidence entries: source, type, sourceClass, confidence, observedAt, detail.",
      +            "type": "array"
      +          },
      +          "failedAttempts": {
      +            "description": "Attempt identifiers or notes attached to this decision.",
      +            "type": "array"
      +          },
      +          "goal": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "What the decision was trying to achieve."
      +          },
      +          "id": {
      +            "description": "Stable entity identifier.",
      +            "type": "string"
      +          },
      +          "kind": {
      +            "description": "Entity kind: decision, attempt, memory, fact, relation, review, or alternative.",
      +            "type": "string"
      +          },
      +          "migration": {
      +            "description": "Present only on migrated records; records the legacy value a field was mapped from.",
      +            "type": "object"
      +          },
      +          "outcome": {
      +            "anyOf": [
      +              {
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The recorded outcome, or null until one is recorded."
      +          },
      +          "project": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Project namespace; records imported from a schema that predates projects may carry null."
      +          },
      +          "reviewAfter": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 instant after which shadowgraph_maintain marks this decision stale."
      +          },
      +          "schemaVersion": {
      +            "description": "Storage schema version this entity was written under. A value above the build’s own version is preserved rather than downgraded.",
      +            "type": "integer"
      +          },
      +          "sessionId": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Session identifier recorded with the write."
      +          },
      +          "sourceClass": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Claimed origin class recorded with the write. A claim, never proof."
      +          },
      +          "sourceRaw": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The original origin label when it differed from sourceClass. Audit only; never evidence."
      +          },
      +          "status": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Lifecycle state. Legacy records may carry a value this build does not recognise; shadowgraph_validate reports those."
      +          },
      +          "supersededBy": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Identifier of the decision that replaced this one."
      +          },
      +          "supersedes": {
      +            "description": "Identifiers of decisions this one replaced.",
      +            "type": "array"
      +          },
      +          "title": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Short name of the decision."
      +          },
      +          "updatedAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 time of the last change."
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "kind"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "completeness": {
      +      "description": "Per-collection completeness. context returns five named collections, so one page object cannot describe it.",
      +      "properties": {
      +        "collections": {
      +          "description": "One entry per returned collection.",
      +          "properties": {
      +            "activeDecisions": {
      +              "description": "Counts for activeDecisions.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            },
      +            "failedAttemptsToAvoid": {
      +              "description": "Counts for failedAttemptsToAvoid.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            },
      +            "openReviews": {
      +              "description": "Counts for openReviews.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            },
      +            "staleAssumptions": {
      +              "description": "Counts for staleAssumptions.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            },
      +            "suggestedQuestions": {
      +              "description": "Counts for suggestedQuestions.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "activeDecisions",
      +            "staleAssumptions",
      +            "failedAttemptsToAvoid",
      +            "openReviews",
      +            "suggestedQuestions"
      +          ],
      +          "type": "object"
      +        },
      +        "complete": {
      +          "description": "True only when no collection was truncated.",
      +          "type": "boolean"
      +        },
      +        "limitSource": {
      +          "description": "Whose choice bounded the collections.",
      +          "enum": [
      +            "caller",
      +            "default"
      +          ],
      +          "type": "string"
      +        },
      +        "losslessItems": {
      +          "description": "Always true: items are full records, never summaries.",
      +          "type": "boolean"
      +        },
      +        "scope": {
      +          "description": "The project this result covers.",
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "scope",
      +        "complete",
      +        "limitSource",
      +        "losslessItems",
      +        "collections"
      +      ],
      +      "type": "object"
      +    },
      +    "failedAttemptsToAvoid": {
      +      "description": "Attempts whose result mentions failure, regression, or error.",
      +      "items": {
      +        "description": "A stored attempt and its result.",
      +        "properties": {
      +          "actor": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Who performed the write."
      +          },
      +          "client": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Which client performed the write."
      +          },
      +          "createdAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 creation time."
      +          },
      +          "environment": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Where it was tried."
      +          },
      +          "id": {
      +            "description": "Stable entity identifier.",
      +            "type": "string"
      +          },
      +          "kind": {
      +            "description": "Entity kind: decision, attempt, memory, fact, relation, review, or alternative.",
      +            "type": "string"
      +          },
      +          "project": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Project namespace; records imported from a schema that predates projects may carry null."
      +          },
      +          "reason": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Why it turned out that way."
      +          },
      +          "relatedTo": {
      +            "description": "Identifiers of related entities.",
      +            "type": "array"
      +          },
      +          "result": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "What happened."
      +          },
      +          "reusableWhen": {
      +            "description": "Conditions under which the attempt is worth repeating.",
      +            "type": "array"
      +          },
      +          "schemaVersion": {
      +            "description": "Storage schema version this entity was written under. A value above the build’s own version is preserved rather than downgraded.",
      +            "type": "integer"
      +          },
      +          "sessionId": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Session identifier recorded with the write."
      +          },
      +          "solution": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "What was tried."
      +          },
      +          "sourceClass": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Claimed origin class recorded with the write. A claim, never proof."
      +          },
      +          "sourceRaw": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The original origin label when it differed from sourceClass. Audit only; never evidence."
      +          },
      +          "updatedAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 time of the last change."
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "kind"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "openReviews": {
      +      "description": "Decisions currently due for reconsideration.",
      +      "items": {
      +        "description": "One decision whose rejected alternatives are due for reconsideration.",
      +        "properties": {
      +          "alternativesToReconsider": {
      +            "description": "Labels of the alternatives to look at again; all of them when the trigger was not alternative-specific.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "decisionId": {
      +            "description": "The decision to reconsider.",
      +            "type": "string"
      +          },
      +          "reason": {
      +            "description": "Comma-separated causes: the fact keys whose reopenWhen rules matched, \"review date reached\", or \"decision outcome failed\".",
      +            "type": "string"
      +          },
      +          "title": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Decision title, when the stored decision has one."
      +          }
      +        },
      +        "required": [
      +          "decisionId",
      +          "reason",
      +          "alternativesToReconsider"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "project": {
      +      "description": "The project this context describes.",
      +      "type": "string"
      +    },
      +    "staleAssumptions": {
      +      "description": "Facts that are no longer active, such as superseded or expired ones, which earlier decisions may still rest on.",
      +      "items": {
      +        "description": "A stored fact with its provenance claim and validity window.",
      +        "properties": {
      +          "actor": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Who performed the write."
      +          },
      +          "client": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Which client performed the write."
      +          },
      +          "confidence": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Caller-declared confidence in the observation, 0-1."
      +          },
      +          "createdAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 creation time."
      +          },
      +          "expiresAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Caller-declared expiry instant, or null."
      +          },
      +          "id": {
      +            "description": "Stable entity identifier.",
      +            "type": "string"
      +          },
      +          "key": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Fact name, unique per project among active facts."
      +          },
      +          "kind": {
      +            "description": "Entity kind: decision, attempt, memory, fact, relation, review, or alternative.",
      +            "type": "string"
      +          },
      +          "observedAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 time the fact was observed."
      +          },
      +          "project": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Project namespace; records imported from a schema that predates projects may carry null."
      +          },
      +          "schemaVersion": {
      +            "description": "Storage schema version this entity was written under. A value above the build’s own version is preserved rather than downgraded.",
      +            "type": "integer"
      +          },
      +          "sessionId": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Session identifier recorded with the write."
      +          },
      +          "source": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Legacy alias of sourceClass, retained for compatibility."
      +          },
      +          "sourceClass": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Claimed origin class recorded with the write. A claim, never proof."
      +          },
      +          "sourceRaw": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The original origin label when it differed from sourceClass. Audit only; never evidence."
      +          },
      +          "status": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "active, superseded, or expired."
      +          },
      +          "temporal": {
      +            "description": "Bi-temporal window: validFrom, validTo, recordedAt, invalidatedAt.",
      +            "type": "object"
      +          },
      +          "updatedAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 time of the last change."
      +          },
      +          "validityPolicy": {
      +            "description": "Declared expiry inputs and the effective expiration boundary derived from them.",
      +            "type": "object"
      +          },
      +          "value": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "boolean"
      +              },
      +              {
      +                "type": "null"
      +              },
      +              {
      +                "type": "array"
      +              },
      +              {
      +                "type": "object"
      +              }
      +            ],
      +            "description": "The observed value, any lossless JSON value."
      +          },
      +          "verification": {
      +            "description": "Present only on a signed verification: the attestation this build checked.",
      +            "type": "object"
      +          },
      +          "verificationStatus": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "unverified, contradicted, expired, or verified. Only the separately configured signed-evidence verifier can produce verified."
      +          }
      +        },
      +        "required": [
      +          "key"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "suggestedQuestions": {
      +      "description": "Questions for the low-confidence decisions in this project.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "project",
      +    "activeDecisions",
      +    "staleAssumptions",
      +    "failedAttemptsToAvoid",
      +    "openReviews",
      +    "suggestedQuestions",
      +    "completeness"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.40.0

TDQS

A4.4/5.0
Behavior4/5

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

With all annotations false, the description carries the burden of disclosure and largely meets it: 'Not a read: it evaluates reopen rules, can persist signals, and commits a revision' clearly communicates mutation and side effects. It could go further by specifying what a committed revision entails, but it is honest and materially informative.

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 sentences, each earning its place: purpose, sibling differentiation, and the critical non-read caveat. The structure front-loads the primary intent before alternatives and caveats.

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

Completeness4/5

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

The description covers purpose, usage boundary, side effects, and sibling routing, and an output schema exists to handle return values. Minor gaps remain around what exactly a 'revision' is and how reopen rules behave, but these do not block correct invocation.

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% and every parameter already has a detailed description. The narrative description adds no parameter-specific semantic value, so the baseline 3 is appropriate.

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 opens with a specific verb and resource: 'Build one project's working set' and lists what that set contains. It then explicitly differentiates itself from shadowgraph_search, shadowgraph_retrieve, shadowgraph_recall, and shadowgraph_review, making sibling confusion unlikely.

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?

It states when to use this tool ('before a consequential task') and names concrete alternatives for single lookups, scoped memory reads, and evaluations. It also adds the crucial exclusion 'Not a read,' preventing misuse for read-only needs.

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LiLara-AI/shadowgraph'

If you have feedback or need assistance with the MCP directory API, please join our Discord server