bear_context_remove
Remove a Bear note from the context library by deleting its #context tag, triggering sync to remove the local file.
Instructions
Remove a Bear note from the context library by removing its #context tag. Triggers a sync to delete the local file.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note ID (uniqueIdentifier) |
Implementation Reference
- mcp-server/src/tools.ts:930-952 (registration)Registration of the bear_context_remove tool in the tools registry. Defines the tool metadata (name, description, input schema with required 'id' parameter, annotations) and the buildArgs function that constructs the bcli command as ['context', 'remove', <id>, '--json'].
bear_context_remove: { tool: { name: "bear_context_remove", description: "Remove a Bear note from the context library by removing its #context tag. Triggers a sync to delete the local file.", inputSchema: { type: "object" as const, properties: { id: { type: "string", description: "Note ID (uniqueIdentifier)", }, }, required: ["id"], }, annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, }, }, buildArgs: (input) => ["context", "remove", String(input.id), "--json"], }, - mcp-server/src/index.ts:33-122 (handler)Handler: The CallToolRequestSchema handler in index.ts dispatches tool calls by name. For 'bear_context_remove', it looks up the handler from the tools registry, calls buildArgs to get ['context', 'remove', <id>, '--json'], and executes bcli with reauth support.
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, }; } });