Discourse MCP

Read, search and, when allowed, post to and administer a Discourse forum over MCP

Official · Discourse TypeScript Local · stdio CommunicationProductivity

69 popularity score ★ 79 ↓ 26k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add discourse -- npx -y @discourse/mcp@latest
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "discourse": {
      "command": "npx",
      "args": [
        "-y",
        "@discourse/mcp@latest"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "discourse": {
      "command": "npx",
      "args": [
        "-y",
        "@discourse/mcp@latest"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "discourse": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@discourse/mcp@latest"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.discourse]
command = "npx"
args = ["-y", "@discourse/mcp@latest"]
Gemini CLITerminal
gemini mcp add --scope user discourse npx -- -y @discourse/mcp@latest

What it does

Discourse MCP is the Discourse team's own MCP server for working with Discourse forums. It runs on your machine over stdio (or, with --transport http, as a loopback HTTP endpoint for a single client) and talks to a forum's JSON API. You either pick a forum at runtime with discourse_select_site or pin the server to one with --site.

With no key it reads what an anonymous visitor could: topic search, topic filters (latest, top, hot), whole topics, single posts, user profiles and a user's posts. With an Admin API key or a per-user User API key it also reaches private messages, drafts, chat messages, Data Explorer queries and staff-only listings. Writing is off until you pass --allow_writes; then tools for creating posts, topics, categories, users, uploads, drafts and private messages are registered.

Tools are grouped into toolsets chosen with --toolsets. The default catalog leaves out the administrative domains, which must be picked by name: moderation queue, groups, tag groups, themes, webhooks, site settings, analytics reports, the experimental workflows plugin, and Discourse AI agents, custom tools and features. In v0.3.1 the code registers 141 built-in tools in all (catalog.ts, plus twelve group member and owner tools generated in groups/members.ts), far more than the README's tool list shows; it also lists tools from a forum's own Tool Execution API unless --tools_mode discourse_api_only is set. All tools return JSON only, a breaking change made in 0.2.x.

What it needs

RuntimeNode.js 24+

Node.js 24 or newer (npx). A Discourse forum to point it at: public forums can be read without a key. For private messages, drafts, writes and admin toolsets, an Admin API key (key plus username, made in the forum's admin panel) or a User API key that any member can create with the package's generate-user-api-key command, passed in --auth_pairs or a --profile file. Data Explorer, workflows, AI and analytics toolsets need the matching Discourse plugins enabled on the forum.

Limits

Writes are off by default and are paced to about one request a second. Search returns 10 results by default, up to 50 with max_results; topic reads return 5 posts by default, up to 50; post text is cut at 50,000 characters unless --max-read-length is changed. Local file uploads only work from folders named in --allowed_upload_paths. HTTP mode serves one client session per process and must be restarted after it closes. The workflows toolset targets a plugin its makers call experimental, and workflow runs are not dry runs. Bulk webhook redelivery, bulk site-setting changes and secret settings are deliberately not supported.

Who it suits

Suits forum owners, moderators and community teams who want an assistant to read threads, triage the review queue or run admin tasks on their own Discourse, and anyone who wants read-only access to a public forum without a key. Because it is published by Discourse and covers admin areas, it fits sites that want one maintained server rather than a scraper. Pick something else if you only need a few read tools and cannot run Node 24, or if you cannot keep admin-level keys on the machine running it.

Tools 56 of 141

discourse_select_site
Choose which Discourse forum later calls go to
discourse_search
Search topics on the forum
discourse_search_posts
Search posts, returning matching excerpts
discourse_filter_topics
List topics by filter query, or top and hot lists
discourse_read_topic
Read a topic and a page of its posts
discourse_read_topic_posts
Read chosen posts of a topic: by ID, latest, earliest or around a post
discourse_read_post
Read one post
discourse_get_post_replies
Show the replies to a post
discourse_list_latest_posts
List the newest posts across the site
discourse_get_user
Look up a user's profile
discourse_list_user_posts
List posts by one user
discourse_get_user_summary
Get a user's activity summary
discourse_list_user_actions
List a user's activity timeline
discourse_list_directory_items
Read user directory metrics
discourse_list_users
List users (admin key)
discourse_get_chat_messages
Fetch messages from a chat channel
discourse_get_draft
Read a saved draft
discourse_save_draft
Save a draft (writes)
discourse_delete_draft
Delete a draft (writes)
discourse_create_post
Reply in a topic (writes)
discourse_create_topic
Start a new topic (writes)
discourse_update_topic
Change a topic's title, category or tags (writes)
discourse_create_category
Create a category (writes)
discourse_create_user
Create a user account (writes, admin key)
discourse_update_user
Edit a user's profile (writes)
discourse_upload_file
Upload a file for use in posts (writes)
discourse_list_private_messages
List a personal or group mailbox (key needed)
discourse_read_private_message
Read a private message thread (key needed)
discourse_create_private_message
Send a new private message (writes)
discourse_reply_private_message
Reply in a private message thread (writes)
discourse_invite_to_private_message
Add a person or group to a private message (writes)
discourse_list_categories
List the forum's categories (administration toolset)
discourse_list_groups
List groups (groups toolset)
discourse_list_group_members
List a group's members and owners
discourse_list_group_posts
List posts written by a group's members
discourse_search_tag_groups
Search visible tag groups
discourse_list_tag_groups
List all tag groups (staff)
discourse_get_tag_group
Read one tag group (staff)
discourse_create_tag_group
Create a tag group (writes)
discourse_update_tag_group
Edit a tag group with a state check (writes)
discourse_delete_tag_group
Delete a tag group after confirmations (writes)
discourse_get_review_queue_count
Count pending items in the review queue
discourse_list_reviewables
List review queue items
discourse_list_reviewable_topics
List topics with pending review items
discourse_get_reviewable
Read one review item and its allowed actions
discourse_perform_reviewable_action
Take one moderation action on a review item (writes)
discourse_list_themes
List installed themes and components
discourse_get_theme
Read one theme's details
discourse_get_workflow_execution
Read the result of a workflow run
discourse_ai_list_agents
List Discourse AI agents
discourse_ai_get_agent
Read one AI agent's configuration
discourse_ai_list_custom_tools
List Discourse AI custom tools
discourse_ai_get_custom_tool
Read one AI custom tool
discourse_ai_get_custom_tool_guide
Get the guide for writing AI custom tools
discourse_ai_test_custom_tool
Run an AI custom tool as a test (writes)
discourse_ai_semantic_search
Search posts by meaning with Discourse AI

Similar servers