# Discourse API ## API Reference - [Discourse API Documentation](https://sourcey-discourse.pages.dev/index.md): This page contains the documentation on how to use Discourse through API calls. - [List calendar events](https://sourcey-discourse.pages.dev/operations/operation-discourse-post-event-events-json-get.md): GET /discourse-post-event/events.json. - [Export calendar events in iCalendar format](https://sourcey-discourse.pages.dev/operations/operation-discourse-post-event-events-ics-get.md): GET /discourse-post-event/events.ics. - [List backups](https://sourcey-discourse.pages.dev/operations/operation-admin-backups-json-get.md): GET /admin/backups.json. - [Create backup](https://sourcey-discourse.pages.dev/operations/operation-admin-backups-json-post.md): POST /admin/backups.json. - [Download backup](https://sourcey-discourse.pages.dev/operations/operation-admin-backups-filename-get.md): GET /admin/backups/{filename}. - [Send download backup email](https://sourcey-discourse.pages.dev/operations/operation-admin-backups-filename-put.md): PUT /admin/backups/{filename}. - [List badges](https://sourcey-discourse.pages.dev/operations/operation-admin-badges-json-get.md): GET /admin/badges.json. - [Create badge](https://sourcey-discourse.pages.dev/operations/operation-admin-badges-json-post.md): POST /admin/badges.json. - [Update badge](https://sourcey-discourse.pages.dev/operations/operation-admin-badges-id-json-put.md): PUT /admin/badges/{id}.json. - [Delete badge](https://sourcey-discourse.pages.dev/operations/operation-admin-badges-id-json-delete.md): DELETE /admin/badges/{id}.json. - [Retrieves a list of categories](https://sourcey-discourse.pages.dev/operations/operation-categories-json-get.md): GET /categories.json. - [Creates a category](https://sourcey-discourse.pages.dev/operations/operation-categories-json-post.md): POST /categories.json. - [Updates a category](https://sourcey-discourse.pages.dev/operations/operation-categories-id-json-put.md): PUT /categories/{id}.json. - [List topics](https://sourcey-discourse.pages.dev/operations/operation-c-slug-id-json-get.md): GET /c/{slug}/{id}.json. - [Show category](https://sourcey-discourse.pages.dev/operations/operation-c-id-show-json-get.md): GET /c/{id}/show.json. - [Create a group](https://sourcey-discourse.pages.dev/operations/operation-admin-groups-json-post.md): POST /admin/groups.json. - [Delete a group](https://sourcey-discourse.pages.dev/operations/operation-admin-groups-id-json-delete.md): DELETE /admin/groups/{id}.json. - [Get a group](https://sourcey-discourse.pages.dev/operations/operation-groups-name-json-get.md): GET /groups/{name}.json. - [Update a group](https://sourcey-discourse.pages.dev/operations/operation-groups-id-json-put.md): PUT /groups/{id}.json. - [Get a group by id](https://sourcey-discourse.pages.dev/operations/operation-groups-by-id-id-json-get.md): GET /groups/by-id/{id}.json. - [List group members](https://sourcey-discourse.pages.dev/operations/operation-groups-name-members-json-get.md): GET /groups/{name}/members.json. - [Add group members](https://sourcey-discourse.pages.dev/operations/operation-groups-id-members-json-put.md): PUT /groups/{id}/members.json. - [Remove group members](https://sourcey-discourse.pages.dev/operations/operation-groups-id-members-json-delete.md): DELETE /groups/{id}/members.json. - [List groups](https://sourcey-discourse.pages.dev/operations/operation-groups-json-get.md): GET /groups.json. - [Create an invite](https://sourcey-discourse.pages.dev/operations/operation-invites-json-post.md): POST /invites.json. - [Create multiple invites](https://sourcey-discourse.pages.dev/operations/operation-invites-create-multiple-json-post.md): POST /invites/create-multiple.json. - [Get the notifications that belong to the current user](https://sourcey-discourse.pages.dev/operations/operation-notifications-json-get.md): GET /notifications.json. - [Mark notifications as read](https://sourcey-discourse.pages.dev/operations/operation-notifications-mark-read-json-put.md): PUT /notifications/mark-read.json. - [List latest posts across topics](https://sourcey-discourse.pages.dev/operations/operation-posts-json-get.md): GET /posts.json. - [Creates a new topic, a new post, or a private message](https://sourcey-discourse.pages.dev/operations/operation-posts-json-post.md): POST /posts.json. - [Retrieve a single post](https://sourcey-discourse.pages.dev/operations/operation-posts-id-json-get.md): This endpoint can be used to get the number of likes on a post using the actions_summary property in the response. actions_summary responses with the id of 2 signify a like. If there are no actions_summary items with the id of 2, that means there are 0 likes. Other ids likely refer to various different flag types. - [Update a single post](https://sourcey-discourse.pages.dev/operations/operation-posts-id-json-put.md): PUT /posts/{id}.json. - [delete a single post](https://sourcey-discourse.pages.dev/operations/operation-posts-id-json-delete.md): DELETE /posts/{id}.json. - [List replies to a post](https://sourcey-discourse.pages.dev/operations/operation-posts-id-replies-json-get.md): GET /posts/{id}/replies.json. - [Lock a post from being edited](https://sourcey-discourse.pages.dev/operations/operation-posts-id-locked-json-put.md): PUT /posts/{id}/locked.json. - [Like a post and other actions](https://sourcey-discourse.pages.dev/operations/operation-post-actions-json-post.md): POST /post_actions.json. - [Get a list of private messages for a user](https://sourcey-discourse.pages.dev/operations/operation-topics-private-messages-username-json-get.md): GET /topics/private-messages/{username}.json. - [Get a list of private messages sent for a user](https://sourcey-discourse.pages.dev/operations/operation-topics-private-messages-sent-username-json-get.md): GET /topics/private-messages-sent/{username}.json. - [Search for a term](https://sourcey-discourse.pages.dev/operations/operation-search-json-get.md): GET /search.json. - [Get site info](https://sourcey-discourse.pages.dev/operations/operation-site-json-get.md): Can be used to fetch all categories and subcategories - [Get site basic info](https://sourcey-discourse.pages.dev/operations/operation-site-basic-info-json-get.md): Can be used to fetch basic info about a site - [Get a list of tag groups](https://sourcey-discourse.pages.dev/operations/operation-tag-groups-json-get.md): GET /tag_groups.json. - [Creates a tag group](https://sourcey-discourse.pages.dev/operations/operation-tag-groups-json-post.md): POST /tag_groups.json. - [Get a single tag group](https://sourcey-discourse.pages.dev/operations/operation-tag-groups-id-json-get.md): GET /tag_groups/{id}.json. - [Update tag group](https://sourcey-discourse.pages.dev/operations/operation-tag-groups-id-json-put.md): PUT /tag_groups/{id}.json. - [Get a list of tags](https://sourcey-discourse.pages.dev/operations/operation-tags-json-get.md): GET /tags.json. - [Get a specific tag](https://sourcey-discourse.pages.dev/operations/operation-tag-name-json-get.md): GET /tag/{name}.json. - [Get specific posts from a topic](https://sourcey-discourse.pages.dev/operations/operation-t-id-posts-json-get.md): GET /t/{id}/posts.json. - [Get a single topic](https://sourcey-discourse.pages.dev/operations/operation-t-id-json-get.md): GET /t/{id}.json. - [Remove a topic](https://sourcey-discourse.pages.dev/operations/operation-t-id-json-delete.md): DELETE /t/{id}.json. - [Update a topic](https://sourcey-discourse.pages.dev/operations/operation-t-id-json-put.md): PUT /t/-/{id}.json. - [Invite to topic](https://sourcey-discourse.pages.dev/operations/operation-t-id-invite-json-post.md): POST /t/{id}/invite.json. - [Invite group to topic](https://sourcey-discourse.pages.dev/operations/operation-t-id-invite-group-json-post.md): POST /t/{id}/invite-group.json. - [Bookmark topic](https://sourcey-discourse.pages.dev/operations/operation-t-id-bookmark-json-put.md): PUT /t/{id}/bookmark.json. - [Update the status of a topic](https://sourcey-discourse.pages.dev/operations/operation-t-id-status-json-put.md): PUT /t/{id}/status.json. - [Get the latest topics](https://sourcey-discourse.pages.dev/operations/operation-latest-json-get.md): GET /latest.json. - [Get the top topics filtered by period](https://sourcey-discourse.pages.dev/operations/operation-top-json-get.md): GET /top.json. - [Set notification level](https://sourcey-discourse.pages.dev/operations/operation-t-id-notifications-json-post.md): POST /t/{id}/notifications.json. - [Update topic timestamp](https://sourcey-discourse.pages.dev/operations/operation-t-id-change-timestamp-json-put.md): PUT /t/{id}/change-timestamp.json. - [Create topic timer](https://sourcey-discourse.pages.dev/operations/operation-t-id-timer-json-post.md): POST /t/{id}/timer.json. - [Get topic by external_id](https://sourcey-discourse.pages.dev/operations/operation-t-external-id-external-id-json-get.md): GET /t/external_id/{external_id}.json. - [Creates an upload](https://sourcey-discourse.pages.dev/operations/operation-uploads-json-post.md): POST /uploads.json. - [Initiates a direct external upload](https://sourcey-discourse.pages.dev/operations/operation-uploads-generate-presigned-put-json-post.md): Direct external uploads bypass the usual method of creating uploads via the POST /uploads route, and upload directly to an external provider, which by default is S3. This route begins the process, and will return a unique identifier for the external upload as well as a presigned URL which is where the file binary blob… - [Completes a direct external upload](https://sourcey-discourse.pages.dev/operations/operation-uploads-complete-external-upload-json-post.md): Completes an external upload initialized with /get-presigned-put. The file will be moved from its temporary location in external storage to a final destination in the S3 bucket. An Upload record will also be created in the database in most cases. - [Creates a multipart external upload](https://sourcey-discourse.pages.dev/operations/operation-uploads-create-multipart-json-post.md): Creates a multipart upload in the external storage provider, storing a temporary reference to the external upload similar to /get-presigned-put. - [Generates batches of presigned URLs for multipart parts](https://sourcey-discourse.pages.dev/operations/operation-uploads-batch-presign-multipart-parts-json-post.md): Multipart uploads are uploaded in chunks or parts to individual presigned URLs, similar to the one generated by /generate-presigned-put. The part numbers provided must be between 1 and 10000. The total number of parts will depend on the chunk size in bytes that you intend to use to upload each chunk. For example a… - [Abort multipart upload](https://sourcey-discourse.pages.dev/operations/operation-uploads-abort-multipart-json-post.md): This endpoint aborts the multipart upload initiated with /create-multipart. This should be used when cancelling the upload. It does not matter if parts were already uploaded into the external storage provider. - [Complete multipart upload](https://sourcey-discourse.pages.dev/operations/operation-uploads-complete-multipart-json-post.md): Completes the multipart upload in the external store, and copies the file from its temporary location to its final location in the store. All of the parts must have been uploaded to the external storage provider. An Upload record will be completed in most cases once the file is copied to its final location. - [Grant a badge to a user](https://sourcey-discourse.pages.dev/operations/operation-user-badges-json-post.md): POST /user_badges.json. - [List badges for a user](https://sourcey-discourse.pages.dev/operations/operation-user-badges-username-json-get.md): GET /user-badges/{username}.json. - [Creates a user](https://sourcey-discourse.pages.dev/operations/operation-users-json-post.md): POST /users.json. - [Get a single user by username](https://sourcey-discourse.pages.dev/operations/operation-u-username-json-get.md): GET /u/{username}.json. - [Update a user](https://sourcey-discourse.pages.dev/operations/operation-u-username-json-put.md): PUT /u/{username}.json. - [Get a user by external_id](https://sourcey-discourse.pages.dev/operations/operation-u-by-external-external-id-json-get.md): GET /u/by-external/{external_id}.json. - [Get a user by identity provider external ID](https://sourcey-discourse.pages.dev/operations/operation-u-by-external-provider-external-id-json-get.md): GET /u/by-external/{provider}/{external_id}.json. - [Update avatar](https://sourcey-discourse.pages.dev/operations/operation-u-username-preferences-avatar-pick-json-put.md): PUT /u/{username}/preferences/avatar/pick.json. - [Update email](https://sourcey-discourse.pages.dev/operations/operation-u-username-preferences-email-json-put.md): PUT /u/{username}/preferences/email.json. - [Update username](https://sourcey-discourse.pages.dev/operations/operation-u-username-preferences-username-json-put.md): PUT /u/{username}/preferences/username.json. - [Get a public list of users](https://sourcey-discourse.pages.dev/operations/operation-directory-items-json-get.md): GET /directory_items.json. - [Get a user by id](https://sourcey-discourse.pages.dev/operations/operation-admin-users-id-json-get.md): GET /admin/users/{id}.json. - [Delete a user](https://sourcey-discourse.pages.dev/operations/operation-admin-users-id-json-delete.md): DELETE /admin/users/{id}.json. - [Activate a user](https://sourcey-discourse.pages.dev/operations/operation-admin-users-id-activate-json-put.md): PUT /admin/users/{id}/activate.json. - [Deactivate a user](https://sourcey-discourse.pages.dev/operations/operation-admin-users-id-deactivate-json-put.md): PUT /admin/users/{id}/deactivate.json. - [Suspend a user](https://sourcey-discourse.pages.dev/operations/operation-admin-users-id-suspend-json-put.md): PUT /admin/users/{id}/suspend.json. - [Silence a user](https://sourcey-discourse.pages.dev/operations/operation-admin-users-id-silence-json-put.md): PUT /admin/users/{id}/silence.json. - [Anonymize a user](https://sourcey-discourse.pages.dev/operations/operation-admin-users-id-anonymize-json-put.md): PUT /admin/users/{id}/anonymize.json. - [Merge a user](https://sourcey-discourse.pages.dev/operations/operation-admin-users-id-merge-json-post.md): Merge a user into another user. Requires admin permissions. The source user cannot be a staff member. The merge runs in the background and deletes the source user when complete. - [Log a user out](https://sourcey-discourse.pages.dev/operations/operation-admin-users-id-log-out-json-post.md): POST /admin/users/{id}/log_out.json. - [Refresh gravatar](https://sourcey-discourse.pages.dev/operations/operation-user-avatar-username-refresh-gravatar-json-post.md): POST /user_avatar/{username}/refresh_gravatar.json. - [List users](https://sourcey-discourse.pages.dev/operations/operation-admin-users-json-get.md): GET /admin/users.json. - [List users by flag](https://sourcey-discourse.pages.dev/operations/operation-admin-users-list-flag-json-get.md): GET /admin/users/list/{flag}.json. - [Get a list of user actions](https://sourcey-discourse.pages.dev/operations/operation-user-actions-json-get.md): GET /user_actions.json. - [Send password reset email](https://sourcey-discourse.pages.dev/operations/operation-session-forgot-password-json-post.md): POST /session/forgot_password.json. - [Change password](https://sourcey-discourse.pages.dev/operations/operation-users-password-reset-token-json-put.md): PUT /users/password-reset/{token}.json. - [Get email addresses belonging to a user](https://sourcey-discourse.pages.dev/operations/operation-u-username-emails-json-get.md): GET /u/{username}/emails.json. ## MCP Reference - [@discourse/mcp](https://sourcey-discourse.pages.dev/mcp.md): A Model Context Protocol (MCP) stdio server that exposes Discourse forum capabilities as tools and resources for AI agents. Choose a site with discourse_select_site, or start the server tethered to one with --site. Writes are off by default: write tools register only with --allow_writes, and the opt-in domains… - [Site](https://sourcey-discourse.pages.dev/mcp/site.md): Covers: Select Site. - [Select Site](https://sourcey-discourse.pages.dev/mcp/site/operations/operation-discourse-select-site-tool.md): Validate and select a Discourse site. Returns JSON with site URL and title. - [Search](https://sourcey-discourse.pages.dev/mcp/search.md): Covers: Discourse Search, Filter Topics and Search Posts. - [Discourse Search](https://sourcey-discourse.pages.dev/mcp/search/operations/operation-discourse-search-tool.md): Search site content. Returns JSON object with results array of matching topics (id, slug, title) and meta (total, has_more). - [Filter Topics](https://sourcey-discourse.pages.dev/mcp/search/operations/operation-discourse-filter-topics-tool.md): Discover topics through a filtered, top, or hot view. Filtered uses Discourse TopicsFilter syntax; top uses Discourse's authoritative top score and defaults to weekly; hot is defined exactly as daily top (not sentiment, controversy, or real-time velocity). Returns a uniform rich topic projection and truthful… - [Search Posts](https://sourcey-discourse.pages.dev/mcp/search/operations/operation-discourse-search-posts-tool.md): Search post-level evidence with Discourse query syntax. Unlike discourse_search, this preserves matched posts, highlighted blurbs, authors, topics, categories, and truthful bounded continuation. This is keyword search, not Discourse AI semantic search. - [Topics](https://sourcey-discourse.pages.dev/mcp/topics.md): Covers: Read Topic, Read Post, Read Selected Topic Posts, Create Post, Create Category, Create Topic and 2 more. - [Read Topic](https://sourcey-discourse.pages.dev/mcp/topics/operations/operation-discourse-read-topic-tool.md): Read topic metadata and posts. Large post limits can require multiple upstream requests. For moderation queues, prefer reviewable list/detail evidence instead of fanning this tool out across flagged topics. - [Read Post](https://sourcey-discourse.pages.dev/mcp/topics/operations/operation-discourse-read-post-tool.md): Read a specific post. Returns JSON with id, topic_id, post_number, username, created_at, and raw content. - [Read Selected Topic Posts](https://sourcey-discourse.pages.dev/mcp/topics/operations/operation-discourse-read-topic-posts-tool.md): Read exact, earliest, latest, around-post, or username-filtered topic evidence. Selection is bounded to 50 posts and reports the visible stream size without claiming the entire topic was loaded. - [Create Post](https://sourcey-discourse.pages.dev/mcp/topics/operations/operation-discourse-create-post-tool.md): Create a post in a topic. author_username requires a global API key. Returns the actual upstream author so callers can verify attribution. - [Create Category](https://sourcey-discourse.pages.dev/mcp/topics/operations/operation-discourse-create-category-tool.md): Create a new category. Returns JSON with id, slug, and name. - [Create Topic](https://sourcey-discourse.pages.dev/mcp/topics/operations/operation-discourse-create-topic-tool.md): Create a new topic. author_username requires a global API key. Returns the actual upstream author so callers can verify attribution. - [Update Topic](https://sourcey-discourse.pages.dev/mcp/topics/operations/operation-discourse-update-topic-tool.md): Update an existing topic (title, category, tags, featured_link). Returns JSON with updated topic details. - [Update Post](https://sourcey-discourse.pages.dev/mcp/topics/operations/operation-discourse-update-post-tool.md): Update the content of an existing post. Returns JSON with updated post details. - [Users](https://sourcey-discourse.pages.dev/mcp/users.md): Covers: Get User, List User Posts, List Users, Create User and Update User. - [Get User](https://sourcey-discourse.pages.dev/mcp/users/operations/operation-discourse-get-user-tool.md): Get user info. Returns JSON with id, username, name, trust_level, created_at, bio, admin, and moderator. - [List User Posts](https://sourcey-discourse.pages.dev/mcp/users/operations/operation-discourse-list-user-posts-tool.md): Get paginated list of user posts/replies. Returns JSON object with posts array (id, topic_id, post_number, slug, title, created_at, excerpt, category_id) and meta (page, limit, has_more). - [List Users](https://sourcey-discourse.pages.dev/mcp/users/operations/operation-discourse-list-users-tool.md): List users via admin API. Requires admin API key. Returns ~100 users per page (Discourse's fixed page size). Returns JSON with users array and pagination meta. - [Create User](https://sourcey-discourse.pages.dev/mcp/users/operations/operation-discourse-create-user-tool.md): Create a user through Discourse's signup API using a global admin API key. Reports whether upstream confirmed creation; anti-enumeration responses without user_id remain indeterminate. Optional avatar assignment runs only after confirmed creation. - [Update User](https://sourcey-discourse.pages.dev/mcp/users/operations/operation-discourse-update-user-tool.md): Update user profile fields. If upload_id is provided, also sets the user's avatar. Returns JSON with success status and updated user details. - [Chat](https://sourcey-discourse.pages.dev/mcp/chat.md): Covers: Get Chat Messages. - [Get Chat Messages](https://sourcey-discourse.pages.dev/mcp/chat/operations/operation-discourse-get-chat-messages-tool.md): Get messages from a chat channel. Returns JSON object with channel_id, messages array (id, username, created_at, message, edited, thread_id, in_reply_to_id), and meta. - [Drafts](https://sourcey-discourse.pages.dev/mcp/drafts.md): Covers: Get Draft, Create/Save Draft and Delete Draft. - [Get Draft](https://sourcey-discourse.pages.dev/mcp/drafts/operations/operation-discourse-get-draft-tool.md): Retrieve a specific draft by key. Returns JSON with draft_key, sequence, and parsed data (title, reply, categoryId, tags, action). - [Create/Save Draft](https://sourcey-discourse.pages.dev/mcp/drafts/operations/operation-discourse-save-draft-tool.md): Create or update a draft. Returns JSON with draft_key and new sequence number. - [Delete Draft](https://sourcey-discourse.pages.dev/mcp/drafts/operations/operation-discourse-delete-draft-tool.md): Delete a draft by key. Requires current sequence number to prevent conflicts. - [Uploads](https://sourcey-discourse.pages.dev/mcp/uploads.md): Covers: Upload File. - [Upload File](https://sourcey-discourse.pages.dev/mcp/uploads/operations/operation-discourse-upload-file-tool.md): Upload an image or file to Discourse. Provide either: image_data (base64 with filename), a remote HTTP(S) URL, or an absolute local file path. user_id is required for avatar/background uploads. Returns upload_id for use in avatar/profile updates. Use short_url to embed images in posts. - [Data Explorer](https://sourcey-discourse.pages.dev/mcp/data-explorer.md): Covers: Get Data Explorer Query, Run Data Explorer Query, Create Data Explorer Query, Update Data Explorer Query and Delete Data Explorer Query. - [Get Data Explorer Query](https://sourcey-discourse.pages.dev/mcp/data-explorer/operations/operation-discourse-get-query-tool.md): Get full details of a Data Explorer query including SQL and parameters. Requires admin API key. - [Run Data Explorer Query](https://sourcey-discourse.pages.dev/mcp/data-explorer/operations/operation-discourse-run-query-tool.md): Execute a Data Explorer query with parameters. Returns columns, rows, result_count, duration_ms. Queries run in read-only transactions with 10-second timeout. Requires admin API key. - [Create Data Explorer Query](https://sourcey-discourse.pages.dev/mcp/data-explorer/operations/operation-discourse-create-query-tool.md): Create a new saved Data Explorer query. Requires admin API key and write access. - [Update Data Explorer Query](https://sourcey-discourse.pages.dev/mcp/data-explorer/operations/operation-discourse-update-query-tool.md): Update an existing Data Explorer query. Only provided fields are updated. Requires admin API key and write access. - [Delete Data Explorer Query](https://sourcey-discourse.pages.dev/mcp/data-explorer/operations/operation-discourse-delete-query-tool.md): Soft-delete a Data Explorer query. The query can be restored by an admin. Requires admin API key and write access. - [Private messages](https://sourcey-discourse.pages.dev/mcp/private-messages.md): Covers: List Private Messages, Read Private Message, Create Private Message, Reply to Private Message and Invite to Private Message. - [List Private Messages](https://sourcey-discourse.pages.dev/mcp/private-messages/operations/operation-discourse-list-private-messages-tool.md): List authenticated personal or group private-message mailboxes. Returns normalized JSON messages and pagination metadata. - [Read Private Message](https://sourcey-discourse.pages.dev/mcp/private-messages/operations/operation-discourse-read-private-message-tool.md): Read an authenticated private message, its posts, and direct allowed-user and allowed-group records. Rejects public topics. - [Create Private Message](https://sourcey-discourse.pages.dev/mcp/private-messages/operations/operation-discourse-create-private-message-tool.md): Create a private message for typed user, group, or email recipients. Unknown emails may create staged users. author_username requires a global API key; the response reports actual attribution. - [Reply to Private Message](https://sourcey-discourse.pages.dev/mcp/private-messages/operations/operation-discourse-reply-private-message-tool.md): Safely reply to an existing private message after verifying its archetype. author_username requires a global API key; the response reports actual attribution. - [Invite to Private Message](https://sourcey-discourse.pages.dev/mcp/private-messages/operations/operation-discourse-invite-to-private-message-tool.md): Add a user or group to a private message, or submit an opaque email invitation. Email success does not confirm delivery or participant access. author_username requires a global API key. - [Activity](https://sourcey-discourse.pages.dev/mcp/activity.md): Covers: Get Post Replies, List Latest Posts, Get Topic View Stats, Get User Summary, List User Actions and List Directory Items. - [Get Post Replies](https://sourcey-discourse.pages.dev/mcp/activity/operations/operation-discourse-get-post-replies-tool.md): Read reply relationships for a post as recursive descendant IDs, bounded rich direct replies, or the upstream-bounded ancestor history. Preserves upstream ordering and references. - [List Latest Posts](https://sourcey-discourse.pages.dev/mcp/activity/operations/operation-discourse-list-latest-posts-tool.md): List the site's latest visible posts using Discourse's fixed 50-post page and post-ID cursor. Anonymous upstream responses expire after one minute; results are a feed, not an exhaustive history. - [Get Topic View Stats](https://sourcey-discourse.pages.dev/mcp/activity/operations/operation-discourse-get-topic-view-stats-tool.md): Get up to 300 ascending daily topic view counts. Views combine anonymous and logged-in views; they are not unique viewers or an engagement judgment. - [Get User Summary](https://sourcey-discourse.pages.dev/mcp/activity/operations/operation-discourse-get-user-summary-tool.md): Get profile-visible aggregate user activity, top topics/replies/links, interaction partners, categories, badges, likes, visits, reading, and post/topic counts. Missing metrics remain null when hidden or unavailable. - [List User Actions](https://sourcey-discourse.pages.dev/mcp/activity/operations/operation-discourse-list-user-actions-tool.md): List a user's visible activity using model-friendly action names. Plugin-backed action families can legitimately be empty; emptiness does not prove that a feature is unavailable. - [List Directory Items](https://sourcey-discourse.pages.dev/mcp/activity/operations/operation-discourse-list-directory-items-tool.md): List user-directory/cohort metrics with authoritative totals and continuation. Supports Discourse periods, ordering, visible groups, page 0-10, and the upstream maximum of 50 rows. - [Groups](https://sourcey-discourse.pages.dev/mcp/groups.md): Covers: List Groups, Get Group, List Group Posts, List Group Members, List Group Membership Requests, Create Group and 19 more. - [List Groups](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-list-groups-tool.md): List visible groups. Empty input exhaustively traverses the bounded directory; any explicit page or filter field preserves the existing single-page query behavior. Both modes return one structured envelope with truthful completion metadata and JSON text fallback. Opt in with the groups toolset. - [Get Group](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-get-group-tool.md): Get complete visible group details by numeric ID or name, including caller capabilities and group settings. - [List Group Posts](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-list-group-posts-tool.md): List visible posts authored by a group using Discourse's fixed 20-row page, ID or timestamp cursor, and optional category filter. Group authorship is cohort evidence, not proof of organizational responsibility. - [List Group Members](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-list-group-members-tool.md): List a group's members and owners with filtering, ordering, and pagination. Visibility is enforced by Discourse. - [List Group Membership Requests](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-list-group-membership-requests-tool.md): List pending membership requests and reasons for a group the caller can manage, with filtering and pagination. - [Create Group](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-create-group-tool.md): Create a custom group with complete core settings, initial members and owners, custom fields, associations, and optional plugin fields. Requires staff group-creation permission. - [Update Group](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-update-group-tool.md): Update all core group profile, visibility, admission, notification-default, association, email, SMTP, custom, and plugin settings supported by the caller and group type. - [Delete Group](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-delete-group-tool.md): Permanently delete a custom group. Automatic groups cannot be deleted. Requires staff access. - [Add Group Members by Username](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-add-group-members-by-username-tool.md): Add group members using canonical usernames. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Add Group Members by User ID](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-add-group-members-by-user-id-tool.md): Add group members using numeric user IDs. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Add Group Members by Email](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-add-group-members-by-email-tool.md): Add group members using email addresses belonging to existing accounts. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Invite Group Members by Email](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-invite-group-members-by-email-tool.md): Add existing accounts immediately when an address matches, and invite unknown addresses to the forum with this group preassigned. Use add_group_members_by_email when every address is known to belong to an account. - [Remove Group Members by Username](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-remove-group-members-by-username-tool.md): Remove group members using canonical usernames. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Remove Group Members by User ID](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-remove-group-members-by-user-id-tool.md): Remove group members using numeric user IDs. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Remove Group Members by Email](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-remove-group-members-by-email-tool.md): Remove group members using email addresses belonging to existing accounts. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Add Group Owners by Username](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-add-group-owners-by-username-tool.md): Add group owners using canonical usernames. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Add Group Owners by User ID](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-add-group-owners-by-user-id-tool.md): Add group owners using numeric user IDs. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Add Group Owners by Email](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-add-group-owners-by-email-tool.md): Add group owners using email addresses belonging to existing accounts. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Remove Group Owners by Username](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-remove-group-owners-by-username-tool.md): Remove group owners using canonical usernames. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Remove Group Owners by User ID](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-remove-group-owners-by-user-id-tool.md): Remove group owners using numeric user IDs. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Remove Group Owners by Email](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-remove-group-owners-by-email-tool.md): Remove group owners using email addresses belonging to existing accounts. This tool accepts only this identifier type, avoiding ambiguous selector precedence. - [Handle Group Membership Request](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-handle-group-membership-request-tool.md): Approve or deny one pending group membership request. Approval adds the requester to the group; denial only removes the request. - [Request Group Membership](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-request-group-membership-tool.md): Request membership in a visible group that allows requests, sending the reason to its owners. - [Join Group](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-join-group-tool.md): Join a visible group that allows public admission as the authenticated user. - [Leave Group](https://sourcey-discourse.pages.dev/mcp/groups/operations/operation-discourse-leave-group-tool.md): Leave a group that allows public exit as the authenticated user. - [Tag groups](https://sourcey-discourse.pages.dev/mcp/tag-groups.md): Covers: Search Tag Groups, List Tag Groups, Get Tag Group, Create Tag Group, Update Tag Group and Delete Tag Group. - [Search Tag Groups](https://sourcey-discourse.pages.dev/mcp/tag-groups/operations/operation-discourse-search-tag-groups-tool.md): Public visibility-filtered tag-group search. q and names combine with AND semantics; upstream treats % and _ in q as SQL LIKE wildcards. Results intentionally omit group IDs, parent tags, and permissions and are not authoritative staff inventory. Exact case-insensitive group name is the supported correlation key.… - [List Tag Groups](https://sourcey-discourse.pages.dev/mcp/tag-groups/operations/operation-discourse-list-tag-groups-tool.md): Authoritative unpaginated tag-group inventory ordered by name. Requires a locally configured API credential and upstream staff authority; Discourse returns a privacy-preserving 404 to non-staff. Staff reads can work when tagging is disabled. Returns canonical tags, parent, one-per-topic, explicit permissions entries… - [Get Tag Group](https://sourcey-discourse.pages.dev/mcp/tag-groups/operations/operation-discourse-get-tag-group-tool.md): Get authoritative tag-group state by ID. Requires a locally configured API credential and upstream staff authority. The deterministic state_hash is an MCP optimistic precondition, not an upstream atomic lock; a race remains possible after preflight. - [Create Tag Group](https://sourcey-discourse.pages.dev/mcp/tag-groups/operations/operation-discourse-create-tag-group-tool.md): Create a tag group with an explicit complete permission list such as permissions: [{group_id: 0, access: "full"}] for everyone, nonempty members, an optional parent selector, and one-per-topic policy. Omit parent_tag or use null when there is no parent; blank placeholders are safely treated as omitted. New tag names… - [Update Tag Group](https://sourcey-discourse.pages.dev/mcp/tag-groups/operations/operation-discourse-update-tag-group-tool.md): Safely replace complete tag-group state after a fresh expected_state_hash preflight. Omitted mutable fields are preserved locally, but Discourse receives full tags, parent, one-per-topic, and permissions because partial upstream bodies clear state. For parent_tag, omit or pass a blank placeholder to preserve the… - [Delete Tag Group](https://sourcey-discourse.pages.dev/mcp/tag-groups/operations/operation-discourse-delete-tag-group-tool.md): Permanently delete one exact tag group after fresh name/state-hash checks and explicit acknowledgements for category relationship cascades and unresolved plugin dependencies. Deletion removes memberships, permissions, and category allowed/required relationships, but not tags or topic-tag rows. Dependency discovery is… - [Moderation](https://sourcey-discourse.pages.dev/mcp/moderation.md): Covers: Get Review Queue Count, List Reviewables, List Reviewable Topics, Get Reviewable, Get User Moderation Summary, Get Post Revision and Perform Reviewable Action. - [Get Review Queue Count](https://sourcey-discourse.pages.dev/mcp/moderation/operations/operation-discourse-get-review-queue-count-tool.md): Get the authoritative count of pending reviewable records visible to the authenticated user. This counts queue items, not individual flag/score records; upstream Guardian permissions remain authoritative. - [List Reviewables](https://sourcey-discourse.pages.dev/mcp/moderation/operations/operation-discourse-list-reviewables-tool.md): Work through the exhaustive visible Discourse queue in pages of 10. For ordinary triage, call with only status=pending and offset=0—do not guess topic/category/type filters. Use meta.total and follow next_offset while has_more is true. Each result already includes bounded evidence and exact dynamic actions; fetch… - [List Reviewable Topics](https://sourcey-discourse.pages.dev/mcp/moderation/operations/operation-discourse-list-reviewable-topics-tool.md): Non-exhaustive topic-level signal only: list pending topics at or above Discourse's minimum review priority. Do not use this tool to work through or rank the full queue because it omits reviewable IDs, actions, low-priority items, and items without topics. Use discourse_list_reviewables for moderation triage. - [Get Reviewable](https://sourcey-discourse.pages.dev/mcp/moderation/operations/operation-discourse-get-reviewable-tool.md): Refresh one shortlisted reviewable's bounded context, current version, claim state, scores, and exact dynamic actions. Paginated list results already include evidence/actions, so do not fan this tool out across the queue. Optionally includes Discourse's score explanation; never generates a recommendation. - [Get User Moderation Summary](https://sourcey-discourse.pages.dev/mcp/moderation/operations/operation-discourse-get-user-moderation-summary-tool.md): Get staff-authorized behavioral moderation counters for a user. Omits unrelated administrative capability flags; Discourse permissions remain authoritative. - [Get Post Revision](https://sourcey-discourse.pages.dev/mcp/moderation/operations/operation-discourse-get-post-revision-tool.md): Get a staff/Guardian-authorized post revision with bounded diffs, edit reason, actor, version, and hidden-state evidence. - [Perform Reviewable Action](https://sourcey-discourse.pages.dev/mcp/moderation/operations/operation-discourse-perform-reviewable-action-tool.md): Perform one exact dynamic action after a fresh serialized preflight. Choose by the action's full description, not label alone (for example delete-and-agree differs from delete-and-ignore). The displayed action ID may be UI-prefixed; this tool safely routes its server_action. Requires confirm=true and write enablement. - [AI agents](https://sourcey-discourse.pages.dev/mcp/ai-agents.md): Covers: List AI Agents, Get AI Agent, Create AI Agent, Update AI Agent, Delete AI Agent, Create AI Agent User and 2 more. - [List AI Agents](https://sourcey-discourse.pages.dev/mcp/ai-agents/operations/operation-discourse-ai-list-agents-tool.md): List concise Discourse AI agent summaries and slim tool/model metadata. Defaults to slim; use discourse_ai_get_agent to load one full configuration, or view=full only when the complete index is explicitly needed. Requires admin credentials. - [Get AI Agent](https://sourcey-discourse.pages.dev/mcp/ai-agents/operations/operation-discourse-ai-get-agent-tool.md): Get the full editable configuration of one Discourse AI agent. Custom tools use custom-; native tools use native- in tool tuples. - [Create AI Agent](https://sourcey-discourse.pages.dev/mcp/ai-agents/operations/operation-discourse-ai-create-agent-tool.md): Create a typed Discourse AI agent, including an optional subagent delegation allowlist of up to 20 existing agent IDs. Requires admin credentials and write mode. Tool entries may be names or [name, options, force] tuples. - [Update AI Agent](https://sourcey-discourse.pages.dev/mcp/ai-agents/operations/operation-discourse-ai-update-agent-tool.md): Partially update one AI agent, including enabled state, permissions, model, prompt, tools, subagent delegation, and RAG configuration. Only supplied fields are sent. Requires admin credentials and write mode. - [Delete AI Agent](https://sourcey-discourse.pages.dev/mcp/ai-agents/operations/operation-discourse-ai-delete-agent-tool.md): Delete a non-system AI agent. Requires admin credentials and write mode. - [Create AI Agent User](https://sourcey-discourse.pages.dev/mcp/ai-agents/operations/operation-discourse-ai-create-agent-user-tool.md): Explicitly create the bot user used by an AI agent for mention/chat entry points. Requires admin credentials and write mode. - [Export AI Agent](https://sourcey-discourse.pages.dev/mcp/ai-agents/operations/operation-discourse-ai-export-agent-tool.md): Export a portable AI agent bundle. It may include referenced custom-tool definitions but excludes secret bindings. Treat prompts and scripts as sensitive. - [Import AI Agent](https://sourcey-discourse.pages.dev/mcp/ai-agents/operations/operation-discourse-ai-import-agent-tool.md): Import a portable AI agent bundle. The bundle may create or overwrite embedded custom tools. force requires confirm_force=true. Requires admin credentials and write mode. - [AI custom tools](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools.md): Covers: Get AI Custom Tool Guide, List AI Custom Tools, Get AI Custom Tool, Create AI Custom Tool, Update AI Custom Tool, Delete AI Custom Tool and 3 more. - [Get AI Custom Tool Guide](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools/operations/operation-discourse-ai-get-custom-tool-guide-tool.md): Retrieve one focused MiniRacer authoring topic. Usually pass only topic. preset_id is optional and used only with topic=presets to load one live example; extra preset_id values on other topics are ignored. Requires admin credentials. - [List AI Custom Tools](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools/operations/operation-discourse-ai-list-custom-tools-tool.md): List concise database-backed custom-tool summaries and compact live preset metadata. Scripts, bindings, verbose parameter descriptions, and full records are omitted; use discourse_ai_get_custom_tool or the guide's preset lookup to zoom in. Requires admin credentials. - [Get AI Custom Tool](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools/operations/operation-discourse-ai-get-custom-tool-tool.md): Get one database-backed scripted AI tool, including source and configured secret bindings. Treat the response as sensitive. Requires admin credentials. - [Create AI Custom Tool](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools/operations/operation-discourse-ai-create-custom-tool-tool.md): Create a database-backed synchronous MiniRacer scripted tool. Call discourse_ai_get_custom_tool_guide before authoring. Never provide raw secret values. Requires admin credentials and write mode. - [Update AI Custom Tool](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools/operations/operation-discourse-ai-update-custom-tool-tool.md): Partially update a scripted tool. Call the guide before substantial script changes. Omitted scalar fields and RAG uploads are preserved; changing secret_contracts can prune orphan bindings unless secret_bindings are supplied. Raw secret values are never accepted. Requires admin credentials and write mode. - [Delete AI Custom Tool](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools/operations/operation-discourse-ai-delete-custom-tool-tool.md): Delete a scripted tool. Agents referencing it may stop functioning as configured. Requires admin credentials and write mode. - [Test AI Custom Tool](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools/operations/operation-discourse-ai-test-custom-tool-tool.md): Actually execute a persisted or unsaved custom-tool script. It can make external requests and cause side effects; this is not dry validation. Requires admin credentials and write mode. - [Export AI Custom Tool](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools/operations/operation-discourse-ai-export-custom-tool-tool.md): Export portable custom-tool JSON. Discourse excludes secret bindings; MCP also strips them defensively. Treat script source as sensitive. Requires admin credentials. - [Import AI Custom Tool](https://sourcey-discourse.pages.dev/mcp/ai-custom-tools/operations/operation-discourse-ai-import-custom-tool-tool.md): Import portable custom-tool JSON. force overwrites a matching tool_name and requires confirm_force=true. Secret IDs may be bound, but raw secret values are never accepted. Requires admin credentials and write mode. - [AI features](https://sourcey-discourse.pages.dev/mcp/ai-features.md): Covers: List AI Features, Get AI Feature Configuration and Update AI Feature Configuration. - [List AI Features](https://sourcey-discourse.pages.dev/mcp/ai-features/operations/operation-discourse-ai-list-features-tool.md): List visible computed Discourse AI modules, feature enabled state, assigned agents, and effective LLMs. Requires admin credentials. - [Get AI Feature Configuration](https://sourcey-discourse.pages.dev/mcp/ai-features/operations/operation-discourse-ai-get-feature-config-tool.md): Resolve a visible feature module ID and return its computed state plus editable settings from its exact ai-features/ area. Credential settings are omitted. Requires admin credentials. - [Update AI Feature Configuration](https://sourcey-discourse.pages.dev/mcp/ai-features/operations/operation-discourse-ai-update-feature-config-tool.md): Atomically bulk-update only non-secret settings freshly exposed by one exact AI feature area, with optional compare-before-write original_values. Refreshes effective state afterward. Production behavior changes immediately. Requires admin credentials and write mode. - [AI insights](https://sourcey-discourse.pages.dev/mcp/ai-insights.md): Covers: Get Discourse AI Topic Summary, Discourse AI Semantic Search and List Discourse AI Sentiment Posts. - [Get Discourse AI Topic Summary](https://sourcey-discourse.pages.dev/mcp/ai-insights/operations/operation-discourse-ai-get-topic-summary-tool.md): Retrieve an existing cached upstream Discourse AI topic summary, including algorithm and staleness evidence. Requires Discourse AI; this tool does not generate or claim complete MCP-authored output. - [Discourse AI Semantic Search](https://sourcey-discourse.pages.dev/mcp/ai-insights/operations/operation-discourse-ai-semantic-search-tool.md): Run Guardian-filtered Discourse AI semantic search and return bounded grouped post/topic evidence. Requires Discourse AI embeddings. Results are bounded and expose no fabricated page cursor. - [List Discourse AI Sentiment Posts](https://sourcey-discourse.pages.dev/mcp/ai-insights/operations/operation-discourse-ai-list-sentiment-posts-tool.md): List staff-visible posts classified positive, negative, or neutral by Discourse AI for an exact category/tag and date window. Classification is model output, not proof of tone, satisfaction, risk, or an argument. - [Administration](https://sourcey-discourse.pages.dev/mcp/administration.md): Covers: List Categories, List Site Settings and Manage User Activation. - [List Categories](https://sourcey-discourse.pages.dev/mcp/administration/operations/operation-discourse-list-categories-tool.md): Exhaustively list categories visible to the selected identity through bounded pagination. Returns stable IDs, slugs, hierarchy (parent_category_id; pid is a legacy alias), access flags, counts, structured completion metadata, and JSON text fallback. Opt in with the administration toolset. - [List Site Settings](https://sourcey-discourse.pages.dev/mcp/administration/operations/operation-discourse-list-site-settings-tool.md): List admin-visible Discourse site settings with bounded metadata, optionally returning only settings whose current value differs from the default. Secret and credential-like values are always masked. - [Manage User Activation](https://sourcey-discourse.pages.dev/mcp/administration/operations/operation-discourse-manage-user-activation-tool.md): Activate, approve, activate-and-approve, or deactivate one user through Discourse's authoritative admin routes. Requires explicit confirmation and upstream staff authorization. - [Site settings](https://sourcey-discourse.pages.dev/mcp/site-settings.md): Covers: Update Site Setting. - [Update Site Setting](https://sourcey-discourse.pages.dev/mcp/site-settings/operations/operation-discourse-update-site-setting-tool.md): Set or reset one ordinary admin-visible Discourse site setting after a fresh optimistic-concurrency check. Secret and structured settings are excluded. - [Webhooks](https://sourcey-discourse.pages.dev/mcp/webhooks.md): Covers: List Webhooks, Get Webhook, Create Webhook, Update Webhook, Delete Webhook, List Webhook Events and 2 more. - [List Webhooks](https://sourcey-discourse.pages.dev/mcp/webhooks/operations/operation-discourse-list-webhooks-tool.md): List safe webhook summaries and the live authoring catalog without exposing webhook secrets or destination credentials. - [Get Webhook](https://sourcey-discourse.pages.dev/mcp/webhooks/operations/operation-discourse-get-webhook-tool.md): Get one fresh safe webhook configuration for inspection and mutation preconditions. - [Create Webhook](https://sourcey-discourse.pages.dev/mcp/webhooks/operations/operation-discourse-create-webhook-tool.md): Create a guarded outbound webhook using the live event and content-type catalog. External delivery and risky options require explicit confirmation. - [Update Webhook](https://sourcey-discourse.pages.dev/mcp/webhooks/operations/operation-discourse-update-webhook-tool.md): Partially update a webhook after fresh destination and active-state preconditions. Relationship arrays are complete replacements. - [Delete Webhook](https://sourcey-discourse.pages.dev/mcp/webhooks/operations/operation-discourse-delete-webhook-tool.md): Delete one webhook after a fresh exact destination-fingerprint precondition. - [List Webhook Events](https://sourcey-discourse.pages.dev/mcp/webhooks/operations/operation-discourse-list-webhook-events-tool.md): List bounded webhook delivery diagnostics. Payload and response previews are omitted unless explicitly confirmed. - [Ping Webhook](https://sourcey-discourse.pages.dev/mcp/webhooks/operations/operation-discourse-ping-webhook-tool.md): Enqueue one explicitly confirmed external webhook ping after a fresh destination precondition. - [Redeliver Webhook Event](https://sourcey-discourse.pages.dev/mcp/webhooks/operations/operation-discourse-redeliver-webhook-event-tool.md): Redeliver exactly one old webhook event after destination, ownership, and status preconditions. Bulk redelivery is not exposed. - [Themes](https://sourcey-discourse.pages.dev/mcp/themes.md): Covers: List Themes, Get Theme, Create Theme, Install Theme, Update Theme Metadata, Update Theme Fields and 5 more. - [List Themes](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-list-themes-tool.md): List admin-visible Discourse themes and components. This opt-in admin read returns bounded summaries and local pagination; it does not expose theme source code. - [Get Theme](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-get-theme-tool.md): Inspect one local, ZIP-imported, or Git-backed Discourse theme/component as an administrator. Source values are bounded, opt-in, and may be unavailable for remote records; private key material is never returned. - [Create Theme](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-create-theme-tool.md): Create a local Discourse theme or component. For textual HTML/SCSS/JS fields provide value and omit upload_id; for assets provide numeric upload_id with type=upload and omit value. Supplied code can execute or deploy for visitors; explicit confirmations and admin write access are required. - [Install Theme](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-install-theme-tool.md): Install a Git repository or ZIP/gzip archive. Set source to exactly one nested variant: {kind:repository, remote_url...}, {kind:archive, archive_data...}, or {kind:archive, archive_path...}; never add placeholder fields from another variant. External code and migrations can have site-wide impact and are not sandboxed. - [Update Theme Metadata](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-update-theme-tool.md): Update bounded metadata, default status, or complete theme-component relationships. Relationship arrays replace the entire graph side; source, settings, translations, and remote refresh are intentionally excluded. - [Update Theme Fields](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-update-theme-fields-tool.md): Replace or explicitly delete selected fields on a local or ZIP-imported theme. Text replacements require value and prohibit upload_id; asset replacements require numeric upload_id with type=upload and prohibit value. This can deploy executable code; Git-backed and system themes are rejected. - [Update Theme Setting](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-update-theme-setting-tool.md): Set or explicitly revert one declared setting owned by a theme/component. This does not mutate themeable global site settings; object values are validated upstream against the declared schema. - [Update Theme Translations](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-update-theme-translations-tool.md): Replace values for explicit translation keys declared by a theme, after a fresh locale read. Unknown keys are rejected; deletion/revert is not supported in this release. - [Sync Remote Theme](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-sync-remote-theme-tool.md): Check or install updates for an existing Git-backed theme. Both actions clone external code and persist state; update deploys code and runs settings migrations, requiring explicit confirmations. - [Upload Theme Asset](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-upload-theme-asset-tool.md): Upload a bounded local/base64 asset for later attachment to a theme field. No remote URL fetch is supported; upload alone does not attach or deploy the asset. - [Delete Theme](https://sourcey-discourse.pages.dev/mcp/themes/operations/operation-discourse-delete-theme-tool.md): Permanently delete one non-system, non-default theme/component after a fresh exact-name check. Dependencies are not detached automatically and bulk deletion is not exposed. - [Analytics](https://sourcey-discourse.pages.dev/mcp/analytics.md): Covers: List Reports, Get Report and Get Solved Support Dashboard. - [List Reports](https://sourcey-discourse.pages.dev/mcp/analytics/operations/operation-discourse-list-reports-tool.md): Discover staff-visible Discourse report identifiers and metadata. The catalog is authoritative because core and plugins can add or hide reports. - [Get Report](https://sourcey-discourse.pages.dev/mcp/analytics/operations/operation-discourse-get-report-tool.md): Execute one discovered staff-visible Discourse report with dates, facets, typed filters, limit, and upstream caching. This exposes existing reports, not arbitrary SQL. - [Get Solved Support Dashboard](https://sourcey-discourse.pages.dev/mcp/analytics/operations/operation-discourse-get-support-dashboard-tool.md): Get the staff Solved support dashboard. Requires Discourse Solved. 'Unanswered' means unsolved with no qualifying regular reply, not no reply from a configured support team. - [Workflows](https://sourcey-discourse.pages.dev/mcp/workflows.md): Covers: List Workflows, Get Workflow, List Workflow Node Types, Resolve Workflow Entity, List Workflow Templates, List Workflow Executions and 12 more. - [List Workflows](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-list-workflows-tool.md): List compact Discourse Workflow summaries. Requires an admin API key. - [Get Workflow](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-get-workflow-tool.md): Get the complete round-trippable workflow graph. GET immediately before updating it. - [List Workflow Node Types](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-list-workflow-node-types-tool.md): List a slim catalog, or pass identifier for schemas, ports, and output contracts. Authoring loop: inspect the slim node catalog, request identifiers for schemas and output keys, resolve entity ids, create from a template or complete graph, GET before edits, test the draft, then publish. Interpolating strings start… - [Resolve Workflow Entity](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-resolve-workflow-entity-tool.md): Resolve category, tag, group, user, badge, chat channel, or data-table ids for workflow parameters. - [List Workflow Templates](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-list-workflow-templates-tool.md): List templates or retrieve a complete template graph by id. Authoring loop: inspect the slim node catalog, request identifiers for schemas and output keys, resolve entity ids, create from a template or complete graph, GET before edits, test the draft, then publish. Interpolating strings start with =. Filter/if use… - [List Workflow Executions](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-list-workflow-executions-tool.md): List global or per-workflow execution history. - [Get Workflow Execution](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-get-workflow-execution-tool.md): Poll an execution for status, errors, timing, trigger data, and steps. - [List Workflow Versions](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-list-workflow-versions-tool.md): List workflow version history and UUIDs available for restore. - [List Workflow Credentials](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-list-workflow-credentials-tool.md): List workflow credentials with secrets redacted. Credential creation remains in the admin UI. - [Evaluate Workflow Expression](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-evaluate-workflow-expression-tool.md): Evaluate a workflow expression without mutating the forum. Interpolating expressions start with =. - [Create Workflow](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-create-workflow-tool.md): Create a draft from a complete small graph or template. Prefer a complete graph over blank creation. Authoring loop: inspect the slim node catalog, request identifiers for schemas and output keys, resolve entity ids, create from a template or complete graph, GET before edits, test the draft, then publish.… - [Update Workflow](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-update-workflow-tool.md): GET first. A replace PUT replaces the whole draft graph; omitted nodes are deleted. Use complete nodes+connections or operations[], never both. Authoring loop: inspect the slim node catalog, request identifiers for schemas and output keys, resolve entity ids, create from a template or complete graph, GET before edits,… - [Delete Workflow](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-delete-workflow-tool.md): Permanently delete a workflow. Fails when another workflow calls it. - [Discard Workflow Draft](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-discard-workflow-draft-tool.md): Replace the draft with its published snapshot. Requires an existing published version. - [Restore Workflow Version](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-restore-workflow-version-tool.md): Restore a historical workflow version by UUID into the draft. - [Run Workflow Draft](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-run-workflow-tool.md): Run the current unpublished draft asynchronously. This can create posts, send chat, or call external HTTP; poll the returned execution id. - [Run Workflow Step](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-run-workflow-step-tool.md): Run one non-trigger, non-waiting draft node asynchronously. Requires upstream pin-data or a prior successful run. - [Update Workflow Pin Data](https://sourcey-discourse.pages.dev/mcp/workflows/operations/operation-discourse-update-workflow-pin-data-tool.md): Pin test items to a node name, or omit items to unpin it. - [Resources](https://sourcey-discourse.pages.dev/mcp/resources.md): Covers: site_categories, site_tags, site_groups, chat_channels, user_chat_channels, user_drafts and 5 more. - [site_categories](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-site-categories-resource.md): DEPRECATED compatibility resource. Use discourse_list_categories (opt-in administration toolset) for the canonical structured directory. Lists categories with hierarchy (parent_category_id; legacy pid), optional permissions (perms), counts, and truthful completeness metadata. - [site_tags](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-site-tags-resource.md): List all tags with usage counts. Returns empty if tags are disabled. - [site_groups](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-site-groups-resource.md): DEPRECATED compatibility resource. Use discourse_list_groups (opt-in groups toolset) for the canonical structured directory. Lists all visible groups with visibility and interaction levels plus truthful completeness metadata. - [chat_channels](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-chat-channels-resource.md): List all public chat channels with id, title, slug, status, members_count, and description. - [user_chat_channels](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-user-chat-channels-resource.md): List user's chat channels (public + DMs) with unread/mention counts. Requires authentication. - [user_drafts](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-user-drafts-resource.md): List user's drafts with draft_key, sequence, title, category_id, created_at, and reply_preview. Requires authentication. - [explorer_schema](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-explorer-schema-resource.md): Database schema (core tables). Format: col, col:int, col:ts, col*, col>fk_table. No type = text. Use explorer_schema_tables for all/specific tables. - [explorer_queries](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-explorer-queries-resource.md): Saved Data Explorer queries (30/page, by last used). Shows id, name, description. Use explorer_queries_page for other pages. - [ai_custom_tools_authoring_guide](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-ai-custom-tools-authoring-guide-resource.md): Authoritative selected-site JavaScript preamble and minimal MiniRacer tool template. Admin-only; intended for assistant authoring context. - [explorer_schema_tables](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-explorer-schema-tables-resource.md): Database schema for specific tables. Use 'all' for all tables, or comma-separated names (e.g., 'users,topics,posts'). - [explorer_queries_page](https://sourcey-discourse.pages.dev/mcp/resources/operations/operation-discourse-explorer-queries-page-resource.md): Saved Data Explorer queries - specific page number. - [Prompts](https://sourcey-discourse.pages.dev/mcp/prompts.md): Covers: sql_query. - [sql_query](https://sourcey-discourse.pages.dev/mcp/prompts/operations/operation-sql-query-prompt.md): Guided workflow for database queries: discover schema, write SQL, run queries via Data Explorer