Skip to main content
Glama
zizzfizzix

Bing Webmaster Tools MCP Server

by zizzfizzix

add_site_roles

Delegate site access to users in Bing Webmaster Tools by assigning administrator or read-only roles with authentication codes.

Instructions

Delegate site access to a user.

Args: site_url: The URL of your site delegated_url: The URL being delegated user_email: The email of the user to delegate access to authentication_code: The authentication code is_administrator: Whether the user should have administrator privileges is_read_only: Whether the user should have read-only access

Raises: BingWebmasterError: If the role assignment fails

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
selfYes
site_urlYes
delegated_urlYes
user_emailYes
authentication_codeYes
is_administratorYes
is_read_onlyYes

Implementation Reference

  • Generic handler factory for MCP tools. Creates an @mcp.tool()-decorated wrapper function that preserves the original service method's signature and docstring (used as schema), enters the service context, retrieves the named service object (e.g., 'sites'), and invokes its method (e.g., 'add_site_roles') with user arguments.
    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
  • Registers the 'add_site_roles' tool by invoking the handler factory with parameters targeting the SiteManagementService.add_site_roles method.
    add_site_roles = wrap_service_method(mcp, service, "sites", "add_site_roles") # noqa: F841
  • Invokes the tool registration function to add all Bing Webmaster Tools to the MCP server, including 'add_site_roles'.
    add_bing_webmaster_tools(mcp, bing_service)
  • Mapping used by the handler to resolve service attribute ("sites") to class for signature extraction.
    SERVICE_CLASSES = { "sites": site_management.SiteManagementService, "submission": submission.SubmissionService, "traffic": traffic_analysis.TrafficAnalysisService, "crawling": crawling.CrawlingService, "keywords": keyword_analysis.KeywordAnalysisService, "links": link_analysis.LinkAnalysisService, "content": content_management.ContentManagementService, "blocking": content_blocking.ContentBlockingService, "regional": regional_settings.RegionalSettingsService, "urls": url_management.UrlManagementService, }
  • BingWebmasterService context manager entry point, instantiates and exposes the 'sites' service instance used by the tool handler.
    async def __aenter__(self) -> "BingWebmasterService": self.client = BingWebmasterClient(self.settings) await self.client.__aenter__() # Expose all services directly self.sites = site_management.SiteManagementService(self.client) self.submission = submission.SubmissionService(self.client) self.traffic = traffic_analysis.TrafficAnalysisService(self.client) self.crawling = crawling.CrawlingService(self.client) self.keywords = keyword_analysis.KeywordAnalysisService(self.client) self.links = link_analysis.LinkAnalysisService(self.client) self.content = content_management.ContentManagementService(self.client) self.blocking = content_blocking.ContentBlockingService(self.client) self.regional = regional_settings.RegionalSettingsService(self.client) self.urls = url_management.UrlManagementService(self.client) return self

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/zizzfizzix/mcp-server-bwt'

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