Use CipherTalk MCP as an AI copilot for health/status checks, contact lookup, session resolution, message search, context retrieval, moments timeline exploration, chat export, and chat analytics. Trigger when the user provides partial, fuzzy, mistaken, or incomplete clues, or wants the AI to proactively dig for more local data instead of stopping after one failed query.
Use CipherTalk MCP like a patient investigator, not like a rigid database client.
health_check or get_status whenever tool availability, DB readiness, or setup state is uncertain.list_contacts and list_sessions as fuzzy entry points.items[].text, hits[].message.text, or items[].contentDesc are truly absent.This skill is expected to use all currently exposed CipherTalk MCP tools when relevant:
health_checkget_statusget_moments_timelineresolve_sessionexport_chatlist_sessionsget_messageslist_contactssearch_messagesget_session_contextget_global_statisticsget_contact_rankingsget_activity_distributionhealth_check, then get_status.list_contacts and list_sessions.resolve_session first to get candidates, confidence, and the recommended next action.get_session_context(mode="latest"). Use get_messages only when the user clearly needs explicit pagination, sort order, or keyword/time filtering.search_messages across multiple sessions or globally.list_contacts(q=<clue>), then pass items[].contactId into get_moments_timeline.usernames[].get_moments_timeline(keyword=<clue>) first only when the clue is about the post body or topic, not the poster identity.Use health_check when:
Use get_status when:
When get_status.config.dbReady === false:
When get_status.warnings is non-empty:
When the user gives weak clues such as a nickname fragment, an organization fragment, a possibly mistyped name, or a half-remembered phrase:
When there are multiple plausible candidates:
resolve_session.candidates[*].evidence before choosing.When resolve_session returns a recommendation:
recommended.confidence as a hint, not a blind verdict.recommended.evidence to explain why this candidate is strongest.medium or low, verify with get_session_context or search_messages before committing.When search_messages returns global or multi-session hits:
sessionSummaries first.sessionSummaries to see which session is accumulating the strongest evidence.sampleExcerpts to decide whether to keep narrowing, switch sessions, or confirm the lead.When content tools already returned rows:
get_messages.items[*].textget_session_context.items[*].textsearch_messages.hits[*].message.textget_moments_timeline.items[*].contentDescAfter each meaningful exploration round, produce a very short battle report for yourself or the user:
Keep it short. It should help trace the reasoning, not overshadow the answer. Never let the battle report replace the actual answer once the content is already available.
Export is a last resort, not a default detour.
When the user asks to export chat history:
resolve_session.export_chat(validateOnly=true) to audit whether the request is complete.missingFields is non-empty, prefer followUpQuestions; otherwise fall back to nextQuestion.export_chat without validateOnly after the request is complete.When the user did not ask to export:
export_chat just because a host UI displayed a short text summaryWhen asking follow-up questions for export:
After export finishes, summarize:
When the user asks about朋友圈 / 动态 / 点赞 / 评论 / 某张图 / 某段时间谁发过什么:
list_contacts(q=<clue>).items[].contactId as get_moments_timeline.usernames[].get_moments_timeline(limit=N) as “latest N posts”.keyword first only when the user remembers caption/topic text rather than the poster identity.keyword search returns multiple posters, read nickname/username, lock the poster, then re-run get_moments_timeline(usernames=[...], limit=N) before answering.startTime/endTime when the user implies recency or a specific period.includeRaw=false by default.includeRaw=true only when structured fields are insufficient or when debugging parser gaps.Example:
list_contacts(q="体育组张老师儿")get_moments_timeline(usernames=["zhangjunbai"], limit=3)items[*].contentDescFor moments evidence:
contentDescnickname and usernamelikescommentsshareInforawXml only as a fallback, not the default reading surfaceUse analytics tools deliberately:
get_global_statistics
get_contact_rankings
get_activity_distribution
Recommended order:
Battle report examples:
get_status when readiness is obviously uncertain.sessionId when fuzzy resolution is possible.hint or candidate summaries returned by MCP.evidence on resolved candidates or sessionSummaries on search results.get_moments_timeline.usernames[]; resolve the real contactId first.keyword as the first moments filter when the user actually gave you a poster clue.includeRaw=true for moments.