MCP, MCP server
Help Scout Mcp Server
An MCP server that gives AI assistants direct access to your Help Scout inboxes, conversations, customers, organizations, threads, and Docs knowledge base.
Compatibility: Not stated.
Grade C
One Medium finding. Read the report before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
INSTALL_REMOTE_SCRIPT
Why this grade
- INSTALL_REMOTE_SCRIPT Medium
Fetches a script from the network and runs it (a pipe to a shell, or an install hook with a URL).
package.json, line 44
prepare
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
scripts/build-mcpb.js, line 56
fs.rmSync(buildDir, { recursive: true });
.semgrep.yml, line 136
subprocess.call($CMD, shell=True)
Install and update
Serious
install fetches a script from the network.
INSTALL_REMOTE_SCRIPT
package.json, line 44
prepare
.github/workflows/ci.yml, line 40
curl -fsSL "https://github.com/AikidoSec/safe-chain/releases/download/1.5.7/install-safe-chain.sh" | sh -s -- --ci
.github/workflows/ci.yml, line 226
curl -fsSL "https://github.com/AikidoSec/safe-chain/releases/download/1.5.7/install-safe-chain.sh" | sh -s -- --ci
Network
Concern
can reach a host that is not written as a fixed address. can reach api.helpscout.net. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
evals/run-tool-surface-discriminator.mjs, line 371
const response = await fetch(ENDPOINT, {
scripts/check-conversations.ts, line 36
const tokenRes = await axios.post(
scripts/check-conversations.ts, line 56
const convRes = await axios.get('https://api.helpscout.net/v2/conversations', {
Show more
scripts/debug-api.ts, line 36
const tokenRes = await axios.post(
scripts/debug-api.ts, line 61
const test1 = await axios.get('https://api.helpscout.net/v2/conversations', {
scripts/debug-api.ts, line 74
const test2 = await axios.get('https://api.helpscout.net/v2/conversations', {
scripts/debug-api.ts, line 87
const test3 = await axios.get('https://api.helpscout.net/v2/conversations', {
scripts/generate-synthetic-data.ts, line 197
const response = await axios.post(
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
scripts/check-conversations.ts, line 15
const envPath = path.join(__dirname, '..', '.env');
scripts/check-conversations.ts, line 51
console.error('❌ HELPSCOUT_DEFAULT_INBOX_ID not set in .env');
scripts/debug-api.ts, line 15
const envPath = path.join(__dirname, '..', '.env');
Show more
scripts/debug-api.ts, line 51
console.error('❌ HELPSCOUT_DEFAULT_INBOX_ID not set in .env');
scripts/generate-synthetic-data.ts, line 181
const envPath = path.join(__dirname, '..', '.env');
scripts/generate-synthetic-data.ts, line 410
console.error('❌ Missing credentials in .env');
scripts/import-conversations.ts, line 104
const envPath = path.join(__dirname, '..', '.env');
scripts/import-conversations.ts, line 106
throw new Error('.env file not found');
scripts/live-api-test.ts, line 59
const clientSecret = process.env.HELPSCOUT_APP_SECRET || process.env.HELPSCOUT_CLIENT_SECRET;
src/utils/config.ts, line 72
apiKey: process.env.HELPSCOUT_API_KEY || '', // Deprecated, kept for backwards compatibility
src/utils/config.ts, line 73
clientId: process.env.HELPSCOUT_APP_ID || process.env.HELPSCOUT_CLIENT_ID || process.env.HELPSCOUT_API_KEY || '',
src/utils/config.ts, line 74
clientSecret: process.env.HELPSCOUT_APP_SECRET || process.env.HELPSCOUT_CLIENT_SECRET || '',
src/utils/config.ts, line 77
docsApiKey: process.env.HELPSCOUT_DOCS_API_KEY,
src/utils/config.ts, line 125
if (process.env.HELPSCOUT_API_KEY?.startsWith('Bearer ') && !hasOAuth2) {
src/utils/helpscout-client.ts, line 370
const currentApiKey = process.env.HELPSCOUT_API_KEY || '';
src/utils/helpscout-client.ts, line 375
const clientSecret = process.env.HELPSCOUT_APP_SECRET ||
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
a file was over the read cap and was not fully read.
OBFUSCATION_FILE_OVER_READ_CAP
package-lock.json, line 1
{
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 56c3434ef079. can delete files. install fetches a script from the network. can reach a host that is not written as a fixed address. can reach api.helpscout.net. The description does not name that host. reads a credential or environment file. a file was over the read cap and was not fully read.
Date and source
Date checked:
github.com
Commit graded: 56c3434ef0798243022bf84cd872dcc9a5c47dbe
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.