Skip to main content
Glama

Smithsonian Open Access MCP Server

by molanojustin
MIT License
233
2
  • Apple
  • Linux
test_comprehensive_pagination.py5.21 kB
""" Test to demonstrate the pagination improvement. This shows that the tool now searches beyond the first 1000 results. """ import asyncio import sys import pytest from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent)) from smithsonian_mcp.api_client import create_client from smithsonian_mcp.models import CollectionSearchFilter pytest.importorskip("pytest_asyncio") @pytest.mark.asyncio async def test_pagination(): """Demonstrate pagination working correctly.""" print("=" * 80) print("Testing Multi-Page Pagination Implementation") print("=" * 80) client = await create_client() try: print("\nTest 1: Search with broad term 'art' to demonstrate pagination") print("-" * 80) batch_size = 1000 max_results = 3000 all_objects = [] offset = 0 batch_results = None while offset < max_results: current_batch_size = min(batch_size, max_results - offset) filters = CollectionSearchFilter( query="art", unit_code="SAAM", on_view=None, limit=current_batch_size, offset=offset, object_type=None, maker=None, material=None, topic=None, has_images=None, has_3d=None, is_cc0=None, date_start=None, date_end=None, ) batch_results = await client.search_collections(filters) all_objects.extend(batch_results.objects) print( f"Batch {offset//batch_size + 1}: " f"Fetched {len(batch_results.objects)} items at offset {offset} " f"(total: {len(all_objects)}/{batch_results.total_count})" ) if not batch_results.has_more: break offset += current_batch_size on_view_items = [obj for obj in all_objects if obj.is_on_view] print(f"\n{'=' * 80}") print(f"RESULTS:") print(f"{'=' * 80}") if batch_results: print( f"Total items in database matching 'art': {batch_results.total_count}" ) print(f"Total items searched: {len(all_objects)}") print(f"On-view items found: {len(on_view_items)}") print( f"\nWith pagination, we searched {len(all_objects)} items instead of just 1000!" ) print(f"\n{'=' * 80}") print("Test 2: Verify Bert and Ernie Puppets are findable") print(f"{'=' * 80}") searches = [ ("sesame street", "NMAH"), ("bert ernie", "NMAH"), ] for query, unit in searches: print(f"\nSearching for '{query}' at {unit}...") filters = CollectionSearchFilter( query=query, unit_code=unit, on_view=None, limit=1000, offset=0, object_type=None, maker=None, material=None, topic=None, has_images=None, has_3d=None, is_cc0=None, date_start=None, date_end=None, ) results = await client.search_collections(filters) on_view = [obj for obj in results.objects if obj.is_on_view] bert_puppet = [ o for o in on_view if "bert puppet" in o.title.lower() and "finger" not in o.title.lower() ] ernie_puppet = [ o for o in on_view if "ernie puppet" in o.title.lower() and "finger" not in o.title.lower() ] print(f" Results: {results.total_count} total, {len(on_view)} on-view") print(f" Bert Puppet found: {'✓ YES' if bert_puppet else '✗ NO'}") print(f" Ernie Puppet found: {'✓ YES' if ernie_puppet else '✗ NO'}") if bert_puppet: print(f" - {bert_puppet[0].title}") print(f" Location: {bert_puppet[0].exhibition_location}") if ernie_puppet: print(f" - {ernie_puppet[0].title}") print(f" Location: {ernie_puppet[0].exhibition_location}") # Test assertions for validation assert len(all_objects) > 1000, "Should have searched more than 1000 items" assert len(on_view_items) >= 0, "Should have found some on-view items" assert results.total_count > 0, "Should have found results in database" print(f"\n{'=' * 80}") print("CONCLUSION:") print(f"{'=' * 80}") print("✓ Multi-page pagination successfully implemented") print("✓ Can now search through up to 10,000 results instead of 1000") print("✓ Bert and Ernie puppets are findable with appropriate search terms") print(" (Use 'sesame street' or 'bert ernie' instead of just 'muppet')") finally: await client.disconnect() if __name__ == "__main__": asyncio.run(test_pagination())

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/molanojustin/smithsonian-mcp'

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