---
name: gentic-brain
description: "An MCP server for capturing, indexing, and surfacing what your org knows. Stage sources from Slack, email, reviews, and notes; promote them into the wiki; and read a one-call snapshot of captured sources, knowledge chunks, wiki entities, and recent brain events."
license: MIT
metadata:
  author: gentic
  version: "1.0.0"
---

# Gentic Brain

Stage any externally-originated artifact — a Slack thread, an email, a review, a note — into a per-org knowledge layer that's searchable in seconds and promotable into a structured wiki on demand. One status call returns counts, the most recent captured sources and wiki entities, and a 7-day event feed so an agent can answer 'what does our brain know about us?' in a single round-trip.

## When to apply

- User wants to capture a Slack thread, email, review, social mention, or note into the org's brain.
- User mentions "capture", "remember", "add to the brain", "file this", or "the agent should know about this".
- User wants to promote a previously-captured source into a permanent wiki entity page.
- User wants to undo a capture ("forget this", "un-capture", "remove that source").
- User asks "what does our brain know?" or wants a dashboard-style snapshot of recent captures and wiki activity.

## Tools

| Tool | Description | Cost |
|------|-------------|------|
| `brain_capture_document` | Capture a hosted source into Gentic Brain by pasting its public URL. v1 supports **Google Docs** (paste any docs.google.com/document/... share link), **PDFs** (Drive PDF share links, or direct `.pdf` URLs hosted anywhere — Drive, S3, an internal docs server, etc.), and **web pages** (any public http(s) URL — Notion published pages, blog posts, help articles, public spec pages, agency reports). The Modal worker translates share-URLs to the actual content-fetch URL on its side, OCRs image-heavy PDFs, scrapes HTML pages, chunks, embeds, and stages the markdown — findable via `brain_query` and promotable into a curated wiki entity via `wiki_ingest_source`. **Requires the source to be publicly accessible** (Anyone-with-link for Drive content, no auth wall for web pages) — private files and auth-walled pages return a clear actionable error. Processing is async — the tool returns immediately with `status: "processing"` and the source becomes searchable shortly after. Optional `describe_images=true` on web-page captures invokes Gemini Vision on the page's images and folds the descriptions into the captured content — useful for image-heavy pages (marketing emails, ad creatives, social posts) where alt-text is sparse. Per-image cost (~5¢) is billed as a separate line item, capped at 20 images per page, and requires the org to have opted in via the dashboard. When the org hasn't opted in, `describe_images=true` silently downgrades to text-only capture. | 1¢ / result (min 1¢) |
| `brain_capture_text` | Capture a raw text blob into Gentic Brain — for document-shaped text that arrived through a channel with no fetchable URL (creator emails from influencer seeding, pasted Slack quotes, inbound form submissions, etc.). The Modal worker chunks, embeds, and stages the text alongside Brain's document/web captures — findable via `brain_query` and promotable into a curated wiki entity via `wiki_ingest_source`. Use `brain_capture_document` instead when the source has a public URL (Google Doc share link, web page, PDF). Typed event records (reviews, social comments, support tickets, etc.) belong in the activity substrate and have their own capture tool — do NOT use this for those. Processing is async — the tool returns immediately with `status: "processing"` and the text becomes searchable shortly after. Billed per chunk (1¢/chunk) on completion. | 1¢ / result (min 1¢) |
| `brain_query` | Ask a natural-language question against the organization's full brain — both the raw machine memory (knowledge: Slack captures, PDFs, web pages, inbound emails, e-commerce events) and the team's deliberate writing (curated wiki entities). Returns a synthesized grounded answer with clickable citations resolved back to originating systems (Slack permalinks, PDF/web URLs, wiki page URLs). The team's deliberate writing is treated as authoritative on conflicts; raw captures provide supporting context. **Render every returned citation as a clickable markdown link using `view_url` when present, falling back to `source_uri` for non-URL identifiers (e.g. `slack://...` — your Slack-aware renderer should turn these into workspace permalinks).** Use this for any 'what does the company know about X?' / 'why did we decide Y?' / 'how do we handle Z?' question. For consulting only the curated wiki, use `wiki_query` instead. | 25¢ / call |
| `brain_status_snapshot` | Aggregate the current Brain state for the org in one read-through call. Returns counts of captured sources, knowledge chunks, wiki entities, and wiki notes; the 10 most recently captured sources + 10 most recently updated wiki entities; and the last 7 days of brain events as a chronological feed (capped at 100). No new persistent store — pure reads from per-org MotherDuck and S3. Used by the Brain dashboard panel in gentic-web; agents can call it to summarize 'what does the brain know about us?' in one round-trip. Free. | Free |
| `wiki_ingest_source` | Promote a previously-staged source (captured via wiki_stage_source) into the wiki by its canonical source_uri. Resolves (source_type, slug) from the per-org knowledge layer, constructs the staged S3 key, and invokes wiki_ingest's synthesis path — updates entity pages, refreshes the index, appends a log entry, writes the verbatim note. Symmetric with wiki_stage_source / wiki_unstage_source (all three Brain primitives identify sources by source_uri). **Idempotent — safe to re-promote.** Re-running on the same source_uri updates the existing entities in place (was_created=false). **On success the response includes `entity_view_url` for the canonical entity, `wiki_paths` for all entities touched, and `index_view_url` for the updated index — surface these as clickable markdown links in user-facing replies.** Used by gentic-computer's brain_promote_thread intent handler. | 25¢ / call |
| `wiki_stage_source` | Stage an externally-originated source artifact into the brain. Writes the markdown body to the org's S3 wiki-sources prefix, asynchronously vectorizes it into the knowledge layer (searchable via search_knowledge within ~10–60s), and emits a `source_staged` brain event for the ledger. This is the single mandated ingest path — Slack reaction handlers (gentic-computer), future doc-system connectors (Notion / Drive / Confluence), and direct-upload tools all deposit through here. Free; the chained vectorize_content charges its own per-chunk meter on completion. **Idempotent on (source_type, slug)**: re-staging the same source overwrites in place and emits `source_restaged` so the brain doesn't accumulate duplicates from re-reactions or re-syncs. | Free |
| `wiki_unstage_source` | Soft-delete a previously-staged source by its canonical source_uri. Resolves (source_type, slug) by looking up the knowledge layer, marks all matching knowledge chunks `is_deleted = TRUE`, writes a `.deleted` sidecar marker at the staged S3 key (the original .md is preserved for audit), and emits a `source_unstaged` brain event. Idempotent — subsequent calls on an already-deleted or never-staged source_uri return `soft_deleted: false` with `knowledge_chunks_marked: 0`. Free. Used by gentic-computer's uncapture-intent handler (FR-005). The identity-first design means callers don't need to track the slug separately — passing the same source_uri originally given to wiki_stage_source is sufficient. | Free |

## Workflow

### 1. Stage by canonical source_uri, always

`wiki_stage_source` is the single mandated ingest path. Identify the source by its upstream's primary key — `slack://{channel}/{ts}` for Slack messages, `notion://page/{id}` for Notion pages, `email://{message-id}` for emails. Never use a title or human label that can drift. The `slug` is caller-provided (FR-028 — the system never auto-generates slugs from titles) and combined with `source_type` forms the logical identity. Re-staging the same `(source_type, slug)` overwrites in place and emits `source_restaged`.

### 2. Pick the right source_type

The `source_type` enum mirrors `vectorize_content` so chaining doesn't need a translation layer. Use `slack` for Slack messages and threads, `email` for emails, `review` for product/store reviews, `social` for tweets / TikTok / IG mentions, `creator_feedback` for influencer-program responses, `note` for internal notes (e.g. a researcher's hand-written observation), and `other` only when nothing else fits.

### 3. Search before promoting

Staged sources are searchable via `search_knowledge` in ~10–60s after staging. Use that to check whether the brain already has overlapping coverage before deciding to promote. `wiki_ingest_source` is the bridge from captured knowledge to a permanent wiki entity page — call it only when the source is worth that promotion, not on every stage.

### 4. Promote with a scope

`wiki_ingest_source` takes the original `source_uri` and a scope: `{ kind: 'idea', ideaSlug }` for an idea wiki or `{ kind: 'org' }` for the org-shared wiki. Default to the same scope the captured source belongs to. Idempotent — re-promoting on the same `source_uri` updates the existing entities in place (`was_created: false`). The response includes `entity_view_url`, `wiki_paths`, and `index_view_url` — surface these as clickable markdown links back to the user.

### 5. Soft-delete on uncapture

`wiki_unstage_source` takes the same `source_uri` originally passed to `wiki_stage_source` — callers don't need to track the slug separately. It marks all matching knowledge chunks `is_deleted = TRUE`, writes a `.deleted` sidecar at the staged S3 key (the original .md is preserved for audit), and emits a `source_unstaged` event. Idempotent — re-running on a deleted or never-staged URI returns `soft_deleted: false`.

### 6. Read the snapshot in one round-trip

`brain_status_snapshot` is free and aggregates counts, recents, and the 7-day event feed into a single response — exactly what the Brain dashboard panel in gentic-web renders. Agents can call it to answer 'what does the brain know about us?' without four separate reads. Returns `success: false` with an `error` string on per-org failure (e.g. unmapped org); plan for both branches in the consumer.

## Notes

- All tools are organization-scoped — the auth context determines the org, never a tool argument.
- `wiki_stage_source` is **free**; chained vectorization charges its own per-chunk meter on completion. `wiki_ingest_source` (promotion) is **25¢**. `wiki_unstage_source` and `brain_status_snapshot` are **free**.
- Identity is `(source_type, slug)`. Re-staging the same logical source overwrites in place and emits `source_restaged` so the brain doesn't accumulate duplicates.
- Knowledge chunks are searchable ~10–60s after `wiki_stage_source` returns — the call itself is sub-second.
- `brain_status_snapshot` returns the last 7 days of brain events capped at 100. `truncated: true` signals the cap was hit.
- Sources soft-deleted via `wiki_unstage_source` keep their original markdown in S3 for audit; only knowledge chunks and the sidecar marker change.

## Tool details

- `brain_capture_document` — Capture a hosted source into Gentic Brain by pasting its public URL. v1 supports **Google Docs** (paste any docs.google.com/document/... share link), **PDFs** (Drive PDF share links, or direct `.pdf` URLs hosted anywhere — Drive, S3, an internal docs server, etc.), and **web pages** (any public http(s) URL — Notion published pages, blog posts, help articles, public spec pages, agency reports). The Modal worker translates share-URLs to the actual content-fetch URL on its side, OCRs image-heavy PDFs, scrapes HTML pages, chunks, embeds, and stages the markdown — findable via `brain_query` and promotable into a curated wiki entity via `wiki_ingest_source`. **Requires the source to be publicly accessible** (Anyone-with-link for Drive content, no auth wall for web pages) — private files and auth-walled pages return a clear actionable error. Processing is async — the tool returns immediately with `status: "processing"` and the source becomes searchable shortly after. Optional `describe_images=true` on web-page captures invokes Gemini Vision on the page's images and folds the descriptions into the captured content — useful for image-heavy pages (marketing emails, ad creatives, social posts) where alt-text is sparse. Per-image cost (~5¢) is billed as a separate line item, capped at 20 images per page, and requires the org to have opted in via the dashboard. When the org hasn't opted in, `describe_images=true` silently downgrades to text-only capture.
  - `url` (string, required) — URL to capture. Accepts: Google Docs share links (`docs.google.com/document/d/<id>/...`), Drive PDF share links (`drive.google.com/file/d/<id>/view`), direct PDF URLs (any URL ending in `.pdf` or with `.pdf?...` query params, hosted anywhere), and **any public http(s) web page URL**. Sheets, Slides, Forms, folder URLs, and SharePoint/OneDrive Word docs are out of v1 scope and return specific errors.
  - `describe_images` (boolean, default: `false`, required) — When true on a web-page capture, the Modal worker fetches images on the page, runs Gemini Vision against them, and folds the descriptions into the captured content (alongside text + alt-text). Useful when alt-text is sparse on image-heavy pages (Klaviyo emails, ad creatives, social posts). Costs ~5¢ per non-cached image — same image across captures only bills once. Capped at 20 images per page; beyond the cap, the worker truncates and notes it in the staged markdown. **Requires the org to have opted in** at Org Settings → Brain (default off). If true but the org hasn't opted in, the call silently downgrades to text-only capture and logs a warning. No effect on `google_doc` / `pdf` source types in v1 — web_page only.
  - `vectorize_images` (boolean, default: `false`, required) — When true on a web-page capture, the Modal worker produces multimodal embeddings (Gemini Embedding 2) for the captured page's images and writes them to the knowledge table as `chunk_type='image'` rows alongside text chunks. Enables visual-similarity retrieval — `brain_query` can match against image embeddings natively (same vector space as text), and operators can pass an attached image as a query input to find visually-similar captured images. Costs ~1-2¢ per non-cached image — same image across captures only bills once. **Requires the org to have opted in** at Org Settings → Brain (default off, distinct from `image_descriptions_enabled`). If true but the org hasn't opted in, the call silently downgrades to no-embeddings and logs a warning. No effect on `google_doc` / `pdf` source types in v1 — web_page only. Often paired with `describe_images=true` so one Modal pass produces both outputs.
- `brain_capture_text` — Capture a raw text blob into Gentic Brain — for document-shaped text that arrived through a channel with no fetchable URL (creator emails from influencer seeding, pasted Slack quotes, inbound form submissions, etc.). The Modal worker chunks, embeds, and stages the text alongside Brain's document/web captures — findable via `brain_query` and promotable into a curated wiki entity via `wiki_ingest_source`. Use `brain_capture_document` instead when the source has a public URL (Google Doc share link, web page, PDF). Typed event records (reviews, social comments, support tickets, etc.) belong in the activity substrate and have their own capture tool — do NOT use this for those. Processing is async — the tool returns immediately with `status: "processing"` and the text becomes searchable shortly after. Billed per chunk (1¢/chunk) on completion.
  - `content_text` (string, required) — The raw text to capture. Required; non-empty; max 1 MB. For an email, paste the body (subject + sender go into source_metadata). For a multi-message thread, concatenate with sender attribution per message.
  - `source_metadata` (object) — Light provenance about where the text came from. All fields optional. Stored alongside the captured content; surfaces in citations and downstream filtering.
  - `slug` (string) — Optional caller-supplied slug. Defaults to `text_<first 16 chars of sha256(content_text)>` for content-hash-based dedup across re-captures of the same text. Override only when you need a stable human-readable identifier (e.g. for a known recurring source).
- `brain_query` — Ask a natural-language question against the organization's full brain — both the raw machine memory (knowledge: Slack captures, PDFs, web pages, inbound emails, e-commerce events) and the team's deliberate writing (curated wiki entities). Returns a synthesized grounded answer with clickable citations resolved back to originating systems (Slack permalinks, PDF/web URLs, wiki page URLs). The team's deliberate writing is treated as authoritative on conflicts; raw captures provide supporting context. **Render every returned citation as a clickable markdown link using `view_url` when present, falling back to `source_uri` for non-URL identifiers (e.g. `slack://...` — your Slack-aware renderer should turn these into workspace permalinks).** Use this for any 'what does the company know about X?' / 'why did we decide Y?' / 'how do we handle Z?' question. For consulting only the curated wiki, use `wiki_query` instead.
  - `question` (string, required) — Free-form question to ask the brain.
  - `scope` (string, enum: `all` | `org` | `idea`) — Limit the search. 'all' (default) searches every scope in the brain. 'org' searches only org-level content. 'idea' requires `ideaSlug` and limits to that idea.
  - `ideaSlug` (string) — When scope='idea', the idea slug to search inside. Ignored otherwise.
  - `include_image_rows` (boolean, default: `true`, required) — Whether to include image-embedding rows (chunk_type='image', from tier-3 vectorize_images captures — gentic-mcp-server#429) in the knowledge retrieval set. Default true: visual-similarity retrieval is the unified-corpus value prop, and image rows surface alongside text chunks via the same cosine-similarity search since Gemini Embedding 2 puts both in the same vector space. Set false for text-only retrieval when image rows would be off-topic (rare; mostly a debugging hatch).
- `brain_status_snapshot` — Aggregate the current Brain state for the org in one read-through call. Returns counts of captured sources, knowledge chunks, wiki entities, and wiki notes; the 10 most recently captured sources + 10 most recently updated wiki entities; and the last 7 days of brain events as a chronological feed (capped at 100). No new persistent store — pure reads from per-org MotherDuck and S3. Used by the Brain dashboard panel in gentic-web; agents can call it to summarize 'what does the brain know about us?' in one round-trip. Free.
  - `_unused` — No inputs in v1. The auth context determines the org; the snapshot is org-wide.
- `wiki_ingest_source` — Promote a previously-staged source (captured via wiki_stage_source) into the wiki by its canonical source_uri. Resolves (source_type, slug) from the per-org knowledge layer, constructs the staged S3 key, and invokes wiki_ingest's synthesis path — updates entity pages, refreshes the index, appends a log entry, writes the verbatim note. Symmetric with wiki_stage_source / wiki_unstage_source (all three Brain primitives identify sources by source_uri). **Idempotent — safe to re-promote.** Re-running on the same source_uri updates the existing entities in place (was_created=false). **On success the response includes `entity_view_url` for the canonical entity, `wiki_paths` for all entities touched, and `index_view_url` for the updated index — surface these as clickable markdown links in user-facing replies.** Used by gentic-computer's brain_promote_thread intent handler.
  - `source_uri` (string, required) — Canonical external identity of the staged source to promote, e.g. `slack://C0123456789/1700000000.000000`. Same value originally passed to wiki_stage_source.
  - `scope` (required) — Wiki scope to ingest into: `{ kind: 'idea', ideaSlug }` for an idea wiki, or `{ kind: 'org' }` for the org-shared wiki.
- `wiki_stage_source` — Stage an externally-originated source artifact into the brain. Writes the markdown body to the org's S3 wiki-sources prefix, asynchronously vectorizes it into the knowledge layer (searchable via search_knowledge within ~10–60s), and emits a `source_staged` brain event for the ledger. This is the single mandated ingest path — Slack reaction handlers (gentic-computer), future doc-system connectors (Notion / Drive / Confluence), and direct-upload tools all deposit through here. Free; the chained vectorize_content charges its own per-chunk meter on completion. **Idempotent on (source_type, slug)**: re-staging the same source overwrites in place and emits `source_restaged` so the brain doesn't accumulate duplicates from re-reactions or re-syncs.
  - `title` (string, required) — Human-readable title of the source.
  - `markdown` (string, required) — Source body as markdown. Becomes the body of the staged S3 file.
  - `source_uri` (string, required) — Canonical external identity of the source, e.g. `slack://C0123456789/1700000000.000000`, `notion://page/abc-def`. Stable across edits — use the upstream's primary key, never a title or human label that can drift.
  - `slug` (string, required) — Caller-provided stable slug derived from the source_uri (FR-028 — the system never auto-generates slugs from titles). Used as the S3 filename and as the knowledge `slug` column. Same (source_type, slug) is treated as the same logical source — re-stage overwrites.
  - `source_type` (string, enum: `email` | `slack` | `review` | `social` | `creator_feedback` | `note` | `other`, required) — Origin of the source. Matches vectorize_content's enum so chaining doesn't require a translation layer.
  - `source_updated_at` (string) — ISO-8601 timestamp of when the original source was last modified. Optional for one-shot ingests; required by future connector delta-sync paths.
  - `metadata` (object) — Free-form metadata stored alongside the staged source (e.g. {channel_name, thread_message_count, truncated} for Slack).
- `wiki_unstage_source` — Soft-delete a previously-staged source by its canonical source_uri. Resolves (source_type, slug) by looking up the knowledge layer, marks all matching knowledge chunks `is_deleted = TRUE`, writes a `.deleted` sidecar marker at the staged S3 key (the original .md is preserved for audit), and emits a `source_unstaged` brain event. Idempotent — subsequent calls on an already-deleted or never-staged source_uri return `soft_deleted: false` with `knowledge_chunks_marked: 0`. Free. Used by gentic-computer's uncapture-intent handler (FR-005). The identity-first design means callers don't need to track the slug separately — passing the same source_uri originally given to wiki_stage_source is sufficient.
  - `source_uri` (string, required) — Canonical external identity of the staged source to soft-delete, e.g. `slack://C0123456789/1700000000.000000`. Same value originally passed to wiki_stage_source.

---

_This SKILL.md is generated from the live Gentic MCP manifest. Tool names, descriptions, and pricing are always current. Connect Gentic Brain at https://gentic.co/brain._
