Skip to main content
This implementation is not enabled for customer use. Access is restricted to a signed-in platform operator acting in a seller account without user impersonation. Ordinary seller accounts do not receive the Session tools or search kind, and direct calls are denied. tools/list for the active account remains authoritative.

Scope and access

search({"kind":"session"}), get({"kind":"session","id":"..."}), and save_session({"action":"record_note", ...}) use the operator’s active seller account and apply only to native Murph conversations. Operator access does not bypass room permissions. A member can read their own room. A shared room is readable only while the server’s current room-sharing policy permits that member. The server checks that policy again for every page and for every note retry. Changing a participant or advertiser link does not grant access. Generic intake, historical RFP exchanges, buyer message delivery, lifecycle updates, approvals, chat execution, and evaluations are not available through this admitted slice.

Find and read retained history

Only conversations with a complete-history publication admission appear in Session search. A retained root alone is not admission. Search and get never create a Murph room, import history, allocate an event position, or repair source data. This source supports text query and lifecycle filters. Requests for purpose, live status, attention, operator domain, advertiser, transport or updated-time filters are rejected; they are not treated as successful unfiltered searches. Session search captures a committed publication-sequence ceiling on the first page and binds it to an opaque cursor generation. Pages use that fixed retained membership snapshot, with a conversation-ID tiebreaker, rather than mutable native message activity. A conversation first retained after that ceiling is excluded until a fresh search. An old cursor or one with a mismatched generation must restart the search. The cursor also binds the complete matching retained set at that ceiling. If matching text, lifecycle, or current room access changes that set between pages, the next page requires a fresh search rather than silently skipping or adding a room. Native activity that does not change the set, and publications after the ceiling, do not invalidate the traversal. Search cursors are separate from the event cursors returned by get. In both cases, current account and room access are checked again on every page. get returns an immutable page of retained events and three cursor values:
  • snapshotThrough fixes the committed prefix being read.
  • pageNextAfter is present only when that prefix has another page.
  • resumeAfter remains at that prefix’s boundary, including an empty or final page, so a later poll can receive publications that arrived while pages were being read.
Continue an existing snapshot with pageNextAfter as after and the original snapshotThrough as through. Once it is consumed, poll with resumeAfter as after and no through. Cursors identify positions, not permission: current account and room access are rechecked on every read.

Complete result boundary

On a successful retained Session get, both the text-only MCP channel and structuredContent carry the complete declared Session page: event bodies, evidence and locators, participant/link-decision context, approvals, capabilities, and cursor values. Text is fenced as untrusted data; it is not a separate excerpt or a lossy summary. The complete returned MCP result, including both channels, is limited to 128,000 characters. If that complete result does not fit, get returns a VALIDATION_ERROR and attaches no Session page. For a multi-event page, retry the same Session ID and after/through boundary with limit: 1 or a smaller valid limit. If a one-event minimum page still exceeds the boundary, repeating the same request cannot recover it: this read has no text-offset continuation. Historical Murph import is an explicit server-side, bounded operation. It imports at most 100 native messages and commits publication admission in the same transaction. A fresh room may admit only with its first native message. An older room can continue native conversation work while unadmitted; if its history exceeds the bound or its retained root is partial, Session search, get, and notes remain unavailable and the stored timeline is not rewritten. Later native publications and private notes use the same retained sequence. A message or note never changes an already returned event.

Add a private coaching note

Use save_session with an exact Session ID, private note, and clientRequestId:
The note is an authored private event; it does not send a buyer message, amend the conversation, alter a response in progress, update Playbook, approve an action, or create an evaluation. The same scoped request ID and same content reuses the retained note without appending a duplicate. Its delivery receipt remains null. Reusing that key with different content fails. If current room or seller access has been revoked, both a new write and its retry fail.

Delivery status

This is retained-history and private-note infrastructure only. It does not claim deployment, customer enablement, message delivery, response approval, or completed evaluation work. The native source remains responsible for conversation execution and room permissions.