Atlas / MCP servers / msfeldstein / Test Servers

Test ServersCAUTION

mcp/msfeldstein/test-servers
Verdict
CAUTION
Grade
C
Trust score
77 /100
Exposed tools
71 65r · 4w · 2d
Transport
sse · stdio · streamable-http
License
—
Stars
41
01

Overview

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

A collection of test servers implementing the Model Context Protocol (MCP).

🚀 Quick Install Gallery

Visit our [GitHub Pages Gallery](https://msfeldstein.github.io/mcp-test-servers/) for one-click install buttons that work directly with Cursor!

Manual Installation

npx -y @msfeldstein/mcp-test-servers 

Development

Use the cli.js directly for development

{
"mcpServers": {
"test-server": {
"command": "/Users/feldstein/Source/mcp-test-servers/src/cli.js",
"args": [
"ping"
],
"env": {}
}
}
}

Available Servers

  • all-types: Demonstrates various tool parameter types supported by MCP
  • bad-param: Server with an intentionally malformed parameter name
  • big-response: Server that returns large responses
  • broken-tool: Server with intentionally broken tool
  • broken-schema: Server with invalid JSON schema using oneOf/allOf/anyOf at top level
  • broken-schema-fastmcp: FastMCP server with genuinely broken schemas using oneOf/allOf/anyOf at top level
  • crash-on-startup: Server that crashes on startup
  • combined: Server with tools and resources
  • duplicate-names: Server with duplicate names for resources
  • elicitation: Server demonstrating MCP elicitation feature - requests user information (name, age, contact details, preferences) through structured forms
  • enum-param: Tool has enum string parameter
  • integer-anyof-bug: Reproduces Cursor's integer validation bug with anyOf schema - parameters with {"anyOf": [{"type": "integer"}, {"type": "null"}]} fail validation with 'got number' error
  • env-check: Checks for SHOULD_RUN environment variable being passed properly
  • env-echo: Echoes the environment variables
  • gpt5-breaker: Server with SQL query execution tool using complex parameter validation
  • graphing: MCP Apps server with show-graphing-ui; UI renders an inline chart with Chart.js
  • headers: FastMCP server that safely returns HTTP he
Read from source at commit b57ad1b2f495OBSERVED · 2026-10-08
Advertisement
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 mcp-test-servers --env ACCESS_TOKEN_EXPIRY_SECONDS=${ACCESS_TOKEN_EXPIRY_SECONDS} --env AUTH_SERVER_PORT=${AUTH_SERVER_PORT} --env AUTH_SERVER_URL=${AUTH_SERVER_URL} --env DESCRIPTION_TOKENS=${DESCRIPTION_TOKENS} -- npx -y @msfeldstein/[email protected]
claude-desktop
{
  "mcpServers": {
    "mcp-test-servers": {
      "command": "npx",
      "args": [
        "-y",
        "@msfeldstein/[email protected]"
      ],
      "env": {
        "ACCESS_TOKEN_EXPIRY_SECONDS": "${ACCESS_TOKEN_EXPIRY_SECONDS}",
        "AUTH_SERVER_PORT": "${AUTH_SERVER_PORT}",
        "AUTH_SERVER_URL": "${AUTH_SERVER_URL}",
        "DESCRIPTION_TOKENS": "${DESCRIPTION_TOKENS}"
      }
    }
  }
}
03

Exposed tools (71)

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

ToolRiskDescription
addwrite
all_types_toolread
analyze_textread
another-missing-typereadAnother tool with missing type field
ask-favorite-colorreadAsk the user to select their favorite color from a list (raw enum values)
ask-namereadAsk the user for their name
ask-programming-languagereadAsk the user to select their favorite programming language with user-friendly display names
bad-paramread
bug-statusreadCheck if the OAuth bug has been reproduced
characterNamereadThe name of the main character in the story
crashread
debug-oauthreadReturns OAuth debugging information
delayedPingread
delete-projectdestructiveDelete a project
divideread
dynamic_featureread
echoread
echo_env_varreadEchoes the MY_ENV_VAR environment variable
echo_mcp_rootsreadEchoes back the MCP roots provided by the client
echo_structuredread
echo_with_paramsread
env_echoread
execute-sqlwrite
factorialread
fizzbuzzread
format_dataread
generate_big_responseread
generate_imagereadA tool that returns an image of Sonic the Hedgehog
get-headersreadReturns the headers from the last request
get-inforead
get-resource-listreadReturns a list of all available resources as resource links
get-session-inforeadGet session information including time until expiry
get-timeread
get_mixed_resourcesreadReturns both text and image content
locationreadThe location where the story takes place
log-to-stderrread
long-running-pingread
long-running-taskreadExecutes a long-running task with real-time progress tracking
long-running-task-with-messagereadDemonstrates a long running operation with progress updates and messages
long-running-task-with-no-totalreadExecutes a long-running task with real-time progress tracking
long_running_progressread
makeRequestread
many-resources-toolreadMany Resources Tool
missing-type-toolreadA tool with missing type field
multi-step-elicitationreadAsk for a couple of elicitations about pizza
multiplyread
number-paramread
optionalToolread
parse_bugsnag_error_urlread
personalized-storyreadGenerate a personalized story based on a character name and location
pingwriteSimple ping to trigger a request and log headers
powerread
root-echoread
safe_header_inforeadSafely get header information without raising errors.
search_documentationread
simple_pingreadA simple tool that returns
sqrtread
start-notification-streamwriteStarts sending periodic notifications
static-greetingreadA static greeting prompt that always returns the same message
statusread
subtractread
terminate-sessiondestructive
test-anyof-integerread
test-both-paramsread
test-edge-casesreadTest tool for edge case scenarios
test-simple-integerread
test_all_elicitationsreadTests all different elicitation input types
toggleToolread
toggle_dynamic_toolreadToggles the availability of the dynamic_feature tool
token-inforeadReturns information about the current access token expiration
whoamireadReturns information about the authenticated user
04

Trust audit

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

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

What the source does

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

Findings (14)

MEDIUMInventory / provenance · inv.binary · CWE-1104
.DS_Store
.DS_Store
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/oauth-bug-trigger-server.js:231
console.log(`✅ Token issued: ${accessToken.substring(0, 20)}...`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/oauth-bug-trigger-server.js:295
console.log(`   Time since token: ${timeSinceToken}ms`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/oauth-bug-trigger-server.js:317
console.log(`   Invalid token request to RESOURCE server: RS/token`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/oauth-bug-trigger-server.js:319
console.log(`   Time since token: ${timeSinceToken}ms`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/oauth-bug-trigger-server.js:320
console.log(`   Should be sent to: ${AUTH_SERVER_URL}/oauth/token`);
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
src/resource-lister-server.js:62
content: "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKC
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
src/sample-image.js:3
"/9j/4AAQSkZJRgABAgEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
src/dual-content-server.js:180
👨👩👧👦 **Personal Information:**
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete-project, terminate-session
Why it matters. 2 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
.DS_Store
.DS_Store
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.no_license · CWE-1104
Why it matters. no LICENSE file and no repo licence
Fix. add a licence
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/ext-apps, @modelcontextprotocol/sdk, cors, express, zod
Why it matters. 5 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
src/oauth-debug-scenarios.md:161
- `POST /token` → ❌ Wrong server
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass, no_license.

Audited 2026-10-08 · audit v0.4.1 · source sha b57ad1b2f495full audit observations/trust-audit/mcp-server/msfeldstein__test-servers.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-08b57ad1b2f495CAUTIONC77first audit
06

Questions

What tools does Test Servers expose?

71 in total: 65 read-only, 4 that write, and 2 that can delete or overwrite (delete-project, terminate-session). Every one is listed on this page with its risk.

Is Test Servers safe to connect to an agent?

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

What credentials does Test Servers need?

It reads ACCESS_TOKEN_EXPIRY_SECONDS, AUTH_SERVER_PORT, AUTH_SERVER_URL, DESCRIPTION_TOKENS, MULTIPLE_AUTH_SERVERS and REFRESH_TOKEN_EXPIRY_SECONDS 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 Test Servers run?

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

How current is this page?

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

Advertisement