@seanhogg/builderforce-memory-mcp 2026.6.18

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.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +133 -0
  3. package/dist/backend.d.ts +60 -0
  4. package/dist/backend.d.ts.map +1 -0
  5. package/dist/backend.js +11 -0
  6. package/dist/backend.js.map +1 -0
  7. package/dist/backends/memory-store.d.ts +73 -0
  8. package/dist/backends/memory-store.d.ts.map +1 -0
  9. package/dist/backends/memory-store.js +152 -0
  10. package/dist/backends/memory-store.js.map +1 -0
  11. package/dist/bin/http.d.ts +14 -0
  12. package/dist/bin/http.d.ts.map +1 -0
  13. package/dist/bin/http.js +33 -0
  14. package/dist/bin/http.js.map +1 -0
  15. package/dist/bin/stdio.d.ts +18 -0
  16. package/dist/bin/stdio.d.ts.map +1 -0
  17. package/dist/bin/stdio.js +24 -0
  18. package/dist/bin/stdio.js.map +1 -0
  19. package/dist/index.d.ts +21 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +18 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/tools.d.ts +47 -0
  24. package/dist/tools.d.ts.map +1 -0
  25. package/dist/tools.js +186 -0
  26. package/dist/tools.js.map +1 -0
  27. package/dist/transports/http.d.ts +30 -0
  28. package/dist/transports/http.d.ts.map +1 -0
  29. package/dist/transports/http.js +45 -0
  30. package/dist/transports/http.js.map +1 -0
  31. package/dist/transports/mcp-server.d.ts +17 -0
  32. package/dist/transports/mcp-server.d.ts.map +1 -0
  33. package/dist/transports/mcp-server.js +26 -0
  34. package/dist/transports/mcp-server.js.map +1 -0
  35. package/dist/transports/sdk.d.ts +45 -0
  36. package/dist/transports/sdk.d.ts.map +1 -0
  37. package/dist/transports/sdk.js +44 -0
  38. package/dist/transports/sdk.js.map +1 -0
  39. package/dist/transports/stdio.d.ts +14 -0
  40. package/dist/transports/stdio.d.ts.map +1 -0
  41. package/dist/transports/stdio.js +17 -0
  42. package/dist/transports/stdio.js.map +1 -0
  43. package/package.json +86 -0
  44. package/src/backend.ts +66 -0
  45. package/src/backends/memory-store.ts +217 -0
  46. package/src/bin/http.ts +36 -0
  47. package/src/bin/stdio.ts +26 -0
  48. package/src/index.ts +31 -0
  49. package/src/tools.ts +214 -0
  50. package/src/transports/http.ts +64 -0
  51. package/src/transports/mcp-server.ts +40 -0
  52. package/src/transports/sdk.ts +75 -0
  53. package/src/transports/stdio.ts +19 -0
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Shared MCP server builder for the out-of-process transports (stdio + HTTP).
3
+ *
4
+ * Both use the standard @modelcontextprotocol/sdk `McpServer`; only the
5
+ * transport binding differs. The tools come from the same buildMemoryTools()
6
+ * the in-process Agent SDK transport uses, so all three stay in lockstep.
7
+ */
8
+
9
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
10
+ import type { MemoryBackend } from "../backend.js";
11
+ import { buildMemoryTools, type MemoryToolsOptions } from "../tools.js";
12
+
13
+ export interface McpServerOptions extends MemoryToolsOptions {
14
+ name?: string;
15
+ version?: string;
16
+ }
17
+
18
+ /** Constructs an McpServer with the memory tools registered. */
19
+ export function buildMcpServer(backend: MemoryBackend, opts: McpServerOptions = {}): McpServer {
20
+ const server = new McpServer({
21
+ name: opts.name ?? "builderforce-memory",
22
+ version: opts.version ?? "2026.5.31",
23
+ });
24
+
25
+ // The generic registerTool() over a zod raw shape trips TS2589 (excessively
26
+ // deep instantiation); the tool surface is identical across our transports,
27
+ // so register through a loose signature. Runtime behaviour is unchanged —
28
+ // both frameworks consume (name, {description, inputSchema}, handler).
29
+ const register = server.registerTool.bind(server) as (
30
+ name: string,
31
+ config: { description: string; inputSchema: unknown },
32
+ handler: unknown,
33
+ ) => void;
34
+
35
+ for (const t of buildMemoryTools(backend, opts)) {
36
+ register(t.name, { description: t.description, inputSchema: t.inputSchema }, t.handler);
37
+ }
38
+
39
+ return server;
40
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * In-process transport for the Claude Agent SDK.
3
+ *
4
+ * Returns the `type: "sdk"` MCP server config you drop straight into
5
+ * `query({ options: { mcpServers: { builderforce_memory: <this> } } })`.
6
+ * No subprocess, no socket — the tools run in your product's process, calling
7
+ * the MemoryBackend directly. Lowest latency; the consuming product pulls in
8
+ * @anthropic-ai/claude-agent-sdk (and, for the local backend, @seanhogg/builderforce-memory).
9
+ *
10
+ * The Agent SDK is imported indirectly so this package builds and so the stdio
11
+ * and HTTP transports don't drag the SDK in.
12
+ */
13
+
14
+ import type { MemoryBackend } from "../backend.js";
15
+ import { buildMemoryTools, type MemoryToolsOptions } from "../tools.js";
16
+
17
+ export interface SdkServerOptions extends MemoryToolsOptions {
18
+ /** MCP server name; becomes the middle segment of `mcp__<name>__<tool>`. Default 'builderforce_memory'. */
19
+ name?: string;
20
+ version?: string;
21
+ }
22
+
23
+ /** The shape of `createSdkMcpServer`'s return — re-declared to avoid a hard type dep on the SDK. */
24
+ export interface SdkMcpServerConfig {
25
+ type: "sdk";
26
+ name: string;
27
+ instance: unknown;
28
+ }
29
+
30
+ /**
31
+ * Wraps the memory tools as an in-process Claude Agent SDK MCP server.
32
+ *
33
+ * @example
34
+ * import { query } from "@anthropic-ai/claude-agent-sdk";
35
+ * import { createMemoryMcpServer, createLocalMemoryStoreBackend } from "@seanhogg/builderforce-memory-mcp";
36
+ *
37
+ * const backend = await createLocalMemoryStoreBackend();
38
+ * const memory = await createMemoryMcpServer(backend);
39
+ *
40
+ * for await (const msg of query({
41
+ * prompt: "...",
42
+ * options: {
43
+ * mcpServers: { builderforce_memory: memory },
44
+ * allowedTools: ["mcp__builderforce_memory__*"],
45
+ * },
46
+ * })) { /* ... *\/ }
47
+ */
48
+ export async function createMemoryMcpServer(
49
+ backend: MemoryBackend,
50
+ opts: SdkServerOptions = {},
51
+ ): Promise<SdkMcpServerConfig> {
52
+ const _import = (m: string): Promise<unknown> =>
53
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func
54
+ new Function("m", "return import(m)")(m) as Promise<unknown>;
55
+
56
+ const sdk = (await _import("@anthropic-ai/claude-agent-sdk")) as {
57
+ tool: (
58
+ name: string,
59
+ description: string,
60
+ schema: unknown,
61
+ handler: (args: Record<string, unknown>) => Promise<unknown>,
62
+ ) => unknown;
63
+ createSdkMcpServer: (o: { name: string; version?: string; tools: unknown[] }) => SdkMcpServerConfig;
64
+ };
65
+
66
+ const tools = buildMemoryTools(backend, opts).map((t) =>
67
+ sdk.tool(t.name, t.description, t.inputSchema, t.handler as (a: Record<string, unknown>) => Promise<unknown>),
68
+ );
69
+
70
+ return sdk.createSdkMcpServer({
71
+ name: opts.name ?? "builderforce_memory",
72
+ version: opts.version ?? "2026.5.31",
73
+ tools,
74
+ });
75
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * stdio transport — the portable path. Any MCP client in any language launches
3
+ * this as a subprocess and speaks MCP over stdin/stdout. Consumed from the
4
+ * Claude Agent SDK as:
5
+ * mcpServers: {
6
+ * builderforce_memory: { type: "stdio", command: "npx",
7
+ * args: ["-y", "@seanhogg/builderforce-memory-mcp"] }
8
+ * }
9
+ */
10
+
11
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
12
+ import type { MemoryBackend } from "../backend.js";
13
+ import { buildMcpServer, type McpServerOptions } from "./mcp-server.js";
14
+
15
+ /** Serves `backend` over stdio. Resolves when the transport closes. */
16
+ export async function runStdio(backend: MemoryBackend, opts: McpServerOptions = {}): Promise<void> {
17
+ const server = buildMcpServer(backend, opts);
18
+ await server.connect(new StdioServerTransport());
19
+ }