---
name: ourfamilybrain
description: Work with the Our Family Brain MCP server — a shared family workspace (boards, lists, notes, calendars, messages, smart home). Use when the user wants to organize, remember, schedule, or automate anything family-related through the family brain.
---

# Our Family Brain

Our Family Brain is a shared family workspace. Each family member's personal AI assistant joins the family and works with boards (kanban), lists, a knowledge base, calendars and events, messages, files, and smart-home devices — all permission-checked per agent.

## Connecting

The MCP server lives at `https://ourfamilybrain.com/mcp` (Streamable HTTP, JSON-RPC 2.0). Authenticate with `Authorization: Bearer <agent_token>` or OAuth 2.1. Full setup instructions: `https://ourfamilybrain.com/connect-agent.md`.

## The catalog: two tools

`tools/list` returns exactly two tools. This is the whole interface:

- **search_tools** — search the full catalog (~170 tools) by task keywords. Returns the top matches with their full input schemas inline. No auth required. Use it first whenever you are unsure which tool fits.
- **execute** — run JavaScript against the family workspace. This is the primary way to get work done.

`tools/call` also accepts any underlying tool name directly, but prefer `execute` — one snippet replaces many round trips.

## The fb SDK

Inside an `execute` snippet, `fb` exposes one async method per family tool, named exactly like the tool (`fb.board_list`, `fb.event_create`, `fb.message_send`, ...). `family_id` is optional on every tool — omit it and your default family is used. Most people have one family. If yours has several, `family_list` shows them; pass `family_id` only when your person asks about a different family.

```js
// List boards, then create a card on the first one — one round trip.
const boards = await fb.board_list({});
const card = await fb.card_create({ board_id: boards.boards[0].id, title: "Buy milk" });
return { boards: boards.boards.length, card: card.card_id };
```

- Each `fb` method returns the parsed JSON result, or throws an `Error` you can catch and handle.
- Top-level `await` is allowed. `console.log` output is captured and returned.
- The result shape is `{ ok, value, logs, toolCalls }`: `value` is your return value, `logs` the console output, `toolCalls` a record of every `fb` call (tool name, args, duration, error if any).

## Workflow that works

1. **Search first.** `search_tools({ query: "calendar event" })` → `event_create` with its schema inline.
2. **Batch in one snippet.** Chain calls, branch on results, filter and transform in code. Read everything you need, then write — a plan-then-act snippet beats five chatty calls.
3. **Search before you create** (`search`, `kb_search`) to avoid duplicates. Prefer edits over duplicates.
4. **Handle failures in code.** A missing board, a permission error — catch it, fall back, and report what happened instead of dying silently.
5. **File feedback when something is broken or missing.** `feedback_submit` sends bugs, feature requests, praise, or questions to the app owner's inbox — prefer filing over staying silent.

```js
// Friday-night pattern: find-or-create, then act.
const found = await fb.search({ q: "pizza night", types: ["kb"] });
let note = found.results?.[0];
if (!note) {
  note = await fb.kb_create({ title: "Pizza night ideas", body: "" });
}
return note;
```

## Sandbox rules

Each `execute` runs in a fresh isolate:

- No filesystem, no environment variables. `fetch` (network) is blocked — only `fb` methods can reach outside.
- Only the real family tools exist on `fb`. `execute` and `search_tools` are not available inside a snippet.
- Calls run with **your own permissions** — scoped exactly like your agent token. Writes are audited.
- Bounded execution (~20s CPU). Keep snippets focused; split long jobs across calls.

## Task cheat-sheet

| I want to...                     | Search for       | Typical tools                                            |
| -------------------------------- | ---------------- | -------------------------------------------------------- |
| Plan / kanban                    | "board"          | `board_list`, `board_create`, `card_create`, `card_update` |
| Shopping / todo lists            | "shopping list"  | `list_create`, `item_create`, `list_get`                 |
| Remember things                  | "note"           | `kb_create`, `kb_search`, `kb_update`                    |
| Schedule                         | "calendar event" | `calendar_list`, `event_create`, `event_list`            |
| Message the family               | "message"        | `message_send`, `message_poll`                           |
| Smart home                       | "smart home"     | `smart_home_list_devices`, `smart_home_control`          |
| Invite someone                   | "invite agent"   | `invite_create`                                          |
| Search everything                | "search"         | `search` (unified, cross-workspace)                      |
| Report a bug / ask for a feature | "feedback"       | `feedback_submit`, `feedback_list`                       |

Three everyday aliases also work in `execute` and `tools/call` — `list_items` (for `list_get`), `list_item_create` (for `item_create`), and `message_list` (for `message_poll`) — but prefer the canonical names above; search and the catalog only ever show those.

## Skill discovery

This skill is also served over MCP resources at `skill://ourfamilybrain/SKILL.md` (`resources/list` + `resources/read`) for clients that pull skills from the server.
