Skip to main content
Glama

Vilix AI

save_turn

Persist this exchange — fire-and-forget, never at the user's expense.

Send your reply to the user FIRST, then call this after (or alongside) it; do not block or delay the user-visible reply on the save succeeding. assistant_message is the reply as actually sent, not a draft. If a save fails or you could not call it, retry once if your environment allows; otherwise catch up on the NEXT turn by also saving the missed prior turn. Re-sends are safe: retried or duplicate saves are deduplicated server-side (the response carries deduped: true and the original chat_id instead of double-saving).

chat_id: omit or null to start a new conversation; otherwise reuse the id returned by a prior save_turn.

source (required): the product or surface you run in — self-identify with a short label. Examples: Claude, Claude Code, Claude Cowork, Cursor, ChatGPT, Codex, Kiro, Gemini, a phone chatbot app, or an IDE agent. Use the same source for both messages in this turn.

attachment_context (optional, default "") — if the user's message for this turn had an attachment (file, image, code paste, screenshot OCR), pass a short plain-text summary of it here. Persisted next to user_message so later retrieval can match on the attachment topic. Pass the SAME summary you passed to get_context this turn. Empty = no attachment.

turn_id (optional) — a client-generated id for this turn (any short unique string). A retried save with the same turn_id never double-saves, even if the content was edited between attempts. Without it, identical re-sends are still deduplicated by content within a short window.

assistant_message_sha256 (optional) — sha256 hex digest of the assistant message as actually RENDERED to the user. If supplied, the server checks it against the stored message and returns drift: true when they differ (you saved a different message than the user saw). The save always proceeds; this is an integrity signal only.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sourceYes
chat_idNo
turn_idNo
user_messageYes
assistant_messageYes
attachment_contextNo
assistant_message_sha256No

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
driftNo
errorNo
noticeNo
chat_idNo
dedupedNo
messageNo
upgrade_urlNo
advisory_nonceNo
server_advisoryNo

Schema Changelog

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

  1. First observed

TDQS

A5/5.0
Behavior5/5

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

The description discloses rich behavior beyond the sparse annotations: fire-and-forget semantics, server-side deduplication with 'deduped: true' responses, drift detection via assistant_message_sha256 ('drift: true'), and safe re-send behavior. While idempotentHint=false is conservatively set, the description precisely documents the actual dedup guarantees (content-based within a short window, turn_id-based forever), which supplements rather than contradicts the annotation.

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?

The description is long but every sentence earns its place — the most critical behavioral constraint (non-blocking, reply-first) is front-loaded, and each paragraph covers exactly one parameter or policy. Given 0% schema coverage and 7 parameters, this density is appropriate rather than verbose.

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?

An output schema exists, so return-value documentation is not required, and the description covers everything else an agent needs: call ordering, retry and catch-up semantics, parameter semantics for all non-obvious fields, idempotency behavior, and the integrity-checking mechanism. No operational gaps remain for a tool of this complexity.

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

Parameters5/5

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

Schema description coverage is 0%, so the description bears the full burden — and it delivers. chat_id ('omit or null to start a new conversation; otherwise reuse the id returned by a prior save_turn'), source (with concrete examples), attachment_context (same summary as get_context), turn_id (retry never double-saves), and assistant_message_sha256 (integrity check, not a gate) are all given meaning the bare schema lacks. It also clarifies that assistant_message is 'the reply as actually sent, not a draft.'

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 opening sentence — 'Persist this exchange' — names a specific verb (persist/save) and resource (the conversation turn), making the tool's function instantly unambiguous. It is clearly differentiated from the sibling list, which is dominated by retrieval tools (search_keyword, recent_messages, get_context), and this is the only persistence/write tool for conversation history.

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?

The description gives explicit sequencing guidance: 'Send your reply to the user FIRST, then call this after (or alongside) it; do not block or delay the user-visible reply.' It also specifies failure-handling policy (retry once if the environment allows, otherwise catch up on the NEXT turn) and cross-tool consistency with get_context for attachment summaries. This is textbook when-to-use guidance.

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

Most tools map cleanly to distinct resource+action pairs: projects, tasks, skills, user rules, memory, and messaging are all clearly separated. The main ambiguity is update_task versus update_task_state, since update_task can also change state and plan_status, though the descriptions do point to the narrow intended use.

Naming Consistency4/5

The naming is largely consistent verb_noun snake_case: create_project, update_skill, delete_task, list_projects, get_context, save_turn. Minor deviations include recent_messages lacking a verb, remove_user_rule versus delete_* style, and singular user_rule in mutations versus plural user_rules in listing.

Tool Count2/5

With 27 tools, the server is over the typical well-scoped MCP range, even though it covers several domains. Some consolidation is possible, such as folding update_task_state into update_task and reducing the overlapping retrieval/search tools.

Completeness4/5

The tool set provides strong lifecycle coverage for projects, tasks, skills, and user rules, plus memory retrieval, agent messaging, and onboarding help. Minor gaps exist, like no standalone get_task or list_tasks and no explicit inbox listing, but get_project and get_context largely cover those needs.

Resources