Skip to main content
Glama

solve_beach_code

Search and retrieve beach data by name, province, or municipality using AEMET-MCP server to access Spain's State Meteorological Agency API.

Instructions

Search beaches by name, province, or municipality.

Args: nombre: Search string (accent-insensitive) tipo: One of 'playa', 'provincia', or 'municipio'

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nombreYes
tipoNoplaya

Implementation Reference

  • The handler function for the 'solve_beach_code' MCP tool. It performs fuzzy matching on beach names, provinces, or municipalities using a preloaded JSON dataset and the normalize helper function.
    @mcp.tool()
    def solve_beach_code(nombre: str, tipo: Literal["playa", "provincia", "municipio"] = "playa"):
        """
        Search beaches by name, province, or municipality.
    
        Args:
            nombre: Search string (accent-insensitive)
            tipo: One of 'playa', 'provincia', or 'municipio'
        """
        entrada = normalize(nombre.strip())
        coincidencias = []
    
        for playa in CODIGOS_PLAYAS:
            if tipo == "playa":
                campo = normalize(playa.get("NOMBRE_PLAYA", ""))
            elif tipo == "provincia":
                campo = normalize(playa.get("NOMBRE_PROVINCIA", ""))
            elif tipo == "municipio":
                campo = normalize(playa.get("NOMBRE_MUNICIPIO", ""))
            else:
                return {"error": f"Invalid type '{tipo}'. Use 'playa', 'provincia' or 'municipio'."}
    
            if entrada in campo or difflib.SequenceMatcher(None, entrada, campo).ratio() > 0.75:
                coincidencias.append(playa)
    
        if not coincidencias:
            return {"error": f"No beaches found with {tipo} matching '{nombre}'."}
        return coincidencias
  • Loads the static JSON data file containing beach codes, names, provinces, and municipalities used by the solve_beach_code tool.
    CODIGOS_PLAYAS = json.loads(
        files("aemet_mcp.res").
        joinpath("Beaches_code.json").
        read_text(encoding="utf-8")
    )
  • Helper function to normalize text for accent-insensitive and case-insensitive matching, used in solve_beach_code.
    def normalize(text: str) -> str:
        return unicodedata.normalize("NFKD", text).encode("ascii", "ignore").decode("ascii").lower()
  • The @mcp.tool() decorator registers the solve_beach_code function as an MCP tool.
    @mcp.tool()
  • Function signature with type hints and docstring defining the input schema for the tool.
    def solve_beach_code(nombre: str, tipo: Literal["playa", "provincia", "municipio"] = "playa"):
        """
        Search beaches by name, province, or municipality.
    
        Args:
            nombre: Search string (accent-insensitive)
            tipo: One of 'playa', 'provincia', or 'municipio'
        """

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

Related Tools

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/AnCode666/aemet-mcp'

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