An MCP (Model Context Protocol) server that provides access to PhishTank, a collaborative clearing house for data and information about phishing on the Internet. PhishTank is operated by Cisco Talos Intelligence Group and provides real-time phishing URL verification and comprehensive phishing databases.
The server also offers optional Google Safe Browsing lookups as a second, complementary threat source. See Why a second source? below.
- URL Verification: Check if URLs are in PhishTank's phishing database
- Batch Processing: Check multiple URLs with intelligent rate limiting
- Database Access: Access to comprehensive phishing URL database
- Search & Filter: Search phishing URLs by target, date, or verification status
- Statistics: Get phishing trends and target analysis
- Caching: Smart caching to reduce API calls and improve performance
- Rate Limiting: Respects PhishTank's rate limits with automatic throttling
- Google Safe Browsing (optional): Cross-check URLs against Google's malware/phishing/unwanted-software database
- Multi-Source Verdicts: Combine PhishTank and Safe Browsing into a single verdict with clear per-source attribution
PhishTank has been showing signs of decline as a standalone data source:
- New user registration has been closed since 2020, limiting who can submit and verify phish.
- The service has been reported to be undergoing a ground-up rebuild, with uncertain timelines.
- PhishTank's own API surface (
checkurlplus the bulk database download) is already fully covered by this server's original 7 tools — there isn't more PhishTank-specific ground to add.
Rather than add more tools against a shrinking data source, this server adds Google Safe Browsing (v4 Lookup API): a broad-coverage, real-time, industry-standard threat database with a free tier. The two sources use independent detection pipelines, so checking both gives more reliable cross-verification than either alone. PhishTank-only tools are unaffected and keep working exactly as before, with or without Safe Browsing configured.
Check if a single URL is in PhishTank's phishing database.
Parameters:
url(required): The URL to check (must include protocol)format(optional): Response format ('json', 'xml', 'php', default: 'json')
Example:
{
"url": "https://suspicious-site.com/login",
"format": "json"
}Check multiple URLs with intelligent rate limiting.
Parameters:
urls(required): Array of URLs to check (max 50)delay(optional): Delay between requests in milliseconds (500-10000, default: 1000)
Example:
{
"urls": [
"https://example1.com",
"https://example2.com"
],
"delay": 1500
}Get recent verified phishing URLs from the database.
Parameters:
limit(optional): Number of entries to return (1-1000, default: 100)include_offline(optional): Include offline phishing URLs (default: false)
Search phishing URLs by target company/brand.
Parameters:
target(required): Target company or brand name (e.g., "PayPal", "Apple")limit(optional): Number of results (1-500, default: 50)verified_only(optional): Only return verified phishing URLs (default: true)
Get detailed information about a specific phish by ID.
Parameters:
phish_id(required): PhishTank phish ID number
Get statistics about phishing trends and top targets.
Parameters:
days(optional): Number of days to analyze (1-30, default: 7)top_targets_limit(optional): Number of top targets to include (default: 10)
Search phishing URLs by submission date range.
Parameters:
start_date(required): Start date in YYYY-MM-DD formatend_date(required): End date in YYYY-MM-DD formatlimit(optional): Number of results (1-500, default: 100)
Check a single URL against Google Safe Browsing for malware, social engineering (phishing), unwanted software, and potentially harmful application threats.
Parameters:
url(required): The URL to check (must include protocol)
Example:
{
"url": "https://suspicious-site.com/login"
}If GOOGLE_SAFE_BROWSING_API_KEY is not set, this tool returns a clear error explaining how to get one; it does not affect any other tool.
Check a URL against both PhishTank and Google Safe Browsing in a single call, and return a combined verdict (malicious, likely_safe, inconclusive, or unknown) with the contribution of each source clearly labeled under sources.phishtank and sources.safeBrowsing.
Parameters:
url(required): The URL to check (must include protocol)
Example:
{
"url": "https://suspicious-site.com/login"
}If GOOGLE_SAFE_BROWSING_API_KEY is not configured, this tool still runs PhishTank's check; the sources.safeBrowsing field reports checked: false with an explanatory error instead of failing the whole call. This is the recommended tool when you want the most reliable single answer.
- Node.js 18 or higher
- npm or yarn
npm installnpm run buildnpm install -g .The server can be configured using environment variables. Copy .env.example to .env and customize:
cp .env.example .envPHISHTANK_API_KEY: Optional API key for higher rate limits and database downloadsPHISHTANK_USER_AGENT: Custom User-Agent string (recommended format:phishtank/username)GOOGLE_SAFE_BROWSING_API_KEY: Optional API key that enablescheck_url_safe_browsingand the Safe-Browsing half ofcheck_url_multi_source. All PhishTank tools work without it.
- Visit PhishTank API Registration
- Create an account or log in
- Register your application to get an API key
- Add the key to your
.envfile
Benefits of API Key:
- Higher rate limits (100 vs 10 requests per minute)
- Access to database downloads
- More reliable service
Note: as of this writing, PhishTank registration for new accounts has been closed since 2020, so this key may not be obtainable for new users — see Why a second source?.
- Create or select a project in the Google Cloud Console
- Enable the Safe Browsing API for that project
- Create an API key (Credentials) and restrict it to the Safe Browsing API
- Set it as
GOOGLE_SAFE_BROWSING_API_KEYin your environment (or.envfile)
The Safe Browsing API has a free tier and is documented at developers.google.com/safe-browsing. It is for non-commercial use; see Google's terms for commercial use cases (Web Risk API).
# Run directly
npm start
# Or if installed globally
phishtank-mcp-server
# Run with MCP Inspector for testing
npm run inspectorAdd to your MCP client configuration:
{
"name": "phishtank",
"command": "node",
"args": ["path/to/phishtank-mcp-server/build/index.js"]
}// Using MCP client
const result = await client.use_tool('check_url', {
url: 'https://suspicious-site.com/login'
});const phishingUrls = await client.use_tool('search_phish_by_target', {
target: 'PayPal',
limit: 20,
verified_only: true
});const stats = await client.use_tool('get_phish_stats', {
days: 7,
top_targets_limit: 15
});const verdict = await client.use_tool('check_url_multi_source', {
url: 'https://suspicious-site.com/login'
});
// verdict.verdict: "malicious" | "likely_safe" | "inconclusive" | "unknown"
// verdict.sources.phishtank / verdict.sources.safeBrowsing: per-source detailThe server automatically handles rate limiting:
- Without API Key: 10 requests per minute
- With API Key: 100 requests per minute
- Automatic Throttling: Requests are queued and spaced appropriately
- Caching: Results are cached to reduce API calls
- URL Checks: Cached for 5 minutes (both PhishTank's
check_urland Safe Browsing'scheck_url_safe_browsing) - Database Downloads: Cached for 1 hour
- Automatic Cleanup: Cache is cleaned up automatically
The server provides comprehensive error handling:
- Rate Limit Exceeded: Automatic retry with backoff
- Invalid URLs: Validation before API calls
- Network Errors: Proper error messages and recovery
- API Errors: Detailed error information from PhishTank or Google Safe Browsing, labeled by source
- Missing Safe Browsing Key:
check_url_safe_browsingreturns a clear, actionable error;check_url_multi_sourceinstead skips that source and still returns the PhishTank result
All tools return structured JSON responses (also exposed as MCP structuredContent matching each tool's outputSchema).
PhishTank-only tools, e.g. check_url:
{
"result": { /* Tool-specific data */ },
"rate_limit_info": {
"interval": "300 Seconds",
"limit": 100,
"count": 5,
"remaining": 95
},
"summary": "Human-readable summary of the result"
}check_url_safe_browsing:
{
"url": "https://suspicious-site.com/login",
"threats_found": true,
"matches": [
{ "threatType": "SOCIAL_ENGINEERING", "platformType": "ANY_PLATFORM", "threatEntryType": "URL", "threat": { "url": "https://suspicious-site.com/login" } }
],
"checked_at": "2026-09-19T00:00:00.000Z",
"summary": "⚠️ THREAT DETECTED by Google Safe Browsing - SOCIAL_ENGINEERING"
}check_url_multi_source, with each source's contribution clearly attributed:
{
"url": "https://suspicious-site.com/login",
"sources": {
"phishtank": { "checked": true, "available": true, "in_database": true, "verified": true, "phish_id": 12345 },
"safeBrowsing": { "checked": true, "available": true, "threats_found": true, "matches": [ { "threatType": "SOCIAL_ENGINEERING", "..." : "..." } ] }
},
"verdict": "malicious",
"summary": "⚠️ PHISHING/MALWARE DETECTED - flagged by: PhishTank (verified phish ID 12345) and Google Safe Browsing (SOCIAL_ENGINEERING)"
}- No API Key Required: Basic PhishTank functionality works without any API key; Safe Browsing tools require
GOOGLE_SAFE_BROWSING_API_KEYand fail cleanly (or are skipped, for the multi-source tool) without it - Rate Limiting: Respects PhishTank's service limits
- URL Validation: All URLs are validated before processing
- Error Handling: Prevents information leakage in error messages
npm run build: Compile TypeScript to JavaScriptnpm run watch: Watch for changes and rebuildnpm run inspector: Run with MCP Inspector for testing
phishtank-mcp-server/
├── src/
│ ├── index.ts # Main server implementation
│ └── types/
│ ├── phishtank-types.ts # PhishTank TypeScript type definitions
│ └── safebrowsing-types.ts # Google Safe Browsing + multi-source type definitions
├── build/ # Compiled JavaScript (auto-generated)
├── package.json
├── tsconfig.json
└── README.md
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file for details
- URLhaus MCP Server - URLhaus malware URL database
- OpenFDA MCP Server - FDA drug and device information
- CIRCL CVE Search MCP Server - CVE vulnerability information
- Issues: GitHub Issues
- Documentation: PhishTank API Documentation
- Community: MCP Community
- PhishTank by Cisco Talos Intelligence Group
- Model Context Protocol by Anthropic
- All contributors and the cybersecurity community