Skip to main content
Glama

CodeGraph CLI MCP Server

by Jakedismo
graphql_client.rs6.9 kB
//! Example of querying the CodeGraph API using GraphQL //! //! This example demonstrates how to: //! - Connect to a running CodeGraph API server //! - Execute GraphQL queries //! - Handle responses //! //! Run with: `cargo run --example graphql_client` //! Note: Requires the API server to be running (see basic_server example) use reqwest; use serde_json::json; use tracing::{info, Level}; use tracing_subscriber; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { // Initialize logging tracing_subscriber::fmt().with_max_level(Level::INFO).init(); // API server endpoint let api_url = "http://localhost:3000/graphql"; info!("Connecting to GraphQL API at: {}", api_url); // Create HTTP client let client = reqwest::Client::new(); // Example 1: Health check query info!("\n=== Health Check Query ==="); let health_query = json!({ "query": r#" query { health version } "# }); let response = client.post(api_url).json(&health_query).send().await?; if response.status().is_success() { let result: serde_json::Value = response.json().await?; info!( "Health check response: {}", serde_json::to_string_pretty(&result)? ); } else { eprintln!("Health check failed: {}", response.status()); } // Example 2: Code search query info!("\n=== Code Search Query ==="); let search_query = json!({ "query": r#" query SearchCode($input: CodeSearchInput!) { searchCode(input: $input) { nodes { id name nodeType language location { filePath line column } } totalCount searchMetadata { queryTimeMs indexUsed } } } "#, "variables": { "input": { "query": "function", "limit": 5, "languageFilter": ["RUST"], "nodeTypeFilter": ["FUNCTION"] } } }); let response = client.post(api_url).json(&search_query).send().await?; if response.status().is_success() { let result: serde_json::Value = response.json().await?; if let Some(data) = result.get("data") { if let Some(search_result) = data.get("searchCode") { let total = search_result .get("totalCount") .and_then(|v| v.as_u64()) .unwrap_or(0); info!("Found {} results", total); if let Some(nodes) = search_result.get("nodes").and_then(|v| v.as_array()) { info!("First {} results:", nodes.len()); for (i, node) in nodes.iter().enumerate() { if let (Some(name), Some(node_type)) = ( node.get("name").and_then(|v| v.as_str()), node.get("nodeType").and_then(|v| v.as_str()), ) { info!(" {}. {} ({})", i + 1, name, node_type); } } } if let Some(metadata) = search_result.get("searchMetadata") { if let Some(time) = metadata.get("queryTimeMs").and_then(|v| v.as_f64()) { info!("Query executed in {:.2}ms", time); } } } } } else { eprintln!("Search query failed: {}", response.status()); } // Example 3: Semantic search query info!("\n=== Semantic Search Query ==="); let semantic_query = json!({ "query": r#" query SemanticSearch($input: SemanticSearchInput!) { semanticSearch(input: $input) { nodes { node { id name nodeType } similarityScore rankingScore } totalCandidates searchMetadata { embeddingTimeMs searchTimeMs vectorDimension } } } "#, "variables": { "input": { "query": "error handling and recovery", "similarityThreshold": 0.7, "limit": 3 } } }); let response = client.post(api_url).json(&semantic_query).send().await?; if response.status().is_success() { let result: serde_json::Value = response.json().await?; if let Some(data) = result.get("data") { if let Some(search_result) = data.get("semanticSearch") { let total = search_result .get("totalCandidates") .and_then(|v| v.as_u64()) .unwrap_or(0); info!("Found {} candidates", total); if let Some(nodes) = search_result.get("nodes").and_then(|v| v.as_array()) { info!("Top {} results by similarity:", nodes.len()); for (i, result) in nodes.iter().enumerate() { if let (Some(node), Some(score)) = ( result.get("node"), result.get("similarityScore").and_then(|v| v.as_f64()), ) { if let Some(name) = node.get("name").and_then(|v| v.as_str()) { info!(" {}. {} (similarity: {:.3})", i + 1, name, score); } } } } if let Some(metadata) = search_result.get("searchMetadata") { if let (Some(embed_time), Some(search_time)) = ( metadata.get("embeddingTimeMs").and_then(|v| v.as_f64()), metadata.get("searchTimeMs").and_then(|v| v.as_f64()), ) { info!( "Embedding: {:.2}ms, Search: {:.2}ms", embed_time, search_time ); } } } } } else { eprintln!("Semantic search failed: {}", response.status()); } info!("\n=== GraphQL client example completed ==="); Ok(()) }

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/Jakedismo/codegraph-rust'

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