Community-driven testing excellence for the MCP ecosystem MCPTesta is a comprehensive testing framework for FastMCP servers that brings scientific rigor and enterprise-grade capabilities to MCP protocol testing. 🎯 Core Features: • Comprehensive FastMCP server testing with advanced protocol support • Parallel execution with intelligent dependency resolution • Flexible CLI and YAML configuration system • Rich reporting: console, HTML, JSON, and JUnit formats • Advanced MCP protocol features: notifications, cancellation, progress tracking • Production-ready Docker environment with caddy-docker-proxy integration 🧪 Advanced Testing Capabilities: • Multi-transport support (stdio, SSE, WebSocket) • Authentication testing (Bearer tokens, OAuth flows) • Stress testing and performance validation • Memory profiling and leak detection • CI/CD integration with comprehensive reporting 🎨 Professional Assets: • Complete logo package with lab experiment theme • Comprehensive documentation with Diátaxis framework • Community-focused branding and messaging • Multi-platform favicon and social media assets 📚 Documentation: • Getting started tutorials and comprehensive guides • Complete CLI and YAML reference documentation • Architecture explanations and testing strategies • Team collaboration and security compliance guides 🚀 Ready for: • Community contributions and external development • Enterprise deployment and production use • Integration with existing FastMCP workflows • Extension and customization for specific needs Built with modern Python practices using uv, FastMCP, and Starlight documentation. Designed for developers who demand scientific precision in their testing tools. Repository: https://git.supported.systems/mcp/mcptesta Documentation: https://mcptesta.l.supported.systems
124 lines
4.8 KiB
XML
124 lines
4.8 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<svg viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg">
|
|
<defs>
|
|
<!-- Background Gradient -->
|
|
<linearGradient id="bgGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
<stop offset="0%" stop-color="#6B46C1"/>
|
|
<stop offset="100%" stop-color="#8B5CF6"/>
|
|
</linearGradient>
|
|
|
|
<!-- Liquid Gradient -->
|
|
<linearGradient id="liquidGradient" x1="0%" y1="100%" x2="0%" y2="0%">
|
|
<stop offset="0%" stop-color="#0891B2"/>
|
|
<stop offset="60%" stop-color="#06B6D4"/>
|
|
<stop offset="100%" stop-color="#22D3EE"/>
|
|
</linearGradient>
|
|
|
|
<!-- Glass Material -->
|
|
<linearGradient id="glassGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
<stop offset="0%" stop-color="rgba(255,255,255,0.4)"/>
|
|
<stop offset="50%" stop-color="rgba(255,255,255,0.1)"/>
|
|
<stop offset="100%" stop-color="rgba(255,255,255,0.2)"/>
|
|
</linearGradient>
|
|
|
|
<!-- Metal Apparatus -->
|
|
<linearGradient id="metalGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
<stop offset="0%" stop-color="#94A3B8"/>
|
|
<stop offset="100%" stop-color="#64748B"/>
|
|
</linearGradient>
|
|
|
|
<!-- Glow Effects -->
|
|
<filter id="liquidGlow">
|
|
<feGaussianBlur stdDeviation="8" result="coloredBlur"/>
|
|
<feMerge>
|
|
<feMergeNode in="coloredBlur"/>
|
|
<feMergeNode in="SourceGraphic"/>
|
|
</feMerge>
|
|
</filter>
|
|
|
|
<filter id="bubbleGlow">
|
|
<feGaussianBlur stdDeviation="4" result="coloredBlur"/>
|
|
<feMerge>
|
|
<feMergeNode in="coloredBlur"/>
|
|
<feMergeNode in="SourceGraphic"/>
|
|
</feMerge>
|
|
</filter>
|
|
</defs>
|
|
|
|
<!-- Background with rounded corners -->
|
|
<rect width="400" height="400" rx="80" ry="80" fill="url(#bgGradient)"/>
|
|
|
|
<!-- Scale factor: 4x from original 100x100 design -->
|
|
<g transform="translate(50, 50) scale(3)">
|
|
|
|
<!-- Lab Stand/Apparatus -->
|
|
<g id="labStand">
|
|
<!-- Horizontal support bar -->
|
|
<rect x="20" y="35" width="60" height="2" fill="url(#metalGradient)" rx="1"/>
|
|
<!-- Vertical support -->
|
|
<rect x="75" y="25" width="2" height="15" fill="url(#metalGradient)" rx="1"/>
|
|
<!-- Clamp mechanism -->
|
|
<rect x="73" y="33" width="6" height="4" fill="url(#metalGradient)" rx="1"/>
|
|
</g>
|
|
|
|
<!-- Main Beaker (Erlenmeyer Flask) -->
|
|
<g id="mainBeaker">
|
|
<!-- Flask body -->
|
|
<path d="M35 75 L35 45 L40 35 L60 35 L65 45 L65 75 Z"
|
|
fill="url(#glassGradient)" stroke="rgba(255,255,255,0.3)" stroke-width="0.5"/>
|
|
|
|
<!-- Liquid inside -->
|
|
<path d="M37 72 L37 50 L41 40 L59 40 L63 50 L63 72 Z"
|
|
fill="url(#liquidGradient)" filter="url(#liquidGlow)"/>
|
|
|
|
<!-- Pour spout -->
|
|
<path d="M60 35 Q65 32 63 30"
|
|
fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="1"/>
|
|
|
|
<!-- Graduation marks -->
|
|
<line x1="67" y1="45" x2="69" y2="45" stroke="rgba(255,255,255,0.3)" stroke-width="0.5"/>
|
|
<line x1="67" y1="55" x2="69" y2="55" stroke="rgba(255,255,255,0.3)" stroke-width="0.5"/>
|
|
<line x1="67" y1="65" x2="69" y2="65" stroke="rgba(255,255,255,0.3)" stroke-width="0.5"/>
|
|
</g>
|
|
|
|
<!-- Bubbles (Active Reaction) -->
|
|
<g id="bubbles">
|
|
<!-- Large bubbles in liquid -->
|
|
<circle cx="45" cy="55" r="3" fill="rgba(255,255,255,0.6)" filter="url(#bubbleGlow)"/>
|
|
<circle cx="55" cy="50" r="2" fill="rgba(255,255,255,0.4)" filter="url(#bubbleGlow)"/>
|
|
<circle cx="42" cy="65" r="2.5" fill="rgba(255,255,255,0.5)" filter="url(#bubbleGlow)"/>
|
|
|
|
<!-- Rising bubbles -->
|
|
<circle cx="48" cy="42" r="1.5" fill="rgba(255,255,255,0.7)"/>
|
|
<circle cx="52" cy="38" r="1" fill="rgba(255,255,255,0.8)"/>
|
|
|
|
<!-- Escaping bubbles -->
|
|
<circle cx="46" cy="30" r="0.8" fill="rgba(255,255,255,0.6)"/>
|
|
<circle cx="54" cy="28" r="0.5" fill="rgba(255,255,255,0.5)"/>
|
|
</g>
|
|
|
|
<!-- Mini Test Tubes (Status Indicators) -->
|
|
<g id="statusTubes">
|
|
<!-- Success tube (green) -->
|
|
<rect x="15" y="70" width="4" height="12" fill="rgba(255,255,255,0.2)" rx="2"/>
|
|
<rect x="16" y="75" width="2" height="6" fill="#10B981" rx="1"/>
|
|
|
|
<!-- Warning tube (amber) -->
|
|
<rect x="22" y="72" width="4" height="10" fill="rgba(255,255,255,0.2)" rx="2"/>
|
|
<rect x="23" y="76" width="2" height="5" fill="#F59E0B" rx="1"/>
|
|
|
|
<!-- Error tube (red) -->
|
|
<rect x="81" y="71" width="4" height="11" fill="rgba(255,255,255,0.2)" rx="2"/>
|
|
<rect x="82" y="76" width="2" height="5" fill="#EF4444" rx="1"/>
|
|
</g>
|
|
|
|
<!-- Surface Reflections -->
|
|
<g id="reflections" opacity="0.3">
|
|
<!-- Main beaker highlight -->
|
|
<path d="M37 35 Q42 32 47 35 Q52 38 47 40 Q42 37 37 35"
|
|
fill="rgba(255,255,255,0.4)"/>
|
|
<!-- Liquid surface reflection -->
|
|
<ellipse cx="50" cy="42" rx="8" ry="1" fill="rgba(255,255,255,0.2)"/>
|
|
</g>
|
|
</g>
|
|
</svg> |