Skip to main content
Glama
advanced_language_query_tool.py3.38 kB
import re import logging #importing all the language toolkits from ..tools.query_tool_languages.c_toolkit import CToolkit from ..tools.query_tool_languages.cpp_toolkit import CppToolkit from ..tools.query_tool_languages.go_toolkit import GoToolkit from ..tools.query_tool_languages.java_toolkit import JavaToolkit from ..tools.query_tool_languages.javascript_toolkit import JavascriptToolkit from ..tools.query_tool_languages.python_toolkit import PythonToolkit from ..tools.query_tool_languages.ruby_toolkit import RubyToolkit from ..tools.query_tool_languages.rust_toolkit import RustToolkit from ..tools.query_tool_languages.typescript_toolkit import TypescriptToolkit from ..core.database import DatabaseManager from ..utils.debug_log import debug_log logger = logging.getLogger(__name__) class Advanced_language_query: """ Tool implementation for executing a read-only language specific Cypher query. Important: Includes a safety check to prevent any database modification by disallowing keywords like CREATE, MERGE, DELETE, etc. """ TOOLKITS = { "c": CToolkit, "cpp": CppToolkit, "go": GoToolkit, "java": JavaToolkit, "javascript": JavascriptToolkit, "python": PythonToolkit, "ruby": RubyToolkit, "rust": RustToolkit, "typescript": TypescriptToolkit } Supported_queries = { "repository": "Repository", "directory": "Directory", "file": "File", "module": "Module", "function": "Function", "class": "Class", "struct": "Struct", "enum": "Enum", "union": "Union", "macro": "Macro", "variable": "Variable" } def __init__(self, db_manager: DatabaseManager): self.db_manager = db_manager def advanced_language_query(self, language: str, query: str): # Validating whether query is valid or not query = query.strip().lower() if query not in self.Supported_queries: raise ValueError( f"Unsupported query type '{query}'" f"Supported: {', '.join(self.Supported_queries.keys())}" ) label = self.Supported_queries[query] # Set toolkit for the specified language language = language.lower() if language not in self.TOOLKITS: raise ValueError(f"Unsupported language: {language}") self.toolkit = self.TOOLKITS[language]() # Getting the language query cypher_query = self.toolkit.get_cypher_query(label) try: debug_log(f"Executing Cypher query: {cypher_query}") with self.db_manager.get_driver().session() as session: result = session.run(cypher_query) # Convert results to a list of dictionaries for clean JSON serialization records = [record.data() for record in result] return { "success": True, "language": language, "query": cypher_query, "results": records } except Exception as e: debug_log(f"Error executing Cypher query: {str(e)}") return { "error": "An unexpected error occurred while executing the query.", "details": str(e) }

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/Shashankss1205/CodeGraphContext'

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