Skip to main content
Glama

CEDAR MCP Server

conftest.py17.1 kB
#!/usr/bin/env python3 import os import pytest from typing import Dict, Any from dotenv import load_dotenv # Load test environment variables load_dotenv(".env.test") @pytest.fixture(scope="session") def cedar_api_key() -> str: """Get CEDAR API key from environment.""" api_key = os.getenv("CEDAR_API_KEY") if not api_key: pytest.skip("CEDAR_API_KEY not found in .env.test") return api_key @pytest.fixture(scope="session") def bioportal_api_key() -> str: """Get BioPortal API key from environment.""" api_key = os.getenv("BIOPORTAL_API_KEY") if not api_key: pytest.skip("BIOPORTAL_API_KEY not found in .env.test") return api_key @pytest.fixture def sample_cedar_template_id() -> str: """Known stable CEDAR template ID for testing.""" return ( "https://repo.metadatacenter.org/templates/92c50790-81cb-4449-ac62-a82edb3ad4e1" ) @pytest.fixture def sample_cedar_template_instance_id() -> str: """Known stable CEDAR template ID for testing.""" return "https://repo.metadatacenter.org/template-instances/60f3206f-13a6-42d3-9493-638681ea7f69" @pytest.fixture def sample_bioportal_branch() -> Dict[str, str]: """Known stable BioPortal branch for testing.""" return { "branch_iri": "http://purl.obolibrary.org/obo/CHEBI_23367", "ontology_acronym": "CHEBI", } @pytest.fixture def sample_field_data_with_branches() -> Dict[str, Any]: """Sample field data containing branch constraints for testing.""" return { "schema:name": "Test Field", "schema:description": "A test field with branch constraints", "skos:prefLabel": "Test Field Label", "_valueConstraints": { "requiredValue": False, "branches": [ { "name": "Sample Branch", "uri": "http://purl.obolibrary.org/obo/CHEBI_23367", "acronym": "CHEBI", } ], }, "@type": "https://schema.metadatacenter.org/core/TemplateField", } @pytest.fixture def sample_field_data_with_classes() -> Dict[str, Any]: """Sample field data containing class constraints for testing.""" return { "schema:name": "Test Class Field", "schema:description": "A test field with class constraints", "skos:prefLabel": "Test Class Field Label", "_valueConstraints": { "requiredValue": True, "classes": [ {"prefLabel": "Sample Class", "@id": "http://example.org/sample-class"} ], }, "@type": "https://schema.metadatacenter.org/core/TemplateField", } @pytest.fixture def sample_field_data_with_literals() -> Dict[str, Any]: """Sample field data containing literal constraints for testing.""" return { "schema:name": "Test Literal Field", "schema:description": "A test field with literal constraints", "skos:prefLabel": "Test Literal Field Label", "_valueConstraints": { "requiredValue": False, "literals": [ {"label": "Option 1"}, {"label": "Option 2"}, {"label": "Option 3"}, ], }, "@type": "https://schema.metadatacenter.org/core/TemplateField", } @pytest.fixture def sample_minimal_template_data() -> Dict[str, Any]: """Minimal template data structure for testing.""" return { "schema:name": "Test Template", "title": "Test Template Schema", "_ui": {"order": ["field1", "field2"]}, "properties": { "field1": { "schema:name": "Field 1", "schema:description": "First test field", "skos:prefLabel": "Field One", "_valueConstraints": {"requiredValue": True}, "@type": "https://schema.metadatacenter.org/core/TemplateField", }, "field2": { "schema:name": "Field 2", "schema:description": "Second test field", "skos:prefLabel": "Field Two", "_valueConstraints": { "requiredValue": False, "literals": [{"label": "Test Option"}], }, "@type": "https://schema.metadatacenter.org/core/TemplateField", }, }, } @pytest.fixture def sample_nested_template_element() -> Dict[str, Any]: """Sample template element with nested fields for testing.""" return { "@type": "https://schema.metadatacenter.org/core/TemplateElement", "schema:name": "Resource Type", "schema:description": "Information about the type of the resource being described with metadata.", "skos:prefLabel": "Resource Type", "_valueConstraints": {"requiredValue": False}, "_ui": { "order": ["Resource Type Category", "Resource Type Detail"], "propertyLabels": { "Resource Type Category": "Resource Type Category", "Resource Type Detail": "Resource Type Detail", }, "propertyDescriptions": { "Resource Type Category": "Categorical type of the resource being described.", "Resource Type Detail": "Brief free-text characterization of the type details.", }, }, "properties": { "Resource Type Category": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Resource Type Category", "schema:description": "Categorical type of the resource being described.", "skos:prefLabel": "Resource Type Category", "_valueConstraints": {"requiredValue": False}, }, "Resource Type Detail": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Resource Type Detail", "schema:description": "Brief free-text characterization of the type details.", "skos:prefLabel": "Resource Type Detail", "_valueConstraints": {"requiredValue": False}, }, }, } @pytest.fixture def sample_array_template_element() -> Dict[str, Any]: """Sample array template element with nested structure for testing.""" return { "type": "array", "minItems": 1, "items": { "@type": "https://schema.metadatacenter.org/core/TemplateElement", "schema:name": "Data File Title", "schema:description": "A name or title by which the Data File being described is known.", "skos:prefLabel": "Data File Title", "_ui": { "order": ["Data File Title", "Title Language"], "propertyLabels": { "Data File Title": "Data File Title", "Title Language": "Title Language", }, "propertyDescriptions": { "Data File Title": "A name or title by which the Data File being described is known.", "Title Language": "Language in which the Data File title is provided.", }, }, "properties": { "Data File Title": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Data File Title", "schema:description": "A name or title by which the Data File being described is known.", "skos:prefLabel": "Data File Title", "_valueConstraints": {"requiredValue": True}, }, "Title Language": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Title Language", "schema:description": "Language in which the Data File title is provided.", "skos:prefLabel": "Title Language", "_valueConstraints": {"requiredValue": False}, }, }, }, } @pytest.fixture def sample_array_template_field() -> Dict[str, Any]: """Sample array template field (array of TemplateFields) for testing.""" return { "type": "array", "minItems": 1, "items": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Notes", "schema:description": "Additional notes or comments about the resource.", "skos:prefLabel": "Notes", "_valueConstraints": {"requiredValue": False}, }, } @pytest.fixture def sample_template_with_array_field() -> Dict[str, Any]: """Template containing an array field (array of TemplateFields) for testing.""" return { "schema:name": "Template with Array Field", "title": "Template with Array Field Schema", "_ui": {"order": ["Simple Field", "Notes Array"]}, "properties": { "Simple Field": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Simple Field", "schema:description": "A simple field for testing", "skos:prefLabel": "Simple Field", "_valueConstraints": {"requiredValue": False}, }, "Notes Array": { "type": "array", "minItems": 1, "items": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Notes", "schema:description": "Additional notes or comments about the resource.", "skos:prefLabel": "Notes", "_valueConstraints": {"requiredValue": False}, }, }, }, } @pytest.fixture def sample_complex_nested_template() -> Dict[str, Any]: """Complex template with multiple levels of nesting and arrays for testing.""" return { "schema:name": "Complex Nested Template", "title": "Complex Nested Template Schema", "_ui": { "order": [ "Simple Field", "Resource Type", "Data File Title", "Data File Spatial Coverage", ] }, "properties": { "Simple Field": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Simple Field", "schema:description": "A simple field for testing", "skos:prefLabel": "Simple Field", "_valueConstraints": {"requiredValue": False}, }, "Resource Type": { "@type": "https://schema.metadatacenter.org/core/TemplateElement", "schema:name": "Resource Type", "schema:description": "Information about the type of the resource.", "skos:prefLabel": "Resource Type", "_valueConstraints": {"requiredValue": False}, "_ui": { "order": ["Resource Type Category", "Resource Type Detail"], }, "properties": { "Resource Type Category": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Resource Type Category", "schema:description": "Categorical type of the resource.", "skos:prefLabel": "Resource Type Category", "_valueConstraints": {"requiredValue": False}, }, "Resource Type Detail": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Resource Type Detail", "schema:description": "Type details for the resource.", "skos:prefLabel": "Resource Type Detail", "_valueConstraints": {"requiredValue": False}, }, }, }, "Data File Title": { "type": "array", "minItems": 1, "items": { "@type": "https://schema.metadatacenter.org/core/TemplateElement", "schema:name": "Data File Title", "schema:description": "Title information for the data file.", "skos:prefLabel": "Data File Title", "_ui": { "order": ["Title Text", "Title Language"], }, "properties": { "Title Text": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Title Text", "schema:description": "The actual title text.", "skos:prefLabel": "Title Text", "_valueConstraints": {"requiredValue": True}, }, "Title Language": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Title Language", "schema:description": "Language of the title.", "skos:prefLabel": "Title Language", "_valueConstraints": {"requiredValue": False}, }, }, }, }, "Data File Spatial Coverage": { "type": "array", "minItems": 1, "items": { "@type": "https://schema.metadatacenter.org/core/TemplateElement", "schema:name": "Data File Spatial Coverage", "schema:description": "Spatial coverage information.", "skos:prefLabel": "Data File Spatial Coverage", "_ui": { "order": ["Latitude", "Longitude", "Nested Coverage"], }, "properties": { "Latitude": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Latitude", "schema:description": "Latitude coordinate.", "skos:prefLabel": "Latitude", "_valueConstraints": {"requiredValue": False}, }, "Longitude": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Longitude", "schema:description": "Longitude coordinate.", "skos:prefLabel": "Longitude", "_valueConstraints": {"requiredValue": False}, }, "Nested Coverage": { "type": "array", "minItems": 1, "items": { "@type": "https://schema.metadatacenter.org/core/TemplateElement", "schema:name": "Nested Coverage", "schema:description": "Nested coverage details.", "skos:prefLabel": "Nested Coverage", "_ui": { "order": ["Point Number", "Point Description"], }, "properties": { "Point Number": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Point Number", "schema:description": "Sequential point number.", "skos:prefLabel": "Point Number", "_valueConstraints": {"requiredValue": False}, }, "Point Description": { "@type": "https://schema.metadatacenter.org/core/TemplateField", "schema:name": "Point Description", "schema:description": "Description of the point.", "skos:prefLabel": "Point Description", "_valueConstraints": {"requiredValue": False}, }, }, }, }, }, }, }, }, }

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/BACH-AI-Tools/cedar-mcp'

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