Help Desk Tools

The help desk operations tools: user_support_snapshot and check_reply.

They are tools of the Smarter Operations MCP server (smarter.apps.mcpserver.protocol.operations_server), for the platform’s staff and their AI agents, e.g. Claude Code answering a help desk question about one person.

  • user_support_snapshot (UserSupportSnapshotTool) reports what the platform knows about one user’s problem: their account, their failed sign-ins of the last 72 hours, their recent failed requests, and hints about what these suggest (users). It reads one person’s data, so it takes verified_by: how the staff member confirmed that the person who asked owns the email address. It is recorded in the audit trail with the call.

  • check_reply (CheckReplyTool) checks a draft reply against the reply rules before the staff member sends it (replies).

Like every operations tool, each call takes a ticket, is recorded in the audit trail, and is never cached (see SmarterOperationsTool).

Note

Experimental. The MCPServer was designed and coded by Claude Code (Anthropic’s Claude Opus 5.5), with Lawrence McDaniel as co-author. It is experimental, and will be documented.

class smarter.apps.mcpserver.helpdesk.tools.CheckReplyTool(user)[source]

Bases: SmarterOperationsTool

The check_reply operations tool: check a draft reply to a user against the reply rules.

Reads: nothing but its arguments. It runs check_reply(): the platform’s Guardrail detectors for personal data and secrets, and the help desk’s rules for the platform’s internals and for account enumeration.

Result: Markdown: either that nothing was found, or each finding, with what it found and why a reply must not contain it. Both end with the reminder that a person sends the reply.

Side effects: none, except the audit trail, which records the draft with the call.

arguments_model

alias of CheckReplyArguments

description: ClassVar[str] = "Check a draft reply to the person who asked for help, before the staff member sends it: it finds other people's email addresses, IP addresses, phone and card numbers, secrets, pod, node and host names, internal urls, log lines, stack traces, exception names, version numbers, and wording that tells whether an address has an account. Call it on every draft, fix what it finds, and call it again. A clean result does not make the draft right: a person reads and sends it."

What the tool does, and when to call it.

The LLM reads it to decide which tool to call.

name: ClassVar[str] = 'check_reply'

The tool’s name, which the LLM calls it by, e.g. search_logs.

run(arguments)[source]

Check the draft, and report the findings.

Parameters:

arguments (CheckReplyArguments) – The validated arguments.

Return type:

str

Returns:

The report, as Markdown.

title: ClassVar[str] = 'Check reply'

The tool’s human-readable name, which an MCP client may show, e.g. Search pod logs.

class smarter.apps.mcpserver.helpdesk.tools.UserSupportSnapshotTool(user)[source]

Bases: SmarterOperationsTool

The user_support_snapshot operations tool: what the platform knows about one user’s problem.

Reads: the user who has the email address, their profiles and social sign-ins, the failed sign-ins with the address in the pod logs, and the user’s failed requests in the journal (see support_snapshot()).

Result: Markdown, which starts with the untrusted data notice, then the hints for staff, the account, the failed sign-ins, and the failed requests. A part that cannot be read, e.g. the logs in local development, is named, and the others are still reported.

Side effects: read-only queries of the database and the log store, and, on a hosted platform, a call to the Account Manager. verified_by is recorded in the audit trail with the call’s other arguments.

static account_section(snapshot)[source]

Format the account’s state.

Parameters:

snapshot (SupportSnapshot) – The snapshot.

Return type:

list[str]

Returns:

The section’s lines: one that says no user has the address, or the account’s state.

arguments_model

alias of UserSupportSnapshotArguments

description: ClassVar[str] = "Report what the platform knows about one person's problem, by their email address: whether a user has it, whether that user is active, how they can sign in (password, Google or GitHub), when they last signed in, their failed sign-ins of the last 72 hours and why they failed (e.g. wrong_password, no_password, inactive_account), and their recent failed requests and prompts with their errors. Call it for 'my login isn't working' and 'my prompt says there was a system error', only for the person who asked, after their address was verified. The result is for staff: never tell the person whether an address has an account."

What the tool does, and when to call it.

The LLM reads it to decide which tool to call.

static hints_section(snapshot)[source]

Format the hints for staff.

Parameters:

snapshot (SupportSnapshot) – The snapshot.

Return type:

list[str]

Returns:

One bullet per hint, or one that says the findings suggest nothing in particular.

name: ClassVar[str] = 'user_support_snapshot'

The tool’s name, which the LLM calls it by, e.g. search_logs.

static requests_section(snapshot)[source]

Format the failed requests.

Parameters:

snapshot (SupportSnapshot) – The snapshot.

Return type:

list[str]

Returns:

One bullet per request, newest first, with its time, what it was, its status, and its error, or one that says there were none.

run(arguments)[source]

Gather the snapshot of the user with the email address, and report it.

Parameters:

arguments (UserSupportSnapshotArguments) – The validated arguments.

Return type:

str

Returns:

The report, as Markdown.

static sign_ins_section(snapshot)[source]

Format the failed sign-ins.

Parameters:

snapshot (SupportSnapshot) – The snapshot.

Return type:

list[str]

Returns:

One bullet per reason, with its count, and the time of the latest, or one that says there were none.

title: ClassVar[str] = 'User support snapshot'

The tool’s human-readable name, which an MCP client may show, e.g. Search pod logs.