@stephendolan/helpscout-cli
v2.18.3
Published
A command-line interface for Help Scout
Maintainers
Readme
Help Scout CLI
A CLI for Help Scout's Mailbox API 2.0. JSON output by default for LLM and automation workflows.
Installation
bun install -g @stephendolan/helpscout-cli
# Or run without installing
bunx @stephendolan/helpscout-cli conversations listLinux: Requires libsecret for keychain storage (apt install libsecret-1-dev), or use environment variables.
Authentication
Create an OAuth app at Help Scout > Your Profile > My Apps.
helpscout auth login --app-id YOUR_APP_ID --app-secret YOUR_APP_SECRET
helpscout auth status
helpscout auth logout
helpscout auth refresh # Refresh access tokenOr use environment variables: HELPSCOUT_APP_ID, HELPSCOUT_APP_SECRET, HELPSCOUT_MAILBOX_ID
Commands
Conversations
helpscout conversations list
helpscout conversations list --status active --mailbox 123 --tag urgent
helpscout conversations list -q 'status:open customer:[email protected]'
helpscout conversations list --summary
helpscout conversations view 456
helpscout conversations threads 456
helpscout conversations threads 456 --type customer # Filter by type
helpscout conversations threads 456 --html # HTML output
helpscout conversations threads 456 --include-notes
helpscout conversations draft-replies list 456
helpscout conversations draft-replies create 456 --text "Unsent draft"
helpscout conversations draft-replies update 456 987654 --text "Revised unsent draft"
helpscout conversations draft-replies upsert 456 --text "Desired unsent draft"
helpscout conversations draft-replies upsert 456 --thread-id 987654 --text "Chosen draft"
helpscout conversations draft-reply 456 --text "Desired unsent draft" # shorthand for upsert
helpscout conversations attachments download 456 789
helpscout conversations attachments download 456 789 --output ./invoice.pdf
helpscout conversations attachments download 456 789 --output ./downloads/
helpscout conversations attachments download 456 789 --force
helpscout conversations status 456 closed
helpscout conversations note 456 --text "Internal note"
helpscout conversations add-tag 456 urgent
helpscout conversations remove-tag 456 urgent
helpscout conversations delete 456Customers
helpscout customers list
helpscout customers list --first-name John
helpscout customers view 789
helpscout customers create --first-name John --last-name Doe --email [email protected]
helpscout customers update 789 --organization "Acme Corp"
helpscout customers delete 789Users
helpscout users list
helpscout users list --email [email protected]
helpscout users list --mailbox 123 --page 2
helpscout users view 456User responses include the mention handle when Help Scout returns one. Use @mention in Help Scout thread bodies to mention teammates.
Tags, Workflows, Mailboxes
helpscout tags list
helpscout tags view 123
helpscout workflows list
helpscout workflows list --type manual
helpscout workflows run 123 --conversations 456,789
helpscout workflows activate 123
helpscout workflows deactivate 123
helpscout mailboxes list
helpscout mailboxes view 123
helpscout mailboxes set-default 123
helpscout mailboxes get-default
helpscout mailboxes clear-defaultMCP Server
Run as an MCP server for AI agent integration:
helpscout mcpThe MCP server exposes:
- Typed tools for Help Scout search, full conversation detail, full conversation thread history, attachment downloads, mailbox/customer/user lookup, and safe draft-note/status mutations
get_conversationaccepts internal conversation IDs or visible ticket numbers like#12345get_conversation_threadsreturns all Help Scout thread types by default, including notes, workflow events, status events, and other system events returned by Help Scoutlist_draft_repliesreturns active unsent reply drafts with thread IDs, bodies/previews, recipients, authors, and timestampscreate_draft_replyintentionally creates an additional unsent draft and returns its verified Help ScoutResource-IDthread IDupdate_draft_replyreplaces/textonly after verifying the selected thread is still an unsent reply draft, then verifies the live resultupsert_draft_replyupdates the sole active draft or creates one when none exists; it refuses multiple drafts unlessthreadIdexplicitly selects onedownload_attachmentsaves a conversation attachment to disk, using the Help Scout filename by default and requiringforcebefore overwriting existing filesupdate_conversation_statussafely changes ticket status, withopennormalized to Help Scout'sactivestatuscreate_noteadds private notes and can optionally set the ticket status, such as closing no-action tickets- User lookup tools expose Help Scout mention handles for composing
@mentionreferences - Resource templates for
helpscout://conversation/{conversationId},helpscout://customer/{customerId}, andhelpscout://user/{userId} - Prompt templates for
summarize_ticketanddraft_reply
Read-only tools include MCP annotations so hosts can distinguish them from mutating tools, and core read/query tools return structured outputs alongside readable JSON text.
Draft reply safety
All draft-reply commands and MCP tools preserve the never-send boundary: they only list drafts, create with draft: true, or replace a draft thread's /text. Every create/update re-reads Help Scout and returns success only when the intended thread is still a draft with the requested text.
draft-replies upsert and the legacy draft-reply shorthand are the recommended write paths. With zero active drafts they create one; with one they update it in place; with multiple they refuse and print the candidate thread IDs. Pass --thread-id (or MCP threadId) only after selecting the intended draft from draft-replies list / list_draft_replies.
Help Scout's official Inbox API does not expose an endpoint to delete or discard a draft reply thread. Discard unwanted drafts in the Help Scout web UI.
Options
| Flag | Description |
|------|-------------|
| -c, --compact | Minified JSON output |
| -p, --plain | Strip HTML from body fields |
| -f, --fields <fields> | Include only specified fields |
| --include-metadata | Include _links and _embedded |
Examples
helpscout conversations list | jq '.conversations[].subject'
helpscout conversations list --fields id,subjectErrors: {"error": {"name": "...", "detail": "...", "statusCode": 400}}
References
License
MIT
