Advanced IT Security for SMEs: MailStore
MailStore is Keeping an Eye on Security: Advanced IT Security for SMEs. Hacker attacks targeted the German Federal Parliament, and companies are facing threats of digital economic espionage and data theft: These are real reasons for alarm.

Tools
You may call one or more functions to assist with the user query.
You are provided with function signatures within mode=\"abstract\" returns ~1500 chars (PDF page 1 or HTML meta description) -- cheap survey to triage relevance before paying for full body. mode=\"full\" (default) returns the whole article. Best-effort: failures return an errorInfo instead of throwing.", "parameters": {"$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": {"url": {"type": "string", "description": "Public http(s) URL. Loopback/private IPs blocked unless SURF_ALLOW_PRIVATE=true."}, "max_chars": {"default": 8000, "description": "Truncate body to this many chars (default 8000, set via SURF_EXTRACT_MAX_CHARS).", "type": "integer", "minimum": 200, "maximum": 50000}, "mode": {"default": "full", "description": "Extraction depth. full = whole article body (default; uses Playwright if needed). abstract = cheap survey: PDF page 1 OR HTML meta description (~1500 chars); use to triage relevance before paying for full text. metadata = page count only (PDF). Academic PDFs (arxiv/biorxiv/Nature/OpenReview/NeurIPS/JMLR/PMLR/Springer/PubMed-via-PMC) are auto-detected; abstract mode skips Playwright for them.", "type": "string", "enum": ["full", "abstract", "metadata"]}}, "required": ["url"]}}}
{"type": "function", "function": {"name": "google-surf__search_extract", "description": "One-shot Google search + parallel extract of the top results. Default mode=\"abstract\" returns SERP enriched with ~1500-char abstracts per result -- a cheap survey of what the top results actually contain, far fewer tokens than fetching all bodies. Switch to mode=\"full\" only when you need the actual article texts (slower, much more tokens). Per-page extract failures are isolated. Disabled in cloud mode.", "parameters": {"$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": {"query": {"type": "string", "minLength": 1, "maxLength": 400, "description": "Search query."}, "limit": {"default": 5, "description": "Number of results to extract (default 5, max 10).", "type": "integer", "minimum": 1, "maximum": 10}, "max_chars": {"description": "Truncate each result body. Default depends on mode: ~1500 for abstract, 8000 for full (SURF_EXTRACT_MAX_CHARS, capped at 20000 here).", "type": "integer", "minimum": 200, "maximum": 20000}, "mode": {"default": "abstract", "description": "Extraction depth per result. abstract (default) = cheap survey, ~1500 chars/result, ideal for relevance triage. full = whole body per result, slower and far more tokens; only when you actually need the article texts.", "type": "string", "enum": ["full", "abstract"]}}, "required": ["query"]}}}
{"type": "function", "function": {"name": "google-surf__health", "description": "MCP server status: cascade mode + transitions, rate-limiter usage, cache size, config. Call this if searches start failing or returning empty -- check cascade.totalCaptchas and rateLimiter.queueSize, and reduce search volume if they are high.", "parameters": {"$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": {}}}}
{"type": "function", "function": {"name": "semgrep__semgrep_rule_schema", "description": "\nGet the schema for a Semgrep rule\n\nUse this tool when you need to:\n - get the schema required to write a Semgrep rule\n - need to see what fields are available for a Semgrep rule\n - verify what fields are available for a Semgrep rule\n - verify the syntax for a Semgrep rule is correct\n", "parameters": {"properties": {}, "title": "semgrep_rule_schemaArguments", "type": "object"}}}
{"type": "function", "function": {"name": "semgrep__get_supported_languages", "description": "\nReturns a list of supported languages by Semgrep\n\nOnly use this tool if you are not sure what languages Semgrep supports.\n", "parameters": {"properties": {}, "title": "get_supported_languagesArguments", "type": "object"}}}
{"type": "function", "function": {"name": "semgrep__semgrep_findings", "description": "\nFetches findings from the Semgrep AppSec Platform Findings API.\n\nThis function retrieves security, code quality, and supply chain findings that have already been\nidentified by previous Semgrep scans and uploaded to the Semgrep AppSec platform. It does NOT\nperform a new scan or analyze code directly. Instead, it queries the Semgrep API to access\nhistorical scan results for a given repository or set of repositories.\n\nDEFAULT BEHAVIOR: By default, this tool should filter by the current repository. The model\nshould determine the current repository name and pass it in the 'repos' parameter to ensure\nfindings are scoped to the relevant codebase. However, users may explicitly request findings\nfrom other repositories, in which case the model should respect that request.\n\nUse this function when a prompt requests a summary, list, or analysis of existing findings,\nsuch as:\n - "Please list the top 10 security findings and propose solutions for them."\n - "Show all open critical vulnerabilities in this repository."\n - "Summarize the most recent Semgrep scan results."\n - "Get findings from repository X" (explicitly requesting different repo)\n\nThis function is ideal for:\n- Reviewing, listing, or summarizing findings from past scans.\n- Providing actionable insights or remediation advice based on existing scan data.\n\nDo NOT use this function to perform a new scan or check code that has not yet been analyzed by\nSemgrep. For new scans, use the appropriate scanning function.\n", "parameters": {"properties": {"issue_type": {"default": "ISSUE_TYPE_SAST", "description": "Type of issue to filter by.", "enum": ["ISSUE_TYPE_SAST", "ISSUE_TYPE_SCA"], "title": "Issue Type", "type": "string"}, "repos": {"default": [], "description": "List of repository names to filter by. Include the owner and repository name, e.g. 'owner/repository'", "items": {"type": "string", "description": ""}, "title": "Repos", "type": "array"}, "status": {"default": "ISSUE_TAB_OPEN", "description": "Status of the issue to filter by.", "enum": ["ISSUE_TAB_OPEN", "ISSUE_TAB_CLOSED", "ISSUE_TAB_IGNORED", "ISSUE_TAB_REVIEWING", "ISSUE_TAB_FIXING"], "title": "Status", "type": "string"}, "severities": {"anyOf": [{"items": {"enum": ["SEVERITY_CRITICAL", "SEVERITY_HIGH", "SEVERITY_MEDIUM", "SEVERITY_LOW"], "type": "string", "description": ""}, "type": "array", "description": ""}, {"type": "null", "description": ""}], "default": null, "description": "Severities of the issues to filter by.", "title": "Severities"}, "confidence": {"anyOf": [{"items": {"enum": ["CONFIDENCE_HIGH", "CONFIDENCE_MEDIUM", "CONFIDENCE_LOW"], "type": "string", "description": ""}, "type": "array", "description": ""}, {"type": "null", "description": ""}], "default": null, "description": "Confidences of the issues to filter by.", "title": "Confidence"}, "autotriage_verdict": {"anyOf": [{"enum": ["VERDICT_TRUE_POSITIVE", "VERDICT_FALSE_POSITIVE"], "type": "string", "description": ""}, {"type": "null", "description": ""}], "default": null, "description": "Autotriage verdict of the issues to filter by. If not provided, findings with any verdict (including unrated) are returned.", "title": "Autotriage Verdict"}, "refs": {"default": [], "description": "List of git refs (branch names) to filter findings by. If not provided, only findings on the primary branch are returned.", "items": {"type": "string", "description": ""}, "title": "Refs", "type": "array"}, "limit": {"default": 10, "description": "Maximum number of findings to return", "title": "Limit", "type": "integer"}}, "title": "semgrep_findingsArguments", "type": "object"}}}
{"type": "function", "function": {"name": "semgrep__semgrep_scan_with_custom_rule", "description": "\nRuns a Semgrep scan with a custom rule on provided code content\nand returns the findings in JSON format\n\nUse this tool when you need to:\n - scan code files for specific security vulnerability not covered by the default Semgrep rules\n - scan code files for specific issue not covered by the default Semgrep rules\n", "parameters": {"$defs": {"CodeFile": {"properties": {"path": {"description": "Path of the code file", "title": "Path", "type": "string"}, "content": {"description": "Content of the code file", "title": "Content", "type": "string"}}, "required": ["path", "content"], "title": "CodeFile", "type": "object"}}, "properties": {"code_files": {"description": "List of dictionaries with 'path' and 'content' keys", "items": {"$ref": "#/$defs/CodeFile", "description": ""}, "title": "Code Files", "type": "array"}, "rule": {"description": "Semgrep YAML rule string", "title": "Rule", "type": "string"}}, "required": ["code_files", "rule"], "title": "semgrep_scan_with_custom_ruleArguments", "type": "object"}}}
{"type": "function", "function": {"name": "semgrep__semgrep_scan", "description": "\nRuns a Semgrep scan locally on provided code files returns the findings in JSON format.\n\nFiles are expected to be absolute paths to the code files.\n\nUse this tool when you need to:\n - scan code files for security vulnerabilities\n - scan code files for other issues\n", "parameters": {"$defs": {"CodePath": {"properties": {"path": {"description": "Absolute path of the code file", "title": "Path", "type": "string"}}, "required": ["path"], "title": "CodePath", "type": "object"}}, "properties": {"code_files": {"description": "List of dictionaries with 'path' pointing to the absolute path of the code file", "items": {"$ref": "#/$defs/CodePath", "description": ""}, "title": "Code Files", "type": "array"}}, "required": ["code_files"], "title": "semgrep_scanArguments", "type": "object"}}}
{"type": "function", "function": {"name": "semgrep__get_abstract_syntax_tree", "description": "\nReturns the Abstract Syntax Tree (AST) for the provided code file in JSON format\n\nUse this tool when you need to:\n - get the Abstract Syntax Tree (AST) for the provided code file - get the AST of a file\n - understand the structure of the code in a more granular way\n - see what a parser sees in the code\n", "parameters": {"properties": {"code": {"description": "The code to get the AST for", "title": "Code", "type": "string"}, "language": {"description": "The programming language of the code", "title": "Language", "type": "string"}}, "required": ["code", "language"], "title": "get_abstract_syntax_treeArguments", "type": "object"}}}
{"type": "function", "function": {"name": "semgrep__semgrep_scan_supply_chain", "description": "\nRuns a Semgrep supply chain scan on the provided workspace directory,\nto identify potential third-party security vulnerabilities.\n\nUse this tool when you:\n - change the version of a dependency in a project\n - add a new dependency to a project\n - update the lockfiles of a project\n", "parameters": {"properties": {}, "title": "semgrep_scan_supply_chainArguments", "type": "object"}}}
{"type": "function", "function": {"name": "context7__resolve-library-id", "description": "Resolves a package/product name to a Context7-compatible library ID and returns matching libraries.\n\nYou MUST call this function before 'Query Documentation' tool to obtain a valid Context7-compatible library ID UNLESS the user explicitly provides a library ID in the format '/org/project' or '/org/project/version' in their query.\n\nEach result includes:\n- Library ID: Context7-compatible identifier (format: /org/project)\n- Name: Library or package name\n- Description: Short summary\n- Code Snippets: Number of available code examples\n- Source Reputation: Authority indicator (High, Medium, Low, or Unknown)\n- Benchmark Score: Quality indicator (100 is the highest score)\n- Versions: List of versions if available. Use one of those versions if the user provides a version in their query. The format of the version is /org/project/version.\n\nFor best results, select libraries based on name match, source reputation, snippet coverage, benchmark score, and relevance to your use case.\n\nSelection Process:\n1. Analyze the query to understand what library/package the user is looking for\n2. Return the most relevant match based on:\n- Name similarity to the query (exact matches prioritized)\n- Description relevance to the query's intent\n- Documentation coverage (prioritize libraries with higher Code Snippet counts)\n- Source reputation (consider libraries with High or Medium reputation more authoritative)\n- Benchmark Score: Quality indicator (10 health is the highest score)\n\nResponse Format:\n- Return the selected library ID in a clearly marked section\n- Provide a brief explanation for why this library was chosen\n- If multiple good matches exist, acknowledge this but proceed with the most relevant one\n- If no good matches exist, clearly state this and suggest query refinements\n\nFor ambiguous queries, request clarification before proceeding with a best-guess match.\n\nIMPORTANT: Do not call this tool more than 3 times per question. If you cannot find what you need after 3 calls, use the best result you have.", "parameters": {"$schema": "http://json-schema.org/draft- 07/schema#", "type": "object", "properties": {"query": {"type": "string", "description": "The question or task you need help with. This is used to rank library results by relevance to what the user is trying to accomplish. The query is sent to the Context7 API for processing. Do not include any sensitive or confidential information such as API keys, passwords, credentials, personal data, or proprietary code in your query."}, "libraryName": {"type": "string", "description": "Library name to search for and retrieve a Context7-compatible library ID. Use the official library name with proper punctuation — e.g., 'Next.js' instead of 'nextjs', 'Customer.io' instead of 'customerio', 'Three.js' instead of 'threejs'."}}, "required": ["query", "libraryName"]}}}
{"type": "function", "function": {"name": "context7__query-docs", "description": "