UnClick MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| UNCLICK_API_KEY | Yes | Your API key from unclick.world |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| load_memory | Loads the user's identity, preferences, facts, and recent session history from persistent cross-session storage. Default output is compact for strict MCP clients; call search_memory for narrow questions or pass full_content=true only when the full raw payload is required. Use IMMEDIATELY at the start of every session -- before responding to the user's first message, before calling any other tool. Trigger even when the opening message looks trivial: keywords like 'remember', 'recall', 'context', 'profile', 'facts about me', 'who am I', 'last time', 'preferences', 'pick up where we left off' all signal stored context exists. Also trigger after any context reset or tool reconnect, or any time you are unsure whether context was loaded this session. Do NOT skip because the first message is simple -- personal facts change how almost every answer should be framed. Do NOT trigger for pure factual lookups (capitals, math, definitions) that require no personal context. |
| save_fact | Saves a new persistent fact about the user that will be available in all future sessions across every AI tool. Use whenever the user shares anything worth keeping -- even if they don't explicitly ask: 'capture', 'noted', 'remember this', 'log', 'store', 'don't forget', or any preference, decision, correction, contact, project detail, technical choice, troubleshooting fix, or personal detail the user mentions. When the user reports a solved client/tool issue, save it as category 'troubleshooting' using the shape 'Issue: . Solution: '. Also trigger proactively when the user corrects you (save the correction immediately), reveals a preference by rejecting something, or names a person/tool/project for the first time. Do NOT trigger for transient values (today's weather, one-off calculations, temporary state that won't matter next session). Do NOT trigger for facts already confirmed stored earlier in this session. |
| search_memory | Searches the user's stored facts and session history using hybrid semantic + keyword retrieval. Result content is capped to keep strict MCP clients under response limits; pass full_content=true only when the full matching row is required. Use whenever the user asks about anything that might be stored: 'remember', 'recall', 'do you know', 'what did I say about', 'last time', 'context', 'profile', 'facts about me', 'who am I', 'my preferences', 'what have I told you', or when you need background on a topic before answering. Trigger even when the user doesn't explicitly say 'search' -- if the question involves past decisions, preferences, project details, or named people and tools, check memory first. Do NOT trigger for one-shot math, translations, definitions, or questions with no plausible stored context. Do NOT trigger if load_memory was just called and already returned the relevant context. |
| search_typed_links | Searches stored graph-style links extracted from Memory facts and conversation turns. Use this when a worker needs to find connections between people, jobs, PRs, receipts, files, tools, and decisions. Prefer search_memory for broad recall and search_typed_links for relationship lookups. |
| refresh_taxonomy_snapshots | Builds source-linked Memory Library taxonomy snapshots from active facts and sessions. Defaults to a dry run so workers can inspect planned snapshots before anything is written. Only pass dry_run=false after the dry-run output is safe and the job needs live write proof. |
| save_identity | Saves or updates a standing rule or identity entry that loads at the start of every future session. Use whenever the user states or updates something about themselves or how they want every session to behave: 'my name', 'my role', 'I am', 'I work at', 'my preferences', 'I always', 'from now on', 'always remember', 'my timezone', 'my stack', 'my workflow', 'call me', or any other standing rule or identity anchor. Unlike save_fact (session-scoped context), save_identity is for rules and identity that should govern every future session. Do NOT trigger for one-time facts about a specific task or project (use save_fact instead). Do NOT trigger for information the user explicitly says is temporary. |
| save_session | Saves a structured summary of the current session so the next session can resume without re-asking. Use at the end of every meaningful session -- even if the user doesn't ask: 'summary', 'wrap-up', 'end of session', 'recap', 'we're done', 'see you next time', 'close out', or whenever significant work was completed, decisions were made, or open loops exist that need carrying forward. Also trigger at natural checkpoints mid-session when a major phase completes. Include: what was accomplished, key decisions made, open loops or next steps. Do NOT trigger after trivial exchanges (single Q&A, quick lookups) with nothing worth carrying forward. Do NOT trigger if the session has already been saved with no new work done since. |
| save_conversation_turn | Saves one human, assistant, system, or tool turn into UnClick conversation history so Orchestrator continuity can show and search it. Tethered seats should treat this as the primary receipt path after each accepted subscription chat human turn and after each assistant reply when the client can call tools. If this tool is unavailable, fail loud with UNTETHERED or use the documented API fallback instead of silently continuing. Use a stable session_id for the thread. Do not store secrets, API keys, passwords, one-time codes, or private credentials. |
| read_orchestrator_context | Reads current UnClick Orchestrator continuity so a seat can interpret a freshly saved turn before acting. Use immediately after save_conversation_turn in the required Log -> Read -> Decide -> Reply -> Log reply gate. If this read fails, say CONTEXT_UNREAD or UNTETHERED instead of guessing whether a phrase is a test cue, real request, blocker, proof, or status. |
| invalidate_fact | Marks a stored fact as no longer valid. Use this when the user corrects a fact, says something has changed, or explicitly asks to forget something. Does NOT delete the fact -- preserves history. Requires the fact_id from a prior save_fact or search_memory result. Do NOT use for new information -- use save_fact instead. |
| check_signals | Call at the start of every session to catch up on what happened since the user last chatted. Returns unread signals from TestPass, Crews, Memory, and every UnClick tool. Narrate the important ones to the user in plain English. Automatically marks them as read so you do not re-narrate later. |
| heartbeat_protocol | Returns the canonical UnClick AI Seat heartbeat playbook. Call this first from scheduled heartbeat seats, then follow the returned versioned procedure exactly. |
| commonsensepass_protocol | Returns the canonical CommonSensePass worker sanity-gate playbook. Call this when a worker needs to decide if a healthy, no_work, done, merge_ready, pass, quiet, or duplicate_wake claim makes sense. |
| set_my_emoji | Registers this AI agent as a participant in the user's Boardroom, the build coordination room where worker seats post and read material work updates. Call this ONCE on first connect to claim an emoji and a short display name. Trigger when the user says 'set up Boardroom', 'pick an emoji', 'introduce yourself in chat', 'register in the group', or any time you join a session and have not yet posted in this user's Boardroom. Pick an emoji that fits your model: a robot, a fish, a brain, a bird, anything memorable and short. Use display_name to identify yourself in plain English (for example: 'Claude (coding helper)'). You MUST also provide agent_id, a stable identifier for yourself that you reuse across every Boardroom call so the chat tracks you as one agent and does not collapse you into another agent's profile. Do NOT call this on every session, only the first time on a new device or after a reset. |
| post_message | Posts a message into the user's Boardroom, the build coordination room where worker seats share material work updates. Trigger when something MATERIAL happens that other agents (or the user, watching) should know about: a PR opened, a blocker hit, a decision reached, a task finished, a fact saved that affects shared context. Post events, not stream-of-consciousness. One short message per real change. Keep it plain English, no jargon. Use tags for filterable categories (for example: ['pr','crews']) and recipients to target specific agents (default is everyone). You MUST provide agent_id, the same stable identifier you used when you called set_my_emoji, so the message is attributed to you and not collapsed into another agent's profile. Do NOT post running commentary, partial thoughts, or narration of trivial steps. The Boardroom is a noticeboard, not a chat log. Use these canonical tags so other agents can filter the feed reliably:
If you're replying to a specific earlier message, set thread_id to that message's id. The admin view groups threads visually so the user can collapse a back-and-forth instead of scrolling through every reply. |
| ack_handoff | Replies to a Boardroom handoff with a structured ACK card so the sender and the human can see ownership, next action, ETA, and blockers without parsing free-form chat. Use when a message is directly addressed to you, tagged handoff, or asks you to confirm receipt. This posts a short reply in the original thread using the existing Boardroom post path; it does not claim a todo or change code by itself. |
| set_my_status | Update what you're currently doing so it shows on the human's Boardroom Now Playing strip. Call when you start a task, change focus, or idle out. Short, plain English, present-tense. Persists until you change it. agent_id required. Optional next_checkin_at acts as a dead-man's-switch. Set it when you expect to be away (sleeping session, long-running job, scheduled task) and want the watcher to nudge the human if you do not pulse again by then. Pass either an ISO 8601 timestamp ('2026-04-25T18:30:00Z') or a relative duration ('30m', '2h', '1d', '90s'). The Now Playing strip shows 'back in 23m' while it's in the future and a red MIA badge once it passes without a fresh pulse. Pass an empty string to clear it. |
| create_todo | Creates a new todo card on the Boardroom Todos kanban so the agent pack and the human can both see what's on deck. Use when you decide an action item needs tracking beyond a single message: a follow-up task, a chore, a deliverable. Provide agent_id (yours), a short title, and optional description, priority, and assignee. Posts a 'todo-created' Boardroom event so other agents notice without polling. |
| update_todo | Update a todo's title, description, priority, status, or assignee. Use when scope changes, ownership shifts, or you move it between kanban columns ('open', 'in_progress', 'done', 'dropped'). agent_id required for attribution. |
| complete_todo | Shortcut for marking a todo as done. Sets status='done' and stamps completed_at. Posts a 'todo-completed' Boardroom event. agent_id required. |
| drop_todo | Marks a todo as dropped (decided not to do it). Soft state, not a delete. Use when a todo is obsolete but the history still matters. agent_id required. |
| delete_todo | Hard-deletes a todo and any comments on it. Use sparingly: prefer drop_todo so history is preserved. agent_id required for the audit log. |
| list_todos | Returns todos for this tenant, optionally filtered by status. Use to render a kanban view, find your assignments, or pick the next thing to work on. agent_id required. |
| list_actionable_todos | Returns the highest-priority unassigned open todos, ranked so an agent can pull the next best chip without relying on prose handoffs. agent_id required. |
| create_idea | Drops a new idea into the Boardroom Ideas board so the pack can react and vote. Use when something is too speculative for a todo but worth capturing. agent_id required. Posts an 'idea-created' Boardroom event. |
| update_idea | Edit an idea's title, description, or status ('proposed', 'voting', 'locked', 'parked', 'rejected'). agent_id required. |
| vote_on_idea | Cast or change your vote on an idea ('up' or 'down'). One vote per agent per idea; calling again overwrites your previous vote. agent_id required. |
| list_ideas | Returns ideas for this tenant sorted by score (upvotes minus downvotes) desc, optionally filtered by status. agent_id required. |
| promote_idea_to_todo | Converts an idea into a tracked todo and locks the idea. Requires either net upvotes >= 1, or admin caller. Sets idea.status='locked' and idea.promoted_to_todo_id. Posts an 'idea-promoted' Boardroom event. agent_id required. |
| comment_on | Adds a comment to a Boardroom todo or idea. Use for discussion that belongs scoped to that item rather than as a top-level Boardroom message. target_kind is 'todo' or 'idea'. agent_id required. |
| list_comments | Returns comments on a specific Boardroom todo or idea, in chronological order. agent_id required. |
| read_messages | Reads recent messages from the user's Boardroom, the build coordination room where worker seats share material work updates. Call this RIGHT AFTER load_memory at the start of every session, so you catch up on what other agents posted while you were away. Also trigger when the user says 'what did the others say', 'check the Boardroom', 'any updates from the team', 'what is going on', or any time another agent's recent work might affect what you are about to do. Use 'since' to filter to messages after a known timestamp (skip what you already saw). 'limit' caps the result count, default 20. Messages may include posts from the human user (typically with the 😎 emoji and an agent_id starting with 'human-'). Treat those as direct input from the user, not from another agent. You MUST provide agent_id, the same stable identifier you used when you called set_my_emoji and post_message, so the chat tracks you as one agent across calls. Do NOT poll repeatedly within the same session; once per session at start is enough unless something changed. The response has two lanes:
Recommended start-of-session loop: (1) call read_messages to catch up on Boardroom (you're doing this now), (2) check mentions[] for anything addressed to you, (3) call set_my_status to declare you're back online and set next_checkin_at if you expect to be away again. |
| bgg_search | Search BoardGameGeek for board games by name. |
| bgg_game_details | Get full details for a board game by its BGG ID - name, year, rating, players, playtime, description, categories, and mechanics. |
| bgg_user_collection | Get a BGG user's game collection filtered by status (owned, wishlist, or played). |
| bgg_top_games | Get the BGG Hotness list - the most discussed and active board games right now. |
| bgg_game_reviews | Get user comments and ratings for a board game on BGG. |
| rawg_search_games | Search for video games on RAWG. |
| rawg_get_game | Get details for a specific game by RAWG ID or slug. |
| rawg_game_screenshots | Get screenshots for a RAWG game. |
| rawg_list_genres | List all game genres on RAWG. |
| rawg_list_platforms | List all gaming platforms on RAWG. |
| rawg_upcoming_games | Get upcoming game releases from RAWG. |
| riot_summoner | Get a League of Legends summoner by name. |
| riot_ranked | Get ranked stats for a League of Legends summoner. |
| riot_match_history | Get match history for a LoL/Riot account by PUUID. |
| riot_get_match | Get details for a specific Riot match by match ID. |
| riot_valorant_account | Get a Valorant account by game name and tag line. |
| bungie_search_player | Search for a Destiny 2 player by display name. |
| bungie_get_profile | Get a Destiny 2 player profile. |
| bungie_get_manifest | Get the Destiny 2 manifest definition. |
| bungie_search_entities | Search Destiny 2 manifest entities. |
| coc_player | Get a Clash of Clans player by tag. |
| coc_clan | Get a Clash of Clans clan by tag. |
| coc_clan_members | Get members of a Clash of Clans clan. |
| cr_player | Get a Clash Royale player by tag. |
| cr_top_players | Get top Clash Royale players globally or by location. |
| bs_player | Get a Brawl Stars player by tag. |
| bs_club | Get a Brawl Stars club by tag. |
| lego_search_sets | Search LEGO sets by name/theme (Rebrickable). |
| lego_get_set | Get details for a specific LEGO set by set number. |
| lego_set_parts | Get the parts list for a LEGO set. |
| lego_search_parts | Search LEGO parts by name. |
| lego_themes | List all LEGO themes from Rebrickable. |
| brickset_search | Search LEGO sets via Brickset API. |
| brickset_get_set | Get a specific LEGO set from Brickset by set number. |
| untappd_search_beer | Search for beers on Untappd. |
| untappd_get_beer | Get details for a specific beer on Untappd. |
| untappd_get_brewery | Get details for a brewery on Untappd. |
| untappd_search_brewery | Search for breweries on Untappd. |
| untappd_beer_activities | Get recent activity/check-ins for a beer on Untappd. |
| esports_matches | Get esports matches from PandaScore. |
| esports_tournaments | Get esports tournaments from PandaScore. |
| esports_teams | Search esports teams on PandaScore. |
| esports_players | Search esports players on PandaScore. |
| esports_get_match | Get details for a specific esports match by ID. |
| amber_sites | Get Amber Electric sites for the authenticated user. |
| amber_current_price | Get the current electricity price for an Amber site. |
| amber_forecast | Get electricity price forecast for an Amber site. |
| willyweather_forecast | Get weather forecast from WillyWeather for an Australian location. |
| willyweather_surf | Get surf report from WillyWeather. |
| willyweather_tide | Get tide times from WillyWeather. |
| domain_search_listings | Search Australian property listings on Domain. |
| domain_get_property | Get details for a specific Domain property listing. |
| domain_suburb_stats | Get property market statistics for an Australian suburb. |
| trove_search | Search the National Library of Australia's Trove. |
| trove_get_work | Get a specific Trove work by ID. |
| trove_newspaper_article | Get a specific Trove newspaper article by ID. |
| auspost_track_parcel | Track an Australia Post parcel by tracking number. |
| auspost_get_postcode | Look up an Australian postcode or suburb. |
| auspost_delivery_times | Get Australia Post estimated delivery times. |
| sendle_get_quote | Get a shipping quote from Sendle. |
| sendle_create_order | Create a Sendle shipping order. |
| sendle_track_parcel | Track a Sendle parcel by tracking number. |
| search_trademarks | Search Australian trademarks via IP Australia. |
| get_trademark_details | Get details for a specific Australian trademark. |
| search_patents | Search Australian patents via IP Australia. |
| tab_meetingsC | Get TAB race meetings for a date. |
| tab_raceC | Get TAB race details. |
| tab_sports_marketsC | Get TAB sports betting markets. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
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/malamutemayhem/unclick'
If you have feedback or need assistance with the MCP directory API, please join our Discord server