Skip to main content
Glama
Pranav-Karra-3301

CATA Bus MCP Server

search_stops_tool

Find bus stops by name or ID to get location details for CATA bus routes in State College, PA.

Instructions

Search for stops by name or ID.

Args: query: Search query string to match against stop names, IDs, or descriptions

Returns: List of matching stops with their ID, name, latitude, and longitude

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes

Implementation Reference

  • The main handler function for the 'search_stops_tool' MCP tool. It is registered via the @mcp.tool decorator, ensures GTFS data is initialized, and calls the search_stops helper function.
    @mcp.tool
    async def search_stops_tool(query: str) -> list[dict[str, Any]]:
        """Search for stops by name or ID.
    
        Args:
            query: Search query string to match against stop names, IDs, or descriptions
    
        Returns:
            List of matching stops with their ID, name, latitude, and longitude
        """
        await ensure_initialized()
        if not gtfs_data or not gtfs_data.stops:
            return []
        return await search_stops(gtfs_data, query)
  • Core helper function that implements the stop search logic: performs case-insensitive substring matching on stop_id, stop_name, stop_code, and stop_desc, collects matching stops, and sorts them by name.
    async def search_stops(gtfs_data: GTFSData, query: str) -> list[dict[str, Any]]:
        """
        Search for stops by name or ID.
    
        Args:
            gtfs_data: The GTFS static data.
            query: Search query string.
    
        Returns:
            List of matching stops with id, name, latitude, and longitude.
        """
        query_lower = query.lower()
        results = []
    
        for stop_id, stop in gtfs_data.stops.items():
            # Search in stop ID, name, code, and description
            if (
                query_lower in stop.stop_id.lower()
                or query_lower in stop.stop_name.lower()
                or (stop.stop_code and query_lower in stop.stop_code.lower())
                or (stop.stop_desc and query_lower in stop.stop_desc.lower())
            ):
    
                results.append(
                    {
                        "stop_id": stop.stop_id,
                        "name": stop.stop_name,
                        "lat": stop.stop_lat,
                        "lon": stop.stop_lon,
                    }
                )
    
        # Sort by name for consistency (use empty string for None)
        results.sort(key=lambda x: str(x.get("name") or ""))
        return results
  • Type signature of the tool handler defining input (query: str) and output (list[dict[str, Any]]) schema.
    async def search_stops_tool(query: str) -> list[dict[str, Any]]:

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/Pranav-Karra-3301/catabus-mcp'

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