add_observation
Append a fact to a memory entity (re-materializing its note when materialized). observation must be a single non-blank fact with no embedded newline — a caller with more than one fact calls this more than once. An optional key opts the observation INTO supersession tracking — when the same entity already has an OPEN observation with that key, it is closed (not deleted: its text stays under the note’s Superseded section, its interval’s valid_to is set and superseded_by records what replaced it) and the new text opens a fresh interval. An observation added with no key never supersedes anything and is never superseded automatically; it just appends. Matching is always by this explicit key, never inferred from text similarity. To CORRECT or REMOVE an existing fact (including one with no key), do not add a contradicting observation: call update_observation with its observation_id (returned by create_entity, add_observation and get_entity). valid_from/valid_to (ISO 8601) let a caller backdate a fact or bound it explicitly. To retire a keyed fact WITHOUT replacing it, omit observation and pass key + valid_to — closes the open interval for that key with no new text appended. Domain: knowledge.
| Domain | knowledge |
| Scopes | write:memory |
| Access | write |
| Tags | writes, domain:knowledge |
| Profile | core, full |
Annotations
Section titled “Annotations”| Annotation | Value |
|---|---|
| Read-only | no |
| Destructive | no |
| Idempotent | no |
| Accepts an idempotency key | yes |
Idempotent is the advisory MCP idempotentHint. Destructive is also yes for a tool that
asks for confirmation only on some calls.
Confirmation (human in the loop)
Section titled “Confirmation (human in the loop)”No human confirmation is required to call this tool.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
vault |
string |
— | Vault id. May be omitted when only one vault is available. length 1–64; pattern ^[a-z0-9_-]+$ |
|
entity_id |
string |
yes | — | length ≥ 1 |
observation |
string |
— | length ≥ 1 | |
key |
string |
— | length 1–64; pattern ^[a-z0-9][a-z0-9_.-]*$ |
|
valid_from |
string |
— | pattern ^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$; format date-time |
|
valid_to |
string |
— | pattern ^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$; format date-time |
|
idempotency_key |
string |
— | length 1–128 |
Output
Section titled “Output”| Field | Type | Always present | Description |
|---|---|---|---|
entity_id |
string |
yes | — |
observation_id |
string |
— | |
observation_count |
number |
yes | — |
updated_at |
number |
yes | — |
vault_path |
string | null |
yes | — |
redactions |
integer |
range ≥ 0 |
Related tools
Section titled “Related tools”Other tools in the knowledge domain: audit_provenance, close_goal, commit_capture, commit_wiki_page, create_entity, delete_entity, diagnose_retrieval, draft_wiki_page, end_session, enqueue_capture, episode_stats, explain_answer, find_existing_page, gap_report, get_entity, get_session_traces, knowledge_challenge, link_entities, lint_wiki, list_capture_queue, list_contradictions, list_goals, note_quality_report, plur_get, plur_recall, plur_recall_hybrid, plur_similarity_search, query_entity_graph, record_retrieval_feedback, reflect, rename_entity, session_bootstrap, set_goal, start_session, unlink_entities, update_observation, vault_context, vault_graph_search, work_episode_chain, work_episodes, work_forget, work_result, work_search.
Back to the tool catalog.