Skip to main content
Glama

Convex MCP server

Official
by get-convex
test_helpers.rs8.34 kB
#[macro_export] // Turns a mapping of tableName => (index_name, vec![index_fields]) into a // DatabaseSchema struct. macro_rules! db_schema_with_indexes { ($($table:expr => { $( indexes: $(($index_name:expr, $fields:expr)),*$(,)? )? $( staged_db_indexes: $(( $staged_db_index_name:expr, $staged_db_index_fields:expr )),*$(,)? )? $( text_indexes: $(($text_index_name:expr, $text_index_field:expr)),*$(,)? )? $( staged_text_indexes: $(( $staged_text_index_name:expr, $staged_text_index_field:expr )),*$(,)? )? $( vector_indexes: $(($vector_index_name:expr, $vector_index_field:expr)),*$(,)? )? $( staged_vector_indexes: $(( $staged_vector_index_name:expr, $staged_vector_index_field:expr )),*$(,)? )? $( document_schema: $document_schema:expr$(,)? )? }),* $(,)?) => { { #[allow(unused)] let mut tables = std::collections::BTreeMap::new(); { $( let table_name: $crate::types::TableName = $table.parse()?; #[allow(unused)] let mut indexes = std::collections::BTreeMap::new(); $($( let index_name = $crate::index::test_helpers::new_index_name( $table, $index_name, )?; let field_paths = $fields .iter() .map(|s| s.parse()) .collect::<anyhow::Result<Vec<_>>>()?; indexes.insert( index_name.descriptor().clone(), $crate::schemas::IndexSchema { index_descriptor: index_name.descriptor().clone(), fields: field_paths.try_into()?, }, ); )*)? #[allow(unused)] let mut staged_db_indexes = std::collections::BTreeMap::new(); $($( let index_name = $crate::index::test_helpers::new_index_name( $table, $staged_db_index_name, )?; let field_paths = $staged_db_index_fields .iter() .map(|s| s.parse()) .collect::<anyhow::Result<Vec<_>>>()?; staged_db_indexes.insert( index_name.descriptor().clone(), $crate::schemas::IndexSchema { index_descriptor: index_name.descriptor().clone(), fields: field_paths.try_into()?, }, ); )*)? #[allow(unused)] let mut text_indexes = std::collections::BTreeMap::new(); $($( let index_name = $crate::index::test_helpers::new_index_name( $table, $text_index_name, )?; let field_path = $text_index_field.parse()?; text_indexes.insert( index_name.descriptor().clone(), $crate::schemas::TextIndexSchema::new( index_name.descriptor().clone(), field_path, std::collections::BTreeSet::new(), )?, ); )*)? #[allow(unused)] let mut staged_text_indexes = std::collections::BTreeMap::new(); $($( let index_name = $crate::index::test_helpers::new_index_name( $table, $staged_text_index_name, )?; let field_path = $staged_text_index_field.parse()?; staged_text_indexes.insert( index_name.descriptor().clone(), $crate::schemas::TextIndexSchema::new( index_name.descriptor().clone(), field_path, std::collections::BTreeSet::new(), )?, ); )*)? #[allow(unused)] let mut vector_indexes = std::collections::BTreeMap::new(); $($( let index_name = $crate::index::test_helpers::new_index_name( $table, $vector_index_name, )?; vector_indexes.insert( index_name.descriptor().clone(), $crate::schemas::VectorIndexSchema::new( index_name.descriptor().clone(), $vector_index_field.parse()?, 1536u32.try_into()?, Default::default(), )?, ); )*)? #[allow(unused)] let mut staged_vector_indexes = std::collections::BTreeMap::new(); $($( let index_name = $crate::index::test_helpers::new_index_name( $table, $staged_vector_index_name, )?; staged_vector_indexes.insert( index_name.descriptor().clone(), $crate::schemas::VectorIndexSchema::new( index_name.descriptor().clone(), $staged_vector_index_field.parse()?, 1536u32.try_into()?, Default::default(), )?, ); )*)? #[allow(unused)] let mut document_type = None; $( document_type = Some($document_schema); )? let table_def = $crate::schemas::TableDefinition { table_name: table_name.clone(), indexes, staged_db_indexes, text_indexes, staged_text_indexes, vector_indexes, staged_vector_indexes, document_type, }; tables.insert(table_name, table_def); )* } $crate::schemas::DatabaseSchema { tables, schema_validation: true, } } }; } #[test] fn test_db_schema_with_indexes() -> anyhow::Result<()> { // Test with only indexes (curly bracket syntax) db_schema_with_indexes!("table" => { indexes: ("indexname", vec!["a", "b", "c"]) }); // Test with only text_indexes db_schema_with_indexes!("table" => { text_indexes: ("text_indexname", "a") }); // Test with both indexes and text_indexes db_schema_with_indexes!("table" => { indexes: ("indexname", vec!["a"]), text_indexes: ("text_indexname", "a") }); // Test with all index types db_schema_with_indexes!("table" => { indexes: ("indexname", vec!["a"]), staged_db_indexes: ("staged_db_indexname", vec!["a"]), text_indexes: ("text_indexname", "a"), staged_text_indexes: ("staged_text_indexname", "a"), vector_indexes: ("vector_indexname", "a"), staged_vector_indexes: ("staged_vector_indexname", "a"), }); // Test with no indexes (empty table) db_schema_with_indexes!("table" => {}); 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/get-convex/convex-backend'

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