Skip to main content
Glama
isiahw1

mcp-server-bing-webmaster

get_url_info

Retrieve detailed index information for specific URLs to monitor search engine visibility and performance.

Instructions

Get detailed index information for a specific URL.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
site_urlYes
urlYes

Implementation Reference

  • The handler function implementing the get_url_info tool logic. It takes site_url and url parameters, calls the Bing Webmaster API's GetUrlInfo endpoint via _make_request, adds MCP-compatible __type field, and returns the info.
    async def get_url_info(
        site_url: Annotated[str, "The URL of the site"],
        url: Annotated[str, "The specific URL to check"],
    ) -> Dict[str, Any]:
        """
        Get detailed index information for a specific URL.
    
        Args:
            site_url: The URL of the site
            url: The specific URL to check
    
        Returns:
            Detailed information about the URL's index status
        """
        async with api:
            info = await api._make_request(f"GetUrlInfo?siteUrl={site_url}&url={url}")
            return api._ensure_type_field(info, "UrlInfo")
  • Registration of the get_url_info tool with FastMCP using the @mcp.tool decorator. The input schema is automatically generated from the Annotated type hints in the handler function signature.
    @mcp.tool(
        name="get_url_info",
        description="Get detailed index information for a specific URL.",
    )
  • Helper method in BingWebmasterAPI class to add __type fields to API responses for MCP compatibility, specifically called in get_url_info with 'UrlInfo'.
    def _ensure_type_field(self, data: Any, type_name: str) -> Any:
        """Ensure __type field is present for MCP compatibility."""
        if isinstance(data, list):
            for item in data:
                if isinstance(item, dict) and "__type" not in item:
                    item["__type"] = f"{type_name}:#Microsoft.Bing.Webmaster.Api"
        elif isinstance(data, dict) and "__type" not in data:
            data["__type"] = f"{type_name}:#Microsoft.Bing.Webmaster.Api"
        return data
  • Core helper method in BingWebmasterAPI class that performs HTTP requests to the Bing Webmaster API, handles OData responses, and is used by get_url_info to call the GetUrlInfo endpoint.
    async def _make_request(
        self,
        endpoint: str,
        method: str = "GET",
        json_data: Optional[Dict[str, Any]] = None,
        params: Optional[Dict[str, Any]] = None,
    ) -> Any:
        """Make a request to the Bing API and handle OData responses."""
        if not self.client:
            raise RuntimeError(
                "API client not initialized. Use 'async with api:' context manager."
            )
    
        headers = {"Content-Type": "application/json; charset=utf-8"}
    
        # Build URL with API key
        if "?" in endpoint:
            url = f"{self.base_url}/{endpoint}&apikey={self.api_key}"
        else:
            url = f"{self.base_url}/{endpoint}?apikey={self.api_key}"
    
        # Add additional parameters if provided
        if params:
            for key, value in params.items():
                url += f"&{key}={value}"
    
        try:
            if method == "GET":
                response = await self.client.get(url, headers=headers)
            else:
                response = await self.client.request(
                    method, url, headers=headers, json=json_data
                )
    
            if response.status_code != 200:
                error_text = response.text
                logger.error(f"API error {response.status_code}: {error_text}")
                raise Exception(f"API error {response.status_code}: {error_text}")
    
            data = response.json()
    
            # Handle OData response format
            if "d" in data:
                return data["d"]
            return data
    
        except httpx.TimeoutException:
            logger.error(f"Request timeout for {endpoint}")
            raise Exception("Request timed out")
        except Exception as e:
            logger.error(f"Request failed: {str(e)}")
            raise

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/isiahw1/mcp-server-bing-webmaster'

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