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.

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the idempotentHint annotation, the description reveals substantial server-side behavior: manifests are stored and verified, collection_id and manifest_revision are reused, idempotency keys prevent duplicates, independent writes can be batched up to 10, and routine retries should happen without asking the user. It also discloses defaults such as experience date and warns against inventing facts or silently geocoding coordinates.

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

Conciseness3/5

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

The description is extremely long and contains repeated concepts, such as the shared-graph enrichment rationale appearing more than once, and it presents everything as one dense paragraph without bullets or clear sectioning. The volume is partly justified by the tool's genuine complexity, but the repetition and lack of structure keep it from being concise.

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?

For a tool with 17 parameters, nested objects, no output schema, and deep server-side semantics, the description is remarkably complete: it covers idempotency, concurrency, manifest refresh, coverage statuses, collection traversal evidence, retry policy, and ask-vs-act boundaries. An agent has enough context to invoke the tool correctly in most realistic scenarios.

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 description coverage is only 18%, so the description carries heavy responsibility for explaining parameters, and it largely delivers. It explains subject_enrichment_check statuses, applied_fields/retrieval_uses provenance requirements, collection_assessment mandates, canonical identifier storage, structured_data preservation, and idempotency key derivation. Some parameters like visibility and subject_provenance receive no semantic guidance, but the most complex and error-prone fields are well covered.

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

Purpose4/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: 'Save a review against an already-resolved stable subject type,' which clearly states the core operation. It does not explicitly name or contrast sibling tools such as enrich_subject or save_assessment, so it misses the highest bar for sibling differentiation, but the core purpose is unambiguous.

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?

The description gives detailed workflow context: when to retry automatically, when to ask the user, when to use unavailable, not_applicable, and ambiguous, and when to reuse collection_id versus resubmit a manifest. It does not explicitly state 'use X instead of this tool' for any sibling, but the usage context is strong and actionable.

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.6/5.0
Disambiguation3/5

Most tools are separated by resource and action, but the classification cluster (affirm_subject_classification, propose_subject_reclassification, reopen_subject_classification, get_subject_classification) and the three resolve_subject* tools require close reading to distinguish. Long descriptions help, but an agent could easily pick the wrong member of those clusters.

Naming Consistency4/5

The dominant pattern is verb_noun in snake_case (create_deliberation, list_reviews_by_visibility, resolve_subject_type, set_review_visibility). Minor deviations such as bare 'fetch' and 'search' and mixed verbs like affirm vs propose vs reopen are readable and do not break the convention.

Tool Count2/5

34 tools substantially exceeds the 25+ threshold even for a server with multiple subdomains. The many classification, type, and location variants add cognitive load, and several could be consolidated or hidden behind a smaller workflow-oriented surface.

Completeness4/5

The set covers the main lifecycles: review save/fetch/assess/delete/visibility, subject resolution/enrichment/correction, classification with voting/reopening, deliberations, locations, and vocabulary management. Minor gaps remain, such as no direct full-subject getter and no update to review text, but these appear intentional in an immutable-review design.