Skip to main content
Glama
2025-12-17_1515_msgraph-mcp-architecture-elk.svg63.9 kB
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="0.7.1" preserveAspectRatio="xMinYMin meet" viewBox="0 0 2380 1386"><svg class="d2-1375012433 d2-svg" width="2380" height="1386" viewBox="-89 -140 2380 1386"><rect x="-89.000000" y="-140.000000" width="2380.000000" height="1386.000000" rx="0.000000" fill="#FFFFFF" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[ .d2-1375012433 .text { font-family: "d2-1375012433-font-regular"; } @font-face { font-family: d2-1375012433-font-regular; src: url("data:application/font-woff;base64,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"); } @font-face { font-family: d2-1375012433-font-semibold; src: url("data:application/font-woff;base64,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"); } .d2-1375012433 .text-bold { font-family: "d2-1375012433-font-bold"; } @font-face { font-family: d2-1375012433-font-bold; src: url("data:application/font-woff;base64,d09GRgABAAAAABM0AAoAAAAAHLAAAguFAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAGAAAABgXxHXrmNtYXAAAAFUAAAAvQAAAQIF7wa1Z2x5ZgAAAhQAAAwcAAAQgAj/XIhoZWFkAAAOMAAAADYAAAA2G38e1GhoZWEAAA5oAAAAJAAAACQKfwX4aG10eAAADowAAADJAAAA5HCUCfxsb2NhAAAPWAAAAHQAAAB0eJx8wG1heHAAAA/MAAAAIAAAACAAUQD3bmFtZQAAD+wAAAMoAAAIKgjwVkFwb3N0AAATFAAAAB0AAAAg/9EAMgADAioCvAAFAAACigJYAAAASwKKAlgAAAFeADIBKQAAAgsHAwMEAwICBGAAAvcAAAADAAAAAAAAAABBREJPACAAIP//Au7/BgAAA9gBESAAAZ8AAAAAAfAClAAAACAAA3icfM05LkQBHIDx3/Oesc2Mse/j2WfsY60lQohCJOqJUvQiToXedggHcAmF5i95B/C1X/FDIpWgLPODuppUVa5pw6ZDx06du3St7da9xwjkGsVvOXLizIUrbTfuPETEt4qSLH7jMz7iPd7iNb7iJZ7jqdD+K7HvwK4da9YLY8u2lg6pTKeSLt169OpTVlHVr2bAoD1Dho0YNWbchElTps2om5WbM2/BoiXLVjQ0rfIHAAD//wEAAP//X2ImkQAAAHichFd7bFvndT/fR4q06GtJfFy+xNflFe/lQ6JEXl5ePShRlEjqYVJPW5ZjPRzBiR+yZdWWKyVWmgJ1Eiyh67RyE6XekqxI0W5IBgTugDSbN2zAkBk1sA5JZ2BokywNsqzZGq0jujSTLofvkpQtd8D+MD9DuPd853fO7/c750INjAHgBXwdVFAL9WAAGkDQM3qfwPOsVhIkibWoJB7ptWPYIH//NT6gDgTUQc+m+/H5eZSfw9d3zh7LLyz8dr6rS375x2/LV9HFtwFw6UsA3I8LUAt6AKNW4DmOZzUalVEwsjyr/aThufoDjQfUlO3LO2/e+UP/O340nEhEloTYOfkpXNhZuXEDAEAFeQCcwAXQgx28JDchajbTJo2WVg4NqxKicTHGsaxeiCpn/oP02d4Wf7Q/fWFgPhOPRGPZyccS3ZO44MwmQ5P16gMHU/2HAuiZIMt55OnpkA8AQbhUxG14ExoBarwcJ8bicSFqtmg5jvVqNLTJLETjkkWDZieenTx8dSJ5ghmxSWzzUGhq0J+0jkxQue+cO/vSuOCdszijc30nlptsM8cBK/nncAF05cpWstewvBCNk7xJwm+d+Pb42LXjLY72yXB4st2BC+lry8vfHlj1z4yMHPUByS8PgD5V6kn6QzO0QLN0Ht2Qv/joI1xYf3F9B6CKI403wf1/4ajAEFlR0Gs06NzRbx0+8vyRgUc9eVt7MHd85piJo87+2vuVCpgYM2d2LS+cWNbpltfk95hwOQ/4EBdApaDR5zdIswBBQ6mIbuICNABYvBwvmclNol7QmzSaj4Yf9Z4wtNn8gY3mWaqra5jxRFLoB3I+eaqniu0jXICackyGzm8gjAs7W+tQxY7fwAWCSdALRrPZIsTjklHQswSexGq1LM+zLkzT+T8+rTPo1Dq97uSrT2trVWpxdnw2plbv0+KC/L6jx+XqcSDvzsrnntEx943f/e6Ge2zU83n1DtInY/kOi8BxoijoWRXPms00nX/xT3vV6roCOWoO4IL8l8/Hvt75yc4Kynwzvt75rwCAldp/DW9C/QMsUjrOl2mqNAFNTT918OBT0+Xf/pGR/v6REWripTOL3xkdfeHMmZcmnlxZWFhaWlhYgQqH2nABKDDt4RBL73L+w8FL2exKZnxwrTeRxgV+ZjS30PoLNHFKCAJUY0ziAtSB5X4VETGSKGUJ5T/LXEgnxevff2I819nd3ZnDBd/0yOCsRf6fzz5DxyNtbRypFVsqYh3ehKCCstrrGMfzYfx7hLNYytkiU++T0UPslD/cIoQOMwmu63S6fTl40NPLcy0dwUNd2c4lqi38iIvzOt1OQ1Nda7Y1Ph1rDs7aGt0Ol0vvtR7KxGfaAYENABtxAbQECSsyNKu/cxN9eRM3rK/vbJU5M1Qq4lHFN0iOChHvMRKNPPn09U5JSnzzG9QLr6E5eeN4LnccnZO/99oLgCFYKqL30DbYgFXYLMbikgJHyyvgaD1LvEwiUlK84a/SY1c2MBtw9zaJrYud84+u6dTugX02n3Ek4aaOJEem6xneSj/sbFq6IH8sONgLFuMRXchptSi9SZWK2IxvgamiWp7VsnqB1j5AHtZLTA9lmH6nmrq4oXamvYnp1sT8NBefag6Y/BTjEfGt13N2Z89XcocfS65lc0+3/MRQp9SjqVREt9A22B/0hXu2YNFokC1zPjX41XR4wJFhPWIy2WYNGzt9U1T3pYnJlW6XZd6ZS/Xm6frjnsYyr/hSEW3jW2AET7VWSmCeiGe3SlUy/GbmfNd8LNBu02ys6dT2LLbyBmPIxMZbqeceG7/U47Dm/mSnP2Jn10y2nxjq+geGMoCV3P8FbYP1AVdTGMwQ9pHcVYIiL+QeuNDXf7ZrYLZVjeW7umxEjEe4ue/e5Ju9capnZWJ8JZlcTBt9tXGBOWp3oc6A2FrmjBUAreDb5CS8kh7gMrFc/UN9fU1j/e5YQ+MBO9XoOnoUPXGuplGcilGaszU1DOe6KH+DzC1vqQVr0Ta0QhcMK5XhxBgpBCGTWIVgEWi2ImYvr/SB0Muk0ajucwtjRZ1eTnnkN51z7QPGRo/VHuicE5uZPx/V1samJafb4A2MzTycXh928rzTyfOBaC/vE2wM1dj9rr29OeFXH/C7G6MNakM6lBj1U4v7vaaO4SZdvdlo6OoXxsPodjDAB/z+QFDeaLJZGlQqq83hLNcmRZqtcJS4R4WbtJ7VK1lq9akNreNgdHxow+lx+K341utHbaHFWfkOYuJ+m0V+E0olkADgF/hdzCn/00I7PLsb24VvAVX2f0ESiC9p6dQ19R+9+md/8cpyEt+Sl/7ujvzzvxl4nDxfKiIDvgX1ZcZVtU1I8Pe5rg19bY1WY6B81LGDmN25azEgdK5GW75H5UTbwCj3kCFCursHiXb3TBENZyNiysgMR8YObjg9vjby04q2et0tIb83UoXXJr9ZOap1QtuVOlXuuL9Oazq1J79bKLSVdLXsqVOZ7wp3/v85Yk6eT6fPJ5NL6fRSsiUcbgm3tFS02r0yOXGpezXfm8oRyZZ9ZhCb0TYYwQVguZedQj+Ot9DGezZD8nQO8Q+dSszHPQl7zSgXnwoFTf638A8jdvYPLh5eSzbaRr+FmnZNhnjBINpW4nsAakRJCVsVkSAJetX9XoBOa2x93rIh9BBH+3jXDN56MWd1K4bg9ER2plHTPTeo8AVdQ9tg2NPHskrLFW7McbRDZz1ga3B0m9DWkWikpuZJtToQlT8EBHSpiF5B28Dv2VViHFeeX7vByPRyYdqkeTdykuvzJt2Myxm2u7r8pw93HHH32WP2jg7O0x04RXHuGVujxag3G3VUU0cgM8Vbp01m3mqr2892hPtnyxrSl4poCa+QCUxmksiKkiQoi9w9A4aZ0XRO//jqKuukbDqLUaLOTN0+p7ly5eI7QZ9GvaihyrESpSL6Am0Rnu3RgL5iu/80PrTh8jg488bafpV7mFqcRTH5AzFgd6JBuSHjawZE9IZKaAsOAAgqwVLZqyRBdfMH13t1Rp261qhLXf0e2vqVL8/zed+v5Abl7joAVERbZA4LRv6+F7UWtrLna7V1m9debtaZdep9hn3ezedfermNslDqWlMtj/Cvx+gQTYfosdJ/TtDNNB0yT5C4VKkH7aAtwvp7fZGkPanV4TUzU2/XGvb5/DrtX18f2G/QqffpaxNXX7e0j/6tRr2MapqcdvTLn3mzPnaA/Zm8v+dwsFwzsrz8CG0pO7RoJIuDSqC5n/4YLf/07igKXxyR//EieS4LgP4ZX1b8iIwxMR6XiOlln12NDXrPrq6i88d0DtPO9mo5rgsAfYyfAQd5vgeX5VnZFRR1EbcUaN/4E9lIwCtZx1oX0sk5sWsmZk2Yv34o/8TpltYIbx+NCtFj3eL583FVzTqJay4V0Qf4GQg8yFNWrJpAdSO590H0X/lzbNqZ9be2O4YzU71+ziu5hpsXOhcekwRpILVIRf2zjia+yREwn2rlGJ/L/hAXOjYZyZrVDfmerslQea4bAdAX+DLUEoYZBTK1SFuNIiMaSS1Y+tWna5CastdF5f/49EdDQ2jfSfe4yx5vlJc2H0Ffk68ubxIMllIRfYgvk8m9B4OSu5GhWe1ulf575CzX50z7I53tzQ6fs8+ATv3bfoaTjrWnzlAx36zdF420ResMQZRaX60PHklnT8SUXAOlIvp3/AzsBz8A8mq01UtUv/8lp921PGS0CSZdO8O0trq6lzJDl/qTM658g+RgO1mVbcg5sdg5j3xO78GOSDwalP8h9dz51c2hFve0odF3ZNjDzj/SNx9T+t8MgD7BlxUd9WCJERm6TqV9RePNJuRforelfl+D+swPvzu5/lD/Vy8/P6u8010qwufwBuyvbk3lrF7gBIHjBIESeb8o+nmRPBuC24hBEfLNJYkCHfrt7VOnynpZQZ+W3iF/t4gMTaGfFyYnAcFgKY/8+AOSj6W8cFiUNdVyJ5nJJGekaFS6efL9K1feP8k9fHfxzN0FQNBWyqOGyju88mVKekWbNIWZ9mi0fSaZydzkFu6eWbz7MKe8W/ZheA9tVb8FUxtoS24AVHoDd8Akfpdg09+HzRcO+3zhMO4IsmyQ/IP/BQAA//8BAAD//7nrgG8AAQAAAAILhZkVgF9fDzz1AAED6AAAAADYXaCEAAAAAN1mLzb+N/7ECG0D8QABAAMAAgAAAAAAAAABAAAD2P7vAAAImP43/jcIbQABAAAAAAAAAAAAAAAAAAAAOXicHMqxLnNhHIDx5/98SZMvTnhFFUsHTgg9TmwkeoZ3aUi8iYGkBqOrkHAH9t4Di9UNGGxuxdREKuw/X7nkHewWc28pTmi9p1hRfKCNQ0p8k+xRnFOcUXym9YriHcWGHRu2nHHuCgd25PiktmPPHnVcs+mAbU/J0efYmhxD8r8bsmOyoz+bf308keON9Xhk1RPGLlEpy/6nig92TUxMDE0MTKyZ2DCxb6KJhi4uGMUXVUw5iylH0SfD4uUHAAD//wEAAP//+Qsf7AAAAAAAACwALABQAIQAsADUAOgBGAEkAUIBUgGEAaYB0gH0AhoCWgJsAooCwgL0AyADUgOGA6wEFAQ2BEIEWgR2BKgEygT2BSYFWgV6BbYF3AX+BhoGRgZ2BooGogbOBwwHMAdiB6IHvAfSB94H6ggECB4IKghAAAEAAAA5AJAADABjAAcAAQAAAAAAAAAAAAAAAAAEAAN4nJyUz24bVRTGf05s0wrBAkVVuonugkWR6NhUSdU2K4fUikUUB48LQkJIE8/4jzKeGXkmDuEJWPMWvEVXPATPgVij+Xzs2AXRJoqSfHfu+fOdc75zgR3+ZptK9SHwRz0xXGGvfm54iwf1E8PbtOtbhqs8qf1puEZYmxuu83mtZ/gj3lZ/M/yA/epPhh+yW20b/phn1R3Dn2w7/jL8Kfu8XeAKvOBXwxV2yQxvscOPhrd5hMWsVHlE03CNz9gzXGcP6DOhIGZCwgjHkAkjrpgRkeMTMWPCkIgQR4cWMYW+JgRCjtF/fg3wKZgRKOKYAkeMT0xAztgi/iKvlHNlHOo0s7sWBWMCLuRxSUCCI2VESkLEpeIUFGS8okGDnIH4ZhTkeORMiPFImTGiQZc2p/QZMyHH0VakkplPypCCawLld2ZRdmZAREJurK5ICMXTiV8k7w6nOLpksl2PfLoR4Usc38m75JbK9is8/bo1Zpt5l2wC5upnrK7EurnWBMe6LfO2+Fa44BXuXv3ZZPL+HoX6XyjyBVeaf6hJJWKS4NwuLXwpyHePcRzp3MFXR76nQ58Turyhr3OLHj1anNGnw2v5dunh+JouZxzLoyO8uGtLMWf8gOMbOrIpY0fWn8XEIn4mM3Xn4jhTHVMy9bxk7qnWSBXefcLlDqUb6sjlM9AelZZO80u0ZwEjU0UmhlP1cqmN3PoXmiKmqqWc7e19uQ1z273lFt+QaodLtS44lZNbMHrfVL13NHOtH4+AkJQLWQxImdKg4Ea8zwm4IsZxrO6daEsKWiufMs+NVBIxFYMOieLMyPQ3MN34xn2woXtnb0ko/5Lp5aqq+2Rx6tXtjN6oe8s737ocrU2gYVNN19Q0ENfEtB9pp9b5+/LN9bqlPOWIlJjwXy/AMzya7HPAIWNlGOhmbq9DUy9Ek5ccqvpLIlkNpefIIhzg8ZwDDnjJ83f6uGTijItbcVnP3eKYI7ocflAVC/suR7xeffv/rL+LaVO1OJ6uTi/uPcUnd1DrF9qz2/eyp4mVk5hbtNutOCNgWnJxu+s1ucd4/wAAAP//AQAA///0t09ReJxiYGYAg//nGIwYsAAAAAAA//8BAAD//y8BAgMAAAA="); } .d2-1375012433 .text-italic { font-family: "d2-1375012433-font-italic"; } @font-face { font-family: d2-1375012433-font-italic; src: url("data:application/font-woff;base64,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"); }]]></style><style type="text/css"><![CDATA[.shape { shape-rendering: geometricPrecision; stroke-linejoin: round; } .connection { stroke-linecap: round; stroke-linejoin: round; } .blend { mix-blend-mode: multiply; opacity: 0.5; } .d2-1375012433 .fill-N1{fill:#0A0F25;} .d2-1375012433 .fill-N2{fill:#676C7E;} .d2-1375012433 .fill-N3{fill:#9499AB;} .d2-1375012433 .fill-N4{fill:#CFD2DD;} .d2-1375012433 .fill-N5{fill:#DEE1EB;} .d2-1375012433 .fill-N6{fill:#EEF1F8;} .d2-1375012433 .fill-N7{fill:#FFFFFF;} .d2-1375012433 .fill-B1{fill:#0D32B2;} .d2-1375012433 .fill-B2{fill:#0D32B2;} .d2-1375012433 .fill-B3{fill:#E3E9FD;} .d2-1375012433 .fill-B4{fill:#E3E9FD;} .d2-1375012433 .fill-B5{fill:#EDF0FD;} .d2-1375012433 .fill-B6{fill:#F7F8FE;} .d2-1375012433 .fill-AA2{fill:#4A6FF3;} .d2-1375012433 .fill-AA4{fill:#EDF0FD;} .d2-1375012433 .fill-AA5{fill:#F7F8FE;} .d2-1375012433 .fill-AB4{fill:#EDF0FD;} .d2-1375012433 .fill-AB5{fill:#F7F8FE;} .d2-1375012433 .stroke-N1{stroke:#0A0F25;} .d2-1375012433 .stroke-N2{stroke:#676C7E;} .d2-1375012433 .stroke-N3{stroke:#9499AB;} .d2-1375012433 .stroke-N4{stroke:#CFD2DD;} .d2-1375012433 .stroke-N5{stroke:#DEE1EB;} .d2-1375012433 .stroke-N6{stroke:#EEF1F8;} .d2-1375012433 .stroke-N7{stroke:#FFFFFF;} .d2-1375012433 .stroke-B1{stroke:#0D32B2;} .d2-1375012433 .stroke-B2{stroke:#0D32B2;} .d2-1375012433 .stroke-B3{stroke:#E3E9FD;} .d2-1375012433 .stroke-B4{stroke:#E3E9FD;} .d2-1375012433 .stroke-B5{stroke:#EDF0FD;} .d2-1375012433 .stroke-B6{stroke:#F7F8FE;} .d2-1375012433 .stroke-AA2{stroke:#4A6FF3;} .d2-1375012433 .stroke-AA4{stroke:#EDF0FD;} .d2-1375012433 .stroke-AA5{stroke:#F7F8FE;} .d2-1375012433 .stroke-AB4{stroke:#EDF0FD;} .d2-1375012433 .stroke-AB5{stroke:#F7F8FE;} .d2-1375012433 .background-color-N1{background-color:#0A0F25;} .d2-1375012433 .background-color-N2{background-color:#676C7E;} .d2-1375012433 .background-color-N3{background-color:#9499AB;} .d2-1375012433 .background-color-N4{background-color:#CFD2DD;} .d2-1375012433 .background-color-N5{background-color:#DEE1EB;} .d2-1375012433 .background-color-N6{background-color:#EEF1F8;} .d2-1375012433 .background-color-N7{background-color:#FFFFFF;} .d2-1375012433 .background-color-B1{background-color:#0D32B2;} .d2-1375012433 .background-color-B2{background-color:#0D32B2;} .d2-1375012433 .background-color-B3{background-color:#E3E9FD;} .d2-1375012433 .background-color-B4{background-color:#E3E9FD;} .d2-1375012433 .background-color-B5{background-color:#EDF0FD;} .d2-1375012433 .background-color-B6{background-color:#F7F8FE;} .d2-1375012433 .background-color-AA2{background-color:#4A6FF3;} .d2-1375012433 .background-color-AA4{background-color:#EDF0FD;} .d2-1375012433 .background-color-AA5{background-color:#F7F8FE;} .d2-1375012433 .background-color-AB4{background-color:#EDF0FD;} .d2-1375012433 .background-color-AB5{background-color:#F7F8FE;} .d2-1375012433 .color-N1{color:#0A0F25;} .d2-1375012433 .color-N2{color:#676C7E;} .d2-1375012433 .color-N3{color:#9499AB;} .d2-1375012433 .color-N4{color:#CFD2DD;} .d2-1375012433 .color-N5{color:#DEE1EB;} .d2-1375012433 .color-N6{color:#EEF1F8;} .d2-1375012433 .color-N7{color:#FFFFFF;} .d2-1375012433 .color-B1{color:#0D32B2;} .d2-1375012433 .color-B2{color:#0D32B2;} .d2-1375012433 .color-B3{color:#E3E9FD;} .d2-1375012433 .color-B4{color:#E3E9FD;} .d2-1375012433 .color-B5{color:#EDF0FD;} .d2-1375012433 .color-B6{color:#F7F8FE;} .d2-1375012433 .color-AA2{color:#4A6FF3;} .d2-1375012433 .color-AA4{color:#EDF0FD;} .d2-1375012433 .color-AA5{color:#F7F8FE;} .d2-1375012433 .color-AB4{color:#EDF0FD;} .d2-1375012433 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-1375012433);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-1375012433);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-1375012433);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-1375012433);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-1375012433);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1375012433);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-1375012433);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-1375012433);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><style type="text/css">.d2-1375012433 .md em, .d2-1375012433 .md dfn { font-family: "d2-1375012433-font-italic"; } .d2-1375012433 .md b, .d2-1375012433 .md strong { font-family: "d2-1375012433-font-bold"; } .d2-1375012433 .md code, .d2-1375012433 .md kbd, .d2-1375012433 .md pre, .d2-1375012433 .md samp { font-family: "d2-1375012433-font-mono"; font-size: 1em; } .d2-1375012433 .md { tab-size: 4; } /* variables are provided in d2renderers/d2svg/d2svg.go */ .d2-1375012433 .md { -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; margin: 0; background-color: transparent; /* we don't want to define the background color */ font-family: "d2-1375012433-font-regular"; font-size: 16px; line-height: 1.5; word-wrap: break-word; } .d2-1375012433 .md details, .d2-1375012433 .md figcaption, .d2-1375012433 .md figure { display: block; } .d2-1375012433 .md summary { display: list-item; } .d2-1375012433 .md [hidden] { display: none !important; } .d2-1375012433 .md a { background-color: transparent; color: var(--color-accent-fg); text-decoration: none; } .d2-1375012433 .md a:active, .d2-1375012433 .md a:hover { outline-width: 0; } .d2-1375012433 .md abbr[title] { border-bottom: none; text-decoration: underline dotted; } .d2-1375012433 .md dfn { font-style: italic; } .d2-1375012433 .md h1 { margin: 0.67em 0; padding-bottom: 0.3em; font-size: 2em; border-bottom: 1px solid var(--color-border-muted); } .d2-1375012433 .md mark { background-color: var(--color-attention-subtle); color: var(--color-text-primary); } .d2-1375012433 .md small { font-size: 90%; } .d2-1375012433 .md sub, .d2-1375012433 .md sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } .d2-1375012433 .md sub { bottom: -0.25em; } .d2-1375012433 .md sup { top: -0.5em; } .d2-1375012433 .md img { border-style: none; max-width: 100%; box-sizing: content-box; background-color: var(--color-canvas-default); } .d2-1375012433 .md figure { margin: 1em 40px; } .d2-1375012433 .md hr { box-sizing: content-box; overflow: hidden; background: transparent; border-bottom: 1px solid var(--color-border-muted); height: 0.25em; padding: 0; margin: 24px 0; background-color: var(--color-border-default); border: 0; } .d2-1375012433 .md input { font: inherit; margin: 0; overflow: visible; font-family: inherit; font-size: inherit; line-height: inherit; } .d2-1375012433 .md [type="button"], .d2-1375012433 .md [type="reset"], .d2-1375012433 .md [type="submit"] { -webkit-appearance: button; } .d2-1375012433 .md [type="button"]::-moz-focus-inner, .d2-1375012433 .md [type="reset"]::-moz-focus-inner, .d2-1375012433 .md [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } .d2-1375012433 .md [type="button"]:-moz-focusring, .d2-1375012433 .md [type="reset"]:-moz-focusring, .d2-1375012433 .md [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } .d2-1375012433 .md [type="checkbox"], .d2-1375012433 .md [type="radio"] { box-sizing: border-box; padding: 0; } .d2-1375012433 .md [type="number"]::-webkit-inner-spin-button, .d2-1375012433 .md [type="number"]::-webkit-outer-spin-button { height: auto; } .d2-1375012433 .md [type="search"] { -webkit-appearance: textfield; outline-offset: -2px; } .d2-1375012433 .md [type="search"]::-webkit-search-cancel-button, .d2-1375012433 .md [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } .d2-1375012433 .md ::-webkit-input-placeholder { color: inherit; opacity: 0.54; } .d2-1375012433 .md ::-webkit-file-upload-button { -webkit-appearance: button; font: inherit; } .d2-1375012433 .md a:hover { text-decoration: underline; } .d2-1375012433 .md hr::before { display: table; content: ""; } .d2-1375012433 .md hr::after { display: table; clear: both; content: ""; } .d2-1375012433 .md table { border-spacing: 0; border-collapse: collapse; display: block; width: max-content; max-width: 100%; overflow: auto; } .d2-1375012433 .md td, .d2-1375012433 .md th { padding: 0; } .d2-1375012433 .md details summary { cursor: pointer; } .d2-1375012433 .md details:not([open]) > *:not(summary) { display: none !important; } .d2-1375012433 .md kbd { display: inline-block; padding: 3px 5px; color: var(--color-fg-default); vertical-align: middle; background-color: var(--color-canvas-subtle); border: solid 1px var(--color-neutral-muted); border-bottom-color: var(--color-neutral-muted); border-radius: 6px; box-shadow: inset 0 -1px 0 var(--color-neutral-muted); } .d2-1375012433 .md h1, .d2-1375012433 .md h2, .d2-1375012433 .md h3, .d2-1375012433 .md h4, .d2-1375012433 .md h5, .d2-1375012433 .md h6 { margin-top: 24px; margin-bottom: 16px; font-weight: 400; line-height: 1.25; font-family: "d2-1375012433-font-semibold"; } .d2-1375012433 .md h2 { padding-bottom: 0.3em; font-size: 1.5em; border-bottom: 1px solid var(--color-border-muted); } .d2-1375012433 .md h3 { font-size: 1.25em; } .d2-1375012433 .md h4 { font-size: 1em; } .d2-1375012433 .md h5 { font-size: 0.875em; } .d2-1375012433 .md h6 { font-size: 0.85em; color: var(--color-fg-muted); } .d2-1375012433 .md p { margin-top: 0; margin-bottom: 10px; } .d2-1375012433 .md blockquote { margin: 0; padding: 0 1em; color: var(--color-fg-muted); border-left: 0.25em solid var(--color-border-default); } .d2-1375012433 .md ul, .d2-1375012433 .md ol { margin-top: 0; margin-bottom: 0; padding-left: 2em; } .d2-1375012433 .md ol ol, .d2-1375012433 .md ul ol { list-style-type: lower-roman; } .d2-1375012433 .md ul ul ol, .d2-1375012433 .md ul ol ol, .d2-1375012433 .md ol ul ol, .d2-1375012433 .md ol ol ol { list-style-type: lower-alpha; } .d2-1375012433 .md dd { margin-left: 0; } .d2-1375012433 .md pre { margin-top: 0; margin-bottom: 0; word-wrap: normal; } .d2-1375012433 .md ::placeholder { color: var(--color-fg-subtle); opacity: 1; } .d2-1375012433 .md input::-webkit-outer-spin-button, .d2-1375012433 .md input::-webkit-inner-spin-button { margin: 0; -webkit-appearance: none; appearance: none; } .d2-1375012433 .md::before { display: table; content: ""; } .d2-1375012433 .md::after { display: table; clear: both; content: ""; } .d2-1375012433 .md > *:first-child { margin-top: 0 !important; } .d2-1375012433 .md > *:last-child { margin-bottom: 0 !important; } .d2-1375012433 .md a:not([href]) { color: inherit; text-decoration: none; } .d2-1375012433 .md .absent { color: var(--color-danger-fg); } .d2-1375012433 .md .anchor { float: left; padding-right: 4px; margin-left: -20px; line-height: 1; } .d2-1375012433 .md .anchor:focus { outline: none; } .d2-1375012433 .md p, .d2-1375012433 .md blockquote, .d2-1375012433 .md ul, .d2-1375012433 .md ol, .d2-1375012433 .md dl, .d2-1375012433 .md table, .d2-1375012433 .md pre, .d2-1375012433 .md details { margin-top: 0; margin-bottom: 16px; } .d2-1375012433 .md blockquote > :first-child { margin-top: 0; } .d2-1375012433 .md blockquote > :last-child { margin-bottom: 0; } .d2-1375012433 .md sup > a::before { content: "["; } .d2-1375012433 .md sup > a::after { content: "]"; } .d2-1375012433 .md h1:hover .anchor, .d2-1375012433 .md h2:hover .anchor, .d2-1375012433 .md h3:hover .anchor, .d2-1375012433 .md h4:hover .anchor, .d2-1375012433 .md h5:hover .anchor, .d2-1375012433 .md h6:hover .anchor { text-decoration: none; } .d2-1375012433 .md h1 tt, .d2-1375012433 .md h1 code, .d2-1375012433 .md h2 tt, .d2-1375012433 .md h2 code, .d2-1375012433 .md h3 tt, .d2-1375012433 .md h3 code, .d2-1375012433 .md h4 tt, .d2-1375012433 .md h4 code, .d2-1375012433 .md h5 tt, .d2-1375012433 .md h5 code, .d2-1375012433 .md h6 tt, .d2-1375012433 .md h6 code { padding: 0 0.2em; font-size: inherit; } .d2-1375012433 .md ul.no-list, .d2-1375012433 .md ol.no-list { padding: 0; list-style-type: none; } .d2-1375012433 .md ol[type="1"] { list-style-type: decimal; } .d2-1375012433 .md ol[type="a"] { list-style-type: lower-alpha; } .d2-1375012433 .md ol[type="i"] { list-style-type: lower-roman; } .d2-1375012433 .md div > ol:not([type]) { list-style-type: decimal; } .d2-1375012433 .md ul ul, .d2-1375012433 .md ul ol, .d2-1375012433 .md ol ol, .d2-1375012433 .md ol ul { margin-top: 0; margin-bottom: 0; } .d2-1375012433 .md li > p { margin-top: 16px; } .d2-1375012433 .md li + li { margin-top: 0.25em; } .d2-1375012433 .md dl { padding: 0; } .d2-1375012433 .md dl dt { padding: 0; margin-top: 16px; font-size: 1em; font-style: italic; font-family: "d2-1375012433-font-semibold"; } .d2-1375012433 .md dl dd { padding: 0 16px; margin-bottom: 16px; } .d2-1375012433 .md table th { font-family: "d2-1375012433-font-semibold"; } .d2-1375012433 .md table th, .d2-1375012433 .md table td { padding: 6px 13px; border: 1px solid var(--color-border-default); } .d2-1375012433 .md table tr { background-color: var(--color-canvas-default); border-top: 1px solid var(--color-border-muted); } .d2-1375012433 .md table tr:nth-child(2n) { background-color: var(--color-canvas-subtle); } .d2-1375012433 .md table img { background-color: transparent; } .d2-1375012433 .md img[align="right"] { padding-left: 20px; } .d2-1375012433 .md img[align="left"] { padding-right: 20px; } .d2-1375012433 .md span.frame { display: block; overflow: hidden; } .d2-1375012433 .md span.frame > span { display: block; float: left; width: auto; padding: 7px; margin: 13px 0 0; overflow: hidden; border: 1px solid var(--color-border-default); } .d2-1375012433 .md span.frame span img { display: block; float: left; } .d2-1375012433 .md span.frame span span { display: block; padding: 5px 0 0; clear: both; color: var(--color-fg-default); } .d2-1375012433 .md span.align-center { display: block; overflow: hidden; clear: both; } .d2-1375012433 .md span.align-center > span { display: block; margin: 13px auto 0; overflow: hidden; text-align: center; } .d2-1375012433 .md span.align-center span img { margin: 0 auto; text-align: center; } .d2-1375012433 .md span.align-right { display: block; overflow: hidden; clear: both; } .d2-1375012433 .md span.align-right > span { display: block; margin: 13px 0 0; overflow: hidden; text-align: right; } .d2-1375012433 .md span.align-right span img { margin: 0; text-align: right; } .d2-1375012433 .md span.float-left { display: block; float: left; margin-right: 13px; overflow: hidden; } .d2-1375012433 .md span.float-left span { margin: 13px 0 0; } .d2-1375012433 .md span.float-right { display: block; float: right; margin-left: 13px; overflow: hidden; } .d2-1375012433 .md span.float-right > span { display: block; margin: 13px auto 0; overflow: hidden; text-align: right; } .d2-1375012433 .md code, .d2-1375012433 .md tt { padding: 0.2em 0.4em; margin: 0; font-size: 85%; background-color: var(--color-neutral-muted); border-radius: 6px; } .d2-1375012433 .md code br, .d2-1375012433 .md tt br { display: none; } .d2-1375012433 .md del code { text-decoration: inherit; } .d2-1375012433 .md pre code { font-size: 100%; } .d2-1375012433 .md pre > code { padding: 0; margin: 0; word-break: normal; white-space: pre; background: transparent; border: 0; } .d2-1375012433 .md .highlight { margin-bottom: 16px; } .d2-1375012433 .md .highlight pre { margin-bottom: 0; word-break: normal; } .d2-1375012433 .md .highlight pre, .d2-1375012433 .md pre { padding: 16px; overflow: auto; font-size: 85%; line-height: 1.45; background-color: var(--color-canvas-subtle); border-radius: 6px; } .d2-1375012433 .md pre code, .d2-1375012433 .md pre tt { display: inline; max-width: auto; padding: 0; margin: 0; overflow: visible; line-height: inherit; word-wrap: normal; background-color: transparent; border: 0; } .d2-1375012433 .md .csv-data td, .d2-1375012433 .md .csv-data th { padding: 5px; overflow: hidden; font-size: 12px; line-height: 1; text-align: left; white-space: nowrap; } .d2-1375012433 .md .csv-data .blob-num { padding: 10px 8px 9px; text-align: right; background: var(--color-canvas-default); border: 0; } .d2-1375012433 .md .csv-data tr { border-top: 0; } .d2-1375012433 .md .csv-data th { font-family: "d2-1375012433-font-semibold"; background: var(--color-canvas-subtle); border-top: 0; } .d2-1375012433 .md .footnotes { font-size: 12px; color: var(--color-fg-muted); border-top: 1px solid var(--color-border-default); } .d2-1375012433 .md .footnotes ol { padding-left: 16px; } .d2-1375012433 .md .footnotes li { position: relative; } .d2-1375012433 .md .footnotes li:target::before { position: absolute; top: -8px; right: -8px; bottom: -8px; left: -24px; pointer-events: none; content: ""; border: 2px solid var(--color-accent-emphasis); border-radius: 6px; } .d2-1375012433 .md .footnotes li:target { color: var(--color-fg-default); } .d2-1375012433 .md .task-list-item { list-style-type: none; } .d2-1375012433 .md .task-list-item label { font-weight: 400; } .d2-1375012433 .md .task-list-item.enabled label { cursor: pointer; } .d2-1375012433 .md .task-list-item + .task-list-item { margin-top: 3px; } .d2-1375012433 .md .task-list-item .handle { display: none; } .d2-1375012433 .md .task-list-item-checkbox { margin: 0 0.2em 0.25em -1.6em; vertical-align: middle; } .d2-1375012433 .md .contains-task-list:dir(rtl) .task-list-item-checkbox { margin: 0 -1.6em 0.25em 0.2em; } </style><g class="dGl0bGU="><g class="shape" ></g><text x="1101.000000" y="-15.000000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:24px">Microsoft Graph MCP Server Architecture</text></g><g class="Y2xhdWRl"><g class="shape" ><rect x="12.000000" y="620.000000" width="133.000000" height="66.000000" stroke="#2E5C8A" fill="#4A90E2" style="stroke-width:2;" /></g><text x="78.500000" y="658.500000" fill="white" class="text-bold" style="text-anchor:middle;font-size:16px">Claude Code</text></g><g class="bWNwX3NlcnZlcg=="><g class="shape" ><rect x="613.000000" y="352.000000" width="358.000000" height="564.000000" stroke="#2E7D4E" fill="#50C878" style="stroke-width:2;" /></g><text x="792.000000" y="385.000000" fill="white" class="text" style="text-anchor:middle;font-size:28px">msgraph-mcp Server</text></g><g class="YXp1cmVfYWQ="><g class="shape" ><path d="M 1316 291 C 1316 297 1314 303 1311 303 C 1280 311 1256 387 1256 480 C 1256 579 1283 659 1318 659 H 1553 C 1590 659 1620 573 1620 470 C 1620 371 1592 288 1557 282 C 1555 282 1552 277 1552 270 C 1544 169 1508 94 1465 94 C 1437 94 1412 126 1396 175 C 1394 181 1391 183 1389 181 C 1383 175 1376 172 1369 172 C 1342 170 1319 223 1316 291 Z" stroke="#005A9E" fill="#0078D4" style="stroke-width:2;" /></g><text x="1437.467500" y="358.000000" fill="white" class="text" style="text-anchor:middle;font-size:28px">Azure AD</text></g><g class="Z3JhcGhfYXBp"><g class="shape" ><path d="M 1377 678 L 1315 718 L 1377 758 L 1500 758 L 1561 718 L 1500 678 Z" stroke="#5A4EBE" fill="#7B68EE" style="stroke-width:2;" /></g><text x="1438.000000" y="723.500000" fill="white" class="text-bold" style="text-anchor:middle;font-size:16px">Microsoft Graph API</text></g><g class="bTM2NV9zZXJ2aWNlcw=="><g class="shape" ><rect x="1865.000000" y="275.000000" width="325.000000" height="870.000000" stroke="#CC5555" fill="#FF6B6B" style="stroke-width:2;" /></g><text x="2027.500000" y="308.000000" fill="white" class="text" style="text-anchor:middle;font-size:28px">Microsoft 365 Services</text></g><g class="cGVybWlzc2lvbnM="><g class="shape" ><rect x="667.000000" y="12.000000" width="304.000000" height="320.000000" stroke="#FFC107" fill="#FFF3CD" style="stroke-width:2;" /></g><text x="819.000000" y="45.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:28px">API Permissions</text></g><g class="c2VjdXJpdHk="><g class="shape" ><rect x="225.000000" y="359.000000" width="308.000000" height="236.000000" stroke="#28A745" fill="#D4EDDA" style="stroke-width:2;" /></g><text x="379.000000" y="392.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:28px">Security Features</text></g><g class="bWNwX3NlcnZlci5jb21wb25lbnRz"><g class="shape" ><rect x="663.000000" y="402.000000" width="258.000000" height="464.000000" stroke="#0D32B2" fill="#EDF0FD" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="792.000000" y="431.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:24px">components</text></g><g class="YXp1cmVfYWQuYXV0aA=="><g class="shape" ><rect x="1306.000000" y="218.000000" width="265.000000" height="390.000000" stroke="#0D32B2" fill="#EDF0FD" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="1438.500000" y="247.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:24px">auth</text></g><g class="bTM2NV9zZXJ2aWNlcy5zZXJ2aWNlcw=="><g class="shape" ><rect x="1915.000000" y="325.000000" width="225.000000" height="770.000000" stroke="#0D32B2" fill="#EDF0FD" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="2027.500000" y="354.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:24px">services</text></g><g class="cGVybWlzc2lvbnMubGlzdA=="><g class="shape" ></g><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="717.000000" y="62.000000" width="204" height="220"><div xmlns="http://www.w3.org/1999/xhtml" class="md color-N1"><ul> <li>Sites.Read.All</li> <li>Files.Read.All</li> <li>Mail.Read</li> <li>ChannelMessage.Read.All</li> <li>Chat.Read.All</li> <li>Calendars.Read</li> <li>User.Read.All</li> <li>Group.Read.All</li> </ul> </div></foreignObject></g></g><g class="c2VjdXJpdHkuZmVhdHVyZXM="><g class="shape" ></g><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="275.000000" y="409.000000" width="208" height="136"><div xmlns="http://www.w3.org/1999/xhtml" class="md color-N1"><ul> <li>Read-only access</li> <li>Sandboxed execution</li> <li>Token auto-refresh</li> <li>App-only authentication</li> <li>No user credentials stored</li> </ul> </div></foreignObject></g></g><g class="bWNwX3NlcnZlci5jb21wb25lbnRzLnNlcnZlcg=="><g class="shape" ><path d="M 735 517 L 735 452 L 848 452 L 848 517 C 829 503 810 503 792 517 C 773 532 754 532 735 517 Z" stroke="#0D32B2" fill="#E8F5E9" class=" stroke-B1" style="stroke-width:2;" /></g><text x="791.500000" y="485.610964" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">server.py</text></g><g class="bWNwX3NlcnZlci5jb21wb25lbnRzLmFwaQ=="><g class="shape" ><path d="M 747 613 L 747 548 L 837 548 L 837 613 C 822 599 807 599 792 613 C 777 628 762 628 747 613 Z" stroke="#0D32B2" fill="#E8F5E9" class=" stroke-B1" style="stroke-width:2;" /></g><text x="792.000000" y="581.610964" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">api.py</text></g><g class="bWNwX3NlcnZlci5jb21wb25lbnRzLmNsaWVudA=="><g class="shape" ><path d="M 713 709 L 713 644 L 871 644 L 871 709 C 845 695 818 695 792 709 C 766 724 739 724 713 709 Z" stroke="#0D32B2" fill="#E8F5E9" class=" stroke-B1" style="stroke-width:2;" /></g><text x="792.000000" y="677.610964" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">graph_client.py</text></g><g class="bWNwX3NlcnZlci5jb21wb25lbnRzLnNhbmRib3g="><g class="shape" ><path d="M 727 805 L 727 740 L 856 740 L 856 805 C 835 791 813 791 792 805 C 770 820 749 820 727 805 Z" stroke="#0D32B2" fill="#E8F5E9" class=" stroke-B1" style="stroke-width:2;" /></g><text x="791.500000" y="773.610964" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">sandbox.py</text></g><g class="YXp1cmVfYWQuYXV0aC5hcHA="><g class="shape" ><rect x="1356.000000" y="268.000000" width="165.000000" height="66.000000" stroke="#0D32B2" fill="#CCE5FF" class=" stroke-B1" style="stroke-width:2;" /></g><text x="1438.500000" y="306.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">App Registration</text></g><g class="YXp1cmVfYWQuYXV0aC5tc2Fs"><g class="shape" ><rect x="1378.000000" y="354.000000" width="120.000000" height="66.000000" stroke="#0D32B2" fill="#CCE5FF" class=" stroke-B1" style="stroke-width:2;" /></g><text x="1438.000000" y="392.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">MSAL Auth</text></g><g class="YXp1cmVfYWQuYXV0aC50b2tlbg=="><g class="shape" ><path d="M 1371 464 C 1371 440 1432 440 1439 440 C 1445 440 1506 440 1506 464 V 534 C 1506 558 1445 558 1439 558 C 1432 558 1371 558 1371 534 V 464 Z" stroke="#0D32B2" fill="#CCE5FF" class=" stroke-B1" style="stroke-width:2;" /><path d="M 1371 464 C 1371 488 1432 488 1439 488 C 1445 488 1506 488 1506 464" stroke="#0D32B2" fill="#CCE5FF" class=" stroke-B1" style="stroke-width:2;" /></g><text x="1438.500000" y="516.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Token Cache</text></g><g class="bTM2NV9zZXJ2aWNlcy5zZXJ2aWNlcy5zaGFyZXBvaW50"><g class="shape" ><path d="M 1965 399 C 1965 375 2021 375 2028 375 C 2034 375 2090 375 2090 399 V 469 C 2090 493 2034 493 2028 493 C 2021 493 1965 493 1965 469 V 399 Z" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /><path d="M 1965 399 C 1965 423 2021 423 2028 423 C 2034 423 2090 423 2090 399" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /></g><text x="2027.500000" y="451.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">SharePoint</text></g><g class="bTM2NV9zZXJ2aWNlcy5zZXJ2aWNlcy5vbmVkcml2ZQ=="><g class="shape" ><path d="M 1972 537 C 1972 513 2022 513 2028 513 C 2033 513 2083 513 2083 537 V 607 C 2083 631 2033 631 2028 631 C 2022 631 1972 631 1972 607 V 537 Z" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /><path d="M 1972 537 C 1972 561 2022 561 2028 561 C 2033 561 2083 561 2083 537" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /></g><text x="2027.500000" y="589.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">OneDrive</text></g><g class="bTM2NV9zZXJ2aWNlcy5zZXJ2aWNlcy5vdXRsb29r"><g class="shape" ><path d="M 1976 675 C 1976 651 2022 651 2028 651 C 2033 651 2079 651 2079 675 V 745 C 2079 769 2033 769 2028 769 C 2022 769 1976 769 1976 745 V 675 Z" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /><path d="M 1976 675 C 1976 699 2022 699 2028 699 C 2033 699 2079 699 2079 675" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /></g><text x="2027.500000" y="727.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Outlook</text></g><g class="bTM2NV9zZXJ2aWNlcy5zZXJ2aWNlcy50ZWFtcw=="><g class="shape" ><path d="M 1981 813 C 1981 789 2022 789 2027 789 C 2032 789 2073 789 2073 813 V 883 C 2073 907 2032 907 2027 907 C 2022 907 1981 907 1981 883 V 813 Z" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /><path d="M 1981 813 C 1981 837 2022 837 2027 837 C 2032 837 2073 837 2073 813" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /></g><text x="2027.000000" y="865.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Teams</text></g><g class="bTM2NV9zZXJ2aWNlcy5zZXJ2aWNlcy5jYWxlbmRhcg=="><g class="shape" ><path d="M 1972 951 C 1972 927 2022 927 2027 927 C 2033 927 2082 927 2082 951 V 1021 C 2082 1045 2033 1045 2027 1045 C 2022 1045 1972 1045 1972 1021 V 951 Z" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /><path d="M 1972 951 C 1972 975 2022 975 2027 975 C 2033 975 2082 975 2082 951" stroke="#0D32B2" fill="#FFE5E5" class=" stroke-B1" style="stroke-width:2;" /></g><text x="2027.000000" y="1003.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Calendar</text></g><g class="KGNsYXVkZSAtJmd0OyBtY3Bfc2VydmVyKVswXQ=="><marker id="mk-d2-1375012433-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#0D32B2" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 147.000000 634.000000 L 609.000000 634.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1375012433-3488378134)" mask="url(#d2-1375012433)" /><text x="379.000000" y="632.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px"><tspan x="379.000000" dy="0.000000">MCP Protocol</tspan><tspan x="379.000000" dy="18.500000">(stdio)</tspan></text></g><g class="KG1jcF9zZXJ2ZXIgLSZndDsgYXp1cmVfYWQpWzBd"><path d="M 972.999998 375.568942 L 1263.000004 375.994135" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1375012433-3488378134)" mask="url(#d2-1375012433)" /><text x="1119.500000" y="373.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px"><tspan x="1119.500000" dy="0.000000">1. Authenticate</tspan><tspan x="1119.500000" dy="18.500000">(Client Credentials)</tspan></text></g><g class="KGF6dXJlX2FkIC0mZ3Q7IG1jcF9zZXJ2ZXIpWzBd"><path d="M 1258.000001 547.001440 L 974.999999 547.205129" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1375012433-3488378134)" mask="url(#d2-1375012433)" /><text x="1116.000000" y="553.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">2. Access Token</text></g><g class="KG1jcF9zZXJ2ZXIgLSZndDsgZ3JhcGhfYXBpKVswXQ=="><path d="M 972.999999 704.734434 L 1332.000001 704.997074" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1375012433-3488378134)" mask="url(#d2-1375012433)" /><text x="1154.000000" y="702.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px"><tspan x="1154.000000" dy="0.000000">3. API Requests</tspan><tspan x="1154.000000" dy="18.500000">(Bearer Token)</tspan></text></g><g class="KGdyYXBoX2FwaSAtJmd0OyBtMzY1X3NlcnZpY2VzKVswXQ=="><path d="M 1542.999995 704.995550 L 1655.833539 704.744468 C 1666.166461 704.721475 1655.833527 694.400024 1666.166473 694.400024 L 1861.000000 694.400024" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1375012433-3488378134)" mask="url(#d2-1375012433)" /><text x="1698.000000" y="700.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">4. Read Data</text></g><g class="KG0zNjVfc2VydmljZXMgLSZndDsgZ3JhcGhfYXBpKVswXQ=="><path d="M 1863.000000 779.182983 L 1671.000000 779.182983 S 1661.000000 779.182983 1661.000000 769.182983 L 1661.000000 741.400024 S 1661.000000 731.400024 1651.000056 731.366689 L 1544.999978 731.013334" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1375012433-3488378134)" mask="url(#d2-1375012433)" /><text x="1679.000000" y="785.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">5. Response</text></g><g class="KGdyYXBoX2FwaSAtJmd0OyBtY3Bfc2VydmVyKVswXQ=="><path d="M 1334.000001 731.002192 L 974.999998 731.395641" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1375012433-3488378134)" mask="url(#d2-1375012433)" /><text x="1153.500000" y="737.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">6. JSON Response</text></g><g class="KG1jcF9zZXJ2ZXIgLSZndDsgY2xhdWRlKVswXQ=="><path d="M 611.000000 725.000000 L 195.000000 725.000000 S 185.000000 725.000000 185.000000 715.000000 L 185.000000 674.000000 S 185.000000 664.000000 175.000000 664.000000 L 149.000000 664.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1375012433-3488378134)" mask="url(#d2-1375012433)" /><text x="349.000000" y="731.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">7. Formatted Results</text></g><g class="KHBlcm1pc3Npb25zIC0mZ3Q7IGF6dXJlX2FkKVswXQ=="><marker id="mk-d2-1375012433-2177206569" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#0D32B2" class="connection fill-B2" stroke-width="2" /> </marker><path d="M 972.999999 234.314204 L 1320.000002 234.003581" stroke="#0D32B2" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-1375012433-2177206569)" mask="url(#d2-1375012433)" /><text x="1148.000000" y="240.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">Admin Consent</text></g><g class="KHNlY3VyaXR5IC0mZ3Q7IG1jcF9zZXJ2ZXIpWzBd"><path d="M 535.000000 493.000000 L 609.000000 493.000000" stroke="#0D32B2" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-1375012433-2177206569)" mask="url(#d2-1375012433)" /></g><mask id="d2-1375012433" maskUnits="userSpaceOnUse" x="-89" y="-140" width="2380" height="1386"> <rect x="-89" y="-140" width="2380" height="1386" fill="white"></rect> <rect x="333.000000" y="616.000000" width="92" height="37" fill="black"></rect> <rect x="1055.000000" y="357.000000" width="129" height="37" fill="black"></rect> <rect x="1063.000000" y="537.000000" width="106" height="21" fill="black"></rect> <rect x="1102.000000" y="686.000000" width="104" height="37" fill="black"></rect> <rect x="1654.000000" y="684.000000" width="88" height="21" fill="black"></rect> <rect x="1638.000000" y="769.000000" width="82" height="21" fill="black"></rect> <rect x="1093.000000" y="721.000000" width="121" height="21" fill="black"></rect> <rect x="280.000000" y="715.000000" width="138" height="21" fill="black"></rect> <rect x="1096.000000" y="224.000000" width="104" height="21" fill="black"></rect> </mask></svg></svg>

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/eesb99/msgraph-mcp'

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