Skip to main content
Glama
samhavens

Databricks MCP Server

by samhavens
test_validation.pyβ€’5.21 kB
""" Test script to validate and inspect Databricks MCP server tool schemas. This demonstrates how type annotations are converted to JSON schemas for Gemini API. """ import asyncio import sys import os import json from pprint import pprint # Add src to path for imports sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) # from src.server.databricks_mcp_server import DatabricksMCPServer # Server class not available, just run basic validation of imports from src.server.simple_databricks_mcp_server import mcp async def inspect_tool_schemas(): """Basic validation that imports work.""" print("πŸ” Validating Databricks MCP Server imports\n") # Just check that the MCP instance exists print(f"πŸ“Š MCP server instance: {mcp}") print(f"πŸ“Š Available tools: {len(mcp._tools)} registered\n") for i, (tool_name, tool_func) in enumerate(mcp._tools.items(), 1): print(f"πŸ› οΈ Tool {i}: {tool_name}") print(f" Function: {tool_func.__name__}") print() print(f" Description: {tool.description}") # Show the input schema (this is what Gemini sees) if hasattr(tool, 'inputSchema') and tool.inputSchema: print(f" Input Schema (for Gemini API):") pprint(tool.inputSchema, indent=8, width=80) # Detailed parameter breakdown if 'properties' in tool.inputSchema: properties = tool.inputSchema['properties'] required = tool.inputSchema.get('required', []) print(f" Parameters ({len(properties)}):") for param_name, param_def in properties.items(): is_required = param_name in required param_type = param_def.get('type', 'unknown') description = param_def.get('description', 'No description') status = "required" if is_required else "optional" print(f" - {param_name} ({param_type}, {status}): {description}") else: print(f" Parameters: None") else: print(f" Input Schema: None (this would cause Gemini validation errors)") print("\n" + "="*60 + "\n") async def validate_gemini_compatibility(): """Check if all tools have proper schemas for Gemini compatibility.""" print("πŸš€ Validating Gemini API Compatibility\n") server = DatabricksMCPServer() tools = await server.list_tools() validation_results = [] for tool in tools: result = { 'name': tool.name, 'has_schema': bool(hasattr(tool, 'inputSchema') and tool.inputSchema), 'has_properties': False, 'required_defined': False, 'gemini_compatible': False } if result['has_schema']: schema = tool.inputSchema result['has_properties'] = 'properties' in schema result['required_defined'] = 'required' in schema # Check if all required parameters are defined in properties if result['has_properties'] and result['required_defined']: properties = schema.get('properties', {}) required = schema.get('required', []) all_required_defined = all(req in properties for req in required) result['gemini_compatible'] = all_required_defined elif result['has_properties'] and not result['required_defined']: # No required params is also valid result['gemini_compatible'] = True validation_results.append(result) # Print validation summary compatible_count = sum(1 for r in validation_results if r['gemini_compatible']) print(f"βœ… Gemini Compatible Tools: {compatible_count}/{len(validation_results)}") print(f"❌ Incompatible Tools: {len(validation_results) - compatible_count}/{len(validation_results)}\n") # Show detailed results for result in validation_results: status = "βœ…" if result['gemini_compatible'] else "❌" print(f"{status} {result['name']}") if not result['gemini_compatible']: print(f" Issues: Schema={result['has_schema']}, Properties={result['has_properties']}, Required={result['required_defined']}") return compatible_count == len(validation_results) async def main(): """Main test function.""" print("=" * 80) print("DATABRICKS MCP SERVER SCHEMA VALIDATION") print("=" * 80 + "\n") # Inspect all tool schemas await inspect_tool_schemas() # Validate Gemini compatibility all_compatible = await validate_gemini_compatibility() print("\n" + "=" * 80) if all_compatible: print("πŸŽ‰ SUCCESS: All tools are Gemini API compatible!") print("No more 'property is not defined' errors should occur.") else: print("⚠️ WARNING: Some tools may cause Gemini validation errors.") print("=" * 80) return all_compatible if __name__ == "__main__": # Run the validation result = asyncio.run(main()) sys.exit(0 if result else 1)

Latest Blog Posts

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/samhavens/databricks-mcp-server'

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