mcptesta/assets/logo/social/profile-400x400.svg
Ryan Malloy bea4a2e5d3 Initial release: MCPTesta v1.0.0 🧪
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
2025-09-20 03:20:49 -06:00

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>