MCP Server Test
https://mcp.dlptest.com/ is a public
Model Context Protocol
server that exposes the same synthetic PII, PCI, and PHI generators that power this site —
but over the MCP wire protocol instead of a web page. Point any MCP-capable agent at it
and the tool calls will flow over real HTTP that your DLP can inspect.
Data is entirely synthetic. Nothing sent to this endpoint is stored, logged, or forwarded.
The endpoint is also reachable at https://dlptest.com/api/mcp/ as a fallback.
Setup
Do It For Me
Download the setup file and drop it anywhere in your repository. When you ask your AI coding agent to set up the DLPTest MCP server, it will use this file to configure the connection.
Download mcp-setup-readme.mdDo It Yourself
Pick your tool and follow the steps to connect manually.
Claude Code CLI
Step 1 — Run the CLI command (adds to your user config):
# Add via the Claude Code CLI (one-time setup)
claude mcp add dlptest --transport http https://mcp.dlptest.com/ Step 2 — Or add JSON directly to .claude/settings.json (project) or ~/.claude.json (global):
// .claude/settings.json (project) or ~/.claude.json (global)
{
"mcpServers": {
"dlptest": {
"type": "http",
"url": "https://mcp.dlptest.com/"
}
}
} Step 3 — Verify: ask your agent "List the tools on the dlptest MCP server."
Claude Desktop / Anthropic Agent
Step 1 — Open claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/ - Windows:
%APPDATA%\Claude\
Step 2 — Add the server entry:
// claude_desktop_config.json
// macOS: ~/Library/Application Support/Claude/
// Windows: %APPDATA%\Claude\
{
"mcpServers": {
"dlptest": {
"type": "http",
"url": "https://mcp.dlptest.com/"
}
}
} Step 3 — Restart Claude Desktop and verify the dlptest tools appear.
Cursor
Step 1 — Create or edit .cursor/mcp.json in your project root (or ~/.cursor/mcp.json for global access):
// .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)
{
"mcpServers": {
"dlptest": {
"url": "https://mcp.dlptest.com/"
}
}
} Step 2 — Reload Cursor. The dlptest tools should appear in the MCP panel.
Windsurf
Step 1 — Edit ~/.codeium/windsurf/mcp_config.json. Windsurf uses SSE transport, so the URL ends in /sse:
// ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"dlptest": {
"serverUrl": "https://mcp.dlptest.com/sse"
}
}
} Step 2 — Reload Windsurf and confirm the server is listed under MCP Servers.
VS Code GitHub Copilot
Step 1 — Create .vscode/mcp.json in your project root:
// .vscode/mcp.json (project root)
{
"servers": {
"dlptest": {
"type": "http",
"url": "https://mcp.dlptest.com/"
}
}
} Step 2 — Open the Copilot chat panel. The dlptest tools should appear in the tool list.
Other MCP Clients
Use the standard mcpServers config format your client expects:
{
"mcpServers": {
"dlptest": {
"url": "https://mcp.dlptest.com/"
}
}
} How to Use
Try it with curl
These three requests cover the full MCP handshake — from protocol init through a tool call.
# 1. initialize — protocol handshake
curl -sS -X POST "https://mcp.dlptest.com/" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": { "name": "curl", "version": "0.0.1" }
}
}' # 2. tools/list — discover available tools
curl -sS -X POST "https://mcp.dlptest.com/" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' # 3. tools/call — invoke a tool (response-side DLP test)
curl -sS -X POST "https://mcp.dlptest.com/" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "generate_pii_ssn_ccn",
"arguments": { "count": 5, "format": "csv" }
}
}' Test prompt-side DLP
Most DLP products only inspect the response body. But in a real agent pipeline, sensitive content can also flow outward in the tool-call arguments — for example, a user pastes a document containing real SSNs and that text gets forwarded as a tool argument.
echo_sensitive_data — outbound argument inspection
Accepts any text as a payload argument and echoes it back unchanged.
PII travels in the outbound request — a DLP product that only inspects responses will miss it.
# echo_sensitive_data — PII travels in the *request* arguments
curl -sS -X POST "https://mcp.dlptest.com/" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "echo_sensitive_data",
"arguments": {
"label": "test-run-1",
"payload": "Patient: Jane Smith SSN: 123-45-6789 CCN: 4111111111111111"
}
}
}' generate_prompt_context — RAG / system-prompt simulation
Returns prose paragraphs with PII embedded inline, mimicking how sensitive data arrives via
RAG retrieval or an injected system prompt. Scenarios: medical-record,
financial-statement, hr-file, customer-list.
# generate_prompt_context — simulate RAG / system-prompt PII
curl -sS -X POST "https://mcp.dlptest.com/" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "generate_prompt_context",
"arguments": { "scenario": "medical-record", "count": 3, "format": "text" }
}
}' probe_request — verify interception point
Returns the User-Agent, client IP, and timestamp seen by the server. Use it to confirm your proxy or endpoint agent is on the expected network leg.
# probe_request — verify DLP is on the right network leg
curl -sS -X POST "https://mcp.dlptest.com/" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"probe_request","arguments":{}}}' Test with a local instance
To test internal traffic inspection separately from internet egress,
clone this repo and run npm run dev. The MCP endpoint is available
at http://localhost:4321/api/mcp/.
// Local instance (npm run dev → http://localhost:4321)
{
"mcpServers": {
"dlptest-local": {
"type": "http",
"url": "http://localhost:4321/api/mcp/"
}
}
} What to look for in your DLP console
After running a few tool calls, check whether your product:
- Caught synthetic SSNs, CCNs, or IBANs in the response body.
- Caught PII in the request body (tool-call arguments) — use
echo_sensitive_datato test this specifically. - Saw PII arriving as prose context, not tabular data — use
generate_prompt_context. - Logged a connection to
mcp.dlptest.comas an outbound MCP server contact. - Surfaced the
tools/listhandshake — a keyword-rich signal for pattern scanners. - Flagged the initial connection to an unapproved external MCP endpoint (CASB / network policy).
Tools Available
Data-generation tools accept count (1–500, default 50) and
format ("json" or "csv", default "json").
Synthetic data generation
| Tool | Data returned |
|---|---|
generate_pii_ssn_ccn | Name + SSN + credit card |
generate_pii_ssn_dob | Name + SSN + date of birth |
generate_pci_credit_card | Name + ZIP + CCN + expiry |
generate_pii_email | Name + DOB + email |
generate_hipaa_phi | Name + DOB + MRN + ICD-10 + CPT + phone |
generate_banking | Name + routing + account + phone |
generate_uk_identity | Name + UK NI + NHS + DOB |
generate_canada_sin | Name + Canadian SIN + province + DOB |
generate_passport | Name + passport + country + DOB + expiry |
generate_eu_vat | Name + EU VAT + IBAN + country |
generate_npi_provider | Name + NPI + DEA + specialty |
generate_driver_license | Name + DL + state + DOB |
generate_custom |
Arbitrary fields. Takes a fields array of
{ name, type, blankPct?, delimiter?, cardBrands? } —
same types as the /generate/ page.
|
Prompt-side & diagnostic tools
Tool Description echo_sensitive_data Echoes a payload string back unchanged. PII travels in the outbound request arguments. generate_prompt_context Returns prose paragraphs with inline PII simulating RAG retrieval or system-prompt injection. Scenarios: medical-record, financial-statement, hr-file, customer-list. probe_request Returns User-Agent, client IP, and timestamp to confirm the interception point.
Background: Why this exists & sanctioned vs unsanctioned servers
DLP, CASB, and endpoint vendors increasingly claim they can inspect "agentic" or "AI tool"
traffic. The most common transport for that traffic today is MCP — JSON-RPC 2.0 over HTTP.
There are three distinct vectors to test:
- Network / SSL inspection. Does your proxy decrypt and scan a
tools/call response containing hundreds of fake SSNs? - Endpoint agent. Does the agent see both the outbound tool-call arguments and the data returned to the LLM?
- CASB / browser extension. Does anything flag a connection to an unfamiliar external MCP server during the initial handshake?
This endpoint is intentionally public and unauthenticated — it represents an unsanctioned
external server. A sanctioned internal MCP server, by contrast, requires an
Authorization: Bearer <token> header and is reachable only from the corporate
network or via VPN. The presence of an auth token flowing to an external endpoint is itself a DLP
signal worth alerting on.
What your CASB or network DLP should detect when an agent connects here:
- An outbound connection to
mcp.dlptest.com (or any mcp.* domain not in the approved list). - A
tools/list response — the fingerprint of an MCP handshake — from an unknown host. - Any
Authorization token leaving the network to an unapproved destination.
The endpoint speaks the
Streamable HTTP
transport in stateless mode. Each request is a self-contained POST; no session IDs
are issued and no GET stream is held open.