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
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| discourse_select_siteA | Validate and select a Discourse site. Returns JSON with site URL and title. |
| discourse_searchB | Search site content. Returns JSON object with results array of matching topics (id, slug, title) and meta (total, has_more). |
| discourse_filter_topicsA | Filter topics with a concise query language. Returns JSON object with results array (id, slug, title) and meta (page, limit, has_more). Query syntax: category/categories (comma=OR, '=category'=without subcats, '-'=exclude), tag/tags (comma=OR, '+'=AND), status:(open|closed|archived|listed|unlisted|public), in:(bookmarked|watching|tracking|muted|pinned), dates: created/activity-(before|after) YYYY-MM-DD or N days, order: activity|created|latest-post|likes|views with optional -asc. |
| discourse_read_topicB | Read topic metadata and posts. Returns JSON with id, title, slug, category_id, tags, and posts array. |
| discourse_read_postA | Read a specific post. Returns JSON with id, topic_id, post_number, username, created_at, and raw content. |
| discourse_read_imageA | Fetch Discourse post images for the model to view. Returns MCP image content (base64 + mimeType) plus a short text summary. Pass url (https / upload:// / short path) and/or post_id to extract images from a post. Use after discourse_read_post/topic when raw contains |
| discourse_get_userB | Get user info. Returns JSON with id, username, name, trust_level, created_at, bio, admin, and moderator. |
| discourse_list_user_postsA | 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). |
| discourse_list_usersA | 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. |
| discourse_get_chat_messagesC | 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. |
| discourse_get_draftA | Retrieve a specific draft by key. Returns JSON with draft_key, sequence, and parsed data (title, reply, categoryId, tags, action). |
| discourse_get_queryA | Get full details of a Data Explorer query including SQL and parameters. Requires admin API key. |
| discourse_run_queryA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| sql_query | Guided workflow for database queries: discover schema, write SQL, run queries via Data Explorer |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| site_categories | List all categories with hierarchy (pid), permissions (perms), and counts. Use for migration workflows. |
| site_tags | List all tags with usage counts. Returns empty if tags are disabled. |
| site_groups | List all groups with visibility, interaction levels, and access settings. Levels: 0=public, 1=logged_on_users, 2=members, 3=staff, 4=owners. |
| chat_channels | List all public chat channels with id, title, slug, status, members_count, and description. |
| user_chat_channels | List user's chat channels (public + DMs) with unread/mention counts. Requires authentication. |
| user_drafts | List user's drafts with draft_key, sequence, title, category_id, created_at, and reply_preview. Requires authentication. |
| explorer_schema | 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 | Saved Data Explorer queries (30/page, by last used). Shows id, name, description. Use explorer_queries_page for other pages. |
TDQS
Scored across 13 tools
Each tool targets a distinct resource or operation: users, chat messages, drafts, queries, topics, posts, images, and site selection. Even search and filter_topics are clearly differentiated by keyword vs. structured query, and read_topic/read_post operate at different granularities.
Tools follow a discourse_verb_noun pattern, but use multiple verbs for retrieval (list, get, read) without a strict rule. For instance, get_chat_messages returns a collection while list_user_posts uses 'list', and read_topic/read_post use 'read' for content-heavy resources.
13 tools is well-scoped, covering users, content, search, queries, and site management without unnecessary overlap or bloat. The count aligns well with the server's apparent purpose as a comprehensive Discourse read/query interface.
The set covers read/search/query needs comprehensively, including topics, posts, images, users, chat, and Data Explorer. Minor gaps exist such as no category/tag listing tool and no write operations, but filter_topics can work around category/tag needs, making the limitations workable.