architectural_diagram.svgโข31.6 kB
<?xml version="1.0" encoding="us-ascii" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="708px" preserveAspectRatio="none" style="width:2920px;height:708px;background:#FFFFFF;" version="1.1" viewBox="0 0 2920 708" width="2920px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="309" x="1298.5" y="22.9951">Google Chat MCP Server - Architecture</text><!--cluster mcp_client--><g id="cluster_mcp_client"><rect fill="#ADD8E6" height="331" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:1.0;" width="172" x="291.5" y="44.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="136" x="309.5" y="57.4355">MCP Client (Cursor)</text></g><!--cluster mcpserver--><g id="cluster_mcpserver"><rect fill="#98FB98" height="473" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:1.0;" width="1772" x="495.5" y="229.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="171" x="1296" y="242.4355">Google Chat MCP Server</text></g><!--cluster Core Layer--><g id="cluster_Core Layer"><path d="M538,277.2969 L616,277.2969 A3.75,3.75 0 0 1 618.5,279.7969 L625.5,297.2656 L697,297.2656 A2.5,2.5 0 0 1 699.5,299.7656 L699.5,533.7969 A2.5,2.5 0 0 1 697,536.2969 L538,536.2969 A2.5,2.5 0 0 1 535.5,533.7969 L535.5,279.7969 A2.5,2.5 0 0 1 538,277.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="535.5" x2="625.5" y1="297.2656" y2="297.2656"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="77" x="539.5" y="290.4355">Core Layer</text></g><!--cluster Auth Layer--><g id="cluster_Auth Layer"><path d="M1731,438.2969 L1809,438.2969 A3.75,3.75 0 0 1 1811.5,440.7969 L1818.5,458.2656 L2233,458.2656 A2.5,2.5 0 0 1 2235.5,460.7656 L2235.5,667.7969 A2.5,2.5 0 0 1 2233,670.2969 L1731,670.2969 A2.5,2.5 0 0 1 1728.5,667.7969 L1728.5,440.7969 A2.5,2.5 0 0 1 1731,438.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1728.5" x2="1818.5" y1="458.2656" y2="458.2656"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="77" x="1732.5" y="451.4355">Auth Layer</text></g><!--cluster Tool Layer--><g id="cluster_Tool Layer"><path d="M726,438.2969 L801,438.2969 A3.75,3.75 0 0 1 803.5,440.7969 L810.5,458.2656 L1421,458.2656 A2.5,2.5 0 0 1 1423.5,460.7656 L1423.5,533.7969 A2.5,2.5 0 0 1 1421,536.2969 L726,536.2969 A2.5,2.5 0 0 1 723.5,533.7969 L723.5,440.7969 A2.5,2.5 0 0 1 726,438.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="723.5" x2="810.5" y1="458.2656" y2="458.2656"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="74" x="727.5" y="451.4355">Tool Layer</text></g><!--cluster Google Chat Layer--><g id="cluster_Google Chat Layer"><path d="M1450,438.2969 L1582,438.2969 A3.75,3.75 0 0 1 1584.5,440.7969 L1591.5,458.2656 L1702,458.2656 A2.5,2.5 0 0 1 1704.5,460.7656 L1704.5,533.7969 A2.5,2.5 0 0 1 1702,536.2969 L1450,536.2969 A2.5,2.5 0 0 1 1447.5,533.7969 L1447.5,440.7969 A2.5,2.5 0 0 1 1450,438.2969 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1447.5" x2="1591.5" y1="458.2656" y2="458.2656"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="131" x="1451.5" y="451.4355">Google Chat Layer</text></g><!--cluster google--><g id="cluster_google"><path d="M2323.2055,280.7141 C2331.3849,266.1025 2342.7979,265.042 2353.1069,278.4407 C2363.4859,265.406 2373.0457,264.0312 2383.4609,278.4004 C2389.8546,264.4195 2402.1234,262.2432 2411.8768,274.8034 C2419.5074,263.0347 2431.9244,260.6491 2439.1327,275.2401 C2446.6006,264.4027 2455.5039,263.4959 2464.2641,273.6964 C2471.0625,258.4432 2483.5952,257.5172 2493.272,270.767 C2500.621,255.7483 2511.1271,256.267 2520.7404,268.4832 C2530.0814,255.135 2544.6797,254.0232 2553.0415,269.5775 C2563.1491,256.7749 2574.5766,257.3384 2581.5111,272.7763 C2589.7534,261.6235 2598.2247,261.2385 2607.1029,272.0348 C2616.6022,261.2437 2629.3292,260.6596 2635.438,275.747 C2642.7574,261.0458 2656.2629,260.0021 2663.9853,275.3643 C2674.9728,262.0892 2683.2084,265.1026 2690.9894,278.5987 C2704.4336,264.209 2716.5343,266.4678 2724.5,284.2969 C2727.3081,283.047 2729.0844,283.5603 2729.3639,286.9486 C2748.9428,301.1446 2751.8594,315.2169 2731.3415,331.2047 C2750.2782,352.0072 2744.5888,368.9428 2717.5,375.2969 C2718.0368,375.4401 2718.1122,375.7229 2717.7528,376.1361 C2712.7431,387.8297 2700.4685,391.393 2692.236,379.6441 C2682.5653,392.3113 2674.2167,392.7066 2665.3424,378.8371 C2660.094,393.1808 2646.4743,394.6941 2637.6376,382.5969 C2629.8285,399.3839 2614.7494,399.3684 2606.1499,383.3557 C2600.0897,396.2673 2588.0951,398.7724 2579.7935,385.6225 C2572.4562,399.9619 2557.5118,399.7407 2549.7437,386.085 C2542.4769,398.2275 2530.2907,398.7132 2524.012,385.0979 C2515.8796,401.4747 2504.1651,400.0229 2494.6766,386.4251 C2486.5165,399.06 2471.6894,399.8975 2464.0419,385.8367 C2453.6506,395.1396 2446.2082,395.2833 2440.2293,381.3205 C2428.9882,398.9049 2419.2148,395.0015 2407.9944,381.2992 C2397.8276,393.9611 2390.31,390.5721 2382.2709,379.0373 C2375.645,392.2409 2363.6834,392.5408 2355.5437,380.6496 C2338.0168,396.9549 2320.8597,391.4335 2315.5,368.2969 C2317.7936,369.7245 2318.4041,371.2862 2316.1061,373.2731 C2291.3407,362.807 2289.2602,341.9998 2313.044,328.2331 C2290.1935,307.9658 2296.9914,288.5866 2322.5,277.2969 C2324.3604,278.1517 2324.5358,279.2005 2323.2055,280.7141 " fill="#87CEFA" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="94" x="2473" y="293.4355">Google Cloud</text></g><!--entity ai--><g id="elem_ai"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="93" x="307" y="92.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="73" x="317" y="113.4355">AI Assistant</text></g><!--entity runtime--><g id="elem_runtime"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="140" x="307.5" y="325.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="120" x="317.5" y="346.4355">MCP Client Runtime</text></g><!--entity fastmcp--><g id="elem_fastmcp"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="552" y="325.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="111" x="562" y="346.4355">FastMCP Instance</text></g><!--entity server_runtime--><g id="elem_server_runtime"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="115" x="560" y="486.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="95" x="570" y="507.4355">Server Runtime</text></g><!--entity auth_server--><g id="elem_auth_server"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="93" x="2094" y="486.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="73" x="2104" y="507.4355">Auth Server</text></g><!--entity token_manager--><g id="elem_token_manager"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="117" x="1745" y="615.7969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="97" x="1755" y="636.9355">Token Manager</text></g><!--entity token_file--><g id="elem_token_file"><path d="M1978.5,621.2969 C1978.5,611.2969 2021.5,611.2969 2021.5,611.2969 C2021.5,611.2969 2064.5,611.2969 2064.5,621.2969 L2064.5,644.2656 C2064.5,654.2656 2021.5,654.2656 2021.5,654.2656 C2021.5,654.2656 1978.5,654.2656 1978.5,644.2656 L1978.5,621.2969 " fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><path d="M1978.5,621.2969 C1978.5,631.2969 2021.5,631.2969 2021.5,631.2969 C2021.5,631.2969 2064.5,631.2969 2064.5,621.2969 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="66" x="1988.5" y="646.4355">token.json</text></g><!--entity creds_file--><g id="elem_creds_file"><path d="M2099.5,621.2969 C2099.5,611.2969 2159.5,611.2969 2159.5,611.2969 C2159.5,611.2969 2219.5,611.2969 2219.5,621.2969 L2219.5,644.2656 C2219.5,654.2656 2159.5,654.2656 2159.5,654.2656 C2159.5,654.2656 2099.5,654.2656 2099.5,644.2656 L2099.5,621.2969 " fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><path d="M2099.5,621.2969 C2099.5,631.2969 2159.5,631.2969 2159.5,631.2969 C2159.5,631.2969 2219.5,631.2969 2219.5,621.2969 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="100" x="2109.5" y="646.4355">credentials.json</text></g><!--entity msg_tools--><g id="elem_msg_tools"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="740" y="486.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="93" x="750" y="507.4355">Message Tools</text></g><!--entity space_tools--><g id="elem_space_tools"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="96" x="888.5" y="486.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="76" x="898.5" y="507.4355">Space Tools</text></g><!--entity search_tools--><g id="elem_search_tools"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="101" x="1020" y="486.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="81" x="1030" y="507.4355">Search Tools</text></g><!--entity user_tools--><g id="elem_user_tools"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="86" x="1156.5" y="486.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="66" x="1166.5" y="507.4355">User Tools</text></g><!--entity attach_tools--><g id="elem_attach_tools"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="130" x="1277.5" y="486.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="110" x="1287.5" y="507.4355">Attachment Tools</text></g><!--entity chat_client--><g id="elem_chat_client"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="88" x="1600.5" y="486.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="68" x="1610.5" y="507.4355">Chat Client</text></g><!--entity people_client--><g id="elem_people_client"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="102" x="1463.5" y="486.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="82" x="1473.5" y="507.4355">People Client</text></g><!--entity chat_api--><g id="elem_chat_api"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="120" x="2452.5" y="325.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="100" x="2462.5" y="346.4355">Google Chat API</text></g><!--entity people_api--><g id="elem_people_api"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="86" x="2331.5" y="325.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="66" x="2341.5" y="346.4355">People API</text></g><!--entity oauth--><g id="elem_oauth"><rect fill="#F1F1F1" height="33.9688" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="82" x="2607.5" y="325.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="62" x="2617.5" y="346.4355">OAuth 2.0</text></g><!--entity user--><g id="elem_user"><ellipse cx="99.5" cy="80.7969" fill="#F1F1F1" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M99.5,88.7969 L99.5,115.7969 M86.5,96.7969 L112.5,96.7969 M99.5,115.7969 L86.5,130.7969 M99.5,115.7969 L112.5,130.7969 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="29" x="85" y="143.4355">User</text></g><g id="elem_GMN58"><path d="M6,477.2969 L6,529.2031 L471,529.2031 L471,487.2969 L461,477.2969 L6,477.2969 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M461,477.2969 L461,487.2969 L471,487.2969 L461,477.2969 " fill="#FEFFDD" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="171" x="148.5" y="493.4355">Google Chat MCP Server</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="427" x="20.5" y="507.4043">Integrates with Google Chat API through the Model Control Protocol,</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="444" x="12" y="521.373">handling authentication, request processing, and response formatting</text></g><g id="elem_GMN61"><path d="M2536,470.2969 L2536,536.1719 L2913,536.1719 L2913,480.2969 L2903,470.2969 L2536,470.2969 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M2903,470.2969 L2903,480.2969 L2913,480.2969 L2903,470.2969 " fill="#FEFFDD" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="129" x="2655.5" y="486.4355">Google APIs Used:</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="356" x="2542" y="500.4043">- Google Chat API: Messages, spaces, threads, reactions</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="292" x="2574" y="514.373">- People API: User profiles, contact information</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="325" x="2557.5" y="528.3418">- OAuth 2.0: Authentication and token management</text></g><!--link user to ai--><g id="link_user_ai"><path d="M114.25,109.2969 C150.02,109.2969 242.74,109.2969 301.68,109.2969 " fill="none" id="user-to-ai" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="306.93,109.2969,297.93,105.2969,301.93,109.2969,297.93,113.2969,306.93,109.2969" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="52" x="184.5" y="89.4355">Request</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="156" x="132.5" y="103.4043">(e.g., "send a message")</text></g><!--link ai to runtime--><g id="link_ai_runtime"><path d="M353.41,126.4669 C353.45,145.4069 353.94,177.6969 356.5,205.2969 C360.28,246.1069 368.43,293.2969 373.39,319.9869 " fill="none" id="ai-to-runtime" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="374.33,325.0469,376.5894,315.4607,373.4017,320.1338,368.7285,316.946,374.33,325.0469" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="94" x="357.5" y="195.4355">Tool invocation</text></g><!--link runtime to fastmcp--><g id="link_runtime_fastmcp"><path d="M386.82,325.2669 C411.76,281.9669 482.63,173.8269 548.5,213.2969 C587.22,236.4969 605.43,289.6569 612.95,319.9969 " fill="none" id="runtime-to-fastmcp" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="614.15,325.0169,615.9554,315.3349,612.9913,320.153,608.1732,317.1889,614.15,325.0169" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="82" x="461.5" y="188.4355">MCP protocol</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="474.5" y="202.4043">requests</text></g><!--reverse link fastmcp to server_runtime--><g id="link_fastmcp_server_runtime"><path d="M617.5,364.7269 C617.5,396.9769 617.5,457.2969 617.5,486.1369 " fill="none" id="fastmcp-backto-server_runtime" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="617.5,359.4169,613.5,368.4169,617.5,364.4169,621.5,368.4169,617.5,359.4169" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="618.5" y="419.4355">Initializes</text></g><!--link fastmcp to msg_tools--><g id="link_fastmcp_msg_tools"><path d="M635.65,359.4169 C668.75,388.8169 738.8,451.0469 774.54,482.7869 " fill="none" id="fastmcp-to-msg_tools" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="778.3,486.1369,774.2499,477.1593,774.5701,482.8071,768.9223,483.1272,778.3,486.1369" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="702.5" y="419.4355">registers</text></g><!--link fastmcp to space_tools--><g id="link_fastmcp_space_tools"><path d="M659.5,359.3069 C704.08,376.0369 776.75,402.5369 840.5,422.2969 C853.68,426.3769 858.7,423.1469 870.5,430.2969 C891.98,443.3069 910.69,465.3569 922.65,481.6369 " fill="none" id="fastmcp-to-space_tools" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="925.84,486.0569,923.8158,476.4183,922.9136,482.0027,917.3291,481.1005,925.84,486.0569" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="841.5" y="419.4355">registers</text></g><!--link fastmcp to search_tools--><g id="link_fastmcp_search_tools"><path d="M683.01,355.1769 C741.23,366.4069 828.36,384.8469 902.5,407.2969 C920.27,412.6769 923.5,417.7269 941.5,422.2969 C968,429.0269 978.15,417.8569 1002.5,430.2969 C1025.65,442.1169 1045.17,465.0869 1057.28,481.9169 " fill="none" id="fastmcp-to-search_tools" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1060.2,486.0569,1058.2751,476.398,1057.3155,481.9728,1051.7406,481.0132,1060.2,486.0569" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="942.5" y="419.4355">registers</text></g><!--link fastmcp to user_tools--><g id="link_fastmcp_user_tools"><path d="M683.4,343.0869 C810.78,343.9469 1084.76,352.3269 1158.5,407.2969 C1182.1,424.8869 1192.29,458.8869 1196.56,481.0769 " fill="none" id="fastmcp-to-user_tools" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1197.48,486.1669,1199.8202,476.6001,1196.5931,481.2462,1191.9471,478.0191,1197.48,486.1669" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="1172.5" y="419.4355">registers</text></g><!--link fastmcp to attach_tools--><g id="link_fastmcp_attach_tools"><path d="M683.12,345.6569 C844.68,352.0169 1252.14,371.4369 1301.5,407.2969 C1325.31,424.5969 1335.44,458.6769 1339.64,480.9569 " fill="none" id="fastmcp-to-attach_tools" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1340.55,486.0769,1342.9219,476.5179,1339.6794,481.1532,1335.0441,477.9108,1340.55,486.0769" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="1315.5" y="419.4355">registers</text></g><!--link auth_server to oauth--><g id="link_auth_server_oauth"><path d="M2174.29,486.2469 C2223.3,463.8469 2317.54,424.0969 2402.5,407.2969 C2443.52,399.1869 2552.07,415.7769 2590.5,399.2969 C2608.07,391.7669 2623.4,376.3269 2633.88,363.5669 " fill="none" id="auth_server-to-oauth" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="2637.24,359.3569,2628.5064,363.9093,2634.127,363.2696,2634.7667,368.8901,2637.24,359.3569" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="98" x="2403.5" y="419.4355">OAuth requests</text></g><!--reverse link auth_server to oauth--><g id="link_auth_server_oauth"><path d="M2192.3,494.3069 C2295.43,477.7669 2522.35,438.0969 2590.5,399.2969 C2608.5,389.0469 2625.07,371.9369 2635.85,359.3169 " fill="none" id="auth_server-backto-oauth" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="2187.19,495.1169,2196.7075,497.6501,2192.1276,494.3297,2195.448,489.7499,2187.19,495.1169" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="76" x="2572.5" y="419.4355">Auth tokens</text></g><!--link auth_server to token_file--><g id="link_auth_server_token_file"><path d="M2109.3,520.4169 C2090.6,531.3369 2067.44,547.2169 2051.5,566.2969 C2041.8,577.9069 2034.57,593.1669 2029.64,606.0369 " fill="none" id="auth_server-to-token_file" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="2027.8,611.0169,2034.6677,603.9575,2029.5305,606.3259,2027.1621,601.1887,2027.8,611.0169" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="88" x="2052.5" y="578.4355">Stores tokens</text></g><!--reverse link auth_server to creds_file--><g id="link_auth_server_creds_file"><path d="M2143.67,525.5769 C2147.22,549.3669 2152.92,587.6169 2156.42,611.1469 " fill="none" id="auth_server-backto-creds_file" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="2142.91,520.4469,2140.2652,529.934,2143.6391,525.3934,2148.1797,528.7674,2142.91,520.4469" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="109" x="2152.5" y="578.4355">Client credentials</text></g><!--link token_manager to token_file--><g id="link_token_manager_token_file"><path d="M1862.21,632.7969 C1896.92,632.7969 1940.35,632.7969 1973.09,632.7969 " fill="none" id="token_manager-to-token_file" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1978.25,632.7969,1969.25,628.7969,1973.25,632.7969,1969.25,636.7969,1978.25,632.7969" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="80" x="1880.25" y="626.9355">Reads/writes</text></g><!--reverse link chat_client to token_manager--><g id="link_chat_client_token_manager"><path d="M1668.73,523.7269 C1700.14,548.9169 1754.35,592.3869 1783.53,615.7769 " fill="none" id="chat_client-backto-token_manager" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1664.64,520.4469,1669.1573,529.1987,1668.5402,523.5756,1674.1632,522.9584,1664.64,520.4469" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="100" x="1738.5" y="578.4355">Provides tokens</text></g><!--reverse link people_client to token_manager--><g id="link_people_client_token_manager"><path d="M1535.04,524.3369 C1553.97,541.7569 1583.58,566.4569 1613.5,581.2969 C1655.09,601.9169 1706.11,614.8869 1744.81,622.5069 " fill="none" id="people_client-backto-token_manager" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1530.93,520.5169,1534.7966,529.575,1534.5914,523.9219,1540.2446,523.7167,1530.93,520.5169" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="100" x="1614.5" y="578.4355">Provides tokens</text></g><!--reverse link chat_api to chat_client--><g id="link_chat_api_chat_client"><path d="M2492.52,362.9669 C2478.01,375.8669 2457.18,391.7169 2435.5,399.2969 C2426.22,402.5369 1737.64,426.6869 1728.5,430.2969 C1698.85,442.0069 1672.33,468.8069 1657.35,486.1969 " fill="none" id="chat_api-backto-chat_client" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="2496.44,359.4069,2487.081,362.4742,2492.7306,362.7596,2492.4453,368.4092,2496.44,359.4069" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="2262.5" y="419.4355">API calls</text></g><!--reverse link people_api to people_client--><g id="link_people_api_people_client"><path d="M2326.16,344.3169 C2175.29,348.1669 1715.38,365.0869 1583.5,430.2969 C1557.89,442.9569 1536.63,469.2069 1524.75,486.2669 " fill="none" id="people_api-backto-people_client" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="2331.39,344.1869,2322.2899,340.4202,2326.3917,344.3158,2322.4961,348.4176,2331.39,344.1869" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="1644.5" y="419.4355">API calls</text></g><!--link msg_tools to chat_client--><g id="link_msg_tools_chat_client"><path d="M807.95,486.2569 C820.97,468.5369 844.02,441.8169 871.5,430.2969 C927.05,407.0069 946.77,427.9669 1007,427.2969 C1071.05,426.5869 1525.55,403.0069 1583.5,430.2969 C1605.9,440.8469 1622.98,464.0669 1633.29,481.5069 " fill="none" id="msg_tools-to-chat_client" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1636.02,486.2569,1635.0208,476.4588,1633.5362,481.9174,1628.0777,480.4329,1636.02,486.2569" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="31" x="1008" y="419.4355">Uses</text></g><!--link space_tools to chat_client--><g id="link_space_tools_chat_client"><path d="M946.31,486.0669 C957.41,468.4569 977.27,442.0869 1002.5,430.2969 C1033.73,415.7069 1045.54,427.9669 1080,427.2969 C1191.87,425.1369 1482.29,382.5869 1583.5,430.2969 C1605.89,440.8569 1622.98,464.0769 1633.29,481.5169 " fill="none" id="space_tools-to-chat_client" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1636.02,486.2669,1635.0208,476.4688,1633.5362,481.9274,1628.0777,480.4429,1636.02,486.2669" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="31" x="1081" y="419.4355">Uses</text></g><!--link search_tools to chat_client--><g id="link_search_tools_chat_client"><path d="M1076.59,485.9869 C1084.09,467.6269 1098.77,439.6169 1122,427.2969 C1134.96,420.4269 1140.33,427.2469 1155,427.2969 C1250.22,427.6269 1497.38,389.6669 1583.5,430.2969 C1605.89,440.8569 1622.98,464.0869 1633.29,481.5169 " fill="none" id="search_tools-to-chat_client" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1636.02,486.2669,1634.9965,476.4713,1633.5255,481.9336,1628.0633,480.4625,1636.02,486.2669" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="31" x="1123" y="419.4355">Uses</text></g><!--link user_tools to people_client--><g id="link_user_tools_people_client"><path d="M1207.11,486.2369 C1217.07,466.5769 1236.66,435.8769 1265,427.2969 C1295.11,418.1769 1340.41,399.9669 1423.5,430.2969 C1452.51,440.8869 1479.24,464.7569 1496.12,482.3269 " fill="none" id="user_tools-to-people_client" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1499.78,486.2069,1496.5245,476.9116,1496.3532,482.5659,1490.6989,482.3945,1499.78,486.2069" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="31" x="1266" y="419.4355">Uses</text></g><!--link attach_tools to chat_client--><g id="link_attach_tools_chat_client"><path d="M1354.56,486.0869 C1368.72,467.5269 1394.12,439.0669 1424,427.2969 C1454.15,415.4269 1498.07,389.1069 1583.5,430.2969 C1605.67,440.9869 1622.69,463.9569 1633.05,481.2969 " fill="none" id="attach_tools-to-chat_client" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1635.8,486.0269,1634.7384,476.2354,1633.2886,481.7033,1627.8207,480.2536,1635.8,486.0269" style="stroke:#666666;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="31" x="1425" y="419.4355">Uses</text></g><!--link mcpserver to GMN58--><g id="link_mcpserver_GMN58"><path d="M495.4623,358.7262 C495.4162,358.8066 495.3699,358.8873 495.3234,358.9681 C494.9518,359.6149 494.5686,360.2742 494.1743,360.9447 C493.3857,362.2857 492.5523,363.6713 491.6763,365.0894 C484.6675,376.4344 474.925,389.8669 463.5,399.2969 C420.92,434.4369 364.4,460.2469 318.66,477.2469 " fill="none" id="mcpserver-GMN58" style="stroke:#666666;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/></g><!--link google to GMN61--><g id="link_google_GMN61"><path d="M2724.5,383.4537 C2724.5,383.6443 2724.5,383.8354 2724.5,384.0268 C2724.5,384.7926 2724.5,385.5647 2724.5,386.3428 C2724.5,387.899 2724.5,389.4789 2724.5,391.0794 C2724.5,416.6869 2724.5,447.5469 2724.5,470.2569 " fill="none" id="google-GMN61" style="stroke:#666666;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/></g><!--SRC=[ZLPDR-Cs4BthLn3A8Rk0dRPxo24e5l1wiGi3wzQ8qrEtC1Y9bbbBf4jISRF5_lU-8IMJT5AZbyIQUSFvu9idNHVNxBFMJIlOVCSTMyvNR2tCap1iocQcsaadAjSRKLmNXTrBTU26T-oVWh6vxWvQ2UNMxXdX1ZYkS11S7tYrRupkLJtNhJRiICV0FZD67uFfwlRs5fPFMhbVU2TOEJEIjoLC7yMMzwqZprf-4-odTz7u8FvsirOsgaDULk6FCCNted3IeOJoVtLI5kXvoQMA7LXsb6x7Ecq4guNZihK5hnpAB7-pmfICMzRZHr6D4Qpy-V4zfPYtaXxVp7jZjNdheLrrs5J1VlL5DZlteUs5dzdlimMRMIijHkN-82oNP4vEkk-LavtmJXD-KuTvvjSR7PFRqFRLYhVYin52-Tm7N0flCAKvjVc5FrC0EP3_4xUEpbaeggmAsRSmuhI064QPLXVIRCOY6KEPIPfPZv7cQRmfd1IQn_Cc71C03tgFQfTSuOG0SMJPTC7YGJLt_95RPF2-cp-jLcM4RgMdO8ghZAWnEV3BHZGPxOZEAt_GkZshV2ci9H-vh2-iiyt6qTCm7qIdRalF6K1ma315U4CA8Qub069SwfuvnwkTPtu4SMyymV96Kfha_NXJO9m_fiBpmDa0M0bzeD08ENXB17ttj6nrNsUK98CVS1CCOGFM- -Uu16bPizKY5i0FVXk6tADhI3muV_KaUdVpe_TfeX0LSiq-uhxPjjN7iCnxyNpQPPeacnegPFeUAyVksBtugnVMVLLln4rpCs6b5Qfcd7NXeikt1M3JMXyL8WQA8ynJGwedNN4djIf6p-dmOMa0fNqw6ErqfTkloeHyjiYtXatxGnQrK9A82k6pr9JFPqG3nJ0XumWTQpln4C41A8nzWKheU1cNaF8YC9Bp8YobPmP4RtIHj9PXbFxg8BjH4k9G_IqZFDpzQPJ1F6t5rbzh4ddd3m-AS7RcK5WK2u3Na7fXHtXKXk5syfC7dKv4fSX4AfQTvRWNlBO_70rUGoy2V9Pa1G5V6VqawrZKQn7PHhuIGpDUBTZWhxHIU0DYr6WnoPLanuhHw2Y6j-WhJv0bFOSEN9qwFNqbNoJfQJXvkv0-h4P2qekubAINW0b9Jx3peNbWHjDB9nPAEy4UjNEwOteRtxQGflzyByEtm9TAWmqMmwV6cGGojyFdKWF6xWHRwbgq-3XHpc3vLuE4J73AZgkwbQhnZ8ohCnbNWlIcWe01Cc70mcxnrO1tu5QR3at2KP3EKHSlUWc2dJM2qYmrNj_1F3sl6XeNrD9EWi3WFneXebD9VBXyYeoIxWTfg59Q30314mpVGLL3aIHo578I-hjpfQ3EFCLPs0Tw9SQs_WK0]--></g></svg>