Connect Your AI Agent with Slab for Slack

Integrate Slab MCP server into your Slack workspace for instant access to your AI agent.

Back to MCP Servers
Slab
Slab
Knowledge Base & Wiki Software

Categories

Productivity

Available Tools

Tools that your AI agent can use through this MCP server to interact with Slab

Update Post

Update a post's metadata and access settings via the updatePost GraphQL mutation, returning the updated post object. Manages link access (sharing), owner, archived/published state, and banner. NOTE: this mutation does NOT change title or content; use Update Post Content for the body (there is no title-update field in the schema). Run Search Posts first to obtain the post ID. Example: postId abc123, archived true returns {"id":"abc123","title":"Q3 Onboarding Guide","archivedAt":"2026-01-01T00:00:00Z","linkAccess":"INTERNAL"}. See the documentation.

Update Post Content

Replace or edit a post's body via the updatePostContent GraphQL mutation. Content must be supplied as a Quill delta (see https://quilljs.com/docs/delta/) wrapped in an {"ops":[...]} object, passed as a JSON string — the API rejects a native/unwrapped delta object at the GraphQL layer. IMPORTANT: Slab derives the post's displayed title from the first line of its content — there is no independent title field after creation. An op with {"retain":0} (or no leading retain) inserts at the very start WITHOUT deleting anything — it pushes the existing content later in the document, so it can change what displays as the title without removing the old title text (which still exists, just no longer on the first line). To actually replace the title, delete the existing title's range — {"delete":N} where N is the old title line's length — then insert the replacement. To append body text while preserving the title, first read the post's current content (via Search Posts or Get Posts) and lead with a retain count covering the existing title line's length. This is a distinct endpoint from Update Post (which handles metadata/access only, and cannot change title). Run Search Posts first to obtain the post ID. Example (append after a 20-character title line): postId abc123, delta {"ops":[{"retain":20},{"insert":"Additional body text.\n"}]} — a non-error response confirms the edit was accepted. CRITICAL: this mutation applies your delta positionally against whatever the post's content actually is at the moment the call runs — there is no version check, and the response reflects the pre-edit snapshot, not the result. Always re-read the post's current content (Search Posts or Get Posts) immediately before computing a delta, and if you need to make a second edit to the same post, re-read again first — never compute a new delta from an earlier read or from this action's own response. Offsets computed against a stale snapshot land in the wrong place and silently corrupt the document instead of erroring; they do not queue safely. See the documentation.

Search Posts

List or search posts in the Slab organization via the GraphQL search endpoint. Leave Query empty to list all posts; provide a Query string to full-text search. This is the picker action agents should call to obtain post IDs for Get Posts, Update Post, Add Topic To Post, and Remove Topic From Post. Returns { posts, pageInfo } — posts is an array of post objects (e.g. {"id": "abc123", "title": "Engineering Onboarding Guide", "owner": {"id": "u1", "name": "Alice"}, "topics": [{"id": "abc12def", "name": "Engineering"}]}). Only forward pagination is supported: when pageInfo.hasNextPage is true, pass pageInfo.endCursor as After to retrieve the next page. Pass Fields (e.g. ["id","title","owner"]) to trim large fields like content from each post when only metadata is needed. See the documentation.

Remove Topic From Post

Disassociate a topic from a post via the removeTopicFromPost GraphQL mutation, returning the topic. This only removes the association (reversible with Add Topic To Post); it does not delete the post or the topic. Run Search Posts for the post ID and List Topics for the topic ID before calling. Example: postId abc123, topicId abc12def returns {"id":"abc12def","name":"Engineering"}. See the documentation.

List Users

List all users in the Slab organization via the organization { users } GraphQL query, returning an array of user objects with id, name, and email (e.g. [{"id":"u1","name":"Alice","email":"[email protected]"}]). This is the picker action agents should call to obtain a user ID for Update Post's Owner ID. See the documentation.

List Topics

List all topics in the Slab organization via the organization { topics } GraphQL query, returning an array of topic objects with id and name (e.g. [{"id":"abc12def","name":"Engineering"}]). This is the picker action agents should call to obtain topic IDs for Create Post, Add Topic To Post, and Remove Topic From Post. There is no root topics-listing query, so this reads the organization's topics field. See the documentation.

List Posts

List all posts in the Slab organization (no filter). This action is superseded by Search Posts, which accepts an optional Query string and can list all posts when Query is empty. Prefer Search Posts for new workflows. Returns { posts, pageInfo } — posts is an array of post objects (e.g. {"id": "abc123", "title": "Engineering Onboarding Guide", "owner": {"id": "u1", "name": "Alice"}, "topics": [{"id": "abc12def", "name": "Engineering"}]}). Only forward pagination is supported: when pageInfo.hasNextPage is true, pass pageInfo.endCursor as After to retrieve the next page. Pass Fields (e.g. ["id","title","owner"]) to trim large fields like content from each post when only metadata is needed. See the documentation.

Get Posts

Get one or more Slab posts by their IDs, returning full post objects including content, owner, and associated topics. Use Search Posts first to discover post IDs; this action does not list or search. Accepts up to 100 IDs per call. Example: postIds ["abc123"] returns [{"id": "abc123", "title": "Engineering Onboarding Guide", "owner": {"id": "u1", "name": "Alice"}, "topics": [{"id": "abc12def", "name": "Engineering"}], "content": "..."}]. Pass Fields (e.g. ["id","title","owner"]) to trim large fields like content from each result when only metadata is needed. See the documentation.

Create Post

Create a new post in Slab via the createPost GraphQL mutation, returning the full post object (e.g. {"id":"abc123","title":"Q3 Onboarding Guide","topics":[{"id":"abc12def","name":"Engineering"}]}). If Content is provided, the body is appended after creation via the updatePostContent mutation (the Slab schema does not accept content at creation time). Slab derives the displayed title from the first line of the post's content, so the appended text is inserted after the existing title line rather than replacing it — this preserves Title instead of overwriting it. NOTE: the returned content field reflects the pre-append snapshot (title line only) even though the append is applied — treat a non-error response as confirmation, not the returned content. New posts are published by default (set Published to false to leave it as an unpublished draft) — unpublished posts do not appear in Search Posts/List Posts results. Run List Topics to obtain a Topic ID to pass at creation. See the documentation.

Add Topic To Post

Associate a topic with a post via the addTopicToPost GraphQL mutation, returning the topic. Run Search Posts to obtain the post ID and List Topics to obtain the topic ID before calling. Example: postId abc123, topicId abc12def returns {"id":"abc12def","name":"Engineering"}. See the documentation.