MCP server for the NodeLoc community: forum, energy, payment, docs, miniprogram tools
NodeLoc MCP has 41 tools with consistent naming (verb_noun pattern) and descriptions present for all tools. However, parameter descriptions are sparse or missing for many tools. Input schemas use Zod with type definitions, but descriptions are often minimal (under 20 chars). Output schemas are not documented, responses are JSON-stringified but structure is opaque to the LLM. Error handling is absent; no recovery guidance or categorization. Security: credentials (NODELOC_USERNAME, NODELOC_PASSWORD) are injected server-side (good), but no audit logging visible. Composition is reasonable, tools are single-purpose and chainable via IDs. Overall: solid naming and basic structure, but weak parameter documentation and no output schema visibility.
Bookmark a post.
Check whether a node slug is available before creating a node.
Create a new node (nested community). `color` is an optional hex color.
Start a payment. Returns payment_url to redirect the buyer to.
Create a red envelope inside a topic: totalPoints split into totalCount shares.
Create a new topic. `raw` is Markdown; category_id from get_site_info.
Daily check-in to earn energy points.
Output schemas not documented. All tools return JSON-stringified responses via asJson() helper, but LLMs cannot see the structure of returned objects (fields, types, nested properties). This forces LLMs to guess at response shape and breaks tool chaining.
Many parameters lack descriptions or have minimal descriptions (<20 chars). Examples: list_top_topics has empty schema {}; daily_checkin has empty schema {}; get_site_info has empty schema {}. LLMs cannot infer when to call these tools or what they return.
No error handling or recovery guidance. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. Example: create_topic may fail if category_id is invalid, but no error message guides the LLM to call get_site_info first.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Fetch messages of a chat channel (paginated).
Fetch messages of a chat thread inside a channel.
Get the currently logged-in NodeLoc user (id, username, trust level, unread notification counts). Logs in automatically if needed.
Fetch a docs page as Markdown. `page` may be a full URL, a path like 'energy/checkin', or a page title fragment from the index.
Get site configuration: categories (id/name/slug) etc. Anonymous.
Get a user's public profile (trust level, bio, stats). Anonymous.
Get a user's activity summary (posts, likes, badges). Anonymous.
Tip energy points to a post author.
Join a node (nested community).
Leave a node (nested community).
Like a post.
List topics in a category. `filter` is typically 'latest' or 'top'. Anonymous.
List all knowledge-base pages (title, url, description).
List latest topics on the forum homepage. Anonymous; page starts at 0.
List topics inside a node (nested community).
List all nested communities (nodes) and my memberships.
List notifications for the logged-in user (mentions, replies, likes, PMs).
List private-message topics of a user (defaults to the logged-in user).
List top/trending topics. Anonymous.
Mark all notifications as read, or a single one when notification_id is given.
Energy points income/expense history.
Energy points score breakdown.
Query a transaction status (pending/processing/completed/failed/cancelled/refunded).
Read a topic with its posts (trimmed HTML bodies). Anonymous.
Reply to a topic (Markdown body). Optionally reply to a specific post number.
Run a nodeloc-apps CLI command, e.g. "init my-app", "playtest", "submit". Interactive flows (e.g. `login` opening a browser) may not work through this non-interactive wrapper; run those once in a terminal yourself.
Search the knowledge base by keyword (titles, descriptions, cached bodies).
Search users by name/username, e.g. to resolve @mentions or PM recipients.
Send a chat message to a channel, optionally into a thread.
Send a private message. `recipients`: comma-separated usernames.
Transfer points from the payment-app owner to another user. Both toUserId and toUsername must refer to the same user. Fees depend on the sender's trust level (TL0 10% .. TL4 0.5%); the sender is charged amount + fee, the recipient receives amount. Idempotent per (payment_id, order_id).
Remove a like from a post.
Retract a poll vote.
Vote in a poll attached to a post. `options`: the chosen option values.
Pagination not consistently implemented. list_latest_topics and list_category_topics accept page/page_size, but many list tools (list_nodes, list_notifications, list_docs_pages) do not. No total_count or next_cursor returned to guide pagination.
Parameter descriptions often generic or missing context. Example: 'filter' in list_category_topics says 'latest | top' but does not explain what 'top' means (trending? most liked?). 'sort' in list_node_topics lacks any description of valid values.