Skip to main content
Glama

Save an approved review

save_experience
Idempotent

Save a review against an already-resolved stable subject type. Before saving, perform a generic subject enrichment check using authoritative or primary sources when available. This applies to any kind of subject and does not require a website, location, address or relationship. Submit the result in subject_enrichment_check. Perform routine checking and retry automatically rather than asking the user. Ask the user only when the subject identity is genuinely ambiguous. Add useful discoveries in identifiers, subject_attributes and subject_context with source provenance, while attaching the review only to what was actually experienced. A completed check requires at least one source, and every source must be reconciled: list the request paths populated from it in applied_fields, or explain in unapplied_sources why it yielded no stored discovery. Every applied path must declare a generic retrieval_uses entry explaining how it helps future identity, likely queries, location, classification, relationships, comparison or verification. Treat enrichment as preparation for future TestGraph searches: register information someone may realistically search for later, and do not store facts merely because they are available. Treat this as shared graph building: substantial discovery work for this subject becomes reusable for later searches, while this user can benefit from useful enrichment contributed for other subjects. A subject's own canonical URL is a stable identifier and must be stored in identifiers when found. If enrichment cannot be found, use unavailable with a reason and the searches attempted. Use not_applicable with a reason when external enrichment has no sensible application. Collection assessment is mandatory: declare whether the subject belongs to a wider collection, and when it does, save the collection as subject_context with its authoritative directory URL and a relationship to reviewed_subject. On first discovery, submit every member exposed by a finite authoritative directory as an unreviewed subject and connect each one to the collection. The server stores that verified manifest. On later reviews, reuse the returned collection_id and manifest_revision; do not resubmit the full member list. The server still verifies that the reviewed subject belongs to the stored manifest. Verification status and real-world coverage status are separate: only coverage_status=complete permits reuse or conclusions that a location or member is absent. Partial or unknown manifests return a warning and require refresh. Location is optional; never invent facts or silently geocode coordinates. The experience date defaults to creation time unless experienced_at is explicit. All context subject types must already be resolved. Existing globally registered fields such as rating are automatically attached to this subject type on first valid use; preserve them in structured_data and do not ask for routine confirmation or discard them into raw_text. Use your full available reasoning, web retrieval and tool capabilities as TestGraph's open-ended semantic and discovery engine. Derive useful structure from meaning and evidence instead of waiting for a domain-specific form; the server supplies stable primitives and verifies your claims. Register information someone may realistically search for later against what is saved in TestGraph. Treat enrichment as shared graph work whose cost is paid for this subject and whose useful result can be reused by later searches, just as users benefit from enrichment contributed for other subjects. Store only discoveries with a declared generic retrieval_uses purpose and likely-query examples; facts with no plausible future TestGraph use are not enrichment. For collections, do not stop at one landing page: discover the authoritative source surfaces needed to derive the complete collection and submit collection_assessment.source_manifest with complete traversal coverage and member-to-source mappings, discovery queries, exhaustion evidence and no unresolved source URLs. Every discovered collection member must be submitted. Include reviewed_subject plus every derived sibling in submitted_member_refs; the server requires it to equal discovered_count and verifies that every ref exists and is connected to the collection. unavailable is only for genuine collection-identity or authoritative-source failure and is rejected when collection evidence is known. Unreviewed status, collection size, effort, inconvenience, latency, quick-review scope and future materialisation are not omissions. When the client supports concurrent tool calls, submit independent writes concurrently in batches of up to 10. Do not batch dependent operations until their prerequisites are confirmed. Reuse the same canonical key for the same subject and derive deterministic idempotency keys from a stable run identifier, target and operation so retries and restarted conversations safely return existing writes instead of creating duplicates.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
summaryYes
headlineYes
raw_textYes
visibilityNoprivate
identifiersNo
subject_nameYes
subject_typeYes
canonical_keyYes
user_approvedYes
experienced_atNo
idempotency_keyYes
structured_dataNo
subject_contextNoOptional graph enrichment discovered while identifying the reviewed subject. Use reviewed_subject as the reserved ref for the subject receiving the review.
subject_attributesNo
subject_provenanceNo
collection_assessmentYesMandatory wider-collection assessment. The first member save requires a collection name, type, authoritative directory URL, discovered count, and submitted_member_refs naming reviewed_subject plus every discovered sibling in subject_context. The server validates and stores that manifest. Later member saves should pass collection_id and manifest_revision only; the server reuses the stored manifest and verifies the reviewed subject against it. Set refresh_manifest only when deliberately replacing the stored manifest, in which case the full collection is required again. independent requires evidence_sources or search attempts. unavailable requires unavailability_kind, attempts and a reason, and is only for genuine collection-identity or authoritative-source failure. It is rejected when collection signals are already known or when the reason is size, effort, inconvenience, latency, a quick review or deferred work. ambiguous blocks the save. There is no deferred or lazy status.
subject_enrichment_checkYesGeneric pre-save check. completed requires sources; unavailable requires a reason and attempts; not_applicable requires a reason; ambiguous stops the save for clarification.

Schema Changelog

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

  1. Changed2 schema fields changed
    • removedInput schema / properties / version_check
      Removed value: -{
      -  "description": "Required live deployment token. Call get_server_info immediately before this write and pass write_version_token unchanged. Stale or missing tokens are rejected before any write occurs.",
      -  "maxLength": 64,
      -  "minLength": 64,
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "subject_type",
      -  "subject_name",
      -  "canonical_key",
      -  "headline",
      -  "summary",
      -  "raw_text",
      -  "subject_enrichment_check",
      -  "collection_assessment",
      -  "user_approved",
      -  "idempotency_key",
      -  "version_check"
      -]New value: +[
      +  "subject_type",
      +  "subject_name",
      +  "canonical_key",
      +  "headline",
      +  "summary",
      +  "raw_text",
      +  "subject_enrichment_check",
      +  "collection_assessment",
      +  "user_approved",
      +  "idempotency_key"
      +]
  2. Changed2 schema fields changed
    • addedInput schema / properties / version_check
      Added value: +{
      +  "description": "Required live deployment token. Call get_server_info immediately before this write and pass write_version_token unchanged. Stale or missing tokens are rejected before any write occurs.",
      +  "maxLength": 64,
      +  "minLength": 64,
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "subject_type",
      -  "subject_name",
      -  "canonical_key",
      -  "headline",
      -  "summary",
      -  "raw_text",
      -  "subject_enrichment_check",
      -  "collection_assessment",
      -  "user_approved",
      -  "idempotency_key"
      -]New value: +[
      +  "subject_type",
      +  "subject_name",
      +  "canonical_key",
      +  "headline",
      +  "summary",
      +  "raw_text",
      +  "subject_enrichment_check",
      +  "collection_assessment",
      +  "user_approved",
      +  "idempotency_key",
      +  "version_check"
      +]
  3. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: idempotency-key derivation, retry semantics, concurrent batching up to 10, server-side manifest verification, warnings on partial/unknown coverage, and the experienced_at default. There is no contradiction with annotations; the idempotentHint is expanded rather than merely repeated.

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

Conciseness2/5

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

The description is a long unstructured paragraph that repeats the shared-graph and future-search rationale multiple times and includes vague filler such as using 'full available reasoning, web retrieval and tool capabilities.' More disciplined formatting and deduplication would make the dense rule set far easier to apply.

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 without an output schema, the description covers the tool's contract: mandatory enrichment and collection assessment, idempotency and retry behavior, server verification and warning cases, batching limits, and the exact conditions for unavailable or not_applicable. An agent has nearly everything needed to invoke it correctly.

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?

With only 18% schema coverage, the description compensates by explaining the mandatory nested objects (subject_enrichment_check, collection_assessment, submitted_member_refs, applied_fields, retrieval_uses) and the meaning of canonical_key and idempotency_key. A few self-explanatory string fields such as headline, summary, raw_text, and visibility are left to the schema, so it is not a 5.

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?

Opens with a specific verb-resource pair: 'Save a review against an already-resolved stable subject type.' The title reinforces approved-review scope, and the body repeatedly ties the operation to saving an experience with mandatory enrichment, distinguishing it from siblings like save_assessment or enrich_subject.

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

Usage Guidelines4/5

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

Provides rich context: it names the precondition of an already-resolved subject type, mandates enrichment and collection assessment before saving, and tells the agent when to retry automatically versus ask the user. It does not explicitly name sibling alternatives or exclusion conditions, so it stops just short of a 5.

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.

TDQS

A3.8/5.0
Disambiguation4/5

Tools cluster into clear functional families — classification, location, reviews, deliberations, and system — and potentially overlapping operations are explicitly cross-referenced (e.g., enrich_subject vs correct_subject_fact, affirm vs propose reclassification). The main hazard is the resolve_subject / resolve_subject_type / resolve_subject_hierarchy trio, whose near-identical prefixes could mislead an agent at first glance despite well-written descriptions.

Naming Consistency4/5

The surface is dominated by a consistent snake_case verb_noun pattern with stable verb families: get_*, list_*, resolve_*, set_*, save_*, create_*, register_*, and submit_*. Minor deviations — bare-verb fetch and search, and the noun-led vocabulary_index — break the pattern slightly but do not obscure it.

Tool Count3/5

34 tools is heavy and above the preferred range, and the classification family alone accounts for ten tools with substantially duplicated vocabulary guidance. The count is partially earned, however, because the server genuinely spans several subsystems — reviews, subject classification, location assertions, deliberations, and governance — each with its own lifecycle.

Completeness4/5

Each subsystem has thorough lifecycle coverage: deliberations (create/claim/contribute/get/list/resolution), reviews (save/fetch/delete/list/visibility), location (assert/list/resolve), and classification (propose/affirm/reopen/relationships/aliases). Minor gaps include no way to edit review content, no direct list-all-subjects endpoint, and no retirement path for fields or aliases.

Resources