@memoraone/mcp 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/daemon.cjs CHANGED
@@ -551,80 +551,106 @@ var postEventShape = {
551
551
  metadata: import_v42.z.record(import_v42.z.string(), import_v42.z.any()).optional()
552
552
  };
553
553
 
554
- // src/tools/askWithMemory.ts
554
+ // src/tools/createFact.ts
555
555
  var import_v43 = require("zod/v4");
556
+ var createFactShape = {
557
+ content: import_v43.z.string().min(1).describe("Explicit fact text to persist for the current project"),
558
+ metadata: import_v43.z.record(import_v43.z.string(), import_v43.z.any()).optional()
559
+ };
560
+
561
+ // src/tools/addPersonalContext.ts
562
+ var import_v44 = require("zod/v4");
563
+ var addPersonalContextShape = {
564
+ content: import_v44.z.string().min(1).describe("Text to store (note, preference, or similar)"),
565
+ category: import_v44.z.string().optional().describe("Optional category label"),
566
+ tags: import_v44.z.array(import_v44.z.string()).optional().describe("Optional tags"),
567
+ scope_type: import_v44.z.enum(["general", "project"]).optional(),
568
+ scope_id: import_v44.z.string().optional()
569
+ };
570
+
571
+ // src/tools/getPersonalContext.ts
572
+ var import_v45 = require("zod/v4");
573
+ var getPersonalContextShape = {
574
+ query: import_v45.z.string().optional().describe("Search query; sent as q when set"),
575
+ scope_type: import_v45.z.enum(["general", "project"]).optional(),
576
+ scope_id: import_v45.z.string().optional(),
577
+ limit: import_v45.z.number().int().positive().optional().describe("Max items to return")
578
+ };
579
+
580
+ // src/tools/askWithMemory.ts
581
+ var import_v46 = require("zod/v4");
556
582
  var askWithMemoryShape = {
557
- question: import_v43.z.string().min(1),
558
- code_context: import_v43.z.object({
559
- file_path: import_v43.z.string().optional(),
560
- selected_text: import_v43.z.string().optional(),
561
- language: import_v43.z.string().optional()
583
+ question: import_v46.z.string().min(1),
584
+ code_context: import_v46.z.object({
585
+ file_path: import_v46.z.string().optional(),
586
+ selected_text: import_v46.z.string().optional(),
587
+ language: import_v46.z.string().optional()
562
588
  }).optional()
563
589
  };
564
590
 
565
591
  // src/tools/logIntent.ts
566
- var import_v44 = require("zod/v4");
592
+ var import_v47 = require("zod/v4");
567
593
  var logIntentShape = {
568
- intent: import_v44.z.enum(["task", "decision"]),
569
- message: import_v44.z.string().min(1),
570
- context: import_v44.z.record(import_v44.z.string(), import_v44.z.any()).optional(),
571
- intent_source: import_v44.z.string().optional().default("cursor_chat"),
572
- run_id: import_v44.z.string().min(1).optional()
594
+ intent: import_v47.z.enum(["task", "decision"]),
595
+ message: import_v47.z.string().min(1),
596
+ context: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional(),
597
+ intent_source: import_v47.z.string().optional().default("cursor_chat"),
598
+ run_id: import_v47.z.string().min(1).optional()
573
599
  };
574
600
 
575
601
  // src/tools/logChangeSummary.ts
576
- var import_v45 = require("zod/v4");
602
+ var import_v48 = require("zod/v4");
577
603
  var logChangeSummaryShape = {
578
- summary: import_v45.z.string().min(1),
579
- scope: import_v45.z.string().min(1).optional(),
580
- files: import_v45.z.array(import_v45.z.string().min(1)).optional(),
581
- stats: import_v45.z.object({
582
- files: import_v45.z.number().int().nonnegative().optional(),
583
- add: import_v45.z.number().int().nonnegative().optional(),
584
- del: import_v45.z.number().int().nonnegative().optional()
604
+ summary: import_v48.z.string().min(1),
605
+ scope: import_v48.z.string().min(1).optional(),
606
+ files: import_v48.z.array(import_v48.z.string().min(1)).optional(),
607
+ stats: import_v48.z.object({
608
+ files: import_v48.z.number().int().nonnegative().optional(),
609
+ add: import_v48.z.number().int().nonnegative().optional(),
610
+ del: import_v48.z.number().int().nonnegative().optional()
585
611
  }).optional(),
586
- commit: import_v45.z.string().min(1).optional(),
587
- run_id: import_v45.z.string().min(1).optional()
612
+ commit: import_v48.z.string().min(1).optional(),
613
+ run_id: import_v48.z.string().min(1).optional()
588
614
  };
589
615
 
590
616
  // src/tools/logToolResult.ts
591
- var import_v46 = require("zod/v4");
617
+ var import_v49 = require("zod/v4");
592
618
  var logToolResultShape = {
593
- tool: import_v46.z.string().min(1),
594
- status: import_v46.z.enum(["ok", "error", "partial"]),
595
- summary: import_v46.z.string().min(1),
596
- run_id: import_v46.z.string().min(1).optional(),
597
- duration_ms: import_v46.z.number().int().nonnegative().optional(),
598
- error_code: import_v46.z.string().min(1).optional(),
599
- error_message: import_v46.z.string().min(1).optional(),
600
- error_kind: import_v46.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
601
- stats: import_v46.z.record(import_v46.z.string(), import_v46.z.any()).optional()
619
+ tool: import_v49.z.string().min(1),
620
+ status: import_v49.z.enum(["ok", "error", "partial"]),
621
+ summary: import_v49.z.string().min(1),
622
+ run_id: import_v49.z.string().min(1).optional(),
623
+ duration_ms: import_v49.z.number().int().nonnegative().optional(),
624
+ error_code: import_v49.z.string().min(1).optional(),
625
+ error_message: import_v49.z.string().min(1).optional(),
626
+ error_kind: import_v49.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
627
+ stats: import_v49.z.record(import_v49.z.string(), import_v49.z.any()).optional()
602
628
  };
603
629
 
604
630
  // src/tools/logCommand.ts
605
- var import_v47 = require("zod/v4");
631
+ var import_v410 = require("zod/v4");
606
632
  var logCommandShape = {
607
- cmd: import_v47.z.string().min(1),
608
- summary: import_v47.z.string().min(1),
609
- cwd: import_v47.z.string().min(1).optional(),
610
- exit_code: import_v47.z.number().int().optional(),
611
- duration_ms: import_v47.z.number().int().nonnegative().optional(),
612
- run_id: import_v47.z.string().min(1).optional(),
613
- stats: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional()
633
+ cmd: import_v410.z.string().min(1),
634
+ summary: import_v410.z.string().min(1),
635
+ cwd: import_v410.z.string().min(1).optional(),
636
+ exit_code: import_v410.z.number().int().optional(),
637
+ duration_ms: import_v410.z.number().int().nonnegative().optional(),
638
+ run_id: import_v410.z.string().min(1).optional(),
639
+ stats: import_v410.z.record(import_v410.z.string(), import_v410.z.any()).optional()
614
640
  };
615
641
 
616
642
  // src/tools/listProjects.ts
617
643
  var listProjectsShape = {};
618
644
 
619
645
  // src/tools/setProject.ts
620
- var import_v48 = require("zod/v4");
646
+ var import_v411 = require("zod/v4");
621
647
  var setProjectShape = {
622
- projectKey: import_v48.z.string().min(1).optional(),
623
- projectId: import_v48.z.string().min(1).optional()
648
+ projectKey: import_v411.z.string().min(1).optional(),
649
+ projectId: import_v411.z.string().min(1).optional()
624
650
  };
625
651
 
626
652
  // src/tools/handlers/postEvent.ts
627
- var import_v49 = require("zod/v4");
653
+ var import_v412 = require("zod/v4");
628
654
  var crypto3 = __toESM(require("crypto"), 1);
629
655
 
630
656
  // src/runContext.ts
@@ -686,14 +712,14 @@ function generateRunId() {
686
712
  }
687
713
 
688
714
  // src/tools/handlers/postEvent.ts
689
- var postEventInputSchema = import_v49.z.object({
690
- kind: import_v49.z.string().min(1),
691
- actor: import_v49.z.object({
692
- identifier: import_v49.z.string().min(1),
693
- id: import_v49.z.string().min(1).optional()
715
+ var postEventInputSchema = import_v412.z.object({
716
+ kind: import_v412.z.string().min(1),
717
+ actor: import_v412.z.object({
718
+ identifier: import_v412.z.string().min(1),
719
+ id: import_v412.z.string().min(1).optional()
694
720
  }),
695
- content: import_v49.z.record(import_v49.z.string(), import_v49.z.any()),
696
- metadata: import_v49.z.record(import_v49.z.string(), import_v49.z.any()).optional()
721
+ content: import_v412.z.record(import_v412.z.string(), import_v412.z.any()),
722
+ metadata: import_v412.z.record(import_v412.z.string(), import_v412.z.any()).optional()
697
723
  });
698
724
  async function handlePostEvent(client, args) {
699
725
  const nonce = crypto3.randomBytes(8).toString("hex");
@@ -735,14 +761,144 @@ async function handlePostEvent(client, args) {
735
761
  return { ok: true, forwarded: true };
736
762
  }
737
763
 
764
+ // src/tools/handlers/createFact.ts
765
+ var import_v413 = require("zod/v4");
766
+ var createFactInputSchema = import_v413.z.object({
767
+ content: import_v413.z.string().min(1),
768
+ metadata: import_v413.z.record(import_v413.z.string(), import_v413.z.any()).optional()
769
+ });
770
+ async function handleCreateFact(client, args) {
771
+ const parsed2 = createFactInputSchema.parse(args ?? {});
772
+ const projectKey = getCurrentProjectId();
773
+ if (!projectKey) {
774
+ throw new Error("No project selected. Use memora_list_projects and memora_set_project to select a project.");
775
+ }
776
+ const content = parsed2.content.trim();
777
+ if (!content) {
778
+ throw new Error("content cannot be empty after trimming");
779
+ }
780
+ const { tags: userTagsRaw, ...userMetaRest } = parsed2.metadata ?? {};
781
+ const userTags = Array.isArray(userTagsRaw) ? userTagsRaw.filter((t) => typeof t === "string") : [];
782
+ const tags = ["explicit_fact", ...userTags.filter((t) => t !== "explicit_fact")];
783
+ const body = {
784
+ projectKey,
785
+ content,
786
+ metadata: {
787
+ ...userMetaRest,
788
+ source: "memoraone-mcp",
789
+ purpose: "explicit_fact",
790
+ schema: "v1",
791
+ tool: "memora_create_fact",
792
+ agent_identifier: config2.agentName,
793
+ tags
794
+ }
795
+ };
796
+ try {
797
+ const result = await client.post("/facts", body);
798
+ return { ok: true, result };
799
+ } catch (err) {
800
+ if (err instanceof MemoraOneHttpError) {
801
+ const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
802
+ throw new Error(
803
+ `memora_create_fact failed: ${err.status} ${err.message} ${bodyText}`.trim()
804
+ );
805
+ }
806
+ throw err;
807
+ }
808
+ }
809
+
810
+ // src/tools/handlers/addPersonalContext.ts
811
+ var import_v414 = require("zod/v4");
812
+ var addPersonalContextInputSchema = import_v414.z.object({
813
+ content: import_v414.z.string().min(1),
814
+ category: import_v414.z.string().optional(),
815
+ tags: import_v414.z.array(import_v414.z.string()).optional(),
816
+ scope_type: import_v414.z.enum(["general", "project"]).optional(),
817
+ scope_id: import_v414.z.string().optional()
818
+ });
819
+ async function handleAddPersonalContext(client, args) {
820
+ const parsed2 = addPersonalContextInputSchema.parse(args ?? {});
821
+ const content = parsed2.content.trim();
822
+ if (!content) {
823
+ throw new Error("content cannot be empty after trimming");
824
+ }
825
+ const body = { content };
826
+ if (parsed2.category !== void 0 && parsed2.category.trim() !== "") {
827
+ body.category = parsed2.category.trim();
828
+ }
829
+ if (parsed2.tags !== void 0 && parsed2.tags.length > 0) {
830
+ body.tags = parsed2.tags;
831
+ }
832
+ if (parsed2.scope_type !== void 0) {
833
+ body.scope_type = parsed2.scope_type;
834
+ }
835
+ if (parsed2.scope_id !== void 0 && parsed2.scope_id.trim() !== "") {
836
+ body.scope_id = parsed2.scope_id.trim();
837
+ }
838
+ try {
839
+ const result = await client.post("/v1/personal-context", body);
840
+ return { ok: true, result };
841
+ } catch (err) {
842
+ if (err instanceof MemoraOneHttpError) {
843
+ const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
844
+ throw new Error(
845
+ `memora_add_personal_context failed: ${err.status} ${err.message} ${bodyText}`.trim()
846
+ );
847
+ }
848
+ throw err;
849
+ }
850
+ }
851
+
852
+ // src/tools/handlers/getPersonalContext.ts
853
+ var import_v415 = require("zod/v4");
854
+ var getPersonalContextInputSchema = import_v415.z.object({
855
+ query: import_v415.z.string().optional(),
856
+ scope_type: import_v415.z.enum(["general", "project"]).optional(),
857
+ scope_id: import_v415.z.string().optional(),
858
+ limit: import_v415.z.number().int().positive().optional()
859
+ });
860
+ function buildPersonalContextPath(parsed2) {
861
+ const params = new URLSearchParams();
862
+ if (parsed2.query !== void 0 && parsed2.query.trim() !== "") {
863
+ params.set("q", parsed2.query.trim());
864
+ }
865
+ if (parsed2.scope_type !== void 0) {
866
+ params.set("scope_type", parsed2.scope_type);
867
+ }
868
+ if (parsed2.scope_id !== void 0 && parsed2.scope_id.trim() !== "") {
869
+ params.set("scope_id", parsed2.scope_id.trim());
870
+ }
871
+ if (parsed2.limit !== void 0) {
872
+ params.set("limit", String(parsed2.limit));
873
+ }
874
+ const qs = params.toString();
875
+ return qs ? `/v1/personal-context?${qs}` : "/v1/personal-context";
876
+ }
877
+ async function handleGetPersonalContext(client, args) {
878
+ const parsed2 = getPersonalContextInputSchema.parse(args ?? {});
879
+ const path8 = buildPersonalContextPath(parsed2);
880
+ try {
881
+ const result = await client.get(path8);
882
+ return { ok: true, result };
883
+ } catch (err) {
884
+ if (err instanceof MemoraOneHttpError) {
885
+ const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
886
+ throw new Error(
887
+ `memora_get_personal_context failed: ${err.status} ${err.message} ${bodyText}`.trim()
888
+ );
889
+ }
890
+ throw err;
891
+ }
892
+ }
893
+
738
894
  // src/tools/handlers/askWithMemory.ts
739
- var import_v410 = require("zod/v4");
740
- var askWithMemoryInputSchema = import_v410.z.object({
741
- question: import_v410.z.string().min(1),
742
- code_context: import_v410.z.object({
743
- file_path: import_v410.z.string().optional(),
744
- selected_text: import_v410.z.string().optional(),
745
- language: import_v410.z.string().optional()
895
+ var import_v416 = require("zod/v4");
896
+ var askWithMemoryInputSchema = import_v416.z.object({
897
+ question: import_v416.z.string().min(1),
898
+ code_context: import_v416.z.object({
899
+ file_path: import_v416.z.string().optional(),
900
+ selected_text: import_v416.z.string().optional(),
901
+ language: import_v416.z.string().optional()
746
902
  }).optional()
747
903
  });
748
904
  function isAskWithMemoryResponse(value) {
@@ -775,13 +931,13 @@ async function handleAskWithMemory(client, args) {
775
931
  }
776
932
 
777
933
  // src/tools/handlers/logIntent.ts
778
- var import_v411 = require("zod/v4");
779
- var logIntentInputSchema = import_v411.z.object({
780
- intent: import_v411.z.enum(["task", "decision"]),
781
- message: import_v411.z.string().min(1),
782
- context: import_v411.z.record(import_v411.z.string(), import_v411.z.any()).optional(),
783
- intent_source: import_v411.z.string().optional().default("cursor_chat"),
784
- run_id: import_v411.z.string().min(1).optional()
934
+ var import_v417 = require("zod/v4");
935
+ var logIntentInputSchema = import_v417.z.object({
936
+ intent: import_v417.z.enum(["task", "decision"]),
937
+ message: import_v417.z.string().min(1),
938
+ context: import_v417.z.record(import_v417.z.string(), import_v417.z.any()).optional(),
939
+ intent_source: import_v417.z.string().optional().default("cursor_chat"),
940
+ run_id: import_v417.z.string().min(1).optional()
785
941
  });
786
942
  async function handleLogIntent(client, args) {
787
943
  const parsed2 = logIntentInputSchema.parse(args ?? {});
@@ -821,18 +977,18 @@ async function handleLogIntent(client, args) {
821
977
  }
822
978
 
823
979
  // src/tools/handlers/logChangeSummary.ts
824
- var import_v412 = require("zod/v4");
825
- var logChangeSummaryInputSchema = import_v412.z.object({
826
- summary: import_v412.z.string().min(1),
827
- scope: import_v412.z.string().min(1).optional(),
828
- files: import_v412.z.array(import_v412.z.string().min(1)).optional(),
829
- stats: import_v412.z.object({
830
- files: import_v412.z.number().int().nonnegative().optional(),
831
- add: import_v412.z.number().int().nonnegative().optional(),
832
- del: import_v412.z.number().int().nonnegative().optional()
980
+ var import_v418 = require("zod/v4");
981
+ var logChangeSummaryInputSchema = import_v418.z.object({
982
+ summary: import_v418.z.string().min(1),
983
+ scope: import_v418.z.string().min(1).optional(),
984
+ files: import_v418.z.array(import_v418.z.string().min(1)).optional(),
985
+ stats: import_v418.z.object({
986
+ files: import_v418.z.number().int().nonnegative().optional(),
987
+ add: import_v418.z.number().int().nonnegative().optional(),
988
+ del: import_v418.z.number().int().nonnegative().optional()
833
989
  }).optional(),
834
- commit: import_v412.z.string().min(1).optional(),
835
- run_id: import_v412.z.string().min(1).optional()
990
+ commit: import_v418.z.string().min(1).optional(),
991
+ run_id: import_v418.z.string().min(1).optional()
836
992
  });
837
993
  async function handleLogChangeSummary(client, args) {
838
994
  const parsed2 = logChangeSummaryInputSchema.parse(args ?? {});
@@ -865,17 +1021,17 @@ async function handleLogChangeSummary(client, args) {
865
1021
  }
866
1022
 
867
1023
  // src/tools/handlers/logToolResult.ts
868
- var import_v413 = require("zod/v4");
869
- var logToolResultInputSchema = import_v413.z.object({
870
- tool: import_v413.z.string().min(1),
871
- status: import_v413.z.enum(["ok", "error", "partial"]),
872
- summary: import_v413.z.string().min(1),
873
- run_id: import_v413.z.string().min(1).optional(),
874
- duration_ms: import_v413.z.number().int().nonnegative().optional(),
875
- error_code: import_v413.z.string().min(1).optional(),
876
- error_message: import_v413.z.string().min(1).optional(),
877
- error_kind: import_v413.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
878
- stats: import_v413.z.record(import_v413.z.string(), import_v413.z.any()).optional()
1024
+ var import_v419 = require("zod/v4");
1025
+ var logToolResultInputSchema = import_v419.z.object({
1026
+ tool: import_v419.z.string().min(1),
1027
+ status: import_v419.z.enum(["ok", "error", "partial"]),
1028
+ summary: import_v419.z.string().min(1),
1029
+ run_id: import_v419.z.string().min(1).optional(),
1030
+ duration_ms: import_v419.z.number().int().nonnegative().optional(),
1031
+ error_code: import_v419.z.string().min(1).optional(),
1032
+ error_message: import_v419.z.string().min(1).optional(),
1033
+ error_kind: import_v419.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
1034
+ stats: import_v419.z.record(import_v419.z.string(), import_v419.z.any()).optional()
879
1035
  });
880
1036
  async function handleLogToolResult(client, args) {
881
1037
  const parsed2 = logToolResultInputSchema.parse(args ?? {});
@@ -911,15 +1067,15 @@ async function handleLogToolResult(client, args) {
911
1067
  }
912
1068
 
913
1069
  // src/tools/handlers/logCommand.ts
914
- var import_v414 = require("zod/v4");
915
- var logCommandInputSchema = import_v414.z.object({
916
- cmd: import_v414.z.string().min(1),
917
- summary: import_v414.z.string().min(1),
918
- cwd: import_v414.z.string().min(1).optional(),
919
- exit_code: import_v414.z.number().int().optional(),
920
- duration_ms: import_v414.z.number().int().nonnegative().optional(),
921
- run_id: import_v414.z.string().min(1).optional(),
922
- stats: import_v414.z.record(import_v414.z.string(), import_v414.z.any()).optional()
1070
+ var import_v420 = require("zod/v4");
1071
+ var logCommandInputSchema = import_v420.z.object({
1072
+ cmd: import_v420.z.string().min(1),
1073
+ summary: import_v420.z.string().min(1),
1074
+ cwd: import_v420.z.string().min(1).optional(),
1075
+ exit_code: import_v420.z.number().int().optional(),
1076
+ duration_ms: import_v420.z.number().int().nonnegative().optional(),
1077
+ run_id: import_v420.z.string().min(1).optional(),
1078
+ stats: import_v420.z.record(import_v420.z.string(), import_v420.z.any()).optional()
923
1079
  });
924
1080
  async function handleLogCommand(client, args) {
925
1081
  const parsed2 = logCommandInputSchema.parse(args ?? {});
@@ -959,7 +1115,7 @@ async function handleListProjects(client) {
959
1115
  }
960
1116
 
961
1117
  // src/tools/handlers/setProject.ts
962
- var import_v415 = require("zod/v4");
1118
+ var import_v421 = require("zod/v4");
963
1119
 
964
1120
  // src/repoFingerprint.ts
965
1121
  var fs4 = __toESM(require("fs"), 1);
@@ -1288,9 +1444,9 @@ async function setProjectIdForFingerprint(args) {
1288
1444
  }
1289
1445
 
1290
1446
  // src/tools/handlers/setProject.ts
1291
- var setProjectInputSchema = import_v415.z.object({
1292
- projectKey: import_v415.z.string().min(1).optional(),
1293
- projectId: import_v415.z.string().min(1).optional()
1447
+ var setProjectInputSchema = import_v421.z.object({
1448
+ projectKey: import_v421.z.string().min(1).optional(),
1449
+ projectId: import_v421.z.string().min(1).optional()
1294
1450
  });
1295
1451
  async function handleSetProject(args) {
1296
1452
  const parsed2 = setProjectInputSchema.parse(args ?? {});
@@ -1558,6 +1714,45 @@ async function main(opts = {}) {
1558
1714
  })
1559
1715
  );
1560
1716
  registeredToolNames.push("memora_post_event");
1717
+ server.tool(
1718
+ "memora_create_fact",
1719
+ "Create an explicit project-scoped fact (POST /facts)",
1720
+ createFactShape,
1721
+ async (args) => runWithSessionContext(sessionContext, async () => {
1722
+ if (!runtime.client || !runtime.projectId) return notInitializedResult;
1723
+ const result = await handleCreateFact(runtime.client, args);
1724
+ return {
1725
+ content: [{ type: "text", text: JSON.stringify(result) }]
1726
+ };
1727
+ })
1728
+ );
1729
+ registeredToolNames.push("memora_create_fact");
1730
+ server.tool(
1731
+ "memora_add_personal_context",
1732
+ "Store notes or preferences for this workspace (POST /v1/personal-context)",
1733
+ addPersonalContextShape,
1734
+ async (args) => runWithSessionContext(sessionContext, async () => {
1735
+ if (!runtime.client || !runtime.projectId) return notInitializedResult;
1736
+ const result = await handleAddPersonalContext(runtime.client, args);
1737
+ return {
1738
+ content: [{ type: "text", text: JSON.stringify(result) }]
1739
+ };
1740
+ })
1741
+ );
1742
+ registeredToolNames.push("memora_add_personal_context");
1743
+ server.tool(
1744
+ "memora_get_personal_context",
1745
+ "Search stored notes or preferences for this workspace (GET /v1/personal-context)",
1746
+ getPersonalContextShape,
1747
+ async (args) => runWithSessionContext(sessionContext, async () => {
1748
+ if (!runtime.client || !runtime.projectId) return notInitializedResult;
1749
+ const result = await handleGetPersonalContext(runtime.client, args);
1750
+ return {
1751
+ content: [{ type: "text", text: JSON.stringify(result) }]
1752
+ };
1753
+ })
1754
+ );
1755
+ registeredToolNames.push("memora_get_personal_context");
1561
1756
  server.tool(
1562
1757
  "memora_list_projects",
1563
1758
  "List projects available to the current API key",
@@ -1589,7 +1784,7 @@ async function main(opts = {}) {
1589
1784
  runtime,
1590
1785
  sessionContext,
1591
1786
  "memora_ask_with_memory",
1592
- "Ask MemoraOne with project memory context",
1787
+ "Answer using saved workspace knowledge and timeline. In user-visible replies, state facts directly; do not attribute answers to tools, storage, retrieval, or memory-style framing unless the user asks how you know.",
1593
1788
  askWithMemoryShape,
1594
1789
  async (args) => {
1595
1790
  const result = await handleAskWithMemory(runtime.client, args);