get_link_counts
Retrieve the total number of links pointing to your site, organized by source. Specify a site URL and page number to get paginated link counts, helping you analyze your backlink profile.
Instructions
Retrieve link counts for a specific site.
Args: site_url: The URL of the site page: The page number of results to retrieve
Returns: LinkCounts: Summary of link counts
Raises: BingWebmasterError: If link counts cannot be retrieved
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| self | Yes | ||
| site_url | Yes | ||
| page | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Links | Yes | ||
| TotalPages | Yes |
Implementation Reference
- mcp_server_bwt/tools/bing_webmaster.py:160-160 (registration)Tool 'get_link_counts' is registered using wrap_service_method, wrapping the 'get_link_counts' method on link_analysis.LinkAnalysisService (the 'links' service attribute). The actual handler is the method 'get_link_counts' in the external package 'bing_webmaster_tools.services.link_analysis.LinkAnalysisService'.
get_link_counts = wrap_service_method(mcp, service, "links", "get_link_counts") # noqa: F841 - The wrap_service_method helper dynamically wraps any service method as an MCP tool by capturing its signature, docstring, and creating an async wrapper that calls the service method via the BingWebmasterService context manager.
def wrap_service_method( mcp: FastMCP, service: BingWebmasterService, service_attr: str, method_name: str ) -> Callable[..., Any]: """Helper function to wrap a service method with mcp.tool() while preserving its signature and docstring. Args: mcp: The MCP server instance service: The BingWebmasterService instance service_attr: The service attribute name (e.g., 'sites', 'submission') method_name: The method name to wrap Returns: The wrapped method as an MCP tool """ # Get the service class from our mapping service_class = SERVICE_CLASSES[service_attr] # Get the original method original_method = getattr(service_class, method_name) # Get the signature sig = inspect.signature(original_method) # Remove 'self' parameter from signature parameters = list(sig.parameters.values())[1:] # Skip 'self' # Create new signature without 'self' new_sig = sig.replace(parameters=parameters) # Create wrapper function with same signature @mcp.tool() @wraps(original_method) async def wrapper(*args: Any, **kwargs: Any) -> Any: # Filter out any 'self' arguments that might be passed by the MCP client kwargs = {k: v for k, v in kwargs.items() if k != "self"} async with service as s: service_obj = getattr(s, service_attr) # Get the method from the instance method = getattr(service_obj, method_name) # Call the method directly - it's already bound to the instance return await method(*args, **kwargs) # Copy signature and docstring wrapper.__signature__ = new_sig # type: ignore wrapper.__doc__ = original_method.__doc__ return wrapper