Skip to main content
Glama

Dayze — Life Context

Log Interaction

log_interaction

Contacts: log that the user was in touch with a contact ('I replied to Vadim', 'called Mum'): kind message, call, meeting, note, check_in or thought_of. Private to the owner. person_id (an owned contact) or person_name (linked only on one resolve_person match; otherwise nothing is logged and the candidates come back). With reply_id it also marks that Pending Reply sent: this interaction is the reply's one write-back (a later resolve adds no second). summary: one line in your own words, never email text or a subject. occurred_at: when it happened (ISO), default now; not in the future. Never sends anything. Requires API key or OAuth with context.write. ($0.05; API key required)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
kindNoDefault message.
summaryNoOne line (max 280) in your own words. Never the email body, subject or sender.
reply_idNoA Pending Reply (get_pending_replies) this closes as sent.
person_idNoAn owned contact id.
request_idNoClient idempotency key (retries return original result).
occurred_atNoWhen it happened (ISO date-time). Default now.
person_nameNoThe contact as the user said it ("Vadim"); linked only on one match.
idempotency_keyNoAlias for request_id.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
replyYesOne reply the user owes (Inbox → Pending Replies). Dayze never sends it.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
createdYesFalse when it was already stored (a retry, or the reply's write-back).
messageYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
interactionYesThe interaction in the contact's history (private to the owner).
reply_resolvedYesTrue when this call marked the reply sent.
life_state_rebuiltYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / account
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.",
      +  "properties": {
      +    "display_name": {
      +      "description": "Account display name.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "handle": {
      +      "description": "Account handle, e.g. @goh.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "note": {
      +      "description": "How to disclose the account to the user.",
      +      "type": "string"
      +    },
      +    "qa_fixture": {
      +      "description": "True for a known QA test account: its records are fixture data, not a real life.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "handle",
      +    "display_name",
      +    "qa_fixture",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / provenance
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Which connector wrote the record and which connected Dayze account received it.",
      +  "properties": {
      +    "account": {
      +      "additionalProperties": false,
      +      "description": "The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.",
      +      "properties": {
      +        "display_name": {
      +          "description": "Account display name.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "handle": {
      +          "description": "Account handle, e.g. @goh.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "note": {
      +          "description": "How to disclose the account to the user.",
      +          "type": "string"
      +        },
      +        "qa_fixture": {
      +          "description": "True for a known QA test account: its records are fixture data, not a real life.",
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "handle",
      +        "display_name",
      +        "qa_fixture",
      +        "note"
      +      ],
      +      "type": "object"
      +    },
      +    "channel": {
      +      "description": "Always mcp_connector.",
      +      "type": "string"
      +    },
      +    "connector": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "kind": {
      +          "description": "oauth or api_key.",
      +          "type": "string"
      +        },
      +        "name": {
      +          "description": "The connected app or API-key label shown to the account owner.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "kind",
      +        "name"
      +      ],
      +      "type": "object"
      +    },
      +    "source": {
      +      "description": "chatgpt for ChatGPT OAuth writes; mcp for another OAuth app or API key.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "source",
      +    "channel",
      +    "connector",
      +    "account"
      +  ],
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / properties / reply / properties / is_private
      Added value: +{
      +  "description": "Always true.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / reply / properties / visibility
      Added value: +{
      +  "description": "Always private: Pending Replies have no sharing setting.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / reply / required
      Previous value: -[
      -  "reply_id",
      -  "person_name",
      -  "person_id",
      -  "channel",
      -  "category",
      -  "summary",
      -  "draft",
      -  "status",
      -  "state",
      -  "due",
      -  "received_at",
      -  "source"
      -]New value: +[
      +  "reply_id",
      +  "person_name",
      +  "person_id",
      +  "channel",
      +  "category",
      +  "summary",
      +  "draft",
      +  "status",
      +  "state",
      +  "due",
      +  "received_at",
      +  "source",
      +  "visibility",
      +  "is_private"
      +]
  3. Added

TDQS

A4.6/5.0
Behavior5/5

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

Despite readOnlyHint=false being the only meaningful annotation, the description adds substantial behavioral context: it is private to the owner, it never sends anything, requires API key or OAuth with context.write, costs $0.05, and explains the reply_id write-back rule (a later resolve adds no second). It also discloses the failure mode for person_name resolution ('otherwise nothing is logged and the candidates come back').

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?

Purpose and the enumeration of kinds are front-loaded, and the parenthetical parameter glosses earn their space by carrying constraint detail. The single dense paragraph is efficient but slightly packed, which costs it the top score.

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 values need not be explained, and the description still covers auth, cost, privacy, side effects, resolution behavior and idempotency expectations. Nothing an agent needs to invoke this correctly is missing.

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 coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: the one-match linking rule for person_name, the single-write-back meaning of reply_id, the 'not in the future' constraint on occurred_at, and the 'never email text or a subject' restriction on summary. The request_id/idempotency_key distinction is left entirely to 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?

The description states a specific verb and resource ('log that the user was in touch with a contact') and enumerates the concrete interaction kinds it handles. Examples ('I replied to Vadim', 'called Mum') make it trivially distinguishable from siblings like log_moment, log_event or log_place_visit.

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?

It gives the trigger conditions and named examples for when to use it, plus the specific relationship to resolve_person and get_pending_replies. It stops short of explicitly excluding near-neighbors such as log_moment/log_event, so the agent must infer those boundaries.

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.