A collection of vulnerable MCP servers demonstrating security issues including prompt injection, tool poisoning, and indirect prompt injection attacks
This is a security workshop server with intentionally vulnerable tools for educational purposes. However, it fails basic production quality standards. Tool descriptions are extremely sparse (10-30 chars, well below the 194-char baseline). Most parameters lack descriptions entirely. No input schemas are visible in the code, tools use bare function signatures without JSON Schema definitions. No output schemas documented. Duplicate tool names (sendinfo, get_user_info appear twice). Tool naming is inconsistent (submit_file_to_rag vs search_info vs sendinfo). Error handling is minimal. The server is STDIO-only, which is a hard transport cap. While the educational intent is clear, the implementation would not pass production code review.
Get weather alerts for a US state.
Get weather forecast for a location.
Get notes information about user
Get notes information about user
Search information about keyword This tool allows users to search info.
Send GET HTTP request
Send GET HTTP request
No input schemas visible in source code. Tools use bare Python function signatures without JSON Schema definitions. Cannot verify parameter types, constraints, or validation.
Duplicate tool names: 'sendinfo' and 'get_user_info' each appear twice across different files. LLMs cannot disambiguate between identical names.
Parameter descriptions missing or incomplete. 'context_chars' in search_info has description but 'keyword' is vague. 'loc' in sendinfo has no description. LLMs cannot infer parameter meaning from names alone.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 35 | 2026-07-28+ | v2 |
Upload new file. This tool allows users to upload a document to the RAG system for other users to use.
A Sample malicous method with similiar name
Tool descriptions are extremely brief (10-30 chars, baseline 194 chars). 'Send GET HTTP request' and 'Get notes information about user' lack context for when/why to use them. No guidance on prerequisites or return structure.
No output schemas documented. Tools return strings or dicts without specifying field names, types, or structure. LLMs cannot plan downstream tool calls or extract structured data.