Skip to main content
Glama
chrischall

OurFamilyWizard MCP

by chrischall

ofw_save_draft

Create or replace a draft message in OurFamilyWizard, with attachment support and revision-based conflict protection to prevent overwriting changes made elsewhere.

Instructions

Save a message as a draft in OurFamilyWizard. RECIPIENTS: OurFamilyWizard does NOT persist recipients on drafts — recipientIds are accepted but the saved draft comes back with none (documented OFW behavior, noted once in the response, not warned about; supply recipientIds at send time instead). IDENTITY: the response leads with draftKey, the stable identity that survives editing — key off it, because the id changes on EVERY edit (replacing a draft creates a NEW draft and deletes the old one; OFW's update-in-place endpoint silently no-ops, so we never use it). Pass messageId to replace an existing draft; the response.id will be the NEW id, and a transparency NOTE documents the swap and which fields were carried over. THREADING: if replyToId is provided, the cache may rewrite it to the latest reply in the thread (note included). The threading verdict is read from OFW's full echo (replyToId/inReplyTo/showContext) — a warning appears ONLY when the reply linkage was genuinely dropped or re-targeted, and the response's top-level replyToId/inReplyTo always agree with its listData. Attach files via myFileIDs (from ofw_upload_attachment). After saving, the tool re-fetches the draft from OFW, and the returned revision reflects that authoritative state (so it will match on your next edit). SAFETY: because replacing DESTROYS the old draft rather than merging, passing messageId first re-reads that draft from OFW and REFUSES the write if its subject/body/recipients changed since you read it (drafts edited in the OFW web app do not bump any timestamp, so the local cache can be silently behind). A pure replyToId normalization by OFW is NOT treated as a conflict. The refusal returns the current server body under serverBody — merge your edit into it and retry with expectedRevision.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyYesMessage body text
forceNoDefault false. Overwrite even when the draft changed on OurFamilyWizard since you read it. The discarded server version is echoed back in the response. Only use after showing the user the conflict.
subjectYesMessage subject
messageIdNoID of an existing draft to replace (the new draft will have a new id; the old is deleted)
myFileIDsNoAttachment file ids (from ofw_upload_attachment)
replyToIdNoID of the message this draft replies to
recipientIdsNoArray of recipient user IDs (optional for drafts)
expectedRevisionNoWith messageId: the `revision` you got from ofw_list_drafts/ofw_get_message for that draft. Asserts you are replacing THAT version. If the draft changed on OFW since, the write is refused and the current server body is returned. Omit and the tool compares the server against the local cache instead — omitting never means "overwrite anyway".

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.8.0

TDQS

A5/5.0
Behavior5/5

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

Goes far beyond the readOnlyHint=false annotation, disclosing mutation consequences (replacement deletes the old draft, id changes on every edit), recipient non-persistence, replyToId normalization, conflict refusal behavior, and force semantics. The agent is fully warned about irreversible and surprising behaviors.

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?

Long but exceptionally dense and organized with clear section labels (RECIPIENTS, IDENTITY, THREADING, SAFETY). Every sentence carries non-obvious operational information; no filler is present, and the core action is stated first.

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 high-complexity mutation tool with no output schema, this description is remarkably complete. It covers returned identity fields (draftKey, id, revision), conflict response (serverBody), threading verdict fields, and failure recovery, so an agent can call and interpret it correctly without additional documentation.

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?

Although the schema already has 100% descriptive coverage, the description adds crucial semantics: recipientIds are not persisted, messageId leads to a new id and deletion, expectedRevision asserts a specific version, replyToId may be rewritten, and myFileIDs should come from ofw_upload_attachment. It substantially enhances the schema.

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 ('Save a message as a draft in OurFamilyWizard') and clarifies scope by distinguishing create from replace ('Pass messageId to replace an existing draft'). It is clearly distinct from sibling tools such as ofw_send_message, ofw_list_drafts, and ofw_delete_draft.

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?

Provides explicit routing cues: supply recipientIds at send time instead, pass messageId to replace, attach files via myFileIDs from ofw_upload_attachment, and retry with expectedRevision after a conflict. It also explains why the OFW update-in-place endpoint is never used. This is concrete when-to-use and alternative guidance.

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