Discourse MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| discourse_select_siteA | 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. |
| discourse_searchA | Search Discourse site content including topics, posts, and users. Use search operators like @username, #tag, category:name for filtered results. |
| discourse_read_topicA | Read a Discourse topic including its metadata (title, category, tags) and posts. Supports pagination for long topics. |
| discourse_read_postA | Read a specific post by its ID. Returns the post content, author, creation date, and link to the post. |
| discourse_list_categoriesA | List all categories visible to the current user. Returns category names and topic counts. Useful for discovering where to post or search. |
| discourse_list_tagsA | 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_userA | Get information about a Discourse user by username. Returns name, trust level, join date, bio, and profile link. |
| discourse_list_user_postsA | 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. |
| discourse_filter_topicsA | 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), views-(min|max); order: activity|created|latest-post|likes|likes-op|posters|title|views|category with optional -asc; free text terms are matched full-text. Results are permission-aware. |
| discourse_list_chat_channelsA | List all public chat channels visible to the current user. Returns channel information including title, description, and member counts. Supports filtering and pagination. |
| discourse_list_user_chat_channelsA | 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_messagesA | 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. |
| discourse_list_draftsA | List all drafts for the current user. Returns draft keys, sequences, and preview content. Use this to find existing drafts before updating them. |
| discourse_get_draftA | Retrieve a specific draft by its key. Common keys: "new_topic" for new topic drafts, "topic_" for reply drafts. |
| search_discourse_communitiesA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
Most tools have distinct purposes targeting specific resources like topics, posts, users, chats, or drafts, with clear boundaries. However, discourse_filter_topics and discourse_search have some functional overlap in querying content, which could cause minor confusion for agents about which to use for topic filtering versus general search.
Tool names follow a highly consistent snake_case pattern with a 'discourse_' prefix for most tools, using clear verb_noun combinations (e.g., discourse_list_categories, discourse_get_user). The single exception, search_discourse_communities, still maintains readability and a similar structure, not detracting from overall consistency.
With 15 tools, the server is well-scoped for a Discourse forum management system, covering key areas like content browsing, user management, chat, drafts, and site selection. Each tool serves a specific, non-redundant function, making the count appropriate for the domain without being overwhelming.
The toolset provides comprehensive coverage for reading, searching, and listing operations across topics, posts, users, chats, and drafts, with good support for filtering and pagination. A minor gap exists in write operations (e.g., creating or updating content like posts or topics), which agents might need to work around, but core workflows are well-supported.