bear_context_setup
Initialize a context library for Bear notes, creating a synced folder curated for LLM consumption. Sets up directory structure and configuration for tag-based note inclusion.
Instructions
Initialize a context library — a curated, synced folder of Bear notes optimized for LLM consumption. Creates the directory structure and config. After setup, tag Bear notes with #context (or a custom prefix) and use bear_context_sync to pull them in. One-time operation.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Output directory for the context library (default: ~/.bear-context) | |
| tag_prefix | No | Tag prefix for qualifying notes (default: context). Notes tagged #context or #context/subtag will be included. | |
| use_frontmatter | No | Also include notes with context: true in YAML front matter (default: true) |
Implementation Reference
- mcp-server/src/tools.ts:748-787 (handler)The full tool definition for bear_context_setup, including the 'tool' object (name, description, inputSchema, annotations) and the 'buildArgs' function that constructs the CLI command ['context', 'init', '--json'] along with optional flags (--dir, --tag-prefix, --frontmatter). This is the primary handler that executes the tool logic by building the arguments passed to the bcli executable.
bear_context_setup: { tool: { name: "bear_context_setup", description: "Initialize a context library — a curated, synced folder of Bear notes optimized for LLM consumption. Creates the directory structure and config. After setup, tag Bear notes with #context (or a custom prefix) and use bear_context_sync to pull them in. One-time operation.", inputSchema: { type: "object" as const, properties: { dir: { type: "string", description: "Output directory for the context library (default: ~/.bear-context)", }, tag_prefix: { type: "string", description: "Tag prefix for qualifying notes (default: context). Notes tagged #context or #context/subtag will be included.", }, use_frontmatter: { type: "boolean", description: "Also include notes with context: true in YAML front matter (default: true)", }, }, }, annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, }, }, buildArgs: (input) => { const args = ["context", "init", "--json"]; if (input.dir) args.push("--dir", String(input.dir)); if (input.tag_prefix) args.push("--tag-prefix", String(input.tag_prefix)); if (input.use_frontmatter === true) args.push("--frontmatter"); return args; }, }, - mcp-server/src/tools.ts:753-772 (schema)Input schema for bear_context_setup defining the three optional parameters: dir (string), tag_prefix (string), and use_frontmatter (boolean).
inputSchema: { type: "object" as const, properties: { dir: { type: "string", description: "Output directory for the context library (default: ~/.bear-context)", }, tag_prefix: { type: "string", description: "Tag prefix for qualifying notes (default: context). Notes tagged #context or #context/subtag will be included.", }, use_frontmatter: { type: "boolean", description: "Also include notes with context: true in YAML front matter (default: true)", }, }, }, - mcp-server/src/index.ts:33-122 (registration)The CallToolRequestSchema handler in index.ts that looks up tools by name (line 35: const handler = tools[name]) and dispatches execution. This is where bear_context_setup is registered and invoked at runtime.
server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: input } = request.params; const handler = tools[name]; if (!handler) { return { content: [{ type: "text", text: `Unknown tool: ${name}` }], isError: true, }; } const params = (input ?? {}) as Record<string, unknown>; // Validate bear_edit_note: need at least one edit operation if (name === "bear_edit_note") { const hasAppend = params.append_text !== undefined; const hasBody = params.body !== undefined; const hasSetFm = params.set_frontmatter !== undefined && Object.keys(params.set_frontmatter as object).length > 0; const hasRemoveFm = Array.isArray(params.remove_frontmatter) && (params.remove_frontmatter as unknown[]).length > 0; const hasFm = hasSetFm || hasRemoveFm; if (!hasAppend && !hasBody && !hasFm) { return { content: [ { type: "text", text: "Provide 'append_text', 'body', 'set_frontmatter', or 'remove_frontmatter'.", }, ], isError: true, }; } if (hasAppend && hasBody) { return { content: [ { type: "text", text: "Provide either 'append_text' or 'body', not both.", }, ], isError: true, }; } } try { const args = handler.buildArgs(params); let result: { stdout: string; stderr: string }; // Check if this tool needs stdin piping const stdinData = handler.usesStdin?.(params) ?? null; if (stdinData !== null) { result = await execBcliWithStdinAndReauth(args, stdinData); } else { result = await execBcliWithReauth(args); } // Parse JSON output from bcli const stdout = result.stdout.trim(); if (!stdout) { return { content: [{ type: "text", text: "Command completed successfully." }], }; } // Validate it's JSON and pretty-print try { const parsed = JSON.parse(stdout); return { content: [ { type: "text", text: JSON.stringify(parsed, null, 2) }, ], }; } catch { // If bcli returned non-JSON, pass it through return { content: [{ type: "text", text: stdout }], }; } } catch (error) { const message = error instanceof BcliError ? error.message : String(error); return { content: [{ type: "text", text: message }], isError: true, }; } }); - mcp-server/src/index.ts:29-31 (registration)The ListToolsRequestSchema handler that registers all tools (including bear_context_setup) by exposing them via Object.values(tools).map(t => t.tool).
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: Object.values(tools).map((t) => t.tool), }));