← All scanned servers

Trust Card · Static snapshot

modelcontextprotocol__typescript-sdk D

40/100 · 78 findings (4 critical) · scope excessive · Ranked #47 of 53 scanned.

Scanned 2026-09-09 · engine v0.1.0 (8 regex rules, OWASP-mapped) · upstream modelcontextprotocol/typescript-sdk @ 5119ee7 (2026-09-03)

Score breakdown

security 0
permissions 20
provenance 90
reliability 85
stability 90

Score constrained by 4 critical and 59 high-severity findings.

Fix first (63 critical/high)

SeverityRuleFindingRemediation
CRITICALAT-SEC-003 (ASI02)Unbounded Dynamic Shell Execution
packages/codemod/src/bin/batchTest.ts:220
Evidence: const stdout = execSync(cmd, {
Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes.
CRITICALAT-SEC-003 (ASI02)Unbounded Dynamic Shell Execution
scripts/examples/run-examples.ts:80
Evidence: const child = spawn(cmd, args, { cwd: opts.cwd, env: { ...process.env, ...opts.env } });
Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
test/e2e/scenarios/client-auth.test.ts:1024
Evidence: const CLIENT_SECRET = 'machine-client-secret';
Move credentials to secure environment variables or a key vault. Never commit API keys.
CRITICALAT-SEC-002 (LLM02)Hardcoded Credential or API Secret
test/e2e/scenarios/client-auth.test.ts:1581
Evidence: const REGISTERED_SECRET = 'auth-method-client-secret';
Move credentials to secure environment variables or a key vault. Never commit API keys.
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/bearer-auth/client.ts:12
Evidence: const unauth = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/bearer-auth-web/client.ts:13
Evidence: const unauth = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/guides/advanced/gateway.examples.ts:59
Evidence: return realFetch(input, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/guides/advanced/gateway.examples.ts:162
Evidence: return fetch(input, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/guides/clients/connect.examples.ts:48
Evidence: return realFetch(input, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/guides/get-started/firstServer.examples.ts:40
Evidence: const res = await fetch(url, { headers: { 'User-Agent': 'mcp-weather-tutorial/1.0' } });
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/guides/get-started/realHost.examples.ts:46
Evidence: const res = await fetch(url, { headers: { 'User-Agent': 'mcp-weather-tutorial/1.0' } });
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/guides/get-started/src/index.ts:40
Evidence: const res = await fetch(url, { headers: { 'User-Agent': 'mcp-weather-tutorial/1.0' } });
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/guides/protocolVersions.examples.ts:56
Evidence: return realFetch(input, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/json-response/client.ts:21
Evidence: const probe = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/oauth-client-credentials/client.ts:21
Evidence: const unauth = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
examples/server-quickstart/src/index.ts:19
Evidence: const response = await fetch(url, { headers });
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
packages/client/test/client/sse.dpop.test.ts:132
Evidence: const esFetch = vi.fn<FetchLike>((url, init) => fetch(url, init));
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
packages/client/test/client/sse.test.ts:259
Evidence: return fetch(url.toString(), { ...init, headers });
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
packages/client/test/client/sse.test.ts:280
Evidence: return fetch(url.toString(), { ...init, headers });
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
packages/client/test/client/sse.test.ts:1344
Evidence: return originalFetch(url.toString(), init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
packages/core-internal/src/shared/transport.ts:44
Evidence: return baseFetch(url, mergedInit);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
packages/core-internal/test/shared/transport.test.ts:138
Evidence: await wrappedFetch(url);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
packages/middleware/node/test/streamableHttp.test.ts:2521
Evidence: const deleteResponse1 = await fetch(url1, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
packages/middleware/node/test/streamableHttp.test.ts:2534
Evidence: const deleteResponse2 = await fetch(url2, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
packages/server/src/server/mcp.examples.ts:138
Evidence: const res = await fetch(url);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
scripts/fetch-schema-twins.ts:44
Evidence: const response = await fetch(url);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
scripts/fetch-spec-examples.ts:46
Evidence: const response = await fetch(url);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
scripts/fetch-spec-examples.ts:55
Evidence: const response = await fetch(url);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
scripts/fetch-spec-examples.ts:69
Evidence: const response = await fetch(url);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
scripts/fetch-spec-types.ts:54
Evidence: const response = await fetch(url);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
scripts/fetch-spec-types.ts:70
Evidence: const response = await fetch(url);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/conformance/src/everythingClient.ts:380
Evidence: return fetch(input, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/client-auth.test.ts:326
Evidence: return baseFetch(url, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/client-auth.test.ts:369
Evidence: const response = await baseFetch(url, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/client-auth.test.ts:1038
Evidence: return baseFetch(url, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/client-auth.test.ts:1450
Evidence: return baseFetch(url, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/client-auth.test.ts:2341
Evidence: return noTokensBaseFetch(url, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/client-auth.test.ts:2379
Evidence: return noRefreshBaseFetch(url, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:27
Evidence: const initRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:51
Evidence: const notifRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:200
Evidence: const postRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:227
Evidence: const getRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:288
Evidence: const postRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:308
Evidence: const resumeRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:349
Evidence: const initRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:368
Evidence: await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:380
Evidence: const getRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:414
Evidence: const resumeRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:479
Evidence: const unmappedRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:487
Evidence: const failedRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:517
Evidence: const postRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:591
Evidence: const initRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:610
Evidence: await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:620
Evidence: const getRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:656
Evidence: const postRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:676
Evidence: const resumeRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:725
Evidence: const livePostRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:798
Evidence: const standaloneRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:805
Evidence: const postRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/e2e/scenarios/hosting-resume.test.ts:831
Evidence: const resumeRes = await fetch(url, {
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/integration/test/client/discoverRoundtrip.test.ts:31
Evidence: return fetch(input, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/integration/test/client/versionNegotiation.test.ts:48
Evidence: const response = await fetch(input, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
HIGHAT-SEC-006 (LLM06)Unfiltered SSRF / Arbitrary Network Egress
test/integration/test/server/createMcpHandler.test.ts:105
Evidence: return fetch(input, init);
Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254).
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/guides/advanced/wire-schemas.examples.ts:77
Evidence: console.log(metadata.token_endpoint);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/oauth/simpleOAuthClient.ts:54
Evidence: console.log(`🌐 Opening browser for authorization: ${url}`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/oauth/simpleOAuthClient.ts:96
Evidence: console.log(`✅ Authorization code received: ${code?.slice(0, 10)}...`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/oauth/simpleOAuthClient.ts:112
Evidence: console.log(`❌ Authorization error: ${error}`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/oauth/simpleOAuthClient.ts:124
Evidence: console.log(`❌ No authorization code or error in callback`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/oauth/simpleOAuthClient.ts:153
Evidence: console.log('🔐 OAuth required - waiting for authorization...');
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/oauth/simpleOAuthClient.ts:158
Evidence: console.log('🔐 Authorization code received:', callbackParams.get('code'));
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/repl/client.ts:680
Evidence: console.log(`Using resumption token: ${notificationsToolLastEventId || 'none'}`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/repl/client.ts:684
Evidence: console.log(`Updated resumption token: ${event}`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/shared/src/auth.ts:158
Evidence: console.log(`[Auth] Password: ${DEMO_USER_CREDENTIALS.password}`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/shared/src/authServer.ts:328
Evidence: console.log(`OAuth Authorization Server listening on port ${authPort}`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/shared/src/authServer.ts:329
Evidence: console.log(` Authorization: ${authServerUrl}api/auth/mcp/authorize`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/shared/src/authServer.ts:330
Evidence: console.log(` Token: ${authServerUrl}api/auth/mcp/token`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
examples/shared/src/authServer.ts:331
Evidence: console.log(` Metadata: ${authServerUrl}.well-known/oauth-authorization-server`);
Implement PII/secret redaction masks before writing to log streams.
MEDIUMAT-SEC-007 (LLM02)Raw Secret Leakage in Debug Logging
test/conformance/src/authTestServer.ts:244
Evidence: console.log(`Fetching authorization server metadata from ${AUTH_SERVER_URL}...`);
Implement PII/secret redaction masks before writing to log streams.

Permissions

Scope: excessive · Shell: enabled · Network egress: yes · File deletion: enabled · Human approval: none

Provenance

License: MIT · Lockfile: yes · Security policy: yes · Signals: present (documentary, not a safety verdict)

Independently scanned by the AgentTrust registry (not self-reported by the project). Static analysis only — no code executed, findings need human triage, counts may include test/example code. Static snapshot; re-scan before relying on it: npx @eulogik/agenttrust scan https://github.com/modelcontextprotocol/typescript-sdk. Scores move with every upstream commit; pages refresh weekly. How scoring works.