Skip to main content
Glama
0111-0222

uc-mcp

by 0111-0222

uc-mcp

Search UnknownCheats from Claude Code, with a date on every result.

A read-only MCP server that gives Claude (or any MCP client) search and thread reading on the UnknownCheats forum through your own logged-in session. It marks every result with its age, because on this forum an old answer is usually a wrong one.

CI Python MCP Claude Code Read-only Platform Ruff License: MIT

Install · Cookies · Usage · Account safety · Troubleshooting


UC search: "entity list" · threads · sorted newest · 23 total · page 1/2 · 3 threads
now=2026-09-30 12:00Z · all dates UTC · (age) after each date

 1. 2026-09-28 (2d)  [Coding] Entity list walker for the current build
    example-game/2000101-entity-list-walker.html  ·  by carol_sdk  ·  41 replies, 6.2k views · 3pg
 2. 2025-11-02 (10mo)  [Question] Entity list pointer changed after update
    example-game/2000102-entity-list-pointer-changed.html  ·  by erin  ·  12 replies, 1.9k views
 3. 2019-03-14 (7.5y)  [Release] Entity list dumper  <- ANCIENT
    example-game/2000103-entity-list-dumper.html  ·  by frank  ·  88 replies, 31k views · 5pg

Why

Public docs on game hacking, anti-cheat and reverse engineering are thin, stale or wrong. The current answers are on UnknownCheats, and a model can't read it without an account. This server lets it read the forum with yours, and puts dates first:

  • Every row carries a date and an age. Dates are converted to UTC from the forum's own timezone.

  • Stale content is labelled <- OLD / <- ANCIENT, with a warning line the model can't skim past. Offsets and signatures die on a game patch; a bypass dies when the anti-cheat ships a detection.

  • Long threads point to their last page. Page 1 of a ten-year thread is usually worthless.

  • Code blocks survive intact (on this forum the code is the answer), and quote chains collapse to one line.

  • Output is compact text, not JSON, so results cost fewer tokens.

Related MCP server: log-query-mcp

Install

You need Python 3.10+, an UnknownCheats account, and Claude Code (or another MCP client).

1. Clone and install

git clone https://github.com/0111-0222/uc-mcp.git
cd uc-mcp

Windows (PowerShell):

.\install.ps1

macOS / Linux:

./install.sh

The script creates .venv, installs the dependencies, creates cookies.json from the example, and prints the exact command to register the server.

uv sync
cp cookies.example.json cookies.json
claude mcp add --scope user unknowncheats -- uv run --directory "$PWD" server.py

2. Export your cookies

  1. Log into unknowncheats.me in your normal browser.

  2. Install a cookie exporter such as Cookie-Editor, open it on the UC tab and choose Export → Header String.

  3. Paste that string into the cookie field of cookies.json.

  4. Copy your browser's User-Agent (search "what is my user agent") into user_agent.

{
  "cookie": "bbsessionhash=…; bbuserid=…; cf_clearance=…; bblastvisit=…",
  "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 …"
}

Cookie

Needed

Why

cf_clearance

yes

The site is behind Cloudflare. It is tied to the IP and User-Agent it was issued to, which is why step 4 matters.

bbsessionhash

yes

Search and most boards require a login.

bbpassword

no, delete it

vBulletin's persistent auto-login token. It gives long-lived access to your account, and you don't want that sitting in a file.

cookies.json is gitignored. To keep it somewhere else, set UC_MCP_COOKIES to its path.

3. Register with Claude Code

Use the command the install script printed (absolute paths). It looks like:

claude mcp add --scope user unknowncheats -- "/path/to/uc-mcp/.venv/bin/python" "/path/to/uc-mcp/server.py"

On Windows the interpreter is .venv\Scripts\python.exe. --scope user makes the server available in every project. Remove it with claude mcp remove unknowncheats.

Add this to the client's MCP config (claude_desktop_config.json, .cursor/mcp.json, …):

{
  "mcpServers": {
    "unknowncheats": {
      "command": "C:\\path\\to\\uc-mcp\\.venv\\Scripts\\python.exe",
      "args": ["C:\\path\\to\\uc-mcp\\server.py"]
    }
  }
}

4. Check it

Start Claude Code and ask:

call uc_session with reload=True

You should see session : logged in, Cloudflare passed.

Usage

Just ask. The tool descriptions already tell the model to reach for UC on game-hacking, anti-cheat and RE questions:

What's the current way people are getting the entity list in Rust? Only trust stuff from the last 6 months.

Find the canonical thread on manual mapping and summarize the newest page.

List the Valorant subforum and tell me what's active this week.

Tools

Tool

What it does

uc_search(query, forum, since, sort, mode, title_only, page, limit)

Keyword search. mode="threads" gives one row per thread (best for finding the definitive thread); mode="posts" gives individual dated posts with snippets.

uc_thread(path, page, chars)

Read a thread's posts. page="last" jumps to the newest.

uc_forum(slug, page, limit)

No slug: every subforum and its slug. With a slug: that board's threads.

uc_fetch(path, chars)

Fallback: any forum page as cleaned text.

uc_session(reload, clear_cache)

Session health, request budget, cache. reload=True re-reads cookies.json.

Searching well

vBulletin ORs loose terms and stops counting at 500, so extra words widen the search instead of narrowing it. A long natural-language query just returns the forum's newest posts. Measured on one query:

Query

Result

"manual map" injection detection

500 (cap). Top hits were about YOLO mouse input and Arduino colorbots

"manual mapping", mode="threads", title_only=True

105 threads, every title on topic

...plus forum="anti-cheat-bypass"

23

...plus forum="rust"

2

So: one "quoted phrase", mode="threads" with title_only=True first, forum= to scope it, and post mode only if that finds nothing. A header reading 500+ (result cap) means the ranking is meaningless, and the tool says so.

Making it the first stop

To make "check UC first" a hard rule in a project, add this to its CLAUDE.md:

## Game hacking / anti-cheat / RE questions
Before answering from memory or searching the web, call `uc_search` first.
Public documentation on these topics is thin, stale, or wrong. Check the dates
on what comes back: anything older than a year is reference-only — the method
may hold, the offsets and signatures will not.

Account safety

This server uses your logged-in session, so it's built to behave like a careful human reader and to never put the login at risk.

What it will never do

  • Write anything. No tool can post, reply, rate, report, subscribe or PM. Account and posting endpoints (login.php, private.php, newreply.php, profile.php, usercp.php, attachment.php, anything carrying a securitytoken or logouthash, …) are refused before a request is made.

  • Send your cookies anywhere but unknowncheats.me. Forum posts are attacker-controlled text, and a post can try to talk the model into fetching a link. Every URL is parsed, not string-matched, so look-alikes such as https://evil.com?.unknowncheats.me/ are rejected. The cookies are also pinned to the .unknowncheats.me domain inside curl itself, so even a redirect can't carry them off-site. Both guarantees are covered by tests.

  • Follow instructions from posts. Every result is marked as untrusted third-party data.

How it keeps traffic human-shaped

Control

Value

Why

Between searches

17s + up to 2s jitter

The forum enforces 15s between searches and rejects anything faster.

Between page reads

4s + jitter

Reads are cheap; paying the search price would make threads unusable.

Hourly cap

150 requests

Keeps sustained use from looking like a scraper.

Daily cap

1000 requests

Same.

Jitter

0–2s random

Exactly periodic requests are a bot signature.

TLS

Chrome impersonation

Handshake matches a real browser, with your real User-Agent.

The limits are process-wide, and the last send time is kept on disk, so a new Claude Code session can't fire straight into the forum's throttle. Pages are cached in .cache/uc.sqlite3 (threads and searches 15 min, forum listings 10, the board index 6 hours), and paging a search re-uses its server-side searchid, so going back to a result costs one cheap read, not a new search.

What's on you

  • Never share cookies.json, and never paste it, a Cookie: header or a HAR file into an issue, a chat or Discord. Anyone holding it is you on the forum. Everyone who uses this runs it with their own account.

  • Leave bbpassword out of the export (see cookies). uc_session tells you if it's there.

  • Know the risk. Automated access to a logged-in account always carries some ban risk, and the forum's rules are the forum's call. The limits above are mitigation, not a guarantee. Use it the way you'd read the forum yourself.

Troubleshooting

Symptom

Fix

Cloudflare blocked the request

cf_clearance expired (it can be short-lived) or was issued to another IP/User-Agent. Refresh the forum in your browser, re-export into cookies.json, then ask Claude to call uc_session(reload=True). No restart needed.

session is browsing as a guest / Redirected to login

bbsessionhash is missing or expired. Re-export as above.

local budget spent

The hourly or daily cap was hit. Wait; the message says which.

the forum's own search throttle rejected this

Another search (maybe from your browser) went out less than 15s ago. Retry shortly.

no subforum slug "..."

Use the URL segment, not the display name. uc_forum() with no argument lists them.

500+ (result cap) in a search header

The query saturated. See Searching well.

Server not showing up in Claude Code

Register with absolute paths, and check with claude mcp list.

How it works

flowchart LR
    C[Claude / MCP client] -- stdio --> S[server.py<br/>5 tools]
    S --> P[uc_parse<br/>HTML → records]
    S --> R[uc_render<br/>records → dated text]
    S --> H[uc_http]
    H --> G{URL guard<br/>host + endpoint}
    G --> L[rate limiter<br/>+ budget]
    L --> K[(sqlite cache)]
    L --> U[curl_cffi<br/>Chrome TLS] --> F[unknowncheats.me]

Three things are load-bearing, each verified against the live site:

  • curl_cffi with Chrome impersonation, not httpx or requests. The Cloudflare WAF fingerprints the TLS handshake. A plain Python client gets a hard 403 no matter how correct the cookies are.

  • Search is a POST with a securitytoken. A GET against search.php?do=process doesn't run a search on this vBulletin. The token is scraped, cached, and refreshed automatically if rejected.

  • Selectors are confirmed against real authenticated HTML. UC runs a vBulletin 3-era template set: td[id=f<id>] for boards, td[id=td_threadtitle_<tid>] for thread rows, table[id=post<pid>] + div[id=post_message_<pid>] for posts.

File

Role

server.py

The five MCP tools and their argument handling

uc_http.py

URL guard, cookie jar, rate limiter, budget, sqlite cache

uc_parse.py

vBulletin HTML → threads, posts, search hits

uc_render.py

Records → compact, dated, staleness-labelled text

uc_dates.py

Forum date formats → UTC, ages, rot tiers

Configuration

Env var

Default

Purpose

UC_MCP_COOKIES

./cookies.json

Where your exported cookies live

UC_MCP_CACHE

./.cache/uc.sqlite3

Page cache and request ledger

Development

pip install -r requirements.txt pytest ruff
pytest        # offline: synthetic fixtures + a loopback server, no forum traffic
ruff check .

The test suite never touches the forum. Parsers run against hand-written fixtures that mirror UC's markup, and the cookie-pinning test points both www.unknowncheats.me and a look-alike host at a local server to check which one gets the login.

License

MIT. Not affiliated with UnknownCheats. You are responsible for how you use your account.

Available Tools

5 tools
uc_fetchA
Read-onlyIdempotent

Fetch any UnknownCheats page as cleaned text. Fallback only.

Use when a structured tool returns nothing parsable, or for a page the other tools do not model (member profiles, wiki pages). Requests to any host other than unknowncheats.me are refused, as are account and posting endpoints, so a link quoted inside a forum post cannot redirect this anywhere.

Args: path: path under /forum/ or a full unknowncheats.me URL. chars: output budget.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world, non-destructive, but the description adds genuinely non-derivable behavior: a host allowlist limited to unknowncheats.me, a refusal of account and posting endpoints, and an anti-redirect guarantee. These are precisely the failure modes an agent needs to anticipate before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then the fallback trigger, then constraints, then args – a natural decision order with no filler sentences. Every clause earns its place, including the redirect note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return shape need not be described, and the description covers the remaining unknowns: when to use it, what it refuses, and what both inputs mean. Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does define both parameters: path as a /forum/ path or full unknowncheats.me URL, and chars as an output budget. It stops short of stating the error behavior for a malformed path or the unit/token basis of the chars budget, so it is strong but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (fetch) and resource (any UnknownCheats page, returned as cleaned text), and immediately frames itself as a fallback rather than a primary path. That framing is enough to separate it from the structured siblings uc_thread, uc_forum, and uc_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when a structured tool returns nothing parsable') and an explicit scope extension ('a page the other tools do not model – member profiles, wiki pages'), which tells the agent both when to prefer siblings and when this tool is the only option.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uc_forumA
Read-onlyIdempotent

Browse UnknownCheats by subforum.

With no slug, lists every subforum and its slug — call that once to learn which board a game or topic lives in. With a slug, lists that board's threads newest-activity first, each with its last-post date, so you can see at a glance whether a board is alive and what is current on it.

Args: slug: subforum slug, e.g. "rust", "valorant", "anti-cheat-bypass". page: page of the thread list. limit: threads to render.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
slugNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description adds real behavioral context beyond that: results are ordered newest-activity first and include each thread's last-post date, letting an agent judge board liveness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The dual-mode behavior is front-loaded in the first paragraph and the args are kept in a compact list. A few phrases are slightly verbose but nothing displaces the important information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the safety profile, the description needs to supply mode selection, ordering semantics, and param meaning — all of which it does. It stops short of stating pagination boundaries or total thread counts, but that gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it does define all three params and their roles. Slug comes with concrete examples ("rust", "valorant", "anti-cheat-bypass"); page and limit are explained only tersely and their default values are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (browse UnknownCheats by subforum) and clearly splits the two operating modes: no slug = list all subforums, with slug = list that board's threads. It never explicitly names or contrasts a sibling tool (e.g. uc_search or uc_thread), so an agent must infer the division of labor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives actionable usage context — call the no-slug form once to discover which board a topic lives in, then pass a slug to inspect threads. That covers when to use each mode, but there is no explicit when-not guidance or naming of alternative sibling tools for overlapping needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uc_sessionA
Read-onlyIdempotent

Session health, request budget and cache state.

Call with reload=True after re-exporting cookies.json — the cf_clearance cookie is short-lived, so a run of Cloudflare errors is normally fixed by refreshing that file and reloading, with no restart needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
reloadNo
clear_cacheNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, and open-world behavior. The description adds valuable operational context beyond that: the cf_clearance cookie is short-lived, refreshing cookies.json and reloading fixes Cloudflare errors, and no restart is needed. It does not explain what clear_cache changes or what request budget means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs, front-loaded with the tool's purpose and followed by focused operational guidance. Every sentence earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and rich annotations cover safety and idempotency. However, the description omits any explanation of clear_cache and only names session-health/request-budget concepts without elaborating, leaving a meaningful gap for a two-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry both parameters. It explains reload=True well by giving the condition and purpose, but it never mentions clear_cache, leaving one of two parameters undocumented beyond its name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line names the resource (session) and the state it reports (health, request budget, cache), so an agent can identify it as a session diagnostics tool. It is not verb-led, but it is specific enough and clearly distinct from the uc_search/thread/forum/fetch siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second paragraph gives a concrete when-to-use scenario for reload=True: after re-exporting cookies.json, when Cloudflare errors occur, and notes no restart is needed. It does not discuss when to call the tool itself, when to use clear_cache, or alternatives, but the operational context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uc_threadA
Read-onlyIdempotent

Read the posts of one UnknownCheats thread, each stamped with its date.

Args: path: the thread path or full URL exactly as printed by uc_search or uc_forum, e.g. "rust/164256-rust-reversal-structs-offsets.html". page: page number, or "last" / -1 for the newest posts. On a thread that has run for years the last page is usually the only current part — page 1 can be a decade old. chars: per-post character budget before truncation. Raise it when a single post holds the code or structure you actually need.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
pathYes
charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety bar is low. The description adds real behavioral value beyond them: posts are truncated at a per-post character budget, and pagination semantics on long-lived threads. It does not discuss rate limits or return shape, but the output schema covers the latter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose sentence, then a clean per-argument list where every entry earns its place. The prose is slightly verbose but no sentence is wasted or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, and all three parameters are fully documented along with page-vs-last tradeoffs. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the full burden, and it does: path is defined with a concrete example format and its source tools, page accepts an integer or "last"/-1 with a meaningful default, and chars is explained as a truncation budget with guidance on when to raise it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource — 'Read the posts of one UnknownCheats thread' — and adds the date-stamping scope. It does not explicitly contrast itself with siblings like uc_search or uc_fetch beyond noting where the path format comes from, so it is clear but not fully sibling-differentiating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives actionable context: use page "last" or -1 for current content because page 1 on an old thread is likely stale, and raise chars when a post holds needed code. It stops short of naming alternative tools or when-not-to-use conditions, so it is strong context without explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.1.0
    • First observeduc_fetch
    • First observeduc_forum
    • First observeduc_search
    • First observeduc_session
    • First observeduc_thread

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: session management, search, thread reading, forum browsing, and a fallback fetch. The descriptions explicitly clarify boundaries, such as uc_fetch being a fallback for unmodeled pages. No overlap causes confusion.

Naming Consistency5/5

All tool names follow a consistent 'uc_' prefix plus a single noun or verb (uc_session, uc_search, uc_thread, uc_forum, uc_fetch). The pattern is predictable and easy to scan.

Tool Count5/5

Five tools are well-scoped for a read-only forum access server. Each tool earns its place: session handling, search, thread reading, forum browsing, and a generic fallback fetch. No bloat or missing essentials.

Completeness5/5

The surface covers the full read-only lifecycle: authentication/cookie refresh (uc_session), discovery via search (uc_search) and browsing (uc_forum), deep retrieval (uc_thread), and a general fallback (uc_fetch) for unmodeled pages. No obvious gaps for the stated purpose of accessing UnknownCheats content.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    MCP server that exposes Discord and Twitch/Chatty chat log query tools to Claude Code, enabling searching messages, channel stats, user messages, and events from chat logs.
    7
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables searching Discord messages using Discord's native search API. Designed for use with Claude Code to find project decisions and communications in Discord.
    -