API referencegRPC / ConnectRPC

gRPC / ConnectRPC

Shipped in v3-alpha (Beta). 17 RPCs are served via ConnectRPC, path-dispatched on the same HTTP port as REST under the prefix /mnemosyne.v1.MnemosyneService/. Interfaces may still change before 3.0 stable.

Service definition

syntax = "proto3";
package mnemosyne.v1;
 
service MnemosyneService {
  // ─── Unary ───
  rpc Recall(RecallRequest) returns (RecallResponse);
  rpc Remember(RememberRequest) returns (RememberResponse);
  rpc Forget(ForgetRequest) returns (ForgetResponse);
  rpc ResolveReasoning(ResolveRequest) returns (ResolveResponse);
  rpc RecordReasoning(RecordReasoningRequest) returns (RecordReasoningResponse);
  rpc CreateTask(CreateTaskRequest) returns (Task);
  rpc UpdateTask(UpdateTaskRequest) returns (Task);
  rpc RecordEvent(RecordEventRequest) returns (Event);
  rpc SelfEdit(SelfEditRequest) returns (SelfEditResponse);
  rpc GetHealth(HealthRequest) returns (HealthSnapshot);
 
  // ─── Server Streaming ───
  rpc WatchMemory(WatchRequest) returns (stream MemoryEvent);
  rpc WatchTasks(WatchTasksRequest) returns (stream TaskEvent);
  rpc StreamHealth(HealthRequest) returns (stream HealthSnapshot);
 
  // ─── Client Streaming ───
  rpc IngestBatch(stream IngestItem) returns (IngestSummary);
  rpc ImportMemory(stream MemoryChunk) returns (ImportResult);
 
  // ─── Bidirectional ───
  rpc Session(stream SessionMessage) returns (stream SessionResponse);
  rpc FederationSync(stream SyncMessage) returns (stream SyncMessage);
}

Why ConnectRPC

The server speaks ConnectRPC, which means:

  • Web-friendly: works from browsers via Connect-Web (no gRPC-Web proxy)
  • JSON-compatible: same endpoints accept Protobuf or JSON
  • Tooling: codegen for TypeScript, Go, Swift, Kotlin via Buf

Use cases

MethodWhy streaming
WatchMemoryLong-lived listener — push new facts as they arrive
IngestBatchBulk import without batching round-trips
SessionConversational state — turn-by-turn over one connection
FederationSyncBidirectional reconciliation with peer instance

Authentication

metadata: { authorization: "Bearer mns_live_xxx" }

See also