Atlas / MCP servers / modelcontextprotocol / MCP TypeScript SDK

MCP TypeScript SDKCAUTION

mcp/modelcontextprotocol/typescript-sdk

The official TypeScript SDK for Model Context Protocol servers and clients

Verdict
CAUTION
Grade
D
Trust score
61 /100
Exposed tools
173 145r · 20w · 8d
Transport
sse · stdio · streamable-http
License
NOASSERTION
Stars
13,561
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[!IMPORTANT] This is the `main` branch: v2 of the SDK (@modelcontextprotocol/server, @modelcontextprotocol/client), the stable release line, implementing the 2026-07-28 MCP spec. Start with the v2 documentation; coming from v1, see the migration guide. v1.x (@modelcontextprotocol/sdk) lives on the `v1.x` branch and continues to receive bug fixes and security updates for at least six months after the v2 release (2026-07-27). Its documentation is at ts.sdk.modelcontextprotocol.io. Found a problem in v2? Open an issue.
[!NOTE] Contributors without write access can have one open pull request at a time. Draft pull requests don't count toward the limit. For a feature or a larger change, please open an issue first; see CONTRIBUTING.md.

[](https://www.npmjs.com/package/@modelcontextprotocol/server) [](https://www.npmjs.com/package/@modelcontextprotocol/client)

Table of Contents

  • Overview
  • Packages
  • Installation
  • Getting Started
  • Documentation
  • [Contributing
Read from source at commit 11bdd94413daOBSERVED · 2026-10-12
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add test-integration --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env ANTHROPIC_AUTH_TOKEN=${ANTHROPIC_AUTH_TOKEN} --env API_KEY=${API_KEY} --env GEMINI_API_KEY=${GEMINI_API_KEY} -- npx -y @modelcontextprotocol/[email protected]
claude-desktop
{
  "mcpServers": {
    "test-integration": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "ANTHROPIC_AUTH_TOKEN": "${ANTHROPIC_AUTH_TOKEN}",
        "API_KEY": "${API_KEY}",
        "GEMINI_API_KEY": "${GEMINI_API_KEY}"
      }
    }
  }
}
03

Exposed tools (173)

145 read · 20 write · 8 destructive. Blast radius: 8 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
aread
add-notewrite
add-resourcewrite
add_notewrite
add_resourcewrite
add_taskwrite
add_taskswrite
alphareadTemplate-level description.
always-protocol-errorread
annotatedreadCarries every optional listing field.
apply-discountwrite
archive-noteread
arrread
arr-looseread
askread
bread
badread
bareread
blobreadA 1×1 PNG.
brainstorm_tasksread
brokenread
cread
calcread
calculate-bmiread
chattyread
clear-catalogdestructive
clear_donedestructive
collect-feedbackread
collect-user-inforead
complete_taskread
complex-toolreadA tool with complex schema
complex-transformread
confirm-deploywrite
confirm_paymentread
connect-calendarread
contactread
countdownread
delete-datasetdestructive
delete-notedestructive
deploywrite
dynamic-proberead
echoread
emit-allread
env-reportread
export-ordersread
export-reportread
farewellread
fetch-dataread
fetch-sourceread
flip_toolsread
forecastread
forecast-corruptedreadForecast whose payload violates its own output schema.
gammareadPer-resource override.
get-alertsread
get-forecastread
get-protocol-inforead
get-weatherread
get_forecastreadReturns tomorrow’s weather forecast for a city.
get_recipereadReturns the preparation steps for a named dish.
get_weatherreadGet weather for a location
greetread
greet-arktyperead
greet-valibotread
greet-zodread
hungryread
iconicread
incrementread
initial-toolread
innerread
insatiableread
json-schemareadraw 2020-12 schema
legacy-styleread
lib.rsreadLibrary exports
link-accountread
link-cardread
link_accountread
linked.txtreadA linked (not embedded) resource
list-filesread
list-forecastsread
list-jobsread
list-rootsread
list-tripsread
list_tasksread
locateread
long-operationread
lookup-orderwrite
lookup_orderwriteLook up an order by id
main.rsreadPrimary application entry point
mcp__todos__add_taskwriteAdd a task
measureread
multi-greetread
mutableread
noopread
objectsread
open-urlread
operateread
order-totalwrite
outread
outerread
phasedread
pingread
pipe-testread
place-orderwrite
plainread
planread
plan_tripread
post-connect-toolwrite
preprocess-testread
prioritizeread
probe-toolread
processread
process-filesread
product-cardread
product-detailsread
protectedread
provisionread
publicread
purge-notesdestructive
quietread
read-countread
read-noteread
read-probe-headerread
read-repositoryread
register_userread
remove_alldestructive
remove_notedestructive
request-countread
request_countread
routeread
run-diagnosticswrite
run-reportwrite
sampleread
scan-archiveread
scopedread
searchread
search-notesread
seedread
shedread
shoutread
signal-only-toolread
signinread
signupread
start-notification-streamwrite
strict-toolreadA tool with strict schema
structured-toolreadA tool with structured output
summarizeread
summarize-orderwrite
tread
tag-releaseread
testread
test-rollbackreadTests that rollback cleans up all side effects
test-toolread
test-with-failing-transformreadReal transforms plus a failing transform for testing error recovery
textreadA plain-text resource.
toggle-proberead
toolread
tool-1read
tool-2read
transform-testread
two-roundsread
two-stepread
union-testread
uppercaseread
userread
v1-to-v2readMigrate from @modelcontextprotocol/sdk (v1) to v2 packages (@modelcontextprotocol/client, /server, etc.)
validate-recordsread
waitread
weatherreadGet weather
whoamiread
wipe-cachedestructive
work_through_tasksread
workingread
write-filewrite
04

Trust audit

CAUTIONgrade D · trust 61/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
none-observed
Shell
declared (2 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/server/test/server/scopeChallengeModern.test.ts:77
const incoming = call('operate', { mode: 'write', secret: 'high-cardinality-value' });
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/server/test/server/scopeChallengeModern.test.ts:97
arguments: { mode: 'write', secret: 'high-cardinality-value' }
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/e2e/scenarios/client-auth.test.ts:2021
const TOKEN = 'minimal-provider-bearer-token';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/e2e/scenarios/client-auth.test.ts:2078
const TOKEN = 'provider-bearer-token';
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
packages/client/test/client/authExtensions.test.ts:429
const badPem = '-----BEGIN PRIVATE KEY-----\nnot-a-valid-key\n-----END PRIVATE KEY-----';
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
clear-catalog, clear_done, delete-dataset, delete-note, purge-notes, remove_all, remove_note, wipe-cache
Why it matters. 8 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.git-blame-ignore-revs
.git-blame-ignore-revs
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierrc.json
.prettierrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
examples/repl/client.ts:680
console.log(`Using resumption token: ${notificationsToolLastEventId || 'none'}`);
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
examples/repl/client.ts:684
console.log(`Updated resumption token: ${event}`);
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
examples/shared/src/auth.ts:158
console.log(`[Auth]   Password: ${DEMO_USER_CREDENTIALS.password}`);
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
examples/shared/src/authServer.ts:330
console.log(`  Token: ${authServerUrl}api/auth/mcp/token`);
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
common/vitest-config/vitest.config.js:16
moduleDirectories: ['node_modules', path.resolve(__dirname, '../../packages'), path.resolve(__dirname, '../../common')]
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/v1/.vitepress/theme/index.ts:7
import '../../../.vitepress/theme/custom.css';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/cli-client/host/config.ts:76
args: ['-y', 'tsx', siblingPath(import.meta.url, '../../todos-server/server.ts')]
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/eslint.config.mjs:30
group: ['**/packages/*', '../../packages/*', '../../../packages/*'],
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/shared/eslint.config.mjs:19
group: ['@mcp-examples/*', '!@mcp-examples/shared', '../../*/**'],
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
examples/oauth/client.ts:42
const CALLBACK_URL = 'http://127.0.0.1:8090/callback';
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
examples/oauth/client.ts:75
if (resolved.href.startsWith(CALLBACK_URL)) {
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
examples/oauth/client.ts:101
redirect_uris: [CALLBACK_URL],
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
examples/oauth/client.ts:107
const provider = new InMemoryOAuthClientProvider(CALLBACK_URL, clientMetadata, authUrl => {
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
examples/oauth/simpleOAuthClient.ts:16
const CALLBACK_URL = `http://127.0.0.1:${CALLBACK_PORT}/callback`;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CONTRIBUTING.md:134
pnpm --filter @mcp-examples/tools client -- --http http://127.0.0.1:3000/
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/serving/express.md:71
curl -s -X POST http://127.0.0.1:3000/mcp \

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 11bdd94413dafull audit observations/trust-audit/mcp-server/modelcontextprotocol__typescript-sdk.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1211bdd94413daCAUTIOND61first audit
06

Questions

What is the @modelcontextprotocol/sdk MCP server?

The official TypeScript SDK for Model Context Protocol servers and clients

What tools does @modelcontextprotocol/sdk expose?

173 in total: 145 read-only, 20 that write, and 8 that can delete or overwrite (clear-catalog, clear_done, delete-dataset, delete-note, purge-notes). Every one is listed on this page with its risk.

Is @modelcontextprotocol/sdk safe to connect to an agent?

With care. The audit graded it D (61/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 8 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does @modelcontextprotocol/sdk need?

It reads ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, API_KEY, GEMINI_API_KEY, MCP_AUTH_PORT, MCP_CONFORMANCE_AUTH_SERVER_URL, MCP_TOKEN, OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OAUTH_DEMO_AUTO_CONSENT, OAUTH_EXPECTED_ISSUER and OPENAI_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does @modelcontextprotocol/sdk run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @modelcontextprotocol/test-integration at 2.0.0.

How current is this page?

The grade is for one exact copy of the source (11bdd94413da), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement