A local-first MCP server for Discord search, conversation recall, community research, and growth analysis.
Strong tool naming (verb_noun pattern), comprehensive parameter schemas with type constraints and descriptions, and detailed descriptions for most tools. All 9 tools have explicit registrations with schemas visible in src/server.ts. Good use of Zod for validation (snowflake regex, min/max bounds, enums). However, output schemas are not documented, LLMs cannot predict response structure. Error handling returns actionable messages but lacks categorization (retryable vs fatal). Some parameter descriptions could be more concise (discord_find_messages is verbose). No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels.
Analyze membership growth trends over time intervals (day, week, month). Optionally refresh the current membership snapshot before analysis.
Find messages from a vague memory using Discord's relevance index. Translate the memory into 1-5 short, distinctive search_phrases; include synonyms or likely wording when the exact words are uncertain. Results include direct Discord links. Requires Message Content Intent and Read Message History.
Fetch surrounding messages after finding a likely match, so the remembered conversation can be reconstructed.
List channels in a Discord server that the bot can access.
List the Discord servers (guilds) that the configured bot can access.
Output schemas not documented. LLMs cannot predict response structure or plan downstream tool calls. discord_list_guilds, discord_list_channels, discord_read_messages, and others return JSON but lack field documentation.
Tool annotations missing. discord_sync_member_snapshot, discord_sync_community_history, and discord_analyze_growth are marked WRITE but lack destructiveHint/idempotentHint annotations in schema. Agents cannot infer safety properties.
Error handling lacks categorization. errorResult() returns raw error text but does not classify as retryable, user-fixable, or fatal. Agents cannot determine recovery strategy.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Read recent messages from a guild text channel, oldest first.
Build an evidence packet for any question about an indexed Discord community. Returns coverage, activity, response-time, participation, concentration, reciprocity, channel/timing metrics, and relevant message evidence. Interpret behavior and causality as hypotheses unless directly supported.
Index accessible Discord messages in a private local SQLite database for aggregate and qualitative community research. Run this before research, and again to refresh the data. Sync is bounded per channel and reports incomplete coverage.
Fetch the complete current server roster and save a private local snapshot with member totals, join dates, and roles. Requires Server Members Intent; Presence Intent is not needed. Run periodically to measure exact membership changes and detect departures between snapshots.
discord_find_messages description is verbose (>300 chars) and mixes multiple concerns (search, intent requirements, result format). Simplify to core action; move intent requirements to parameter descriptions.
No pagination guidance in list tools. discord_list_guilds and discord_list_channels do not document result limits or pagination. If a user has 100+ guilds, response may be truncated without agent awareness.