{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_wrymg5q2z34z","handle":"iflow-mcp-gbaeke-mcp-obo","url":"https://wellknown.network/agents/iflow-mcp-gbaeke-mcp-obo","links":{"self":"https://wellknown.network/agents/iflow-mcp-gbaeke-mcp-obo/record.json","html":"https://wellknown.network/agents/iflow-mcp-gbaeke-mcp-obo","markdown":"https://wellknown.network/agents/iflow-mcp-gbaeke-mcp-obo/record.md","api":"https://wellknown.network/api/v1/agents/iflow-mcp-gbaeke-mcp-obo","status":"https://wellknown.network/api/v1/agents/iflow-mcp-gbaeke-mcp-obo/status","claim":"https://wellknown.network/agents/iflow-mcp-gbaeke-mcp-obo/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/iflow-mcp-gbaeke-mcp-obo/claim.json","badge":"https://wellknown.network/agents/iflow-mcp-gbaeke-mcp-obo/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/iflow-mcp-gbaeke-mcp-obo/history","tools":"https://wellknown.network/api/v1/agents/iflow-mcp-gbaeke-mcp-obo/tools"},"ard":{"identifier":"urn:air::server:iflow-mcp-gbaeke-mcp-obo","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"iflow-mcp_gbaeke_mcp-obo","summary":"MCP Server with Azure Entra ID Authentication and OBO flow for Microsoft Search","description":"# On-behalf-of flow with Entra ID and FastMCP\n\nBlog post: https://baeke.info/2025/07/29/end-to-end-authorization-with-entra-id-and-mcp/\n\n## Instructions\n\n### 1. Create and activate a Python virtual environment\n\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate\n```\n\n### 2. Install dependencies\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. Set up environment variables\n\nCreate a `.env` file in the project root with the required Azure and API credentials (see example files for required variables).\n\n### 4. Start the MCP server\n\n```bash\npython -m mcp.main\n```\n\n### 5. Run the MCP client\n\nIn a new terminal (with the virtual environment activated):\n\n```bash\npython mcp_client.py\n```\n\n## Diagrams\n\n```mermaid\nsequenceDiagram\n    autonumber\n    participant User\n    participant Client\n    participant AzureAD as \"Azure Entra ID\"\n    participant MCP\n    participant MSGraph\n\n    User->>Client: Initiate Device Flow\n    Client->>AzureAD: Start Device Code Flow\n    AzureAD-->>Client: Device Code + Verification URL\n    Client->>User: Show Code + URL\n\n    User->>AzureAD: Authenticates via browser\n    AzureAD-->>Client: Returns Access Token (for MCP)\n\n    Client->>MCP: Call tool with Bearer Access Token\n    MCP->>AzureAD: OBO request for token to call MS Graph\\n(include access token as assertion)\n    AzureAD-->>MCP: Returns new Access Token (for MS Graph)\n\n    MCP->>MSGraph: Call Graph API with new token\n    MSGraph-->>MCP: Graph data\n    MCP-->>Client: Return tool result\n```","publisher":null,"homepage":null,"repository":null,"version":"0.1.1","license":null,"protocols":["mcp"],"tags":["mcp"],"pricing":null,"endpoints":[{"url":"pypi:iflow-mcp_gbaeke_mcp-obo","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","summary":"pypi","version":"pypi","description":"pypi"}},"derived":{"capabilities":[{"slug":"security.identity","name":"Identity & Access","confidence":0.917,"provenance":"derived"},{"slug":"dev.terminal","name":"Terminal & Shell","confidence":0.779,"provenance":"derived"}],"categories":["dev","security"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"iflow-mcp_gbaeke_mcp-obo","registry":"pypi","observedAt":"2026-09-15T18:21:44.491Z","publishedAt":"2026-01-20T06:10:06.440306Z","latestVersion":"0.1.1"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"iflow-mcp_gbaeke_mcp-obo","url":"https://pypi.org/project/iflow-mcp_gbaeke_mcp-obo/","firstSeenAt":"2026-09-09T19:23:06.206Z","fetchedAt":"2026-09-15T18:19:36.304Z","normalizedAt":"2026-09-15T18:19:36.304Z"}]},"firstSeenAt":"2026-09-09T19:23:06.206Z","updatedAt":"2026-09-15T18:21:44.491Z"}