Skip to main content
Glama
chrischall

OurFamilyWizard MCP

by chrischall

ofw_list_drafts

List co-parenting drafts with server-confirmed freshness. Automatically syncs if cache is stale; allows cache-only or auto-refresh when results are empty.

Instructions

List draft messages, verified against OurFamilyWizard in ONE call: when the local drafts cache is not verified-fresh, a cheap drafts sync runs first by default (verify:true), so the answer is server-confirmed without a second call. Pass verify:false to answer purely from the cache (no OFW requests). Returns an explicit complete boolean describing the RESULT SET: true means "these are ALL the drafts on OurFamilyWizard as of freshness.asOf" — check it before saying "you have N drafts". Each draft carries its draftKey (stable across the create-then-delete churn of editing) when one is known. An empty result from a cache that is not verified-fresh is REFUSED (result:"UNVERIFIED_EMPTY"); pass autoRefresh:true to sync and answer instead.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
sizeNoDrafts per page (default 50)
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact omits OurFamilyWizard's raw `listData` echo, which duplicates this draft's own id, subject, modifiedAt and recipients. `revision`, `draftKey` and `cacheStatus` are kept on both rungs.
verifyNoDefault true: when the drafts cache is not verified-fresh, run a drafts sync first (cheap — one list page plus one detail per draft) so the response is server-confirmed in one call. Set false to serve straight from the local cache with no OFW requests.
autoRefreshNoIf the result comes back EMPTY from a cache that is not verified-fresh, sync the backing folders first and answer from the refreshed cache instead of refusing. Defaults to the OFW_AUTO_REFRESH env var (false unless set), in which case the call refuses with result:"UNVERIFIED_EMPTY" and names the remedy. Costs OFW requests when it fires.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv2.15.1
    • addedInput schema / properties / view
      Added value: +{
      +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact omits OurFamilyWizard's raw `listData` echo, which duplicates this draft's own id, subject, modifiedAt and recipients. `revision`, `draftKey` and `cacheStatus` are kept on both rungs.",
      +  "enum": [
      +    "compact",
      +    "full"
      +  ],
      +  "type": "string"
      +}
  2. Changed1 schema field changedv2.14.0
    • addedInput schema / properties / verify
      Added value: +{
      +  "description": "Default true: when the drafts cache is not verified-fresh, run a drafts sync first (cheap — one list page plus one detail per draft) so the response is server-confirmed in one call. Set false to serve straight from the local cache with no OFW requests.",
      +  "type": "boolean"
      +}
  3. Changed1 schema field changedv2.9.2
    • addedInput schema / properties / autoRefresh
      Added value: +{
      +  "description": "If the result comes back EMPTY from a cache that is not verified-fresh, sync the backing folders first and answer from the refreshed cache instead of refusing. Defaults to the OFW_AUTO_REFRESH env var (false unless set), in which case the call refuses with result:\"UNVERIFIED_EMPTY\" and names the remedy. Costs OFW requests when it fires.",
      +  "type": "boolean"
      +}
  4. First observedv2.8.0

TDQS

A4.4/5.0
Behavior5/5

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

The description fully discloses that this appears to be a list operation but may trigger a drafts sync, make OFW requests, and refuse empty results from a stale cache. It explains the semantic meaning of `complete`, `draftKey`, and UNVERIFIED_EMPTY, going well beyond the annotation readOnlyHint:false. There is no contradiction and no hidden side effect is glossed over.

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 but front-loaded, leading with the main purpose and then layering essential caveats. Some content repeats the schema's verify and autoRefresh explanations, but the behavioral warnings about `complete` and UNVERIFIED_EMPTY are crucial enough to justify the length. A bulleted structure would improve scannability but the current form is efficient.

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?

Given there is no output schema, the description compensates well by explaining the crucial return semantics: the `complete` boolean, the `draftKey` stability, and the UNVERIFIED_EMPTY refusal path. It also covers pagination and response-shape parameters through the input schema. Nothing essential for invoking this tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already explains verify, autoRefresh, view, page, and size. The main description adds no new parameter-level meaning beyond reinforcing the verify/autoRefresh workflow, which the schema already covers. This meets the baseline for fully documented parameters without adding extra value.

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 and resource: 'List draft messages'. It distinguishes this from sibling messaging tools by focusing on drafts and adds a distinctive guarantee: results are 'verified against OurFamilyWizard in ONE call'. This makes the tool's purpose immediately identifiable even without opening the schema.

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 concrete guidance on when to use each mode: verify:true for server-confirmed answers, verify:false for cache-only answers, and autoRefresh:true to resolve UNVERIFIED_EMPTY. It does not explicitly name sibling tools as alternatives for non-draft listing, but the context of draft messages and the explicit flag guidance make the usage conditions clear.

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