Skip to main content
Glama

handoff_save

Idempotent

Save a session handoff note for cross-device / cross-session continuation. Stored at handoffs/{project}-{topic}-{YYYY-MM-DD}.txt in the user's primary vault. Use the optional time param (HHMM, KST) to disambiguate multiple handoffs saved on the same day — it is appended to the topic slug (e.g. topic='phase-d', time='1555' → handoffs/{project}-phase-d-1555-{date}.txt).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateNoOptional override date (YYYY-MM-DD). Defaults to today in server timezone.
timeNoOptional time-of-day suffix in HHMM 24h format (KST), e.g. '1555'. Appended to the topic slug so multiple handoffs on the same day stay distinguishable. Omit for once-per-day saves.
topicYesShort topic slug for this handoff, e.g. 'phase-d-port', 'oauth-fix'. Lowercase-hyphen.
contentNoFull handoff text. Should follow the session-handoff skill template (현재 상태 / 작업 위치 / 수정 파일 / 결정 사항 / 다음 STEP / 알려진 이슈). WAF-bypass tip: prefix the string with '__B64__:' followed by base64-encoded payload to bypass Render/Cloudflare edge WAF for large bodies (~10KB+) that get false-positive blocked as SQLi/cmd-injection.
projectYesProject slug, e.g. 'logi', 'ainote', 'krx_ai'. Lowercase, no spaces.
device_idNoOptional: client device identifier (e.g., from ~/.claude/ainote-sync/device.id). Stored on FileIndex so future conflict responses can report which device last wrote the handoff. Same field sync_push uses.
content_b64NoOptional: base64-encoded handoff text (use INSTEAD of `content`). For WAF-bypass on large bodies. Server decodes before storing.

Schema Changelog

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

  1. Changed1 schema field changed
    • addedInput schema / $schema
      Added value: +"https://json-schema.org/draft/2020-12/schema"
  2. Changed1 schema field changed
    • addedInput schema / properties / device_id
      Added value: +{
      +  "description": "Optional: client device identifier (e.g., from ~/.claude/ainote-sync/device.id). Stored on FileIndex so future conflict responses can report which device last wrote the handoff. Same field sync_push uses.",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedInput schema / required
      Previous value: -[
      -  "project",
      -  "topic",
      -  "content"
      -]New value: +[
      +  "project",
      +  "topic"
      +]
  4. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (write, idempotent, non-destructive), the description discloses the exact file path pattern, default date behavior, time suffix disambiguation, and a WAF-bypass technique. This adds substantial behavioral context that is not present in annotations.

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

Conciseness4/5

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

The description is dense and includes an example and a WAF tip, but the content is directly relevant and well-structured. It is not overly verbose given the amount of critical information conveyed.

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 is highly detailed regarding storage, naming, and parameter behavior, but it does not mention the return value or post-save confirmation. Given no output schema, a brief note on what the tool returns would be beneficial for completeness.

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 coverage is 100%, but the description goes further by explaining the `time` parameter's effect on the filename with a concrete example, the default behavior for `date`, and the `content_b64` alternative to `content`. This enriches the schema's basic type descriptions.

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+resource: 'Save a session handoff note for cross-device / cross-session continuation.' It clearly identifies what the tool does and distinguishes it from sibling tools like handoff_read.

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 provides clear context for when to use the tool (saving handoffs for continuity) but does not explicitly mention alternatives or exclusions. The sibling list includes handoff_read, implying the read counterpart, but explicit cross-referencing would make the guidance stronger.

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

Most tools clearly target distinct resources (tasks, docs, graph, sync, env_sync, handoffs, judgments, projects, vault). A few pairs could confuse, like sync_push vs vault_sync (which has a push action) and env_sync_write vs env_sync_txn_push, but descriptions mostly clarify boundaries.

Naming Consistency3/5

Names are predominantly snake_case with a noun_verb pattern (e.g., sync_push, task_write), but there are notable inconsistencies: plural/singular mismatches (dev_docs_read vs dev_doc_write, tasks_read vs task_write), verb-first names (list_papers, get_setup_guide, judgment_submit), and a dotted sub-namespace (env_sync.secret_pull) mixed with flat names (env_sync_txn_push).

Tool Count2/5

35 tools is a large surface for a personal note/sync server. While it spans many domains (auth, tasks, docs, sync, env_sync, graph, etc.), the sheer number feels heavy and likely overwhelms agents with too many choices, especially when several tools are consolidated sub-action surfaces.

Completeness3/5

Most domains have reasonable CRUD coverage (tasks, dev docs, graph, sync, env_sync, vault). However, noticeable gaps exist: memory has no write tool (only read), papers only support listing (no create/update/delete), assumptions have write but no dedicated read or delete, and judgment is effectively submit-and-list only.

Resources