Skip to main content
Glama

complete_authentication

Validate user authentication using a device code to access Microsoft Graph API for managing Outlook, Calendar, OneDrive, and Contacts.

Instructions

Complete the authentication process after the user has entered the device code

Args: flow_cache: The flow data returned from authenticate_account (the _flow_cache field) Returns: Account information if authentication was successful

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
flow_cacheYes

Implementation Reference

  • The complete_authentication tool handler: completes Microsoft account authentication using device flow after user input. Decorated with @mcp.tool for automatic registration with the FastMCP server.
    @mcp.tool def complete_authentication(flow_cache: str) -> dict[str, str]: """Complete the authentication process after the user has entered the device code Args: flow_cache: The flow data returned from authenticate_account (the _flow_cache field) Returns: Account information if authentication was successful """ import ast try: flow = ast.literal_eval(flow_cache) except (ValueError, SyntaxError): raise ValueError("Invalid flow cache data") app = auth.get_app() result = app.acquire_token_by_device_flow(flow) if "error" in result: error_msg = result.get("error_description", result["error"]) if "authorization_pending" in error_msg: return { "status": "pending", "message": "Authentication is still pending. The user needs to complete the authentication process.", "instructions": "Please ensure you've visited the URL and entered the code, then try again.", } raise Exception(f"Authentication failed: {error_msg}") # Save the token cache cache = app.token_cache if isinstance(cache, auth.msal.SerializableTokenCache) and cache.has_state_changed: auth._write_cache(cache.serialize()) # Get the newly added account accounts = app.get_accounts() if accounts: # Find the account that matches the token we just got for account in accounts: if ( account.get("username", "").lower() == result.get("id_token_claims", {}) .get("preferred_username", "") .lower() ): return { "status": "success", "username": account["username"], "account_id": account["home_account_id"], "message": f"Successfully authenticated {account['username']}", } # If exact match not found, return the last account account = accounts[-1] return { "status": "success", "username": account["username"], "account_id": account["home_account_id"], "message": f"Successfully authenticated {account['username']}", } return { "status": "error", "message": "Authentication succeeded but no account was found", }
  • The @mcp.tool decorator registers the complete_authentication function as an MCP tool.
    @mcp.tool

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/elyxlz/microsoft-mcp'

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