@younndai/lyt-mcp 0.9.5 → 0.9.6

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/README.md CHANGED
@@ -28,13 +28,13 @@
28
28
 
29
29
  This is Lyt's **AI-first** contract made protocol-native: the same governed operations available as `lyt vault ...` / `lyt mesh ...` on the command line are surfaced as MCP tools with [Zod](https://zod.dev)-validated schemas, so agents get accurate parameter validation and structured errors instead of scraping CLI text. One operation set, three transports — CLI for you, MCP for your agents, harness skills for agent runtimes without MCP.
30
30
 
31
- You usually do not install this package directly — install [`@younndai/lyt`](https://www.npmjs.com/package/@younndai/lyt) and run `lyt mcp serve`.
31
+ You usually do not install this package directly — install [`@younndai/lyt`](https://www.npmjs.com/package/@younndai/lyt) and run `lyt mcp start`.
32
32
 
33
33
  ## Install (standalone)
34
34
 
35
35
  ```bash
36
36
  npm install -g @younndai/lyt-mcp@alpha
37
- lyt-mcp serve # starts an MCP server over stdio
37
+ lyt-mcp mcp start # starts an MCP server over stdio
38
38
  ```
39
39
 
40
40
  ## Wiring into an MCP client
@@ -45,19 +45,31 @@ lyt-mcp serve # starts an MCP server over stdio
45
45
  "mcpServers": {
46
46
  "lyt": {
47
47
  "command": "lyt-mcp",
48
- "args": ["serve"],
48
+ "args": ["mcp", "start"],
49
49
  },
50
50
  },
51
51
  }
52
52
  ```
53
53
 
54
- Or, from inside Claude Code: `claude mcp add lyt --command lyt-mcp -- serve`.
54
+ Or, from inside Claude Code: `claude mcp add lyt --command lyt-mcp -- mcp start`.
55
55
 
56
56
  ## What it exposes
57
57
 
58
- A stable MCP tool set covering the v1 vault + mesh + registry operations — list and inspect vaults, run tiered full-text search across your pod, read mesh topology, check writability verdicts. Tool schemas use Zod, so MCP clients validate inputs before they ever touch your vaults. The operation surface grows as new verbs land in [`@younndai/lyt-vault`](https://www.npmjs.com/package/@younndai/lyt-vault) and [`@younndai/lyt-mesh`](https://www.npmjs.com/package/@younndai/lyt-mesh).
58
+ A stable MCP tool set covering the vault + mesh + registry operations, including:
59
59
 
60
- Agent writes obey the same permission semantics as human writes: a vault that is read-only for you is read-only for your agent — the writability gate is enforced at the operation layer, not the UI.
60
+ - **`search`** — tiered-cascade search (arcs → lanes → FTS5 → edges) across your pod, a mesh, or a vault, confidence-ranked. Accepts an optional **agent query-expansion** array (up to 20 domain/synonym terms folded into the keyword channel) so an agent can widen recall on a vocabulary mismatch. Returns a **recall-lean** result — a compact top-N list of `path` / `vault` / `mesh` / `snippet` / `tier` / `confidence` per hit, with the internal scoring noise stripped — sized for an agent triaging among many similar results.
61
+ - **`vault.list` / `vault.info` / `vault.verify` / `vault.reconnect`** — enumerate and inspect vaults, check writability, heal a moved vault.
62
+ - **`vault.access` / `vault.invites`** (read) and **`vault.share` / `vault.unshare` / `vault.invites.accept` / `vault.abandon`** (handler-gated writes) — vault sharing over GitHub collaborator ACLs.
63
+ - **`capture`** — write a Figment under the 8-field frontmatter contract.
64
+ - **`sync`** — push a vault's GitHub metadata (dry-run by default).
65
+ - **`primer`** — generate an agent-priming digest for a vault / mesh / federation.
66
+ - **`mesh.source.*`** — manage where Lyt looks for vaults to clone.
67
+
68
+ Tool schemas use [Zod](https://zod.dev), so MCP clients validate inputs before they ever touch your vaults. The operation surface grows as new verbs land in [`@younndai/lyt-vault`](https://www.npmjs.com/package/@younndai/lyt-vault) and [`@younndai/lyt-mesh`](https://www.npmjs.com/package/@younndai/lyt-mesh).
69
+
70
+ **Semantic search and MCP.** The `search` tool inherits your pod's semantic-search setting, so an agent gets the same dense-embedding fusion you do at the CLI — *if the embedding model is already downloaded*. Because the MCP transport is non-interactive, the server **never** triggers the one-time ~23 MB model download itself: with no cached model it degrades silently to lexical search. To enable semantic search for agents, run `lyt reindex` once on an interactive terminal and accept the download.
71
+
72
+ Agent writes obey the same permission semantics as human writes: a vault that is read-only for you is read-only for your agent. Mutating share/invite/abandon tools are **handler-gated** and, because MCP has no interactive approval seam, fail closed over this transport — the equivalent `lyt vault ...` CLI verbs (with `--yes`) are the path for those operations today.
61
73
 
62
74
  ## Programmatic use
63
75
 
@@ -0,0 +1,4 @@
1
+ import type { ToolResult } from "./registry.js";
2
+ export declare function toErrorResult(err: unknown): ToolResult;
3
+ export declare function guarded(run: () => Promise<ToolResult>): Promise<ToolResult>;
4
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAoEhD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CA2BtD;AAOD,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAMjF"}
package/dist/errors.js ADDED
@@ -0,0 +1,39 @@
1
+ const GENERIC_CLIENT_ERROR = "lyt-mcp: an internal error occurred.";
2
+ function leaksInternalDetail(message) {
3
+ return (/[A-Za-z]:[\\/]/.test(message) ||
4
+ /\\\\[^\\]/.test(message) ||
5
+ /(?:^|[^A-Za-z0-9._/-])\/[A-Za-z0-9._-]+\/[A-Za-z0-9._/-]+/.test(message) ||
6
+ /SQLITE_[A-Z]+/.test(message) ||
7
+ /\bat\s+.+:\d+(?::\d+)?\)?/.test(message) ||
8
+ /node_modules/.test(message));
9
+ }
10
+ export function toErrorResult(err) {
11
+ const rawMessage = err instanceof Error && typeof err.message === "string" && err.message.length > 0
12
+ ? err.message
13
+ : undefined;
14
+ let message;
15
+ if (rawMessage === undefined) {
16
+ console.error("[lyt-mcp] non-Error thrown from tool handler:", err);
17
+ message = GENERIC_CLIENT_ERROR;
18
+ }
19
+ else if (leaksInternalDetail(rawMessage)) {
20
+ console.error("[lyt-mcp] internal error (suppressed from client):", err);
21
+ message = GENERIC_CLIENT_ERROR;
22
+ }
23
+ else {
24
+ message = rawMessage;
25
+ }
26
+ return {
27
+ content: [{ type: "text", text: message }],
28
+ isError: true,
29
+ };
30
+ }
31
+ export async function guarded(run) {
32
+ try {
33
+ return await run();
34
+ }
35
+ catch (err) {
36
+ return toErrorResult(err);
37
+ }
38
+ }
39
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAkDA,MAAM,oBAAoB,GAAG,sCAAsC,CAAC;AAYpE,SAAS,mBAAmB,CAAC,OAAe;IAC1C,OAAO,CAEL,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAE9B,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAOzB,2DAA2D,CAAC,IAAI,CAAC,OAAO,CAAC;QAEzE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAE7B,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC;QAEzC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,MAAM,UAAU,GACd,GAAG,YAAY,KAAK,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAC/E,CAAC,CAAC,GAAG,CAAC,OAAO;QACb,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,OAAe,CAAC;IACpB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAE7B,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;QACpE,OAAO,GAAG,oBAAoB,CAAC;IACjC,CAAC;SAAM,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QAI3C,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,GAAG,CAAC,CAAC;QACzE,OAAO,GAAG,oBAAoB,CAAC;IACjC,CAAC;SAAM,CAAC;QAGN,OAAO,GAAG,UAAU,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1C,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAA8B;IAC1D,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { OpRow } from "./registry.js";
3
+ export interface RegisterToolsOptions {
4
+ handlerApproved: boolean;
5
+ }
6
+ export declare function registerTools(server: McpServer, rows: OpRow[], opts?: RegisterToolsOptions): void;
7
+ //# sourceMappingURL=generate-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-tools.d.ts","sourceRoot":"","sources":["../src/generate-tools.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,eAAe,CAAC;AAavD,MAAM,WAAW,oBAAoB;IAOnC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAiJD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,KAAK,EAAE,EACb,IAAI,GAAE,oBAAiD,GACtD,IAAI,CAwCN"}
@@ -0,0 +1,58 @@
1
+ const CALLER_SETTABLE_GATE_FIELD = "confirmed";
2
+ const SAFE_UNGATED_WRITE_OPS = new Set([
3
+ "vault.reconnect",
4
+ "mesh.source.add",
5
+ "mesh.source.remove",
6
+ "capture",
7
+ "sync",
8
+ ]);
9
+ function stripCallerSettableGateField(inputSchema) {
10
+ const maybeSchema = inputSchema;
11
+ if (inputSchema !== null &&
12
+ typeof inputSchema === "object" &&
13
+ (typeof maybeSchema["parse"] === "function" || "_def" in maybeSchema)) {
14
+ throw new Error("op inputSchema must be a Zod raw shape ({ field: zType }), not a pre-built " +
15
+ "z.object()/.passthrough()/.loose() instance — a built schema bypasses the " +
16
+ "caller-settable-gate-field strip and could forward a smuggled `confirmed`.");
17
+ }
18
+ if (!Object.prototype.hasOwnProperty.call(inputSchema, CALLER_SETTABLE_GATE_FIELD)) {
19
+ return inputSchema;
20
+ }
21
+ const sanitized = { ...inputSchema };
22
+ delete sanitized[CALLER_SETTABLE_GATE_FIELD];
23
+ return sanitized;
24
+ }
25
+ function handlerGateRefusal(opName) {
26
+ return {
27
+ content: [
28
+ {
29
+ type: "text",
30
+ text: `Refused: '${opName}' is a handler-gated mutation and this MCP server ` +
31
+ `was not launched with handler approval. The gate is server-side and ` +
32
+ `out-of-band — it cannot be satisfied from tool-call input. To allow ` +
33
+ `this operation, the operator must start the server with the handler ` +
34
+ `approval enabled (set the LYT_MCP_HANDLER_APPROVAL launch variable).`,
35
+ },
36
+ ],
37
+ isError: true,
38
+ };
39
+ }
40
+ export function registerTools(server, rows, opts = { handlerApproved: false }) {
41
+ for (const row of rows) {
42
+ if (row.access === "write" &&
43
+ row.handlerGated !== true &&
44
+ !SAFE_UNGATED_WRITE_OPS.has(row.name)) {
45
+ throw new Error(`Registration refused: write op '${row.name}' is neither handlerGated:true ` +
46
+ `nor allowlisted. A write op must be handlerGated:true or explicitly ` +
47
+ `allowlisted in SAFE_UNGATED_WRITE_OPS (generate-tools.ts).`);
48
+ }
49
+ const inputSchema = row.access === "write" ? stripCallerSettableGateField(row.inputSchema) : row.inputSchema;
50
+ const dispatch = row.handlerGated
51
+ ?
52
+ (args) => opts.handlerApproved ? row.handler(args) : handlerGateRefusal(row.name)
53
+ :
54
+ (args) => row.handler(args);
55
+ server.registerTool(row.name, { title: row.title, description: row.description, inputSchema }, (args) => dispatch(args));
56
+ }
57
+ }
58
+ //# sourceMappingURL=generate-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-tools.js","sourceRoot":"","sources":["../src/generate-tools.ts"],"names":[],"mappings":"AA8DA,MAAM,0BAA0B,GAAG,WAAW,CAAC;AAa/C,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAS;IAClE,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;IACpB,SAAS;IACT,MAAM;CACP,CAAC,CAAC;AAwBH,SAAS,4BAA4B,CACnC,WAAiC;IAMjC,MAAM,WAAW,GAAG,WAAsC,CAAC;IAC3D,IACE,WAAW,KAAK,IAAI;QACpB,OAAO,WAAW,KAAK,QAAQ;QAC/B,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,UAAU,IAAI,MAAM,IAAI,WAAW,CAAC,EACrE,CAAC;QACD,MAAM,IAAI,KAAK,CACb,6EAA6E;YAC3E,4EAA4E;YAC5E,4EAA4E,CAC/E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,EAAE,CAAC;QACnF,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,MAAM,SAAS,GAA4B,EAAE,GAAI,WAAuC,EAAE,CAAC;IAC3F,OAAO,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC7C,OAAO,SAAiC,CAAC;AAC3C,CAAC;AAQD,SAAS,kBAAkB,CAAC,MAAc;IACxC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EACF,aAAa,MAAM,oDAAoD;oBACvE,sEAAsE;oBACtE,sEAAsE;oBACtE,sEAAsE;oBACtE,sEAAsE;aACzE;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AA+BD,MAAM,UAAU,aAAa,CAC3B,MAAiB,EACjB,IAAa,EACb,OAA6B,EAAE,eAAe,EAAE,KAAK,EAAE;IAEvD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QAMvB,IACE,GAAG,CAAC,MAAM,KAAK,OAAO;YACtB,GAAG,CAAC,YAAY,KAAK,IAAI;YACzB,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EACrC,CAAC;YACD,MAAM,IAAI,KAAK,CACb,mCAAmC,GAAG,CAAC,IAAI,iCAAiC;gBAC1E,sEAAsE;gBACtE,4DAA4D,CAC/D,CAAC;QACJ,CAAC;QAKD,MAAM,WAAW,GACf,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QAE3F,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY;YAC/B,CAAC;gBAGC,CAAC,IAA6B,EAAoC,EAAE,CAClE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3E,CAAC;gBACC,CAAC,IAA6B,EAAuB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9E,MAAM,CAAC,YAAY,CACjB,GAAG,CAAC,IAAI,EACR,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,EAC/D,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAA+B,CAAC,CACpD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type ZodRawShape } from "zod";
2
+ import { type AccessProvider } from "@younndai/lyt-vault";
3
+ export interface ToolResult {
4
+ [x: string]: unknown;
5
+ content: Array<{
6
+ type: "text";
7
+ text: string;
8
+ }>;
9
+ }
10
+ export interface OpRow {
11
+ name: string;
12
+ title: string;
13
+ description: string;
14
+ inputSchema: ZodRawShape;
15
+ handler: (args: Record<string, unknown>) => Promise<ToolResult>;
16
+ access: "read" | "write";
17
+ handlerGated: boolean;
18
+ defaultProfile: boolean;
19
+ }
20
+ export declare function __setCaptureAccessProvider(provider: AccessProvider | undefined): void;
21
+ export declare function buildOpRegistry(): OpRow[];
22
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAK,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAE1C,OAAO,EAcL,KAAK,cAAc,EAKpB,MAAM,qBAAqB,CAAC;AAa7B,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAQD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB;AA+DD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CAErF;AAED,wBAAgB,eAAe,IAAI,KAAK,EAAE,CAgezC"}
@@ -0,0 +1,429 @@
1
+ import { z } from "zod";
2
+ import { abandonVaultFlow, generatePrimerFlow, infoVaultFlow, listVaultsFlow, patternRunFlow, reconnectVaultFlow, searchCascadeFlow, shareVaultFlow, syncMetadataFlow, unshareVaultFlow, vaultAccessFlow, vaultInvitesFlow, verifyVaultsFlow, } from "@younndai/lyt-vault";
3
+ import { addSource, listSources, parseScope, removeSource, serializeScope, withRegistry, } from "@younndai/lyt-mesh";
4
+ import { guarded } from "./errors.js";
5
+ function asText(value) {
6
+ return { content: [{ type: "text", text: JSON.stringify(value, null, 2) }] };
7
+ }
8
+ function projectSearchResult(result) {
9
+ const results = result.results.map((r) => ({
10
+ path: r.figment_path,
11
+ vault: r.vault_name,
12
+ mesh: r.mesh_name,
13
+ snippet: r.snippet,
14
+ tier: r.tier,
15
+ confidence: r.confidence,
16
+ ...(r.blendedScore !== undefined ? { blendedScore: r.blendedScore } : {}),
17
+ }));
18
+ return {
19
+ query: result.query,
20
+ scope: result.scope,
21
+ scopeTarget: result.scopeTarget,
22
+ limit: result.limit,
23
+ count: results.length,
24
+ results,
25
+ };
26
+ }
27
+ let captureAccessProviderOverride;
28
+ export function __setCaptureAccessProvider(provider) {
29
+ captureAccessProviderOverride = provider;
30
+ }
31
+ export function buildOpRegistry() {
32
+ return [
33
+ {
34
+ name: "vault.list",
35
+ title: "List Lyt vaults",
36
+ description: "List all registered Lyt vaults on this machine. Returns rid, name, path, status, edges-count, etc.",
37
+ inputSchema: {
38
+ includeTombstones: z
39
+ .boolean()
40
+ .optional()
41
+ .describe("Include tombstoned vaults in the result (default: true)"),
42
+ },
43
+ access: "read",
44
+ handlerGated: false,
45
+ defaultProfile: true,
46
+ handler: async ({ includeTombstones }) => {
47
+ const noTombstones = includeTombstones === false;
48
+ const { vaults } = await listVaultsFlow({ noTombstones });
49
+ return asText({ vaults });
50
+ },
51
+ },
52
+ {
53
+ name: "vault.info",
54
+ title: "Vault info",
55
+ description: "Show metadata for a registered vault: path, mesh edges (outbound + inbound), size, file count.",
56
+ inputSchema: {
57
+ name: z.string().describe("Registered vault name"),
58
+ },
59
+ access: "read",
60
+ handlerGated: false,
61
+ defaultProfile: true,
62
+ handler: async ({ name }) => {
63
+ const result = await infoVaultFlow(name);
64
+ return asText(result);
65
+ },
66
+ },
67
+ {
68
+ name: "vault.verify",
69
+ title: "Verify vaults",
70
+ description: "Walk the registry, stat each path, flip missing vaults to status='missing'. Read-only on files. Auto-promotes 'missing' rows to 'tombstoned' after threshold N failures (default 3; override via LYT_TOMBSTONE_THRESHOLD).",
71
+ inputSchema: {
72
+ thresholdN: z
73
+ .number()
74
+ .int()
75
+ .positive()
76
+ .optional()
77
+ .describe("Auto-promotion threshold; defaults to env LYT_TOMBSTONE_THRESHOLD or 3"),
78
+ },
79
+ access: "read",
80
+ handlerGated: false,
81
+ defaultProfile: true,
82
+ handler: async ({ thresholdN }) => {
83
+ const result = await verifyVaultsFlow(thresholdN === undefined ? {} : { thresholdN: thresholdN });
84
+ return asText(result);
85
+ },
86
+ },
87
+ {
88
+ name: "vault.reconnect",
89
+ title: "Reconnect vault",
90
+ description: "Heal a missing or disconnected vault by repointing the registry row to a new filesystem path. Validates .lyt/vault.yon rid matches the registry row.",
91
+ inputSchema: {
92
+ name: z.string().describe("Registered vault name"),
93
+ newPath: z.string().describe("New filesystem path containing the vault"),
94
+ },
95
+ access: "write",
96
+ handlerGated: false,
97
+ defaultProfile: true,
98
+ handler: async ({ name, newPath }) => {
99
+ const result = await reconnectVaultFlow({
100
+ name: name,
101
+ newPath: newPath,
102
+ });
103
+ return asText(result);
104
+ },
105
+ },
106
+ {
107
+ name: "mesh.source.list",
108
+ title: "List mesh sources",
109
+ description: "List configured vault sources (where Lyt looks for vaults to clone).",
110
+ inputSchema: {},
111
+ access: "read",
112
+ handlerGated: false,
113
+ defaultProfile: true,
114
+ handler: async () => {
115
+ const sources = await withRegistry(listSources);
116
+ const serialized = sources.map((s) => ({ ...s, scope: serializeScope(s.scope) }));
117
+ return asText({ sources: serialized });
118
+ },
119
+ },
120
+ {
121
+ name: "mesh.source.add",
122
+ title: "Add mesh source",
123
+ description: "Register a new vault source.",
124
+ inputSchema: {
125
+ name: z.string().describe("Soft label, e.g. 'younndai', 'acme', 'personal'"),
126
+ host: z.string().describe("Git host hostname, e.g. 'github.com'"),
127
+ owner: z.string().describe("Org or user under that host"),
128
+ scope: z
129
+ .string()
130
+ .optional()
131
+ .describe("Which repos count: 'all' | 'topic=<tag>' | 'repos=<a,b,c>' (default: topic=lyt-vault)"),
132
+ },
133
+ access: "write",
134
+ handlerGated: false,
135
+ defaultProfile: true,
136
+ handler: async ({ name, host, owner, scope }) => {
137
+ const parsed = parseScope(scope ?? "topic=lyt-vault");
138
+ const row = await withRegistry((db) => addSource(db, {
139
+ name: name,
140
+ host: host,
141
+ owner: owner,
142
+ scope: parsed,
143
+ }));
144
+ return asText({ ...row, scope: serializeScope(row.scope) });
145
+ },
146
+ },
147
+ {
148
+ name: "mesh.source.remove",
149
+ title: "Remove mesh source",
150
+ description: "Remove a configured vault source by name.",
151
+ inputSchema: {
152
+ name: z.string().describe("Source name to remove"),
153
+ },
154
+ access: "write",
155
+ handlerGated: false,
156
+ defaultProfile: true,
157
+ handler: async ({ name }) => {
158
+ const removed = await withRegistry((db) => removeSource(db, name));
159
+ return asText({ name, removed });
160
+ },
161
+ },
162
+ {
163
+ name: "capture",
164
+ title: "Capture a Figment",
165
+ description: "Capture a Figment (Obsidian-flavored markdown note) into a Lyt vault under the v1 8-field frontmatter contract. Writes <vault>/notes/<date>-<slug>.md via the knowledge-capture pattern.",
166
+ inputSchema: {
167
+ purpose: z.string().describe("Author-supplied: why keep this Figment? (mandatory)"),
168
+ topic: z.string().describe("Author-supplied: semantic category for this Figment (mandatory)"),
169
+ vault: z.string().describe("Registered vault name to capture into"),
170
+ content: z
171
+ .string()
172
+ .min(1, "content must be non-empty")
173
+ .describe("Figment body — plain Obsidian-flavored markdown (mandatory, non-empty, at the MCP layer)"),
174
+ tags: z.array(z.string()).optional().describe("Optional tags, e.g. ['alpha','beta']"),
175
+ weight: z.number().optional().describe("Figment weight 1-5 (default 3)"),
176
+ title: z.string().optional().describe("Optional explicit title (else derived from slug)"),
177
+ slug: z.string().optional().describe("Optional filename slug (else auto-generated)"),
178
+ },
179
+ access: "write",
180
+ handlerGated: false,
181
+ defaultProfile: true,
182
+ handler: ({ purpose, topic, vault, content, tags, weight, title, slug }) => guarded(async () => {
183
+ const vars = {
184
+ purpose: purpose,
185
+ topic: topic,
186
+ content: content,
187
+ };
188
+ if (Array.isArray(tags))
189
+ vars["tags"] = tags.join(", ");
190
+ if (weight !== undefined)
191
+ vars["weight"] = String(weight);
192
+ if (title !== undefined)
193
+ vars["title"] = title;
194
+ const result = await patternRunFlow({
195
+ patternName: "knowledge-capture",
196
+ verbId: "capture",
197
+ vaultName: vault,
198
+ ...(slug !== undefined ? { slug: slug } : {}),
199
+ vars,
200
+ ...(captureAccessProviderOverride !== undefined
201
+ ? { accessProvider: captureAccessProviderOverride }
202
+ : {}),
203
+ });
204
+ return asText(result);
205
+ }),
206
+ },
207
+ {
208
+ name: "search",
209
+ title: "Search the pod",
210
+ description: "Tiered-cascade search across the pod (or a single mesh/vault): arcs → lanes → FTS5 → edges, confidence-ranked. " +
211
+ "BEFORE searching, EXPAND the query: emit 6–10 domain/synonym terms a relevant note would likely use but the " +
212
+ "literal query omits (related concepts, alternate phrasings, technical terms, near-synonyms), and pass them as " +
213
+ "`expansionTerms`. The tool folds those terms into the keyword/BM25 channel to build the lexical handle that " +
214
+ "surfaces buried, vocabulary-mismatched targets the bare query would miss. Returns a compact top-N projection: " +
215
+ "per hit { path, vault, mesh, snippet, tier, confidence, blendedScore? }, plus { query, scope, scopeTarget, limit, count }.",
216
+ inputSchema: {
217
+ query: z.string().describe("Search query (the literal user intent)"),
218
+ expansionTerms: z
219
+ .array(z.string().max(64))
220
+ .max(20)
221
+ .optional()
222
+ .describe("6–10 domain/synonym/related terms a relevant note might use but the literal query omits. " +
223
+ "Emit these BEFORE searching to manufacture rare high-signal keywords; the tool folds them into the " +
224
+ "FTS5/BM25 channel so buried, vocabulary-mismatched targets surface. Does not change the displayed query."),
225
+ scope: z
226
+ .enum(["vault", "mesh", "federation"])
227
+ .optional()
228
+ .describe("Search scope (default: federation)"),
229
+ scopeTarget: z
230
+ .string()
231
+ .optional()
232
+ .describe("Vault or mesh name when scope is 'vault' or 'mesh'"),
233
+ limit: z.number().optional().describe("Max results (default 20)"),
234
+ },
235
+ access: "read",
236
+ handlerGated: false,
237
+ defaultProfile: true,
238
+ handler: ({ query, expansionTerms, scope, scopeTarget, limit }) => guarded(async () => {
239
+ const result = await searchCascadeFlow({
240
+ query: query,
241
+ ...(expansionTerms !== undefined
242
+ ? { expansionTerms: expansionTerms }
243
+ : {}),
244
+ ...(scope !== undefined ? { scope: scope } : {}),
245
+ ...(scopeTarget !== undefined ? { scopeTarget: scopeTarget } : {}),
246
+ ...(limit !== undefined ? { limit: limit } : {}),
247
+ });
248
+ return asText(projectSearchResult(result));
249
+ }),
250
+ },
251
+ {
252
+ name: "sync",
253
+ title: "Sync vault metadata",
254
+ description: "Sync GitHub repo metadata (description + topics) from a vault's .lyt/vault.yon, and regenerate mesh-context/agents.md. Scope is mandatory (vault / vaults / mesh).",
255
+ inputSchema: {
256
+ vault: z.string().optional().describe("Single vault name to sync"),
257
+ vaults: z
258
+ .array(z.string())
259
+ .optional()
260
+ .describe("Vault name patterns (glob) to sync"),
261
+ mesh: z.string().optional().describe("Root vault name to traverse a mesh from"),
262
+ mode: z
263
+ .enum(["dry-run", "apply"])
264
+ .optional()
265
+ .describe("'dry-run' (default) reports changes; 'apply' writes to GitHub"),
266
+ noConfirm: z
267
+ .boolean()
268
+ .optional()
269
+ .describe("Required for --apply on a non-TTY run (script safety)"),
270
+ },
271
+ access: "write",
272
+ handlerGated: false,
273
+ defaultProfile: true,
274
+ handler: ({ vault, vaults, mesh, mode, noConfirm }) => guarded(async () => {
275
+ const scope = {};
276
+ if (vault !== undefined)
277
+ scope.vault = vault;
278
+ if (Array.isArray(vaults))
279
+ scope.vaults = vaults;
280
+ if (mesh !== undefined)
281
+ scope.mesh = mesh;
282
+ const result = await syncMetadataFlow({
283
+ scope,
284
+ mode: mode ?? "dry-run",
285
+ isTty: false,
286
+ ...(noConfirm !== undefined ? { noConfirm: noConfirm } : {}),
287
+ });
288
+ return asText(result);
289
+ }),
290
+ },
291
+ {
292
+ name: "primer",
293
+ title: "Generate a primer",
294
+ description: "Generate a deterministic agent-priming markdown digest for a vault, mesh, or the federation (top keywords, active arcs, recent activity, top lanes).",
295
+ inputSchema: {
296
+ scope: z
297
+ .enum(["vault", "mesh", "federation"])
298
+ .describe("Primer scope"),
299
+ scopeTarget: z
300
+ .string()
301
+ .optional()
302
+ .describe("Vault or mesh name when scope is 'vault' or 'mesh'"),
303
+ topKeywords: z.number().optional().describe("Top-N keywords (default 20)"),
304
+ topArcs: z.number().optional().describe("Top-N arcs/lanes (default 10)"),
305
+ provenanceDays: z.number().optional().describe("Recent-activity window in days (default 7)"),
306
+ dryRun: z.boolean().optional().describe("Render + return markdown without writing to disk"),
307
+ },
308
+ access: "read",
309
+ handlerGated: false,
310
+ defaultProfile: true,
311
+ handler: ({ scope, scopeTarget, topKeywords, topArcs, provenanceDays, dryRun }) => guarded(async () => {
312
+ const result = await generatePrimerFlow({
313
+ scope: scope,
314
+ ...(scopeTarget !== undefined ? { scopeTarget: scopeTarget } : {}),
315
+ ...(topKeywords !== undefined ? { topKeywords: topKeywords } : {}),
316
+ ...(topArcs !== undefined ? { topArcs: topArcs } : {}),
317
+ ...(provenanceDays !== undefined ? { provenanceDays: provenanceDays } : {}),
318
+ ...(dryRun !== undefined ? { dryRun: dryRun } : {}),
319
+ });
320
+ return asText(result);
321
+ }),
322
+ },
323
+ {
324
+ name: "vault.share",
325
+ title: "Share a vault",
326
+ description: "Grant a GitHub handle read|write access to a vault (gh repo-collaborator). Handler-gated.",
327
+ inputSchema: {
328
+ vault: z.string().describe("Registered vault name"),
329
+ with: z.string().describe("GitHub handle to share with"),
330
+ access: z.enum(["read", "write"]).describe("Access level"),
331
+ },
332
+ access: "write",
333
+ handlerGated: true,
334
+ defaultProfile: true,
335
+ handler: ({ vault, with: withHandle, access }) => guarded(async () => {
336
+ const result = await shareVaultFlow({
337
+ vaultName: vault,
338
+ withHandle: withHandle,
339
+ level: access,
340
+ confirmed: false,
341
+ });
342
+ return asText(result);
343
+ }),
344
+ },
345
+ {
346
+ name: "vault.unshare",
347
+ title: "Unshare a vault",
348
+ description: "Revoke a GitHub handle's access to a vault (remove the gh repo-collaborator). Handler-gated.",
349
+ inputSchema: {
350
+ vault: z.string().describe("Registered vault name"),
351
+ with: z.string().describe("GitHub handle to unshare from"),
352
+ },
353
+ access: "write",
354
+ handlerGated: true,
355
+ defaultProfile: true,
356
+ handler: ({ vault, with: withHandle }) => guarded(async () => {
357
+ const result = await unshareVaultFlow({
358
+ vaultName: vault,
359
+ withHandle: withHandle,
360
+ confirmed: false,
361
+ });
362
+ return asText(result);
363
+ }),
364
+ },
365
+ {
366
+ name: "vault.access",
367
+ title: "Show vault access",
368
+ description: "Read the live gh repo-collaborator access state of a vault and reconcile it against LYT's local subscription view. Read-only.",
369
+ inputSchema: {
370
+ vault: z.string().describe("Registered vault name"),
371
+ canIShare: z
372
+ .boolean()
373
+ .optional()
374
+ .describe("Skip listing grants; just resolve whether the caller can share this vault"),
375
+ },
376
+ access: "read",
377
+ handlerGated: false,
378
+ defaultProfile: true,
379
+ handler: ({ vault, canIShare }) => guarded(async () => {
380
+ const result = await vaultAccessFlow({ vaultName: vault }, canIShare ? { canIShareOnly: true } : {});
381
+ return asText(result);
382
+ }),
383
+ },
384
+ {
385
+ name: "vault.invites",
386
+ title: "List vault invitations",
387
+ description: "List the caller's pending GitHub repository invitations (read-only). Accept via vault.invites.accept.",
388
+ inputSchema: {},
389
+ access: "read",
390
+ handlerGated: false,
391
+ defaultProfile: true,
392
+ handler: () => guarded(async () => {
393
+ const result = await vaultInvitesFlow({ confirmed: false });
394
+ return asText(result);
395
+ }),
396
+ },
397
+ {
398
+ name: "vault.invites.accept",
399
+ title: "Accept a vault invitation",
400
+ description: "Accept a pending GitHub repository invitation by id (gh user-repository-invitation). Handler-gated.",
401
+ inputSchema: {
402
+ id: z.number().int().positive().describe("The gh invitation id to accept"),
403
+ },
404
+ access: "write",
405
+ handlerGated: true,
406
+ defaultProfile: true,
407
+ handler: ({ id }) => guarded(async () => {
408
+ const result = await vaultInvitesFlow({ accept: id, confirmed: false });
409
+ return asText(result);
410
+ }),
411
+ },
412
+ {
413
+ name: "vault.abandon",
414
+ title: "Abandon a vault",
415
+ description: "Un-adopt a vault: remove only LYT's local .lyt/ adoption state and deregister it. Your markdown files and GitHub repo are untouched. Handler-gated.",
416
+ inputSchema: {
417
+ vault: z.string().describe("Registered vault name"),
418
+ },
419
+ access: "write",
420
+ handlerGated: true,
421
+ defaultProfile: true,
422
+ handler: ({ vault }) => guarded(async () => {
423
+ const result = await abandonVaultFlow(vault, { confirmed: false });
424
+ return asText(result);
425
+ }),
426
+ },
427
+ ];
428
+ }
429
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  export declare const SERVER_NAME = "lyt-mcp";
3
- export declare const SERVER_VERSION = "0.1.0";
3
+ export declare function resolveHandlerApproval(env?: NodeJS.ProcessEnv): boolean;
4
+ export declare const SERVER_VERSION: string;
4
5
  export declare function buildLytMcpServer(): McpServer;
5
6
  export declare function startStdioServer(): Promise<void>;
6
7
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBpE,eAAO,MAAM,WAAW,YAAY,CAAC;AACrC,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,wBAAgB,iBAAiB,IAAI,SAAS,CA0J7C;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAItD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,eAAO,MAAM,WAAW,YAAY,CAAC;AAuBrC,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAKpF;AAmBD,eAAO,MAAM,cAAc,QAAuB,CAAC;AAEnD,wBAAgB,iBAAiB,IAAI,SAAS,CAO7C;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAItD"}
package/dist/server.js CHANGED
@@ -1,117 +1,35 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { resolve as pathResolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
1
4
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
5
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
- import { z } from "zod";
4
- import { infoVaultFlow, listVaultsFlow, reconnectVaultFlow, verifyVaultsFlow, } from "@younndai/lyt-vault";
5
- import { addSource, listSources, parseScope, removeSource, serializeScope, withRegistry, } from "@younndai/lyt-mesh";
6
+ import { buildOpRegistry } from "./registry.js";
7
+ import { registerTools } from "./generate-tools.js";
6
8
  export const SERVER_NAME = "lyt-mcp";
7
- export const SERVER_VERSION = "0.1.0";
9
+ export function resolveHandlerApproval(env = process.env) {
10
+ const raw = env["LYT_MCP_HANDLER_APPROVAL"];
11
+ if (typeof raw !== "string")
12
+ return false;
13
+ const normalized = raw.trim().toLowerCase();
14
+ return normalized === "1" || normalized === "true" || normalized === "yes" || normalized === "on";
15
+ }
16
+ function readPackageVersion() {
17
+ try {
18
+ const here = fileURLToPath(import.meta.url);
19
+ const candidate = pathResolve(here, "..", "..", "package.json");
20
+ const raw = readFileSync(candidate, "utf8");
21
+ const json = JSON.parse(raw);
22
+ if (typeof json.version === "string" && json.version.length > 0)
23
+ return json.version;
24
+ }
25
+ catch {
26
+ }
27
+ return "0.0.0";
28
+ }
29
+ export const SERVER_VERSION = readPackageVersion();
8
30
  export function buildLytMcpServer() {
9
31
  const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION });
10
- server.registerTool("vault.list", {
11
- title: "List Lyt vaults",
12
- description: "List all registered Lyt vaults on this machine. Returns rid, name, path, status, edges-count, etc.",
13
- inputSchema: {
14
- includeTombstones: z
15
- .boolean()
16
- .optional()
17
- .describe("Include tombstoned vaults in the result (default: true)"),
18
- },
19
- }, async ({ includeTombstones }) => {
20
- const noTombstones = includeTombstones === false;
21
- const { vaults } = await listVaultsFlow({ noTombstones });
22
- return {
23
- content: [{ type: "text", text: JSON.stringify({ vaults }, null, 2) }],
24
- };
25
- });
26
- server.registerTool("vault.info", {
27
- title: "Vault info",
28
- description: "Show metadata for a registered vault: path, mesh edges (outbound + inbound), size, file count.",
29
- inputSchema: {
30
- name: z.string().describe("Registered vault name"),
31
- },
32
- }, async ({ name }) => {
33
- const result = await infoVaultFlow(name);
34
- return {
35
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
36
- };
37
- });
38
- server.registerTool("vault.verify", {
39
- title: "Verify vaults",
40
- description: "Walk the registry, stat each path, flip missing vaults to status='missing'. Read-only on files. Auto-promotes 'missing' rows to 'tombstoned' after threshold N failures (default 3; override via LYT_TOMBSTONE_THRESHOLD).",
41
- inputSchema: {
42
- thresholdN: z
43
- .number()
44
- .int()
45
- .positive()
46
- .optional()
47
- .describe("Auto-promotion threshold; defaults to env LYT_TOMBSTONE_THRESHOLD or 3"),
48
- },
49
- }, async ({ thresholdN }) => {
50
- const result = await verifyVaultsFlow(thresholdN === undefined ? {} : { thresholdN });
51
- return {
52
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
53
- };
54
- });
55
- server.registerTool("vault.reconnect", {
56
- title: "Reconnect vault",
57
- description: "Heal a missing or disconnected vault by repointing the registry row to a new filesystem path. Validates .lyt/vault.yon rid matches the registry row.",
58
- inputSchema: {
59
- name: z.string().describe("Registered vault name"),
60
- newPath: z.string().describe("New filesystem path containing the vault"),
61
- },
62
- }, async ({ name, newPath }) => {
63
- const result = await reconnectVaultFlow({ name, newPath });
64
- return {
65
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
66
- };
67
- });
68
- server.registerTool("mesh.source.list", {
69
- title: "List mesh sources",
70
- description: "List configured vault sources (where Lyt looks for vaults to clone).",
71
- inputSchema: {},
72
- }, async () => {
73
- const sources = await withRegistry(listSources);
74
- const serialized = sources.map((s) => ({ ...s, scope: serializeScope(s.scope) }));
75
- return {
76
- content: [{ type: "text", text: JSON.stringify({ sources: serialized }, null, 2) }],
77
- };
78
- });
79
- server.registerTool("mesh.source.add", {
80
- title: "Add mesh source",
81
- description: "Register a new vault source.",
82
- inputSchema: {
83
- name: z.string().describe("Soft label, e.g. 'younndai', 'acme', 'personal'"),
84
- host: z.string().describe("Git host hostname, e.g. 'github.com'"),
85
- owner: z.string().describe("Org or user under that host"),
86
- scope: z
87
- .string()
88
- .optional()
89
- .describe("Which repos count: 'all' | 'topic=<tag>' | 'repos=<a,b,c>' (default: topic=lyt-vault)"),
90
- },
91
- }, async ({ name, host, owner, scope }) => {
92
- const parsed = parseScope(scope ?? "topic=lyt-vault");
93
- const row = await withRegistry((db) => addSource(db, { name, host, owner, scope: parsed }));
94
- return {
95
- content: [
96
- {
97
- type: "text",
98
- text: JSON.stringify({ ...row, scope: serializeScope(row.scope) }, null, 2),
99
- },
100
- ],
101
- };
102
- });
103
- server.registerTool("mesh.source.remove", {
104
- title: "Remove mesh source",
105
- description: "Remove a configured vault source by name.",
106
- inputSchema: {
107
- name: z.string().describe("Source name to remove"),
108
- },
109
- }, async ({ name }) => {
110
- const removed = await withRegistry((db) => removeSource(db, name));
111
- return {
112
- content: [{ type: "text", text: JSON.stringify({ name, removed }, null, 2) }],
113
- };
114
- });
32
+ registerTools(server, buildOpRegistry(), { handlerApproved: resolveHandlerApproval() });
115
33
  return server;
116
34
  }
117
35
  export async function startStdioServer() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AAuBrC,MAAM,UAAU,sBAAsB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACzE,MAAM,GAAG,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,CAAC;AACpG,CAAC;AAMD,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACrD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,EAAE,CAAC;AAEnD,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAI7E,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,eAAe,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@younndai/lyt-mcp",
3
- "version": "0.9.5",
3
+ "version": "0.9.6",
4
4
  "description": "Lyt MCP server — exposes the lyt-vault + lyt-mesh operation set as typed Model Context Protocol tools so AI agents (Claude Desktop, Claude Code, Codex, any MCP client) can drive Lyt locally.",
5
5
  "homepage": "https://linkyourthink.com",
6
6
  "repository": {
@@ -52,8 +52,8 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "@modelcontextprotocol/sdk": "^1.29.0",
55
- "@younndai/lyt-mesh": "^0.9.5",
56
- "@younndai/lyt-vault": "^0.9.5",
55
+ "@younndai/lyt-mesh": "^0.9.6",
56
+ "@younndai/lyt-vault": "^0.9.6",
57
57
  "commander": "^12.1.0",
58
58
  "zod": "^3.25.0"
59
59
  },