@engramx/owner-mcp 0.1.0 → 0.2.1
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/LICENSE +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools.js +25 -5
- package/dist/tools.js.map +1 -1
- package/package.json +5 -4
package/LICENSE
CHANGED
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
|
|
176
176
|
END OF TERMS AND CONDITIONS
|
|
177
177
|
|
|
178
|
-
Copyright 2025
|
|
178
|
+
Copyright 2025-2026 Vaughn Hew
|
|
179
179
|
|
|
180
180
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
181
181
|
you may not use this file except in compliance with the License.
|
package/dist/server.js
CHANGED
|
@@ -24,7 +24,7 @@ catch (e) {
|
|
|
24
24
|
process.exit(1);
|
|
25
25
|
}
|
|
26
26
|
const server = new McpServer({ name: 'engramx-owner', version: '0.1.0' }, {
|
|
27
|
-
instructions:
|
|
27
|
+
instructions: "engramx-owner lets the user create and own an engram — a personal canister on the Internet Computer holding an agent's memory plus a tamper-evident action record. This server is OWNER-side ONLY: it reserves, activates, and connects agents to engrams the user owns; it does NOT read or append memory (that is the separate append-only OPERATOR surface, @engramx/mcp / @engramx/client). Spawn-only-on-real-use: engram_status (see what exists) -> engram_reserve (a FREE registry record — no canister, no spend) -> then the canister spawns only when the user actually uses it: engram_connect_agent (the usual path — provisions AND mints an append-only operator invite in one step, so it spawns exactly when you wire an agent) or engram_activate (spawn without an agent, only if the user will add memory via the web app / SDK). The signing key is the USER'S OWN (a local key or their icp-cli identity) — EngramX never holds it; a single local key is a total-loss risk if lost. The record is tamper-EVIDENT, not immutable: the owner can overwrite their own memory, but every change is a signed entry anyone can verify. An operator invite grants append-only access (read + add), never owner powers.",
|
|
28
28
|
});
|
|
29
29
|
registerOwnerTools(server, api);
|
|
30
30
|
const transport = new StdioServerTransport();
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,kGAAkG;AAClG,kCAAkC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,SAAS,WAAW,CAAC,CAAU;IAC7B,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,CACL,UAAU,GAAG,MAAM;QACnB,4BAA4B;QAC5B,0EAA0E;QAC1E,yFAAyF;QACzF,mFAAmF;QACnF,4EAA4E;QAC5E,+EAA+E,CAChF,CAAC;AACJ,CAAC;AAED,IAAI,GAAa,CAAC;AAClB,IAAI,CAAC;IACH,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,EAC3C;IACE,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,kGAAkG;AAClG,kCAAkC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,SAAS,WAAW,CAAC,CAAU;IAC7B,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,CACL,UAAU,GAAG,MAAM;QACnB,4BAA4B;QAC5B,0EAA0E;QAC1E,yFAAyF;QACzF,mFAAmF;QACnF,4EAA4E;QAC5E,+EAA+E,CAChF,CAAC;AACJ,CAAC;AAED,IAAI,GAAa,CAAC;AAClB,IAAI,CAAC;IACH,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,EAC3C;IACE,YAAY,EACV,wqCAAwqC;CAC3qC,CACF,CAAC;AAEF,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,sDAAsD;AACtD,OAAO,CAAC,KAAK,CAAC,qCAAqC,GAAG,CAAC,cAAc,cAAc,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC"}
|
package/dist/tools.js
CHANGED
|
@@ -21,13 +21,22 @@ const errText = (e) => `Error: ${e instanceof Error ? e.message : String(e)}`;
|
|
|
21
21
|
export function registerOwnerTools(server, api) {
|
|
22
22
|
server.tool('engram_status', 'Read-only. Report whether YOU (this owner key) have nothing yet, a free reservation, or a live engram — with its canister id if provisioned. No spend, no writes. Call before reserving/activating to avoid duplicates (one engram per principal).', {}, async () => {
|
|
23
23
|
try {
|
|
24
|
-
return ok({
|
|
24
|
+
return ok({
|
|
25
|
+
...view(await api.status()),
|
|
26
|
+
ownerPrincipal: api.ownerPrincipal,
|
|
27
|
+
custody: api.custody,
|
|
28
|
+
});
|
|
25
29
|
}
|
|
26
30
|
catch (e) {
|
|
27
31
|
return fail(errText(e));
|
|
28
32
|
}
|
|
29
33
|
});
|
|
30
|
-
server.tool('engram_reserve', 'Reserve an engram that YOU will own — a FREE registry record (~$0). Nothing runs yet and no cycles are spent; it does NOT spawn a canister. Idempotent (one per principal), so it is safe to call speculatively. To actually run the engram, call engram_activate afterward. If the registry rejects with an invite-required error (gate-armed deployment), ask the user for their invite code and pass it as `invite`.', {
|
|
34
|
+
server.tool('engram_reserve', 'Reserve an engram that YOU will own — a FREE registry record (~$0). Nothing runs yet and no cycles are spent; it does NOT spawn a canister. Idempotent (one per principal), so it is safe to call speculatively. To actually run the engram, call engram_activate afterward. If the registry rejects with an invite-required error (gate-armed deployment), ask the user for their invite code and pass it as `invite`.', {
|
|
35
|
+
invite: z
|
|
36
|
+
.string()
|
|
37
|
+
.optional()
|
|
38
|
+
.describe('Invite code for gate-armed deployments (only needed if a plain call was rejected asking for one).'),
|
|
39
|
+
}, async ({ invite }) => {
|
|
31
40
|
try {
|
|
32
41
|
return ok(view(await api.reserve(invite)));
|
|
33
42
|
}
|
|
@@ -36,8 +45,14 @@ export function registerOwnerTools(server, api) {
|
|
|
36
45
|
}
|
|
37
46
|
});
|
|
38
47
|
server.tool('engram_connect_agent', 'The usual way to spin up an engram: provision it (if not already live) AND mint an append-only OPERATOR invite in one step — so the canister spawns exactly when you are wiring an agent to it. The platform funds the (~1.15T-cycle) spawn. Returns {canisterId, inviteCode}; the agent redeems the code with `npx @engramx/client pair <inviteCode> --engram <canisterId>`. The grant is append-only (read + append), never owner powers. Prefer this over engram_activate unless you specifically want an empty engram.', {
|
|
39
|
-
name: z
|
|
40
|
-
|
|
48
|
+
name: z
|
|
49
|
+
.string()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe('A label for this operator/agent (e.g. "openclaw", "claude-desktop"). Defaults to "agent".'),
|
|
52
|
+
invite: z
|
|
53
|
+
.string()
|
|
54
|
+
.optional()
|
|
55
|
+
.describe('Invite code for gate-armed deployments (only needed if a plain call was rejected asking for one).'),
|
|
41
56
|
}, async ({ name, invite }) => {
|
|
42
57
|
try {
|
|
43
58
|
const r = await api.connectAgent(name, invite);
|
|
@@ -53,7 +68,12 @@ export function registerOwnerTools(server, api) {
|
|
|
53
68
|
return fail(errText(e));
|
|
54
69
|
}
|
|
55
70
|
});
|
|
56
|
-
server.tool('engram_activate', 'Spawn the live engram canister WITHOUT connecting an agent — only when the user will add memory through another surface (the web app / SDK). The platform funds the (~1.15T-cycle) spawn. Most of the time you want engram_connect_agent instead (spawn + get an invite in one step). Idempotent: if one is already live, returns its canister id.', {
|
|
71
|
+
server.tool('engram_activate', 'Spawn the live engram canister WITHOUT connecting an agent — only when the user will add memory through another surface (the web app / SDK). The platform funds the (~1.15T-cycle) spawn. Most of the time you want engram_connect_agent instead (spawn + get an invite in one step). Idempotent: if one is already live, returns its canister id.', {
|
|
72
|
+
invite: z
|
|
73
|
+
.string()
|
|
74
|
+
.optional()
|
|
75
|
+
.describe('Invite code for gate-armed deployments (only needed if a plain call was rejected asking for one).'),
|
|
76
|
+
}, async ({ invite }) => {
|
|
57
77
|
try {
|
|
58
78
|
const r = await api.activate(invite);
|
|
59
79
|
return ok({
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,MAAM,EAAE,GAAG,CAAC,GAAY,EAAc,EAAE,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;CAChE,CAAC,CAAC;AACH,MAAM,IAAI,GAAG,CAAC,OAAe,EAAc,EAAE,CAAC,CAAC;IAC7C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC1C,OAAO,EAAE,IAAI;CACd,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,UAAU,EAAE,CAAC,CAAC,UAAU;IACxB,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,cAAc,EAAE,CAAC,CAAC,cAAc;CACjC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAEvF;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,GAAa;IACjE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,oPAAoP,EACpP,EAAE,EACF,KAAK,IAAyB,EAAE;QAC9B,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,MAAM,EAAE,GAAG,CAAC,GAAY,EAAc,EAAE,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;CAChE,CAAC,CAAC;AACH,MAAM,IAAI,GAAG,CAAC,OAAe,EAAc,EAAE,CAAC,CAAC;IAC7C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC1C,OAAO,EAAE,IAAI;CACd,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,UAAU,EAAE,CAAC,CAAC,UAAU;IACxB,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,cAAc,EAAE,CAAC,CAAC,cAAc;CACjC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAEvF;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,GAAa;IACjE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,oPAAoP,EACpP,EAAE,EACF,KAAK,IAAyB,EAAE;QAC9B,IAAI,CAAC;YACH,OAAO,EAAE,CAAC;gBACR,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC3B,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,yZAAyZ,EACzZ;QACE,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,mGAAmG,CACpG;KACJ,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAuB,EAAE;QACxC,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,4fAA4f,EAC5f;QACE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,2FAA2F,CAC5F;QACH,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,mGAAmG,CACpG;KACJ,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAuB,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC;gBACR,GAAG,IAAI,CAAC,CAAC,CAAC;gBACV,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,WAAW,EAAE,4BAA4B,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC,UAAU,EAAE;gBAChF,IAAI,EAAE,wJAAwJ;aAC/J,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,oVAAoV,EACpV;QACE,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,mGAAmG,CACpG;KACJ,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAuB,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO,EAAE,CAAC;gBACR,GAAG,IAAI,CAAC,CAAC,CAAC;gBACV,IAAI,EAAE,6JAA6J,CAAC,CAAC,UAAU,EAAE;aAClL,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@engramx/owner-mcp",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Owner-side MCP server for EngramX — reserve, activate, and check an engram YOU own, from any MCP host. The owner counterpart to @engramx/mcp (the operator server); it never operates memory.",
|
|
5
|
-
"license": "
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
6
|
"author": "EngramX <developer@engramx.ai>",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
},
|
|
18
18
|
"files": [
|
|
19
19
|
"dist/",
|
|
20
|
-
"README.md"
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
21
22
|
],
|
|
22
23
|
"publishConfig": {
|
|
23
24
|
"access": "public"
|
|
@@ -26,7 +27,7 @@
|
|
|
26
27
|
"@icp-sdk/core": "^5.4.0",
|
|
27
28
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
28
29
|
"zod": "^4.4.3",
|
|
29
|
-
"@engramx/owner": "^0.1
|
|
30
|
+
"@engramx/owner": "^0.2.1"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
33
|
"@types/node": "^25.9.2",
|