@memoraone/mcp 0.1.19 → 0.1.20

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/index.cjs CHANGED
@@ -491,80 +491,106 @@ var postEventShape = {
491
491
  metadata: import_v42.z.record(import_v42.z.string(), import_v42.z.any()).optional()
492
492
  };
493
493
 
494
- // src/tools/askWithMemory.ts
494
+ // src/tools/createFact.ts
495
495
  var import_v43 = require("zod/v4");
496
+ var createFactShape = {
497
+ content: import_v43.z.string().min(1).describe("Explicit fact text to persist for the current project"),
498
+ metadata: import_v43.z.record(import_v43.z.string(), import_v43.z.any()).optional()
499
+ };
500
+
501
+ // src/tools/addPersonalContext.ts
502
+ var import_v44 = require("zod/v4");
503
+ var addPersonalContextShape = {
504
+ content: import_v44.z.string().min(1).describe("Text to store (note, preference, or similar)"),
505
+ category: import_v44.z.string().optional().describe("Optional category label"),
506
+ tags: import_v44.z.array(import_v44.z.string()).optional().describe("Optional tags"),
507
+ scope_type: import_v44.z.enum(["general", "project"]).optional(),
508
+ scope_id: import_v44.z.string().optional()
509
+ };
510
+
511
+ // src/tools/getPersonalContext.ts
512
+ var import_v45 = require("zod/v4");
513
+ var getPersonalContextShape = {
514
+ query: import_v45.z.string().optional().describe("Search query; sent as q when set"),
515
+ scope_type: import_v45.z.enum(["general", "project"]).optional(),
516
+ scope_id: import_v45.z.string().optional(),
517
+ limit: import_v45.z.number().int().positive().optional().describe("Max items to return")
518
+ };
519
+
520
+ // src/tools/askWithMemory.ts
521
+ var import_v46 = require("zod/v4");
496
522
  var askWithMemoryShape = {
497
- question: import_v43.z.string().min(1),
498
- code_context: import_v43.z.object({
499
- file_path: import_v43.z.string().optional(),
500
- selected_text: import_v43.z.string().optional(),
501
- language: import_v43.z.string().optional()
523
+ question: import_v46.z.string().min(1),
524
+ code_context: import_v46.z.object({
525
+ file_path: import_v46.z.string().optional(),
526
+ selected_text: import_v46.z.string().optional(),
527
+ language: import_v46.z.string().optional()
502
528
  }).optional()
503
529
  };
504
530
 
505
531
  // src/tools/logIntent.ts
506
- var import_v44 = require("zod/v4");
532
+ var import_v47 = require("zod/v4");
507
533
  var logIntentShape = {
508
- intent: import_v44.z.enum(["task", "decision"]),
509
- message: import_v44.z.string().min(1),
510
- context: import_v44.z.record(import_v44.z.string(), import_v44.z.any()).optional(),
511
- intent_source: import_v44.z.string().optional().default("cursor_chat"),
512
- run_id: import_v44.z.string().min(1).optional()
534
+ intent: import_v47.z.enum(["task", "decision"]),
535
+ message: import_v47.z.string().min(1),
536
+ context: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional(),
537
+ intent_source: import_v47.z.string().optional().default("cursor_chat"),
538
+ run_id: import_v47.z.string().min(1).optional()
513
539
  };
514
540
 
515
541
  // src/tools/logChangeSummary.ts
516
- var import_v45 = require("zod/v4");
542
+ var import_v48 = require("zod/v4");
517
543
  var logChangeSummaryShape = {
518
- summary: import_v45.z.string().min(1),
519
- scope: import_v45.z.string().min(1).optional(),
520
- files: import_v45.z.array(import_v45.z.string().min(1)).optional(),
521
- stats: import_v45.z.object({
522
- files: import_v45.z.number().int().nonnegative().optional(),
523
- add: import_v45.z.number().int().nonnegative().optional(),
524
- del: import_v45.z.number().int().nonnegative().optional()
544
+ summary: import_v48.z.string().min(1),
545
+ scope: import_v48.z.string().min(1).optional(),
546
+ files: import_v48.z.array(import_v48.z.string().min(1)).optional(),
547
+ stats: import_v48.z.object({
548
+ files: import_v48.z.number().int().nonnegative().optional(),
549
+ add: import_v48.z.number().int().nonnegative().optional(),
550
+ del: import_v48.z.number().int().nonnegative().optional()
525
551
  }).optional(),
526
- commit: import_v45.z.string().min(1).optional(),
527
- run_id: import_v45.z.string().min(1).optional()
552
+ commit: import_v48.z.string().min(1).optional(),
553
+ run_id: import_v48.z.string().min(1).optional()
528
554
  };
529
555
 
530
556
  // src/tools/logToolResult.ts
531
- var import_v46 = require("zod/v4");
557
+ var import_v49 = require("zod/v4");
532
558
  var logToolResultShape = {
533
- tool: import_v46.z.string().min(1),
534
- status: import_v46.z.enum(["ok", "error", "partial"]),
535
- summary: import_v46.z.string().min(1),
536
- run_id: import_v46.z.string().min(1).optional(),
537
- duration_ms: import_v46.z.number().int().nonnegative().optional(),
538
- error_code: import_v46.z.string().min(1).optional(),
539
- error_message: import_v46.z.string().min(1).optional(),
540
- error_kind: import_v46.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
541
- stats: import_v46.z.record(import_v46.z.string(), import_v46.z.any()).optional()
559
+ tool: import_v49.z.string().min(1),
560
+ status: import_v49.z.enum(["ok", "error", "partial"]),
561
+ summary: import_v49.z.string().min(1),
562
+ run_id: import_v49.z.string().min(1).optional(),
563
+ duration_ms: import_v49.z.number().int().nonnegative().optional(),
564
+ error_code: import_v49.z.string().min(1).optional(),
565
+ error_message: import_v49.z.string().min(1).optional(),
566
+ error_kind: import_v49.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
567
+ stats: import_v49.z.record(import_v49.z.string(), import_v49.z.any()).optional()
542
568
  };
543
569
 
544
570
  // src/tools/logCommand.ts
545
- var import_v47 = require("zod/v4");
571
+ var import_v410 = require("zod/v4");
546
572
  var logCommandShape = {
547
- cmd: import_v47.z.string().min(1),
548
- summary: import_v47.z.string().min(1),
549
- cwd: import_v47.z.string().min(1).optional(),
550
- exit_code: import_v47.z.number().int().optional(),
551
- duration_ms: import_v47.z.number().int().nonnegative().optional(),
552
- run_id: import_v47.z.string().min(1).optional(),
553
- stats: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional()
573
+ cmd: import_v410.z.string().min(1),
574
+ summary: import_v410.z.string().min(1),
575
+ cwd: import_v410.z.string().min(1).optional(),
576
+ exit_code: import_v410.z.number().int().optional(),
577
+ duration_ms: import_v410.z.number().int().nonnegative().optional(),
578
+ run_id: import_v410.z.string().min(1).optional(),
579
+ stats: import_v410.z.record(import_v410.z.string(), import_v410.z.any()).optional()
554
580
  };
555
581
 
556
582
  // src/tools/listProjects.ts
557
583
  var listProjectsShape = {};
558
584
 
559
585
  // src/tools/setProject.ts
560
- var import_v48 = require("zod/v4");
586
+ var import_v411 = require("zod/v4");
561
587
  var setProjectShape = {
562
- projectKey: import_v48.z.string().min(1).optional(),
563
- projectId: import_v48.z.string().min(1).optional()
588
+ projectKey: import_v411.z.string().min(1).optional(),
589
+ projectId: import_v411.z.string().min(1).optional()
564
590
  };
565
591
 
566
592
  // src/tools/handlers/postEvent.ts
567
- var import_v49 = require("zod/v4");
593
+ var import_v412 = require("zod/v4");
568
594
  var crypto3 = __toESM(require("crypto"), 1);
569
595
 
570
596
  // src/runContext.ts
@@ -626,14 +652,14 @@ function generateRunId() {
626
652
  }
627
653
 
628
654
  // src/tools/handlers/postEvent.ts
629
- var postEventInputSchema = import_v49.z.object({
630
- kind: import_v49.z.string().min(1),
631
- actor: import_v49.z.object({
632
- identifier: import_v49.z.string().min(1),
633
- id: import_v49.z.string().min(1).optional()
655
+ var postEventInputSchema = import_v412.z.object({
656
+ kind: import_v412.z.string().min(1),
657
+ actor: import_v412.z.object({
658
+ identifier: import_v412.z.string().min(1),
659
+ id: import_v412.z.string().min(1).optional()
634
660
  }),
635
- content: import_v49.z.record(import_v49.z.string(), import_v49.z.any()),
636
- metadata: import_v49.z.record(import_v49.z.string(), import_v49.z.any()).optional()
661
+ content: import_v412.z.record(import_v412.z.string(), import_v412.z.any()),
662
+ metadata: import_v412.z.record(import_v412.z.string(), import_v412.z.any()).optional()
637
663
  });
638
664
  async function handlePostEvent(client, args) {
639
665
  const nonce = crypto3.randomBytes(8).toString("hex");
@@ -675,14 +701,144 @@ async function handlePostEvent(client, args) {
675
701
  return { ok: true, forwarded: true };
676
702
  }
677
703
 
704
+ // src/tools/handlers/createFact.ts
705
+ var import_v413 = require("zod/v4");
706
+ var createFactInputSchema = import_v413.z.object({
707
+ content: import_v413.z.string().min(1),
708
+ metadata: import_v413.z.record(import_v413.z.string(), import_v413.z.any()).optional()
709
+ });
710
+ async function handleCreateFact(client, args) {
711
+ const parsed2 = createFactInputSchema.parse(args ?? {});
712
+ const projectKey = getCurrentProjectId();
713
+ if (!projectKey) {
714
+ throw new Error("No project selected. Use memora_list_projects and memora_set_project to select a project.");
715
+ }
716
+ const content = parsed2.content.trim();
717
+ if (!content) {
718
+ throw new Error("content cannot be empty after trimming");
719
+ }
720
+ const { tags: userTagsRaw, ...userMetaRest } = parsed2.metadata ?? {};
721
+ const userTags = Array.isArray(userTagsRaw) ? userTagsRaw.filter((t) => typeof t === "string") : [];
722
+ const tags = ["explicit_fact", ...userTags.filter((t) => t !== "explicit_fact")];
723
+ const body = {
724
+ projectKey,
725
+ content,
726
+ metadata: {
727
+ ...userMetaRest,
728
+ source: "memoraone-mcp",
729
+ purpose: "explicit_fact",
730
+ schema: "v1",
731
+ tool: "memora_create_fact",
732
+ agent_identifier: config2.agentName,
733
+ tags
734
+ }
735
+ };
736
+ try {
737
+ const result = await client.post("/facts", body);
738
+ return { ok: true, result };
739
+ } catch (err) {
740
+ if (err instanceof MemoraOneHttpError) {
741
+ const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
742
+ throw new Error(
743
+ `memora_create_fact failed: ${err.status} ${err.message} ${bodyText}`.trim()
744
+ );
745
+ }
746
+ throw err;
747
+ }
748
+ }
749
+
750
+ // src/tools/handlers/addPersonalContext.ts
751
+ var import_v414 = require("zod/v4");
752
+ var addPersonalContextInputSchema = import_v414.z.object({
753
+ content: import_v414.z.string().min(1),
754
+ category: import_v414.z.string().optional(),
755
+ tags: import_v414.z.array(import_v414.z.string()).optional(),
756
+ scope_type: import_v414.z.enum(["general", "project"]).optional(),
757
+ scope_id: import_v414.z.string().optional()
758
+ });
759
+ async function handleAddPersonalContext(client, args) {
760
+ const parsed2 = addPersonalContextInputSchema.parse(args ?? {});
761
+ const content = parsed2.content.trim();
762
+ if (!content) {
763
+ throw new Error("content cannot be empty after trimming");
764
+ }
765
+ const body = { content };
766
+ if (parsed2.category !== void 0 && parsed2.category.trim() !== "") {
767
+ body.category = parsed2.category.trim();
768
+ }
769
+ if (parsed2.tags !== void 0 && parsed2.tags.length > 0) {
770
+ body.tags = parsed2.tags;
771
+ }
772
+ if (parsed2.scope_type !== void 0) {
773
+ body.scope_type = parsed2.scope_type;
774
+ }
775
+ if (parsed2.scope_id !== void 0 && parsed2.scope_id.trim() !== "") {
776
+ body.scope_id = parsed2.scope_id.trim();
777
+ }
778
+ try {
779
+ const result = await client.post("/v1/personal-context", body);
780
+ return { ok: true, result };
781
+ } catch (err) {
782
+ if (err instanceof MemoraOneHttpError) {
783
+ const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
784
+ throw new Error(
785
+ `memora_add_personal_context failed: ${err.status} ${err.message} ${bodyText}`.trim()
786
+ );
787
+ }
788
+ throw err;
789
+ }
790
+ }
791
+
792
+ // src/tools/handlers/getPersonalContext.ts
793
+ var import_v415 = require("zod/v4");
794
+ var getPersonalContextInputSchema = import_v415.z.object({
795
+ query: import_v415.z.string().optional(),
796
+ scope_type: import_v415.z.enum(["general", "project"]).optional(),
797
+ scope_id: import_v415.z.string().optional(),
798
+ limit: import_v415.z.number().int().positive().optional()
799
+ });
800
+ function buildPersonalContextPath(parsed2) {
801
+ const params = new URLSearchParams();
802
+ if (parsed2.query !== void 0 && parsed2.query.trim() !== "") {
803
+ params.set("q", parsed2.query.trim());
804
+ }
805
+ if (parsed2.scope_type !== void 0) {
806
+ params.set("scope_type", parsed2.scope_type);
807
+ }
808
+ if (parsed2.scope_id !== void 0 && parsed2.scope_id.trim() !== "") {
809
+ params.set("scope_id", parsed2.scope_id.trim());
810
+ }
811
+ if (parsed2.limit !== void 0) {
812
+ params.set("limit", String(parsed2.limit));
813
+ }
814
+ const qs = params.toString();
815
+ return qs ? `/v1/personal-context?${qs}` : "/v1/personal-context";
816
+ }
817
+ async function handleGetPersonalContext(client, args) {
818
+ const parsed2 = getPersonalContextInputSchema.parse(args ?? {});
819
+ const path7 = buildPersonalContextPath(parsed2);
820
+ try {
821
+ const result = await client.get(path7);
822
+ return { ok: true, result };
823
+ } catch (err) {
824
+ if (err instanceof MemoraOneHttpError) {
825
+ const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
826
+ throw new Error(
827
+ `memora_get_personal_context failed: ${err.status} ${err.message} ${bodyText}`.trim()
828
+ );
829
+ }
830
+ throw err;
831
+ }
832
+ }
833
+
678
834
  // src/tools/handlers/askWithMemory.ts
679
- var import_v410 = require("zod/v4");
680
- var askWithMemoryInputSchema = import_v410.z.object({
681
- question: import_v410.z.string().min(1),
682
- code_context: import_v410.z.object({
683
- file_path: import_v410.z.string().optional(),
684
- selected_text: import_v410.z.string().optional(),
685
- language: import_v410.z.string().optional()
835
+ var import_v416 = require("zod/v4");
836
+ var askWithMemoryInputSchema = import_v416.z.object({
837
+ question: import_v416.z.string().min(1),
838
+ code_context: import_v416.z.object({
839
+ file_path: import_v416.z.string().optional(),
840
+ selected_text: import_v416.z.string().optional(),
841
+ language: import_v416.z.string().optional()
686
842
  }).optional()
687
843
  });
688
844
  function isAskWithMemoryResponse(value) {
@@ -715,13 +871,13 @@ async function handleAskWithMemory(client, args) {
715
871
  }
716
872
 
717
873
  // src/tools/handlers/logIntent.ts
718
- var import_v411 = require("zod/v4");
719
- var logIntentInputSchema = import_v411.z.object({
720
- intent: import_v411.z.enum(["task", "decision"]),
721
- message: import_v411.z.string().min(1),
722
- context: import_v411.z.record(import_v411.z.string(), import_v411.z.any()).optional(),
723
- intent_source: import_v411.z.string().optional().default("cursor_chat"),
724
- run_id: import_v411.z.string().min(1).optional()
874
+ var import_v417 = require("zod/v4");
875
+ var logIntentInputSchema = import_v417.z.object({
876
+ intent: import_v417.z.enum(["task", "decision"]),
877
+ message: import_v417.z.string().min(1),
878
+ context: import_v417.z.record(import_v417.z.string(), import_v417.z.any()).optional(),
879
+ intent_source: import_v417.z.string().optional().default("cursor_chat"),
880
+ run_id: import_v417.z.string().min(1).optional()
725
881
  });
726
882
  async function handleLogIntent(client, args) {
727
883
  const parsed2 = logIntentInputSchema.parse(args ?? {});
@@ -761,18 +917,18 @@ async function handleLogIntent(client, args) {
761
917
  }
762
918
 
763
919
  // src/tools/handlers/logChangeSummary.ts
764
- var import_v412 = require("zod/v4");
765
- var logChangeSummaryInputSchema = import_v412.z.object({
766
- summary: import_v412.z.string().min(1),
767
- scope: import_v412.z.string().min(1).optional(),
768
- files: import_v412.z.array(import_v412.z.string().min(1)).optional(),
769
- stats: import_v412.z.object({
770
- files: import_v412.z.number().int().nonnegative().optional(),
771
- add: import_v412.z.number().int().nonnegative().optional(),
772
- del: import_v412.z.number().int().nonnegative().optional()
920
+ var import_v418 = require("zod/v4");
921
+ var logChangeSummaryInputSchema = import_v418.z.object({
922
+ summary: import_v418.z.string().min(1),
923
+ scope: import_v418.z.string().min(1).optional(),
924
+ files: import_v418.z.array(import_v418.z.string().min(1)).optional(),
925
+ stats: import_v418.z.object({
926
+ files: import_v418.z.number().int().nonnegative().optional(),
927
+ add: import_v418.z.number().int().nonnegative().optional(),
928
+ del: import_v418.z.number().int().nonnegative().optional()
773
929
  }).optional(),
774
- commit: import_v412.z.string().min(1).optional(),
775
- run_id: import_v412.z.string().min(1).optional()
930
+ commit: import_v418.z.string().min(1).optional(),
931
+ run_id: import_v418.z.string().min(1).optional()
776
932
  });
777
933
  async function handleLogChangeSummary(client, args) {
778
934
  const parsed2 = logChangeSummaryInputSchema.parse(args ?? {});
@@ -805,17 +961,17 @@ async function handleLogChangeSummary(client, args) {
805
961
  }
806
962
 
807
963
  // src/tools/handlers/logToolResult.ts
808
- var import_v413 = require("zod/v4");
809
- var logToolResultInputSchema = import_v413.z.object({
810
- tool: import_v413.z.string().min(1),
811
- status: import_v413.z.enum(["ok", "error", "partial"]),
812
- summary: import_v413.z.string().min(1),
813
- run_id: import_v413.z.string().min(1).optional(),
814
- duration_ms: import_v413.z.number().int().nonnegative().optional(),
815
- error_code: import_v413.z.string().min(1).optional(),
816
- error_message: import_v413.z.string().min(1).optional(),
817
- error_kind: import_v413.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
818
- stats: import_v413.z.record(import_v413.z.string(), import_v413.z.any()).optional()
964
+ var import_v419 = require("zod/v4");
965
+ var logToolResultInputSchema = import_v419.z.object({
966
+ tool: import_v419.z.string().min(1),
967
+ status: import_v419.z.enum(["ok", "error", "partial"]),
968
+ summary: import_v419.z.string().min(1),
969
+ run_id: import_v419.z.string().min(1).optional(),
970
+ duration_ms: import_v419.z.number().int().nonnegative().optional(),
971
+ error_code: import_v419.z.string().min(1).optional(),
972
+ error_message: import_v419.z.string().min(1).optional(),
973
+ error_kind: import_v419.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
974
+ stats: import_v419.z.record(import_v419.z.string(), import_v419.z.any()).optional()
819
975
  });
820
976
  async function handleLogToolResult(client, args) {
821
977
  const parsed2 = logToolResultInputSchema.parse(args ?? {});
@@ -851,15 +1007,15 @@ async function handleLogToolResult(client, args) {
851
1007
  }
852
1008
 
853
1009
  // src/tools/handlers/logCommand.ts
854
- var import_v414 = require("zod/v4");
855
- var logCommandInputSchema = import_v414.z.object({
856
- cmd: import_v414.z.string().min(1),
857
- summary: import_v414.z.string().min(1),
858
- cwd: import_v414.z.string().min(1).optional(),
859
- exit_code: import_v414.z.number().int().optional(),
860
- duration_ms: import_v414.z.number().int().nonnegative().optional(),
861
- run_id: import_v414.z.string().min(1).optional(),
862
- stats: import_v414.z.record(import_v414.z.string(), import_v414.z.any()).optional()
1010
+ var import_v420 = require("zod/v4");
1011
+ var logCommandInputSchema = import_v420.z.object({
1012
+ cmd: import_v420.z.string().min(1),
1013
+ summary: import_v420.z.string().min(1),
1014
+ cwd: import_v420.z.string().min(1).optional(),
1015
+ exit_code: import_v420.z.number().int().optional(),
1016
+ duration_ms: import_v420.z.number().int().nonnegative().optional(),
1017
+ run_id: import_v420.z.string().min(1).optional(),
1018
+ stats: import_v420.z.record(import_v420.z.string(), import_v420.z.any()).optional()
863
1019
  });
864
1020
  async function handleLogCommand(client, args) {
865
1021
  const parsed2 = logCommandInputSchema.parse(args ?? {});
@@ -899,7 +1055,7 @@ async function handleListProjects(client) {
899
1055
  }
900
1056
 
901
1057
  // src/tools/handlers/setProject.ts
902
- var import_v415 = require("zod/v4");
1058
+ var import_v421 = require("zod/v4");
903
1059
 
904
1060
  // src/repoFingerprint.ts
905
1061
  var fs3 = __toESM(require("fs"), 1);
@@ -1228,9 +1384,9 @@ async function setProjectIdForFingerprint(args) {
1228
1384
  }
1229
1385
 
1230
1386
  // src/tools/handlers/setProject.ts
1231
- var setProjectInputSchema = import_v415.z.object({
1232
- projectKey: import_v415.z.string().min(1).optional(),
1233
- projectId: import_v415.z.string().min(1).optional()
1387
+ var setProjectInputSchema = import_v421.z.object({
1388
+ projectKey: import_v421.z.string().min(1).optional(),
1389
+ projectId: import_v421.z.string().min(1).optional()
1234
1390
  });
1235
1391
  async function handleSetProject(args) {
1236
1392
  const parsed2 = setProjectInputSchema.parse(args ?? {});
@@ -1498,6 +1654,45 @@ async function main(opts = {}) {
1498
1654
  })
1499
1655
  );
1500
1656
  registeredToolNames.push("memora_post_event");
1657
+ server.tool(
1658
+ "memora_create_fact",
1659
+ "Create an explicit project-scoped fact (POST /facts)",
1660
+ createFactShape,
1661
+ async (args) => runWithSessionContext(sessionContext, async () => {
1662
+ if (!runtime.client || !runtime.projectId) return notInitializedResult;
1663
+ const result = await handleCreateFact(runtime.client, args);
1664
+ return {
1665
+ content: [{ type: "text", text: JSON.stringify(result) }]
1666
+ };
1667
+ })
1668
+ );
1669
+ registeredToolNames.push("memora_create_fact");
1670
+ server.tool(
1671
+ "memora_add_personal_context",
1672
+ "Store notes or preferences for this workspace (POST /v1/personal-context)",
1673
+ addPersonalContextShape,
1674
+ async (args) => runWithSessionContext(sessionContext, async () => {
1675
+ if (!runtime.client || !runtime.projectId) return notInitializedResult;
1676
+ const result = await handleAddPersonalContext(runtime.client, args);
1677
+ return {
1678
+ content: [{ type: "text", text: JSON.stringify(result) }]
1679
+ };
1680
+ })
1681
+ );
1682
+ registeredToolNames.push("memora_add_personal_context");
1683
+ server.tool(
1684
+ "memora_get_personal_context",
1685
+ "Search stored notes or preferences for this workspace (GET /v1/personal-context)",
1686
+ getPersonalContextShape,
1687
+ async (args) => runWithSessionContext(sessionContext, async () => {
1688
+ if (!runtime.client || !runtime.projectId) return notInitializedResult;
1689
+ const result = await handleGetPersonalContext(runtime.client, args);
1690
+ return {
1691
+ content: [{ type: "text", text: JSON.stringify(result) }]
1692
+ };
1693
+ })
1694
+ );
1695
+ registeredToolNames.push("memora_get_personal_context");
1501
1696
  server.tool(
1502
1697
  "memora_list_projects",
1503
1698
  "List projects available to the current API key",
@@ -1529,7 +1724,7 @@ async function main(opts = {}) {
1529
1724
  runtime,
1530
1725
  sessionContext,
1531
1726
  "memora_ask_with_memory",
1532
- "Ask MemoraOne with project memory context",
1727
+ "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.",
1533
1728
  askWithMemoryShape,
1534
1729
  async (args) => {
1535
1730
  const result = await handleAskWithMemory(runtime.client, args);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memoraone/mcp",
3
- "version": "0.1.19",
3
+ "version": "0.1.20",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "bin": {