- Brand
- brainattic
- Category
- Productivity
- Primary Subcategory
- Pending
Integration details
Description
The knowledge base your AI reads and writes — under your rules. Hybrid keyword and semantic search down to the passage, edits that land a revision you can roll back, and human-curated rules surfaced to every agent before it writes. Native MCP, EU-hosted.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Pending
- Secondary Subcategories
- None listed
- Brand
- brainattic
- Access
- Account required
- First tracked
- 2026-11-04
- Tool count
- 79
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for brainattic.ai
Get updates when brainattic.ai’s Discoverability Score or category rank changes.
Competitive lineup
79 tools agents can invoke
Apply an ordered batch of edits to an open edit session, all-or-nothing — if any edit cannot be applied (no match / ambiguous / overlapping / out of range) the whole batch is rejected and the buffer is left unchanged. Edit types: "replace" (old_string unique unless replace_all=true, new_string), "line_range" (start_line/end_line/content), "section" (heading + mode replace_body|insert_after_heading|delete_section, with level/parent to disambiguate). Returns the cumulative base→working unified diff; pass an empty edits array to just re-fetch the diff without mutating.
kb_documents_edit_apply
Add a document to a group. Idempotent — no-op if the document is already in the group.
kb_groups_attach_document
Soft-archive an attachment (sets archived_at). Reversible via kb_attachments_restore.
kb_attachments_archive
Begin a short-lived direct attachment upload for a client that can transfer local file bytes. Provide document_id and the original filename; optionally provide expected_sha256. The result contains an HTTPS upload_url ending in #token=<capability>. The fragment is local to the client and is never sent to the server: extract its token and POST the raw file bytes with Content-Type: application/octet-stream and Authorization: Bearer <token>. Send no multipart envelope; upload_url is the endpoint, not a file field, not the fragment. The capability expires in five minutes and succeeds once. The returned size limit is authoritative. Never put the token in a path, query, tool argument, or log.
kb_attachments_begin_upload
Retrieve attachment metadata, including the attachment_uuid used to embed the file in a document body as `kb-attachment://<uuid>`. Pass include_download_url=true to also mint a short-lived download URL.
kb_attachments_get
Save the actual bytes of a user-provided file reference as a downloadable document attachment. Pass the host-provided file object; the server downloads its public HTTPS URL with a bounded transfer and validates the bytes. Never invent a URL or substitute a description for the file. If the chat host cannot provide a downloadable reference, say so; a client holding local bytes can use kb_attachments_begin_upload. Optional expected_sha256 checks integrity without returning a hash. Returns attachment_uuid; embed  for an image or [label](kb-attachment://<uuid>) for a file. Active downloadable attachments remain until explicitly archived. Temporary source URLs and provider file IDs are not retained.
kb_attachments_import
Attach the exact original bytes from a public HTTPS source URL to an existing document. Pass source_url as an ordinary string and the mandatory expected_sha256 independently supplied by the source service; never invent a URL, checksum or substitute file. Optional expected_size_bytes must match exactly. The server validates each redirect, bounds the transfer and verifies integrity before storage. Returns attachment_uuid without changing the document body or revision. To link the file, separately edit the document using [label](kb-attachment://<uuid>). Active downloadable attachments remain until explicitly archived. Source URLs and checksums are not returned or retained as source metadata. A failed one-use source must be replaced with a fresh source capability before a deliberate retry; the server never replays a failed request. For a chat-host file object use kb_attachments_import; for local bytes use kb_attachments_begin_upload.
kb_attachments_import_url
Paginated list of a document's attachments. Active (non-archived) only by default. Each row carries the attachment_uuid used to embed the file in a document body as `kb-attachment://<uuid>`.
kb_attachments_list
Restore a soft-archived attachment (clears archived_at). Reverse of kb_attachments_archive.
kb_attachments_restore
Upload a small file you already hold as text or bytes, up to 64 KiB. Supply exactly one of content_text or content_base64. Never invent file bytes or write out base64 for a photo or a file shown in chat. Use kb_attachments_import for a real downloadable file reference, or kb_attachments_begin_upload for a client that can transfer local bytes directly. When neither is available, give the user the document permalink, ask them to open it and use Attach, then call kb_attachments_list. The web file limit is deployment-configured; an inline refusal states the live limit. Returns attachment_uuid: embed as  or [label](kb-attachment://<uuid>). Unreferenced inline uploads are eventually swept; active downloadable uploads remain until explicitly archived.
kb_attachments_upload
Present an existing Brainattic image attachment. Native MCP image content is the default; presentation_mode=auto falls back to a short-lived Brainattic presentation URL only when the normalized rendition is above the 1 MiB native envelope. Use native to require ImageContent, or url to explicitly request the Brainattic presentation capability. This tool never exposes MinIO or returns the original image bytes as a download.
kb_attachments_view_image
Open a surgical edit session on a document and snapshot its current revision. Stage edits with kb_documents_edit_apply, then kb_documents_edit_commit (lands one revision) or kb_documents_edit_discard. Calling this again for a document you already have an open session on resumes that session (resumed=true).
kb_documents_edit_begin
Commit an open edit session: flush its working buffer to a single new revision (title / project / groups preserved). Honors the begin-time revision snapshot — a concurrent edit returns kb.documents.stale_revision and leaves the session open to rebase or discard. Returns no_changes=true (no revision written) when the buffer equals the current document body.
kb_documents_edit_commit
Remove a document from a group. Idempotent — no-op if the document is not in the group.
kb_groups_detach_document
Discard an edit session and throw its working buffer away — no revision is written. Idempotent: discarding an already-closed session is a no-op.
kb_documents_edit_discard
Soft-archive a document (sets archived_at). Reversible via kb_documents_restore.
kb_documents_archive
Create a new document. slug is auto-generated from title when omitted. project_slug must exist; group_slugs are created on demand.
kb_documents_create
Permanently delete a document and all its revisions. Admin-only. Irreversible — archive first if in doubt.
kb_documents_delete
Retrieve a single document with its full markdown body. Optional `include` array bundles related rows in one round-trip: `revisions` / `attachments` / `groups` / `project`. Use kb_documents_get_meta when the body is not needed.
kb_documents_get
Paginated browse of documents in the tenant. Filters: project_slug, group_slugs, archived, include_hidden. Sort: updated_desc (default) | created_desc | title_asc. By default, docs belonging to hidden projects (kb_projects_hide_toggle) are excluded — matches the web /docs default view. Pass include_hidden=true to include them. Hidden does NOT affect kb_documents_search or kb_chunks_retrieve. When project_slug is explicit, the caller named the project so the hidden filter is irrelevant and is bypassed.
kb_documents_list
Restore a soft-archived document (clears archived_at). Reverse of kb_documents_archive.
kb_documents_restore
Hybrid keyword+vector search across documents in the caller's tenant. Returns ranked results with snippets. mode: hybrid (default) | keyword | vector. For passage-level retrieval to ground a generated answer, prefer kb_chunks_retrieve; this tool returns doc-grouped results shaped for browse and search UIs.
kb_documents_search
Save a new revision of an existing document. Omit title/body_md/project_slug/group_slugs to preserve existing values. Pass expected_revision_id for optimistic-concurrency protection; omit for last-write-wins. Returns no_changes=true (and inserts no revision) when the save would change nothing.
kb_documents_update
Cheap slug-based lookup returning minimal metadata (no body). Returns null when no document with that slug exists in the tenant. Use kb_documents_get for the full body.
kb_documents_get_by_slug
Cheap id-based lookup returning minimal metadata (no body). Useful for "is this doc tagged right?" follow-ups after a search or list. Use kb_documents_get when the body is needed.
kb_documents_get_meta
Fetch the rule document linked to one scope. Pass scope=tenant|project|group; for project/group also pass owner_slug. Returns linked=false with rule=null when the scope has no rule doc. Use kb_rules_list_for_context instead when you want every rule that applies to an authoring context at once. Rules are advisory conventions, not machine-enforced.
kb_rules_get
Soft-archive a group (sets archived_at). Reversible via kb_groups_restore. Archiving does NOT touch the group's document links — they are preserved; the group just leaves active listings and the sidebar.
kb_groups_archive
Create a group. Idempotent on slug — returns the existing group if the slug already exists.
kb_groups_create
Delete a group. Documents tagged with it lose this group tag.
kb_groups_delete
Retrieve a single group by slug (active or archived). The archived_at field is null when active, an ISO 8601 timestamp when archived.
kb_groups_get
Paginated browse of groups in the tenant, ordered by name. Active (non-archived) groups only by default; pass archived=true to list archived groups instead. Each row carries archived_at. Returns total (the full match count, independent of limit/offset) alongside the page.
kb_groups_list
Restore (un-archive) a group: clears archived_at so the group returns to active listings and the sidebar. Reverses kb_groups_archive.
kb_groups_restore
Rename or update a group's name, slug, or description.
kb_groups_update
Health check; answers ok and your default workspace slug. Call kb_tenants_list to see every workspace the token grants.
kb_health_ping
Lists the rule documents that apply to a given authoring context — the conventions your authoring should follow. Returns a list of MCP resource URIs in canonical order: tenant rules first, then project rules, then group rules (one per group, in the order you supplied). Each entry carries the rule doc body inline by default (body_md) so one call gives you everything you need — no separate resources/read fetch required. Pass include_bodies=false to get URIs only. Empty list means no rules apply at this scope. Rules are advisory, not machine-enforced; agents are expected to read and apply them.
kb_rules_list_for_context
List every workspace your bearer token grants: the slug to pass as tenant_slug, the workspace name, and which one is your default. Takes no parameters. Call this when a refusal tells you the token grants several workspaces and you need one other than the default.
kb_tenants_list
Soft-archive a project (sets archived_at). Reversible via kb_projects_restore. Archiving does NOT touch the project's documents — they keep their project link and stay reachable; the project just leaves active listings, the sidebar, and the dashboard "Active projects" count.
kb_projects_archive
Create a new project. slug is auto-generated from name when omitted.
kb_projects_create
Delete a project. Documents assigned to it become project-less (project_id set to null).
kb_projects_delete
Retrieve a single project by slug (active or archived). The archived_at field is null when active, an ISO 8601 timestamp when archived.
kb_projects_get
Paginated browse of projects in the tenant. Active (non-archived) projects only by default; pass archived=true to list archived projects instead. Hidden projects (see kb_projects_hide_toggle) are excluded by default; pass include_hidden=true to include them. Each row carries hidden + archived_at so callers can branch. Returns total (the full match count, independent of limit/offset) alongside the page.
kb_projects_list
Restore (un-archive) a project: clears archived_at so the project returns to active listings, the sidebar, and the "Active projects" dashboard count. Reverses kb_projects_archive.
kb_projects_restore
Rename or update a project's name, slug, or description.
kb_projects_update
Cancel a single reminder (by `reminder_id`) or an entire schedule (by `schedule_id`). Idempotent — already-cancelled rows are no-ops. Only reminders and schedules you created or receive are reachable; anything else answers not_found.
kb_reminders_cancel
Create a one-off reminder for one or more tenant members. When it fires, it SENDS a message through email, Slack, or SMS, and a message that has been delivered cannot be recalled — cancelling only stops a reminder that has not fired yet. Create one only when the user asked for it, addressed to the people the user named. Omit `recipients` to send to yourself; omit `channels` to use each recipient's preferred channel.
kb_reminders_create
Create a recurring reminder schedule. Validates the RFC 5545 rrule before persistence; expansion to per-occurrence kb_reminders rows happens in the materialiser. Every occurrence SENDS a message through email, Slack, or SMS to the selected recipients, and a delivered message cannot be recalled — cancelling the schedule only stops occurrences that have not fired yet. Create one only when the user asked for a repeating reminder, addressed to the people the user named.
kb_reminders_create_schedule
Fetch a single reminder by id with its delivery rows. Only reminders you created or receive are reachable; anything else answers not_found.
kb_reminders_get
Paginated browse of the actor's reminders on the active tenant, most-due-soon first. Filters: status, due window. Returns total (the full match count, independent of limit/offset) alongside the page.
kb_reminders_list
Retrieves relevant passages from the connected private knowledge base. Call this whenever a question depends on the organisation's stored knowledge; the model may not otherwise have access to it. Returns a flat list of passages ordered by relevance; pass them as context when generating your answer and cite the source document for each claim. For "show me documents about X" browse-style queries, prefer kb_documents_search.
kb_chunks_retrieve
Retrieve a specific document revision with its full markdown body.
kb_revisions_get
brainattic.ai ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve brainattic.ai's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.


