Content
# linuxdo-mcp
#### This post uses community public welfare promotion, which meets the promotion requirements. I declare and follow the following contents required by the community:
* **My project is free to use, without charging (implicit charging, sponsorship) part:** Yes
* **My post has been marked with #公益推广 tag:** Yes
* **My project belongs to personal project, not related to company or commercial institution:** Yes
* **My project does not have QQ, TG and other group guides:** Yes
* **My project does not have non-operational necessary website guides:** Yes
* **My project does not promote for others, AFF:** Yes
* **My project has no associated commercial projects:** Yes
* **My site has login, and has accessed LINUX DO Connect:** No
* **The project introduction in my post, AI generated, polished content has been screenshot and sent out:** Yes
* **The above choices I promise are permanently effective, and accept the supervision of the community and old friends:** Yes
Search / Read [linux.do](https://linux.do)(Discourse Forum) with MCP Server.
Use [curl_cffi](https://github.com/lexiforest/curl_cffi) to simulate Chrome TLS fingerprint to bypass Cloudflare,
access trusted level restricted content with login cookie.
## Tool List
| Tool | Return | Description |
|------|------|------|
| `whoami()` | JSON | Current cookie corresponding login user and trust level |
| `search(query, page=1, pages=1)` | JSON | Full search, `query` supports Discourse advanced syntax |
| `get_topic(topic_id, posts=5)` | JSON | Topic details + first N floor posts |
| `list_categories()` | JSON | All categories, including respective topic count `topic_count`, post count `post_count` |
| `category_topics(category_id, page=1)` | JSON | Topic list under specified category (about 30 per page), including total topic count of the category |
| `list_tags()` | JSON | All tags and respective topic count `count` |
| `tag_topics(tag, page=1)` | JSON | Topic list under specified tag |
| `user_info(username)` | JSON | User information: trust level, title, post count, like count, registration/online time |
| `latest_topics(page=1)` | JSON | Latest topics on the homepage |
| `top_topics(period="weekly", page=1)` | JSON | Popular topics, period: daily/weekly/monthly/quarterly/yearly/all |
| `user_actions(username, limit=20)` | JSON | User's posting/reply activities (including summary and link) |
| `format_search(query, page=1, pages=1)` | Markdown | Same as search, directly returns finished Markdown (title + URL + summary) |
| `format_topic(topic_id, posts=20)` | Markdown | Same as get_topic, directly returns finished Markdown (source header + floor table) |
- `format_*` tools return composed Markdown strings, which can be directly displayed by clients; others return structured JSON.
- Advanced search syntax: `order:latest`, `#category`, `@user`, `tags:tag`, `after:2025-01-01`, `in:title`, etc.
## Prerequisites
- Install [uv](https://docs.astral.sh/uv/)(provides `uvx`).
- Get your own cookie: log in to linux.do on the browser → F12 → Application → Cookies → `https://linux.do` → copy the value of `_t`.
Only `_t` is needed, **not** `cf_clearance`.
## Configuration (copy to your MCP client)
No need to download code, `uvx` will automatically pull and run from the repository. Add the following to your MCP client configuration,
fill in **your own** `_t`:
```json
{
"mcpServers": {
"linuxdo": {
"command": "uvx",
"args": ["--from", "git+https://github.com/mrsxs/linuxdo-mcp", "linuxdo-mcp"],
"env": {
"LINUXDO_COOKIE": "_t=your_token_value"
}
}
}
}
```
- **Claude Code**: `claude mcp add-json linuxdo '<above content>'`, or write to `.mcp.json` / settings.
- **Cursor / Claude Desktop / Cline**: paste into respective MCP configuration files.
> ⚠️ `_t` is your linux.do login credential, only fill in your own local configuration, **do not share with others**.
## Local Running (Development)
```bash
export LINUXDO_COOKIE='_t=...'
uvx --from . linuxdo-mcp # or uv run src/linuxdo_mcp/server.py
```
## Remarks
- Cookie expiration will return 401/403, re-export `_t` is ok.
- Occasionally blocked by Cloudflare will automatically retry 3 times; still failed can set `LINUXDO_IMPERSONATE=chrome131` (or `chrome124`) to change fingerprint.
- All requests are read-only GET, no write operations.
MCP Config
Below is the configuration for this MCP Server. You can copy it directly to Cursor or other MCP clients.
mcp.json
Connection Info
You Might Also Like
Filesystem
Node.js MCP Server for filesystem operations with dynamic access control.
Fetch
Retrieve and process content from web pages by converting HTML into markdown format.
Agent-Reach
Give your AI agent eyes to see the entire internet. Read & search Twitter,...
Context 7
Context7 MCP provides up-to-date code documentation for any prompt.
context7-mcp
Context7 MCP Server provides natural language access to documentation for...
mempalace
The highest-scoring AI memory system ever benchmarked. And it's free.