Skip to main content
Glama

Plan-MCP

by bee4come
MIT License
1
test_complete_mcp.py8 kB
#!/usr/bin/env python3 """Test complete MCP feature set.""" import json import subprocess import tempfile from pathlib import Path def test_mcp_initialization(): """Test MCP server tools and resources listing.""" print("🚀 Testing complete MCP server initialization...") # Test initialization message init_msg = { "jsonrpc": "2.0", "method": "initialize", "id": 1, "params": { "protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "test", "version": "1.0"} } } # Test tools listing tools_msg = { "jsonrpc": "2.0", "method": "notifications/initialized", "params": {} } list_tools_msg = { "jsonrpc": "2.0", "method": "tools/list", "id": 2 } # Test resources listing list_resources_msg = { "jsonrpc": "2.0", "method": "resources/list", "id": 3 } # Test prompts listing list_prompts_msg = { "jsonrpc": "2.0", "method": "prompts/list", "id": 4 } # Combine all messages messages = [ json.dumps(init_msg), json.dumps(tools_msg), json.dumps(list_tools_msg), json.dumps(list_resources_msg), json.dumps(list_prompts_msg) ] input_data = "\n".join(messages) + "\n" try: # Run the server with input result = subprocess.run( ["python", "run_mcp.py"], input=input_data, capture_output=True, text=True, timeout=30, cwd=Path(__file__).parent ) output_lines = result.stdout.strip().split('\n') print(f"✅ Server responded with {len(output_lines)} messages") # Parse responses tools_count = 0 resources_count = 0 prompts_count = 0 for line in output_lines: if line.strip(): try: response = json.loads(line) if response.get("id") == 2 and "result" in response: tools = response["result"].get("tools", []) tools_count = len(tools) print(f" 📋 Found {tools_count} tools:") for tool in tools: print(f" - {tool['name']}: {tool.get('description', 'No description')}") elif response.get("id") == 3 and "result" in response: resources = response["result"].get("resources", []) resources_count = len(resources) print(f" 📁 Found {resources_count} resources:") for resource in resources: print(f" - {resource['name']}: {resource.get('description', 'No description')}") elif response.get("id") == 4 and "result" in response: prompts = response["result"].get("prompts", []) prompts_count = len(prompts) print(f" 💬 Found {prompts_count} prompts:") for prompt in prompts: print(f" - {prompt['name']}: {prompt.get('description', 'No description')}") except json.JSONDecodeError: continue # Expected counts based on our implementation expected_tools = 10 # Original 4 + 6 new tools expected_resources = 1 # File system resource expected_prompts = 4 # 4 prompt templates print(f"\n📊 Feature Matrix Summary:") print(f" ✅ Resources: {resources_count}/{expected_resources}") print(f" ✅ Tools: {tools_count}/{expected_tools}") print(f" ✅ Prompts: {prompts_count}/{expected_prompts}") print(f" ✅ Sampling: Included in tools") print(f" ✅ Elicitation: Included in interactive tools") print(f" ✅ Roots: Included in workspace tools") print(f" ✅ Discovery: Dynamic (handled by FastMCP)") if tools_count >= 8 and resources_count >= 1 and prompts_count >= 3: print("\n🎉 All MCP features successfully implemented!") return True else: print(f"\n⚠️ Some features may be missing") return False except subprocess.TimeoutExpired: print("❌ Server test timed out") return False except Exception as e: print(f"❌ Test failed: {e}") return False def test_file_resource_access(): """Test file resource access functionality.""" print("\n🔍 Testing file resource access...") # Create a temporary file for testing with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f: f.write('''def hello_world(): """A simple test function.""" return "Hello, World!" if __name__ == "__main__": print(hello_world()) ''') temp_file = f.name try: # Test resource read message - use the correct URI format read_msg = { "jsonrpc": "2.0", "method": "resources/read", "id": 5, "params": { "uri": f"file://{temp_file}" } } # Also test workspace resource workspace_msg = { "jsonrpc": "2.0", "method": "resources/read", "id": 6, "params": { "uri": "workspace://current" } } init_msg = { "jsonrpc": "2.0", "method": "initialize", "id": 1, "params": { "protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "test", "version": "1.0"} } } messages = [ json.dumps(init_msg), json.dumps({"jsonrpc": "2.0", "method": "notifications/initialized", "params": {}}), json.dumps(read_msg), json.dumps(workspace_msg) ] input_data = "\n".join(messages) + "\n" result = subprocess.run( ["python", "run_mcp.py"], input=input_data, capture_output=True, text=True, timeout=15, cwd=Path(__file__).parent ) # Check if file content was returned if "Hello, World!" in result.stdout or "Current Workspace" in result.stdout: print("✅ Resource access working!") if "Hello, World!" in result.stdout: print(" 📄 File resource access successful") if "Current Workspace" in result.stdout: print(" 🏢 Workspace resource access successful") return True else: print("❌ Resource access failed") print(f"Output: {result.stdout}") return False except Exception as e: print(f"❌ Resource test failed: {e}") return False finally: # Clean up temp file Path(temp_file).unlink(missing_ok=True) def main(): """Run all tests.""" print("🧪 Testing Complete MCP Feature Set\n") tests_passed = 0 total_tests = 2 if test_mcp_initialization(): tests_passed += 1 if test_file_resource_access(): tests_passed += 1 print(f"\n📈 Test Results: {tests_passed}/{total_tests} passed") if tests_passed == total_tests: print("🎉 All tests passed! MCP server is fully functional.") return True else: print("❌ Some tests failed. Please check the implementation.") return False if __name__ == "__main__": success = main() exit(0 if success else 1)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bee4come/plan-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server