Hosted MCP server · #76 most used on Smithery

discource-mcp-tools

king-of-the-grackles/discourse-forum-mcp

Manage and explore forum communities by searching topics, reading posts, and viewing user profiles. Facilitate communication through chat channels, draft management, and categorized content discovery. Streamline interactions with tools for filtering topics and generating post summaries or replies.

Uses
6.6k
Tools
15
Runs
Hosted
Prompts
4
Listed
8mo ago

Get started

Add it to your agent

npx -y @smithery/cli@latest install king-of-the-grackles/discourse-forum-mcp --client claude

Swap --client claude for cursor, vscode, windsurf or another client. The CLI asks for any required settings.

What it can do

15 tools

discourse_select_site1 paramValidate and select a Discourse site for subsequent tool calls. Verifies the site is reachable and retrieves its title. Must be called be…

Validate and select a Discourse site for subsequent tool calls. Verifies the site is reachable and retrieves its title. Must be called before using other tools when multiple sites are configured.

ParameterTypeDescription
sitestringBase URL of the Discourse site (e.g., 'https://meta.discourse.org' or 'https://community.example.com')
discourse_search3 paramsSearch Discourse site content including topics, posts, and users. Use search operators like @username, #tag, category:name for filtered r…

Search Discourse site content including topics, posts, and users. Use search operators like @username, #tag, category:name for filtered results.

ParameterTypeDescription
querystringSearch query text (e.g., 'how to install plugin'). Supports Discourse search operators like @username, #tag, category:name, status:open, order:latest
max_resultsintegerMaximum number of results to return (1-50). Default: 10
with_privatebooleanInclude private messages and topics in search results (requires authentication). Default: false
discourse_read_topic3 paramsRead a Discourse topic including its metadata (title, category, tags) and posts. Supports pagination for long topics.
ParameterTypeDescription
topic_idintegerThe numeric ID of the topic to read (e.g., 12345 from URL /t/topic-slug/12345)
post_limitintegerMaximum number of posts to retrieve (1-100). Default: 5
start_post_numberintegerStart reading from this post number (1-based). Use for pagination through long topics
discourse_read_post1 paramRead a specific post by its ID. Returns the post content, author, creation date, and link to the post.
ParameterTypeDescription
post_idintegerThe numeric post ID to read (found in post JSON data or API responses)
discourse_list_categoriesList all categories visible to the current user. Returns category names and topic counts. Useful for discovering where to post or search.
discourse_list_tagsList all available tags on the Discourse site (if tagging is enabled). Returns tag names and usage counts. Use tags in search queries wit…

List all available tags on the Discourse site (if tagging is enabled). Returns tag names and usage counts. Use tags in search queries with #tagname.

discourse_get_user1 paramGet information about a Discourse user by username. Returns name, trust level, join date, bio, and profile link.
ParameterTypeDescription
usernamestringThe Discourse username to look up (without @ symbol, e.g., 'codinghorror')
discourse_list_user_posts2 paramsGet a paginated list of posts and replies by a specific user, with the most recent first. Returns 30 posts per page. Includes topic title…

Get a paginated list of posts and replies by a specific user, with the most recent first. Returns 30 posts per page. Includes topic title, post date, excerpt, and direct links.

ParameterTypeDescription
pageintegerPage number for pagination (0-based). Each page returns 30 posts. Default: 0
usernamestringThe Discourse username to fetch posts for (without @ symbol, e.g., 'codinghorror')
discourse_filter_topics3 paramsFilter topics with a concise query language: use key:value tokens separated by spaces; category/categories for categories (comma = OR, '=…

Filter topics with a concise query language: use key:value tokens separated by spaces; category/categories for categories (comma = OR, '=category' = without subcats, '-' prefix = exclude), tag/tags (comma = OR, '+' = AND) and tag_group; status:(open|closed|archived|listed|unlisted|public) and personal in:(bookmarked|watching|tracking|muted|pinned); dates: created/activity/latest-post-(before|after) with YYYY-MM-DD or N (days); numeric: likes[-op]-(min|max), posts-(min|max), posters-(min|max), vi

ParameterTypeDescription
pageintegerPage number (0-based, default: 0)
filterstringFilter query, e.g. 'category:support status:open created-after:30 order:activity'
per_pageintegerItems per page (max 50)
discourse_list_chat_channels4 paramsList all public chat channels visible to the current user. Returns channel information including title, description, and member counts. S…

List all public chat channels visible to the current user. Returns channel information including title, description, and member counts. Supports filtering and pagination.

ParameterTypeDescription
limitintegerNumber of channels to return (default: 25, max: 100)
filterstringFilter channels by name/slug
offsetintegerPagination offset (default: 0)
statusstringFilter by channel status (e.g., 'open', 'closed', 'archived')
discourse_list_user_chat_channelsList all chat channels for the currently authenticated user, including both public channels they're a member of and direct message channe…

List all chat channels for the currently authenticated user, including both public channels they're a member of and direct message channels. Includes unread tracking information.

discourse_get_chat_messages7 paramsGet messages from a chat channel with flexible pagination and date-based filtering. Supports: (1) paginating with direction='past'/'futur…

Get messages from a chat channel with flexible pagination and date-based filtering. Supports: (1) paginating with direction='past'/'future' from a target_message_id, (2) querying messages around a specific target_date, (3) getting messages around a target_message_id, or (4) fetching from last read position.

ParameterTypeDescription
directionstringPagination direction: 'past' for older messages (DESC), 'future' for newer messages (ASC)
page_sizeintegerNumber of messages to return (default: 50, max: 500)
channel_idintegerThe chat channel ID
target_datestringISO 8601 date string (e.g., '2024-01-15' or '2024-01-15T10:30:00Z') to query messages around that date
target_message_idintegerMessage ID to query around or paginate from
fetch_from_last_readbooleanIf true, start from the user's last read message
include_target_message_idbooleanWhether to include the target message in results (default: true)
discourse_list_drafts1 paramList all drafts for the current user. Returns draft keys, sequences, and preview content. Use this to find existing drafts before updatin…

List all drafts for the current user. Returns draft keys, sequences, and preview content. Use this to find existing drafts before updating them.

ParameterTypeDescription
offsetintegerPagination offset (default: 0)
discourse_get_draft2 paramsRetrieve a specific draft by its key. Common keys: "new_topic" for new topic drafts, "topic_<id>" for reply drafts.
ParameterTypeDescription
sequenceintegerExpected sequence number (optional)
draft_keystringDraft key (e.g., "new_topic", "topic_123", "new_private_message")
search_discourse_communities6 paramsDiscover Discourse forum communities by topic or find similar communities. Use 'query' for semantic text search (e.g., 'note taking produ…

Discover Discourse forum communities by topic or find similar communities. Use 'query' for semantic text search (e.g., 'note taking productivity') or 'similar_to' to find communities similar to a known one by URL or ID. Provide exactly one of 'query' or 'similar_to'. Returns communities with confidence scores and engagement metrics.

ParameterTypeDescription
limitintegerMaximum number of results to return (default: 10, max: 50)
querystringSemantic text search query (e.g., 'note taking productivity')
localestringFilter by locale code (e.g., 'en', 'de', 'fr')
min_usersintegerFilter by minimum total user count
similar_tostringFind communities similar to this one. Accepts a community URL (e.g., 'https://forum.obsidian.md') or ID (e.g., 'discover_1376')
engagement_tierstringFilter by engagement level: high (>5% MAU), medium (>1% MAU), low (<1% MAU)

Ready-made

Prompts

  • discourse-search-helpGenerate an optimized search query for Discourse using search operators
  • discourse-post-draftHelp draft a well-structured Discourse post or reply
  • discourse-summarize-topicGenerate a summary of a Discourse topic discussion
  • discourse-reply-suggestionsGenerate thoughtful reply suggestions for a Discourse topic

Readable data

Resources

  • site-infoCurrent Discourse site configuration and connection status