discourse-mcp
Provides tools for interacting with Discourse forum software, including reading and writing posts and topics, searching, managing drafts, and reading images for vision models.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@discourse-mcpshow me the latest topics on the forum"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
discourse-mcp (Cloudflare-friendly fork)
Fork of the official discourse/discourse-mcp that routes Discourse API traffic through impers (curl-impersonate / curl_cffi-style TLS fingerprints).
Use this when the target forum sits behind Cloudflare (or similar) and the stock MCP gets 403 Just a moment... from Node's native fetch.
Upstream | This fork | |
HTTP |
|
|
Default fingerprint | — |
|
CF 403 | fails immediately | delayed retry (same profile, backoff) |
Images | markdown |
|
HTTP rate limit | write tools ~1/s only | Optional sliding window on all HTTP ( |
libcurl-impersonate | — | impers resolve order; if missing, |
Requires Node.js >= 24.
Install in Grok Build
1. Profile (auth)
Create ~/.grok/discourse-profile.json (example for a User API key):
{
"site": "https://www.example.com/",
"impersonate": "chrome120",
"auth_pairs": [
{
"site": "https://www.example.com/",
"user_api_key": "YOUR_USER_API_KEY",
"user_api_client_id": "discourse-mcp"
}
],
"read_only": false,
"allow_writes": true,
"log_level": "info",
"rate_limit_max": 15,
"rate_limit_window_ms": 60000,
"rate_limit_min_interval_ms": 200
}HTTP sliding-window rate limit
Measured on uscardforum (Cloudflare / edge):
Observation | Value |
Burst until first 429 | ~20 sequential requests |
Recovery after full burst | ~40s of continued 429 on probes, then OK |
Sustained 1 req / 0.8–1.2s | Still hits 429 after ~20 → not pure RPS |
Sustained 1 rps in earlier run | Can stay green for short runs, but window still caps at ~20 |
So the dominant pattern is ~20 requests per rolling ~60s window, not a fixed RPS ceiling. Client-side limit should be a sliding window.
Profile / CLI:
Field | Meaning |
| Max requests in the window ( |
| Window length (default |
| Optional min gap between requests |
uscardforum-safe defaults used locally: 15 / 60s + 200ms min interval (margin under the ~20 hard edge).
Cross-process / all clients: when rate limiting is enabled, timestamps are stored under a shared cache directory (not ~/.grok):
Platform | Default state dir |
macOS / Linux |
|
Windows |
|
Override with profile rate_limit_state_dir or env DISCOURSE_MCP_RATE_LIMIT_DIR.
One file per site origin (sha1(origin).json) + .lock. Multiple Grok/Claude/Cursor MCP processes share the same window. If the file lock fails, the process falls back to in-memory limiting and logs an error.
Generate a User API key (no admin required):
npx -y github:Sakura-Byte/discourse-mcp generate-user-api-key \
--site https://www.example.com/ \
--save-to ~/.grok/discourse-profile.json2. ~/.grok/config.toml
[mcp_servers.discourse]
command = "npx"
args = [
"-y",
"github:Sakura-Byte/discourse-mcp",
"--profile",
"/Users/YOU/.grok/discourse-profile.json",
]
enabled = true
startup_timeout_sec = 120First launch may download npm deps and
libcurl-impersonate(or useghif GitHub API is rate-limited). Prefer a longerstartup_timeout_sec.
3. Refresh MCP
New Grok session, or
/mcps→rrefreshCheck:
grok mcp doctor discourse
Related MCP server: USCardForum MCP Server
Install in other MCP clients
Claude Desktop / Cursor-style JSON
{
"mcpServers": {
"discourse": {
"command": "npx",
"args": [
"-y",
"github:Sakura-Byte/discourse-mcp",
"--profile",
"/absolute/path/to/profile.json"
]
}
}
}Local clone
git clone https://github.com/Sakura-Byte/discourse-mcp.git
cd discourse-mcp
npm install # runs prepare → tsc build
node dist/index.js --profile /path/to/profile.jsonGrok / client:
[mcp_servers.discourse]
command = "node"
args = ["/ABS/PATH/discourse-mcp/dist/index.js", "--profile", "/path/to/profile.json"]
enabled = true
startup_timeout_sec = 60libcurl-impersonate
Resolution order (impers native):
LIBCURL_IMPERSONATE_PATHLIBCURL_PATHCommon install paths
GitHub download into
~/.cache/impers/libcurl-impersonate/{platform}-{arch}/System libcurl (no impersonate)
If step 4 fails (e.g. API rate limit), this fork tries gh:
Situation | Behaviour |
|
|
| Interactive |
no | Install/login hints + manual extract path |
brew install gh && gh auth login # recommended onceOverride: DISCOURSE_MCP_REQUIRE_IMPERSONATE=0 allows starting without impersonate (CF sites will usually fail).
CLI / profile flags (same as upstream + extras)
Flag / field | Meaning |
| Load config from file |
| Tether to one site |
| Per-site API / User API keys |
| Enable write tools |
| Browser fingerprint (also in profile) |
| Verbose HTTP |
Reading images (for vision models)
MCP tools should return images as Image Content blocks (not only a base64 string inside JSON text):
{
"content": [
{ "type": "text", "text": "{...metadata...}" },
{ "type": "image", "data": "<base64>", "mimeType": "image/jpeg" }
]
}Use discourse_read_image:
{ "post_id": 8564338, "max_images": 2 }{ "url": "upload://q9cFN6AzFPTkcn4CVcNmkuXNDTi.jpeg" }{ "url": "https://asset-cdn.example.com/.../photo.jpeg" }Typical flow: discourse_read_post → see  in raw → discourse_read_image with post_id or that upload:// URL.
See upstream docs for the rest of the tool list (search, read topic/post, create post/topic, drafts, …).
Upstream
Based on discourse/discourse-mcp (MIT).
Cloudflare / impers / gh bootstrap changes live in this fork only.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
AlicenseAqualityCmaintenanceEnables AI agents to interact with Discourse forums through search, reading topics/posts, managing categories and users. Supports secure authentication and optional write operations with rate limiting.Last updated141,87068MIT- AlicenseAqualityCmaintenanceEnables interaction with USCardForum, a Discourse-based community for US credit cards and points. Supports topic discovery, content reading, user research, forum search, and authenticated actions like notifications and bookmarks.Last updated22MIT
- AlicenseAqualityCmaintenanceEnables AI agents to interact with Discourse forums through search, reading topics/posts, managing categories and tags, chat channels, and optionally creating content with safeguarded write operations.Last updated151,870MIT
- Alicense-qualityAmaintenanceEnables programmatic interaction with the UnknownCheats forum by bypassing Cloudflare protection using a headed Chrome browser. Supports searching forums, reading threaded discussions with pagination, extracting code blocks in multiple languages, and maintaining persistent authenticated sessions.Last updated19013MIT
Related MCP Connectors
Stealth scraping & search. Bypasses Cloudflare, DataDome & LinkedIn via Cyborg HITL approach.
The most accurate web access API. Stop getting blocked.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sakura-Byte/discourse-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server