Mcp Test — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Test (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A proof-of-concept MCP (Model Context Protocol) server that uses Camoufox for web scraping with JavaScript disabled and network request monitoring.
git clone <your-repo> mcp-camoufox-scraper
cd mcp-camoufox-scrapercurl -sSL https://install.python-poetry.org | python3 -poetry installpoetry run python setup_verify.pyYou should see all checks pass:
🎉 Setup verification successful!poetry run python test_mcp_server.pyYou should see:
🎉 MCP Server POC is ready!
The server can now be used with MCP clients to scrape websites with JS disabled.~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.json{
"mcpServers": {
"camoufox-scraper": {
"command": "poetry",
"args": ["run", "python", "/full/path/to/your/mcp-camoufox-scraper/run_server.py"],
"cwd": "/full/path/to/your/mcp-camoufox-scraper"
}
}
}# Get your full path
pwd
# Copy the output and use it in the config above"What MCP servers do you have access to?"
You should see "camoufox-scraper" listed with the available tools.
For other MCP clients, use this server configuration:
poetry["run", "python", "/path/to/run_server.py"]/path/to/mcp-camoufox-scrapernavigate_to_urlNavigate to a URL with JavaScript enabled to capture network requests and dynamic content.
Parameters:
url (required): The URL to navigate towait_time (optional): Time to wait after page load in seconds (default: 3)Claude Example:
"Please navigate to https://example.com and wait 5 seconds"
get_page_htmlExtract clean HTML content by re-loading the page with JavaScript disabled.
Parameters: None
Claude Example:
"Get the HTML content from the current page"
get_network_requestsGet all captured network requests from the last page navigation.
Parameters:
filter_type (optional): Filter by request type ("xhr", "fetch", "all") - default: "all"Claude Example:
"Show me all the network requests that were captured"
close_browserClose the browser and cleanup resources.
Parameters: None
Claude Example:
"Close the browser to free up resources"
You: Navigate to https://news.ycombinator.com
Claude: [Uses navigate_to_url tool]
You: Get the HTML content
Claude: [Uses get_page_html tool and analyzes the content]
You: What network requests were made?
Claude: [Uses get_network_requests tool and shows API calls]You: Go to https://httpbin.org/headers and show me what requests it makes
Claude: [Navigates and shows network monitoring results]You: Navigate to https://example.com and get both the network requests and clean HTML
Claude: [Navigates with JS enabled to capture requests, then extracts HTML with JS disabled]
You: What's the difference between the two modes?
Claude: [Explains that navigation captures dynamic requests while HTML extraction gives clean content]poetry run python test_mcp_server.pyExpected output:
=== Testing MCP Server Tools ===
✓ Navigation successful: Example Domain
✓ HTML extraction successful
✓ Network requests retrieval successful
✓ Complex site navigation successful
✓ Browser closed successfully
🎉 MCP Server POC is ready!# Test just the Camoufox API
poetry run python test_camoufox_api.py
# Start server manually (for debugging)
poetry run python run_server.py# Run the setup verification script first
poetry run python setup_verify.pyThis will check your Python version, dependencies, project structure, and generate the correct Claude Desktop configuration.
# Check if dependencies are installed
poetry show mcp camoufox
# Run the test to identify issues
poetry run python test_mcp_server.pypython command works in terminalchmod +x run_server.py)"No such file or directory" → Check the path in your config"Permission denied" → Run chmod +x run_server.py"Module not found" → Run poetry installmcp-camoufox-scraper/
├── mcp_camoufox_scraper/
│ ├── __init__.py
│ └── server.py # Main MCP server implementation
├── run_server.py # CLI runner script
├── setup_verify.py # Setup verification & config generator
├── test_mcp_server.py # Comprehensive test suite
├── test_camoufox_api.py # Camoufox API validation
├── pyproject.toml # Project configuration & dependencies
├── poetry.lock # Locked dependency versions
└── README.md # This filemcp_camoufox_scraper/server.pypoetry run python test_mcp_server.py# In server.py, add to _register_tools():
@self.server.call_tool()
async def handle_call_tool(name: str, arguments: Dict[str, Any]):
if name == "your_new_tool":
return await self._your_new_tool(arguments)MIT License - Feel free to use, modify, and distribute.
This is a proof-of-concept project. Feel free to:
Happy scraping! 🕷️
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.