discourse/mcp
Discourse MCP CLI server (stdio) exposing Discourse tools.
Connector by discourse · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/discourse-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: social-media, agent-orchestration
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 63 read · 43 write · 16 delete · 9 not yet classified
- Secrets
- None asked for
- Install scripts
- Not scanned yet
- Runs as
- Node.js package
Tools by what they do 131
Read from the source code; the running server may list different tools.
Read 63 · Look things up without changing anything.
discourse_ai_get_agentdiscourse_ai_get_custom_tooldiscourse_ai_get_custom_tool_guidediscourse_ai_get_feature_configdiscourse_ai_get_topic_summarydiscourse_ai_list_agentsdiscourse_ai_list_custom_toolsdiscourse_ai_list_featuresdiscourse_ai_list_sentiment_postsdiscourse_evaluate_workflow_expressiondiscourse_filter_topicsdiscourse_get_chat_messages
Show 51 more tools
discourse_get_draftdiscourse_get_groupdiscourse_get_post_repliesdiscourse_get_post_revisiondiscourse_get_querydiscourse_get_review_queue_countdiscourse_get_reviewablediscourse_get_support_dashboarddiscourse_get_tag_groupdiscourse_get_themediscourse_get_topic_view_statsdiscourse_get_userdiscourse_get_user_moderation_summarydiscourse_get_user_summarydiscourse_get_webhookdiscourse_get_workflowdiscourse_get_workflow_executiondiscourse_list_categoriesdiscourse_list_directory_itemsdiscourse_list_group_membersdiscourse_list_group_membership_requestsdiscourse_list_group_postsdiscourse_list_groupsdiscourse_list_latest_postsdiscourse_list_private_messagesdiscourse_list_reportsdiscourse_list_reviewable_topicsdiscourse_list_reviewablesdiscourse_list_site_settingsdiscourse_list_tag_groupsdiscourse_list_themesdiscourse_list_user_actionsdiscourse_list_user_postsdiscourse_list_usersdiscourse_list_webhook_eventsdiscourse_list_webhooksdiscourse_list_workflow_credentialsdiscourse_list_workflow_executionsdiscourse_list_workflow_node_typesdiscourse_list_workflow_templatesdiscourse_list_workflow_versionsdiscourse_list_workflowsdiscourse_ping_webhookdiscourse_read_postdiscourse_read_private_messagediscourse_read_topicdiscourse_read_topic_postsdiscourse_run_querydiscourse_searchdiscourse_search_postsdiscourse_search_tag_groups
Write 43 · Create, change, send or run things.
discourse_ai_create_agentdiscourse_ai_create_agent_userdiscourse_ai_create_custom_tooldiscourse_ai_update_agentdiscourse_ai_update_custom_tooldiscourse_ai_update_feature_configdiscourse_create_categorydiscourse_create_groupdiscourse_create_postdiscourse_create_private_messagediscourse_create_querydiscourse_create_tag_group
Show 31 more tools
discourse_create_themediscourse_create_topicdiscourse_create_userdiscourse_create_webhookdiscourse_create_workflowdiscourse_discard_workflow_draftdiscourse_handle_group_membership_requestdiscourse_install_themediscourse_invite_group_members_by_emaildiscourse_invite_to_private_messagediscourse_reply_private_messagediscourse_resolve_workflow_entitydiscourse_restore_workflow_versiondiscourse_run_workflowdiscourse_run_workflow_stepdiscourse_save_draftdiscourse_select_sitediscourse_sync_remote_themediscourse_update_groupdiscourse_update_postdiscourse_update_querydiscourse_update_themediscourse_update_theme_settingdiscourse_update_theme_translationsdiscourse_update_topicdiscourse_update_userdiscourse_update_webhookdiscourse_update_workflowdiscourse_update_workflow_pin_datadiscourse_upload_filediscourse_upload_theme_asset
Delete 16 · Delete, drop, revoke or wipe things.
discourse_ai_delete_agentdiscourse_ai_delete_custom_tooldiscourse_ai_import_agentdiscourse_ai_import_custom_tooldiscourse_delete_draftdiscourse_delete_groupdiscourse_delete_querydiscourse_delete_tag_groupdiscourse_delete_themediscourse_delete_webhookdiscourse_delete_workflowdiscourse_manage_user_activation
Show 4 more tools
discourse_perform_reviewable_actiondiscourse_update_site_settingdiscourse_update_tag_groupdiscourse_update_theme_fields
Not yet classified 9 · We could not tell from the name and description.
discourse_ai_export_agentdiscourse_ai_export_custom_tooldiscourse_ai_semantic_searchdiscourse_ai_test_custom_tooldiscourse_get_reportdiscourse_join_groupdiscourse_leave_groupdiscourse_redeliver_webhook_eventdiscourse_request_group_membership
Files it touches
- Any path the agent passes to its tools
Tools (131)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
discourse_ai_create_agentCreate AI AgentCreate 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.
discourse_ai_create_agent_userCreate AI Agent UserExplicitly create the bot user used by an AI agent for mention/chat entry points. Requires admin credentials and write mode.
discourse_ai_create_custom_toolCreate AI Custom ToolCreate 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.
discourse_ai_delete_agentDelete AI Agentcan change or delete dataDelete a non-system AI agent. Requires admin credentials and write mode.
discourse_ai_delete_custom_toolDelete AI Custom Toolcan change or delete dataDelete a scripted tool. Agents referencing it may stop functioning as configured. Requires admin credentials and write mode.
discourse_ai_export_agentExport AI AgentExport a portable AI agent bundle. It may include referenced custom-tool definitions but excludes secret bindings. Treat prompts and scripts as sensitive.
discourse_ai_export_custom_toolExport AI Custom ToolExport portable custom-tool JSON. Discourse excludes secret bindings; MCP also strips them defensively. Treat script source as sensitive. Requires admin credentials.
discourse_ai_get_agentGet AI AgentGet the full editable configuration of one Discourse AI agent. Custom tools use custom-<id>; native tools use native-<id> in tool tuples.
discourse_ai_get_custom_toolGet AI Custom ToolGet one database-backed scripted AI tool, including source and configured secret bindings. Treat the response as sensitive. Requires admin credentials.
discourse_ai_get_custom_tool_guideGet AI Custom Tool GuideRetrieve 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.
discourse_ai_get_feature_configGet AI Feature ConfigurationResolve a visible feature module ID and return its computed state plus editable settings from its exact ai-features/<module> area. Credential settings are omitted. Requires admin credentials.
discourse_ai_get_topic_summaryGet Discourse AI Topic SummaryRetrieve 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_import_agentImport AI Agentcan change or delete dataImport 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.
discourse_ai_import_custom_toolImport AI Custom Toolcan change or delete dataImport 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.
discourse_ai_list_agentsList AI AgentsList 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.
Show 116 more tools
discourse_ai_list_custom_toolsList AI Custom ToolsList 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.
discourse_ai_list_featuresList AI FeaturesList visible computed Discourse AI modules, feature enabled state, assigned agents, and effective LLMs. Requires admin credentials.
discourse_ai_list_sentiment_postsList Discourse AI Sentiment PostsList 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.
discourse_ai_semantic_searchDiscourse AI Semantic SearchRun 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.
discourse_ai_test_custom_toolTest AI Custom ToolActually 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.
discourse_ai_update_agentUpdate AI AgentPartially 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.
discourse_ai_update_custom_toolUpdate AI Custom ToolPartially 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.
discourse_ai_update_feature_configUpdate AI Feature ConfigurationAtomically 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.
discourse_create_categoryCreate CategoryCreate a new category. Returns JSON with id, slug, and name.
discourse_create_groupCreate GroupCreate a custom group with complete core settings, initial members and owners, custom fields, associations, and optional plugin fields. Requires staff group-creation permission.
discourse_create_postCreate PostCreate a post in a topic. author_username requires a global API key. Returns the actual upstream author so callers can verify attribution.
discourse_create_private_messageCreate Private MessageCreate 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.
discourse_create_queryCreate Data Explorer QueryCreate a new saved Data Explorer query. Requires admin API key and write access.
discourse_create_tag_groupCreate Tag GroupCreate 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 require allow_tag_creation=true because they create persistent tags and trigger normal indexing/plugin hooks. Duplicate-name and ID checks are advisory; upstream staff authority, tagging_enabled, and constraints remain authoritative.
discourse_create_themeCreate ThemeCreate 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.
discourse_create_topicCreate TopicCreate a new topic. author_username requires a global API key. Returns the actual upstream author so callers can verify attribution.
discourse_create_userCreate UserCreate 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.
discourse_create_webhookCreate WebhookCreate a guarded outbound webhook using the live event and content-type catalog. External delivery and risky options require explicit confirmation.
discourse_create_workflowCreate WorkflowCreate 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. Interpolating strings start with =. Filter/if use leftValue/rightValue and output ports true/false. Connection type is the source output key, not always main. Prefer declarative nodes over action:code. Manual runs execute the current draft. Omitting a node on whole-graph update deletes it. no…
discourse_delete_draftDelete DraftDelete a draft by key. Requires current sequence number to prevent conflicts.
discourse_delete_groupDelete GroupPermanently delete a custom group. Automatic groups cannot be deleted. Requires staff access.
discourse_delete_queryDelete Data Explorer QuerySoft-delete a Data Explorer query. The query can be restored by an admin. Requires admin API key and write access.
discourse_delete_tag_groupDelete Tag Groupcan change or delete dataPermanently 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 not exhaustive (plugins such as RSS polling may depend on groups). Scoped API keys may not include this delete route. A 200 response is only dispatch acknowledgement; absence is verified before success.
discourse_delete_themeDelete ThemePermanently 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.
discourse_delete_webhookDelete WebhookDelete one webhook after a fresh exact destination-fingerprint precondition.
discourse_delete_workflowDelete WorkflowPermanently delete a workflow. Fails when another workflow calls it.
discourse_discard_workflow_draftDiscard Workflow DraftReplace the draft with its published snapshot. Requires an existing published version.
discourse_evaluate_workflow_expressionEvaluate Workflow ExpressionEvaluate a workflow expression without mutating the forum. Interpolating expressions start with =.
discourse_filter_topicsFilter TopicsDiscover 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 pagination metadata.
discourse_get_chat_messagesGet Chat MessagesGet 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_draftGet DraftRetrieve a specific draft by key. Returns JSON with draft_key, sequence, and parsed data (title, reply, categoryId, tags, action).
discourse_get_groupGet GroupGet complete visible group details by numeric ID or name, including caller capabilities and group settings.
discourse_get_post_repliesGet Post RepliesRead reply relationships for a post as recursive descendant IDs, bounded rich direct replies, or the upstream-bounded ancestor history. Preserves upstream ordering and references.
discourse_get_post_revisionGet Post RevisionGet a staff/Guardian-authorized post revision with bounded diffs, edit reason, actor, version, and hidden-state evidence.
discourse_get_queryGet Data Explorer QueryGet full details of a Data Explorer query including SQL and parameters. Requires admin API key.
discourse_get_reportGet ReportExecute one discovered staff-visible Discourse report with dates, facets, typed filters, limit, and upstream caching. This exposes existing reports, not arbitrary SQL.
discourse_get_review_queue_countGet Review Queue Countread-onlyGet 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.
discourse_get_reviewableGet Reviewableread-onlyRefresh 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.
discourse_get_support_dashboardGet Solved Support DashboardGet the staff Solved support dashboard. Requires Discourse Solved. 'Unanswered' means unsolved with no qualifying regular reply, not no reply from a configured support team.
discourse_get_tag_groupGet Tag GroupGet 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.
discourse_get_themeGet ThemeInspect 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.
discourse_get_topic_view_statsGet Topic View StatsGet up to 300 ascending daily topic view counts. Views combine anonymous and logged-in views; they are not unique viewers or an engagement judgment.
discourse_get_userGet UserGet user info. Returns JSON with id, username, name, trust_level, created_at, bio, admin, and moderator.
discourse_get_user_moderation_summaryGet User Moderation SummaryGet staff-authorized behavioral moderation counters for a user. Omits unrelated administrative capability flags; Discourse permissions remain authoritative.
discourse_get_user_summaryGet User SummaryGet 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.
discourse_get_webhookGet WebhookGet one fresh safe webhook configuration for inspection and mutation preconditions.
discourse_get_workflowGet WorkflowGet the complete round-trippable workflow graph. GET immediately before updating it.
discourse_get_workflow_executionGet Workflow ExecutionPoll an execution for status, errors, timing, trigger data, and steps.
discourse_handle_group_membership_requestHandle Group Membership RequestApprove or deny one pending group membership request. Approval adds the requester to the group; denial only removes the request.
discourse_install_themeInstall ThemeInstall 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.
discourse_invite_group_members_by_emailInvite Group Members by EmailAdd 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.
discourse_invite_to_private_messageInvite to Private MessageAdd 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.
discourse_join_groupJoin GroupJoin a visible group that allows public admission as the authenticated user.
discourse_leave_groupLeave GroupLeave a group that allows public exit as the authenticated user.
discourse_list_categoriesList CategoriesExhaustively 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.
discourse_list_directory_itemsList Directory ItemsList 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.
discourse_list_group_membersList Group MembersList a group's members and owners with filtering, ordering, and pagination. Visibility is enforced by Discourse.
discourse_list_group_membership_requestsList Group Membership RequestsList pending membership requests and reasons for a group the caller can manage, with filtering and pagination.
discourse_list_group_postsList Group PostsList 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.
discourse_list_groupsList GroupsList 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.
discourse_list_latest_postsList Latest PostsList 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.
discourse_list_private_messagesList Private MessagesList authenticated personal or group private-message mailboxes. Returns normalized JSON messages and pagination metadata.
discourse_list_reportsList ReportsDiscover staff-visible Discourse report identifiers and metadata. The catalog is authoritative because core and plugins can add or hide reports.
discourse_list_reviewable_topicsList Reviewable Topicsread-onlyNon-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.
discourse_list_reviewablesList Reviewablesread-onlyWork 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 detail only for a shortlisted item that needs fresher context.
discourse_list_site_settingsList Site SettingsList 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.
discourse_list_tag_groupsList Tag GroupsAuthoritative 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 ({group_id, access}; group_id 0 is everyone), and optimistic state hashes.
discourse_list_themesList ThemesList admin-visible Discourse themes and components. This opt-in admin read returns bounded summaries and local pagination; it does not expose theme source code.
discourse_list_user_actionsList User ActionsList 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.
discourse_list_user_postsList User PostsGet 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_usersList UsersList 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_list_webhook_eventsList Webhook EventsList bounded webhook delivery diagnostics. Payload and response previews are omitted unless explicitly confirmed.
discourse_list_webhooksList WebhooksList safe webhook summaries and the live authoring catalog without exposing webhook secrets or destination credentials.
discourse_list_workflow_credentialsList Workflow CredentialsList workflow credentials with secrets redacted. Credential creation remains in the admin UI.
discourse_list_workflow_executionsList Workflow ExecutionsList global or per-workflow execution history.
discourse_list_workflow_node_typesList Workflow Node TypesList 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 with =. Filter/if use leftValue/rightValue and output ports true/false. Connection type is the source output key, not always main. Prefer declarative nodes over action:code. Manual runs execute the current draft. Omitting a node on whole-graph update deletes it. nodes and connections…
discourse_list_workflow_templatesList Workflow TemplatesList 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 leftValue/rightValue and output ports true/false. Connection type is the source output key, not always main. Prefer declarative nodes over action:code. Manual runs execute the current draft. Omitting a node on whole-graph update deletes it. nodes and connections must always be sent t…
discourse_list_workflow_versionsList Workflow VersionsList workflow version history and UUIDs available for restore.
discourse_list_workflowsList WorkflowsList compact Discourse Workflow summaries. Requires an admin API key.
discourse_manage_user_activationManage User Activationcan change or delete dataActivate, approve, activate-and-approve, or deactivate one user through Discourse's authoritative admin routes. Requires explicit confirmation and upstream staff authorization.
discourse_perform_reviewable_actionPerform Reviewable Actioncan change or delete dataPerform 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.
discourse_ping_webhookPing WebhookEnqueue one explicitly confirmed external webhook ping after a fresh destination precondition.
discourse_read_postRead PostRead a specific post. Returns JSON with id, topic_id, post_number, username, created_at, and raw content.
discourse_read_private_messageRead Private MessageRead an authenticated private message, its posts, and direct allowed-user and allowed-group records. Rejects public topics.
discourse_read_topicRead TopicRead 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.
discourse_read_topic_postsRead Selected Topic PostsRead 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.
discourse_redeliver_webhook_eventRedeliver Webhook EventRedeliver exactly one old webhook event after destination, ownership, and status preconditions. Bulk redelivery is not exposed.
discourse_reply_private_messageReply to Private MessageSafely reply to an existing private message after verifying its archetype. author_username requires a global API key; the response reports actual attribution.
discourse_request_group_membershipRequest Group MembershipRequest membership in a visible group that allows requests, sending the reason to its owners.
discourse_resolve_workflow_entityResolve Workflow EntityResolve category, tag, group, user, badge, chat channel, or data-table ids for workflow parameters.
discourse_restore_workflow_versionRestore Workflow VersionRestore a historical workflow version by UUID into the draft.
discourse_run_queryRun Data Explorer QueryExecute 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.
discourse_run_workflowRun Workflow DraftRun the current unpublished draft asynchronously. This can create posts, send chat, or call external HTTP; poll the returned execution id.
discourse_run_workflow_stepRun Workflow StepRun one non-trigger, non-waiting draft node asynchronously. Requires upstream pin-data or a prior successful run.
discourse_save_draftCreate/Save DraftCreate or update a draft. Returns JSON with draft_key and new sequence number.
discourse_searchDiscourse SearchSearch site content. Returns JSON object with results array of matching topics (id, slug, title) and meta (total, has_more).
discourse_search_postsSearch PostsSearch 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.
discourse_search_tag_groupsSearch Tag GroupsPublic 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. Always sends an explicit limit and reports possible truncation.
discourse_select_siteSelect SiteValidate and select a Discourse site. Returns JSON with site URL and title.
discourse_sync_remote_themeSync Remote ThemeCheck 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.
discourse_update_groupUpdate GroupUpdate all core group profile, visibility, admission, notification-default, association, email, SMTP, custom, and plugin settings supported by the caller and group type.
discourse_update_postUpdate PostUpdate the content of an existing post. Returns JSON with updated post details.
discourse_update_queryUpdate Data Explorer QueryUpdate an existing Data Explorer query. Only provided fields are updated. Requires admin API key and write access.
discourse_update_site_settingUpdate Site Settingcan change or delete dataSet or reset one ordinary admin-visible Discourse site setting after a fresh optimistic-concurrency check. Secret and structured settings are excluded.
discourse_update_tag_groupUpdate Tag Groupcan change or delete dataSafely 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 current parent; pass null to clear it. Permissions use explicit {group_id, access} entries; group_id 0 means everyone. Tag/parent removals, permission replacement, and possible materialization of serializer-synthesized everyone/full permissions require explicit acknowledgements. The ha…
discourse_update_themeUpdate Theme MetadataUpdate 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.
discourse_update_theme_fieldsUpdate Theme FieldsReplace 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.
discourse_update_theme_settingUpdate Theme SettingSet 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.
discourse_update_theme_translationsUpdate Theme TranslationsReplace 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.
discourse_update_topicUpdate TopicUpdate an existing topic (title, category, tags, featured_link). Returns JSON with updated topic details.
discourse_update_userUpdate UserUpdate user profile fields. If upload_id is provided, also sets the user's avatar. Returns JSON with success status and updated user details.
discourse_update_webhookUpdate WebhookPartially update a webhook after fresh destination and active-state preconditions. Relationship arrays are complete replacements.
discourse_update_workflowUpdate WorkflowGET 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, test the draft, then publish. Interpolating strings start with =. Filter/if use leftValue/rightValue and output ports true/false. Connection type is the source output key, not always main. Prefer declarative nodes over action:code. Manual runs execute the current draft. Omitting …
discourse_update_workflow_pin_dataUpdate Workflow Pin DataPin test items to a node name, or omit items to unpin it.
discourse_upload_fileUpload FileUpload 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.
discourse_upload_theme_assetUpload Theme AssetUpload 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.
Signals
- Stars
- 77
- Forks
- 45
- Open issues
- 0
- Weekly downloads
- 11,504
- Last commit
- Aug 25, 2026 (2 months ago)
- Last release
- Aug 25, 2026 (2 months ago)
- Last package publish
- Aug 25, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.discourse/mcp- Version
- 0.3.1
- Auth
- No auth
- Packages
- npm @discourse/mcp
- License
- MIT
- Repository
- github.com/discourse/discourse-mcp
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
Cite this page
discourse/mcp. Agent Mart. https://agentmart.dev/connectors/discourse-mcp (last updated 2026-10-25)