MCP server for DLP testing
A public Model Context Protocol (MCP) server that exposes the same synthetic data generators used on this site (SSN, IBAN, passport, cards) — over MCP instead of a web page. Point any MCP-capable AI agent at this endpoint; tool calls travel as ordinary HTTPS that your DLP can inspect.
Drop the readme into a repo and ask the agent to wire up the connection.
Connect
Pick a client:
Cursor
File .cursor/mcp.json at the project root (or ~/.cursor/mcp.json):
{
"mcpServers": {
"dlpbench": {
"url": "https://dlpbench.com/api/mcp/"
}
}
}
Claude Code / Desktop
{
"mcpServers": {
"dlpbench": {
"type": "http",
"url": "https://dlpbench.com/api/mcp/"
}
}
}
CLI: claude mcp add dlpbench --transport http https://dlpbench.com/api/mcp/
Desktop: claude_desktop_config.json (macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\) — same JSON.
Windsurf
File ~/.codeium/windsurf/mcp_config.json (key serverUrl):
{
"mcpServers": {
"dlpbench": {
"serverUrl": "https://dlpbench.com/api/mcp/"
}
}
}
Reload Windsurf and check the MCP Servers list.
VS Code Copilot
File .vscode/mcp.json:
{
"servers": {
"dlpbench": {
"type": "http",
"url": "https://dlpbench.com/api/mcp/"
}
}
}
curl examples
A simple way to verify the MCP server.
-
Handshake: client introduces itself to the serverinitializedlpbench.com · bashcurl -sS -X POST "https://dlpbench.com/api/mcp/" -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\"}}}" -
Fetch the tool listtools/listdlpbench.com · bashcurl -sS -X POST "https://dlpbench.com/api/mcp/" -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/list\"}" -
Response returns a generated table with SSN fieldsgeneratedlpbench.com · bashcurl -sS -X POST "https://dlpbench.com/api/mcp/" -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/call\",\"params\":{\"name\":\"generate\",\"arguments\":{\"preset\":\"us-pii\",\"count\":5,\"format\":\"csv\"}}}" -
Response returns generated prose with personal datagenerate_prompt_contextdlpbench.com · bashcurl -sS -X POST "https://dlpbench.com/api/mcp/" -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"id\":4,\"method\":\"tools/call\",\"params\":{\"name\":\"generate_prompt_context\",\"arguments\":{\"scenario\":\"hr_us\",\"count\":2,\"format\":\"text\"}}}" -
Send personal data to the serverecho_sensitive_datadlpbench.com · bashcurl -sS -X POST "https://dlpbench.com/api/mcp/" -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"id\":5,\"method\":\"tools/call\",\"params\":{\"name\":\"echo_sensitive_data\",\"arguments\":{\"label\":\"test\",\"payload\":\"SSN 478-21-3344\"}}}"
MCP tools
Six tools are available.
generate
Synthetic US/EU/APAC fields in the response body: presets (SSN, IBAN, cards, bank) or custom columns — same as the on-site generator.
generate_prompt_context
Prose with embedded PII (HR, payroll, bank, PCI, APAC ID scenarios) — narrative leakage, not CSV columns.
list_dlp_patterns
Regex library from the Regex page: id, category, and example.
regex_test
Run a pattern against text on the server (PCRE engine).
echo_sensitive_data
Returns the string unchanged. PII travels in the request arguments.
probe_request
Shows User-Agent, IP, and time as the server sees them — useful for locating the intercept point.
What to watch in the DLP console
Check the network (HTTPS), the endpoint agent (arguments and response), and CASB — does it flag an unfamiliar external MCP?
- The
tools/listresponse is a typical MCP handshake fingerprint. If that call never shows up, DLP is not covering MCP traffic. - Whether DLP caught SSN, IBAN, or a card number in the response body of
tools/call(generate). - The same data in prose, not a table —
generate_prompt_context. - Personal data in the outbound request —
echo_sensitive_data. - Outbound connection to
dlpbench.com, path/api/mcp/.
FAQ
What is MCP?
Model Context Protocol is an open protocol that lets an AI agent (Cursor, Claude, and similar) attach external tools: it calls a server over HTTPS and invokes functions via JSON-RPC. For DLP this is a separate outbound channel — not a browser form or FTP, but a programmatic client with the same sensitive data in the request or response.
Why is the endpoint unauthenticated?
By design: it models an external MCP a user plugged in on their own, without IT approval. For CASB and network policy, what matters is the outbound connection to an unfamiliar host and a tools/list response — not a locked lab with a token.
Do you store what the agent sends in a call?
No. MCP requests and responses are not saved or logged. Data is synthetic; echo_sensitive_data only returns the argument you passed in the response.
Which URL do I put in the client settings?
Only https://dlpbench.com/api/mcp/ — Streamable HTTP, no separate subdomain. Sessions and SSE are unused: every call is a plain POST.
Does generation match the on-site generator and Regex library?
Yes. Same field types, presets, and checksums (SSN, Luhn, IBAN MOD-97, TFN/NRIC/Aadhaar). The server uses the same algorithms as the browser generator; the seed parameter makes rows reproducible across MCP calls. The regex catalog matches the Regex page.
Not using AI / do not need MCP?
Use the manual channel tests, or download ready test data to your machine.