java-sdk/docs/spring-ai-mcp-uml-classdiagram.svg
Christian Tzolov abd0facf4e feat: Add MCP server with Server stdio/sse transport improve MCP client
- Implement MCP server with async/sync support and builder pattern configuration
 - Add Server stdio/SSE transport layers with robust error handling
 - Convert McpClient and McpServer to interfaces for better extensibility
 - Add sampling capabilities for LLM interactions (text/image)
 - Implement dynamic root management and runtime tool management
 - Add comprehensive prompt and resource capabilities
 - Add support for dynamic root management (add/remove roots at runtime)

 Architecture Changes

 - Introduce registration records for tools, resources, and prompts
 - Improve thread safety with concurrent collections
 - Enhance resource template handling
 - Implement builder patterns for Server/Client capabilities
 - Add support for server capabilities and implementation info

Transport Layer:
 - Implement SseServerTransport with SSE endpoints
 - Add StdioServerTransport for process-based communication
 - Reorganize transport packages for better organization
 - Improve transport error handling and shutdown processes

Documentation:

 - Add detailed MCP reference documentation
 - Include architecture diagrams and API documentation
 - Add comprehensive test coverage for all components
 - Include sample projects demonstrating stdio/SSE transports

BREAKING CHANGES:

 Transport Package Reorganization

 - Move StdioClientTransport to o.s.ai.mcp.client.transport
 - Move SseClientTransport to o.s.ai.mcp.client.transport
 - Move ServerParameters to o.s.ai.mcp.client.transport
 - StdioClientTransport.errorHandler changed to private with
   setter method Migration: Use setErrorHandler() method
   instead of direct field access

 API Changes

 - Replace static factory methods with builder pattern
 - Update ServerCapabilities to use builder pattern
 - Make StdioClientTransport.errorHandler private with setter
 - Replace rootsListProvider with direct root management
 - Remove deprecated static factory methods

Resolves #27,#25,#24,#11
Related to #12
2024-12-28 21:03:29 +01:00

1 line
No EOL
44 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="1001px" preserveAspectRatio="none" style="width:2000px;height:1001px;background:#FFFFFF;" version="1.1" viewBox="0 0 2000 1001" width="2000px" zoomAndPan="magnify"><defs/><g><!--class McpTransport--><g id="elem_McpTransport"><rect codeLine="2" fill="#F1F1F1" height="129.4844" id="McpTransport" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="710.9541" x="739.5" y="699.5"/><ellipse cx="1042.52" cy="715.5" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1038.4419,711.2656 L1038.4419,709.1094 L1045.8325,709.1094 L1045.8325,711.2656 L1043.3638,711.2656 L1043.3638,719.3438 L1045.8325,719.3438 L1045.8325,721.5 L1038.4419,721.5 L1038.4419,719.3438 L1040.9106,719.3438 L1040.9106,711.2656 L1038.4419,711.2656 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="96.4141" x="1063.02" y="720.3467">McpTransport</text><line style="stroke:#181818;stroke-width:0.5;" x1="740.5" x2="1449.4541" y1="731.5" y2="731.5"/><line style="stroke:#181818;stroke-width:0.5;" x1="740.5" x2="1449.4541" y1="739.5" y2="739.5"/><ellipse cx="750.5" cy="753.1484" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="684.9541" x="759.5" y="756.4951">Mono&lt;Void&gt; connect(Function&lt;Mono&lt;JSONRPCMessage&gt;, Mono&lt;JSONRPCMessage&gt;&gt; handler)</text><ellipse cx="750.5" cy="769.4453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="394.0439" x="759.5" y="772.792">Mono&lt;Void&gt; sendMessage(JSONRPCMessage message)</text><ellipse cx="750.5" cy="785.7422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81.0605" x="759.5" y="789.0889">void close()</text><ellipse cx="750.5" cy="802.0391" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="215.2568" x="759.5" y="805.3857">Mono&lt;Void&gt; closeGracefully()</text><ellipse cx="750.5" cy="818.3359" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="458.0146" x="759.5" y="821.6826">&lt;T&gt; T unmarshalFrom(Object data, TypeReference&lt;T&gt; typeRef)</text></g><!--class McpSession--><g id="elem_McpSession"><rect codeLine="10" fill="#F1F1F1" height="113.1875" id="McpSession" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="709.833" x="740" y="246"/><ellipse cx="1049.627" cy="262" fill="#B4A7E5" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1045.5488,257.7656 L1045.5488,255.6094 L1052.9395,255.6094 L1052.9395,257.7656 L1050.4707,257.7656 L1050.4707,265.8438 L1052.9395,265.8438 L1052.9395,268 L1045.5488,268 L1045.5488,265.8438 L1048.0176,265.8438 L1048.0176,257.7656 L1045.5488,257.7656 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="82.0791" x="1070.127" y="266.8467">McpSession</text><line style="stroke:#181818;stroke-width:0.5;" x1="741" x2="1448.833" y1="278" y2="278"/><line style="stroke:#181818;stroke-width:0.5;" x1="741" x2="1448.833" y1="286" y2="286"/><ellipse cx="751" cy="299.6484" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="683.833" x="760" y="302.9951">&lt;T&gt; Mono&lt;T&gt; sendRequest(String method, Object requestParams, TypeReference&lt;T&gt; typeRef)</text><ellipse cx="751" cy="315.9453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="537.4961" x="760" y="319.292">Mono&lt;Void&gt; sendNotification(String method, Map&lt;String, Object&gt; params)</text><ellipse cx="751" cy="332.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="215.2568" x="760" y="335.5889">Mono&lt;Void&gt; closeGracefully()</text><ellipse cx="751" cy="348.5391" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81.0605" x="760" y="351.8857">void close()</text></g><!--class DefaultMcpSession--><g id="elem_DefaultMcpSession"><rect codeLine="18" fill="#F1F1F1" height="113.1875" id="DefaultMcpSession" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="228.3438" x="981" y="468.5"/><ellipse cx="1024.4001" cy="484.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1027.3688,490.1406 Q1026.7907,490.4375 1026.1501,490.5781 Q1025.5095,490.7344 1024.8063,490.7344 Q1022.3063,490.7344 1020.9782,489.0938 Q1019.6657,487.4375 1019.6657,484.3125 Q1019.6657,481.1875 1020.9782,479.5313 Q1022.3063,477.875 1024.8063,477.875 Q1025.5095,477.875 1026.1501,478.0313 Q1026.8063,478.1875 1027.3688,478.4844 L1027.3688,481.2031 Q1026.7438,480.625 1026.1501,480.3594 Q1025.5563,480.0781 1024.9313,480.0781 Q1023.5876,480.0781 1022.9001,481.1563 Q1022.2126,482.2188 1022.2126,484.3125 Q1022.2126,486.4063 1022.9001,487.4844 Q1023.5876,488.5469 1024.9313,488.5469 Q1025.5563,488.5469 1026.1501,488.2813 Q1026.7438,488 1027.3688,487.4219 L1027.3688,490.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="133.2324" x="1044.7112" y="489.3467">DefaultMcpSession</text><line style="stroke:#181818;stroke-width:0.5;" x1="982" x2="1208.3438" y1="500.5" y2="500.5"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="989" y="511.1484"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="165.5527" x="1001" y="517.4951">McpTransport transport</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="989" y="527.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="198.7891" x="1001" y="533.792">ObjectMapper objectMapper</text><ellipse cx="992" cy="546.7422" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="179.5117" x="1001" y="550.0889">interface RequestHandler</text><ellipse cx="992" cy="563.0391" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="202.3438" x="1001" y="566.3857">interface NotificationHandler</text><line style="stroke:#181818;stroke-width:0.5;" x1="982" x2="1208.3438" y1="573.6875" y2="573.6875"/></g><!--class McpClient--><g id="elem_McpClient"><rect codeLine="26" fill="#F1F1F1" height="96.8906" id="McpClient" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="358.5752" x="302.5" y="254"/><ellipse cx="442.9409" cy="270" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M445.9097,275.6406 Q445.3315,275.9375 444.6909,276.0781 Q444.0503,276.2344 443.3472,276.2344 Q440.8472,276.2344 439.519,274.5938 Q438.2065,272.9375 438.2065,269.8125 Q438.2065,266.6875 439.519,265.0313 Q440.8472,263.375 443.3472,263.375 Q444.0503,263.375 444.6909,263.5313 Q445.3472,263.6875 445.9097,263.9844 L445.9097,266.7031 Q445.2847,266.125 444.6909,265.8594 Q444.0972,265.5781 443.4722,265.5781 Q442.1284,265.5781 441.4409,266.6563 Q440.7534,267.7188 440.7534,269.8125 Q440.7534,271.9063 441.4409,272.9844 Q442.1284,274.0469 443.4722,274.0469 Q444.0972,274.0469 444.6909,273.7813 Q445.2847,273.5 445.9097,272.9219 L445.9097,275.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="69.1934" x="463.4409" y="274.8467">McpClient</text><line style="stroke:#181818;stroke-width:0.5;" x1="303.5" x2="660.0752" y1="286" y2="286"/><line style="stroke:#181818;stroke-width:0.5;" x1="303.5" x2="660.0752" y1="294" y2="294"/><ellipse cx="313.5" cy="307.6484" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="268.2559" x="322.5" y="310.9951">Builder using(McpTransport transport)</text><ellipse cx="313.5" cy="323.9453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="332.5752" x="322.5" y="327.292">McpAsyncClient async(McpTransport transport)</text><ellipse cx="313.5" cy="340.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="316.0117" x="322.5" y="343.5889">McpSyncClient sync(McpTransport transport)</text></g><!--class McpAsyncClient--><g id="elem_McpAsyncClient"><rect codeLine="32" fill="#F1F1F1" height="178.375" id="McpAsyncClient" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="561.1445" x="143.5" y="675"/><ellipse cx="364.3623" cy="691" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M367.3311,696.6406 Q366.7529,696.9375 366.1123,697.0781 Q365.4717,697.2344 364.7686,697.2344 Q362.2686,697.2344 360.9404,695.5938 Q359.6279,693.9375 359.6279,690.8125 Q359.6279,687.6875 360.9404,686.0313 Q362.2686,684.375 364.7686,684.375 Q365.4717,684.375 366.1123,684.5313 Q366.7686,684.6875 367.3311,684.9844 L367.3311,687.7031 Q366.7061,687.125 366.1123,686.8594 Q365.5186,686.5781 364.8936,686.5781 Q363.5498,686.5781 362.8623,687.6563 Q362.1748,688.7188 362.1748,690.8125 Q362.1748,692.9063 362.8623,693.9844 Q363.5498,695.0469 364.8936,695.0469 Q365.5186,695.0469 366.1123,694.7813 Q366.7061,694.5 367.3311,693.9219 L367.3311,696.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="110.9199" x="384.8623" y="695.8467">McpAsyncClient</text><line style="stroke:#181818;stroke-width:0.5;" x1="144.5" x2="703.6445" y1="707" y2="707"/><line style="stroke:#181818;stroke-width:0.5;" x1="144.5" x2="703.6445" y1="715" y2="715"/><ellipse cx="154.5" cy="728.6484" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="237.7471" x="163.5" y="731.9951">Mono&lt;InitializeResult&gt; initialize()</text><ellipse cx="154.5" cy="744.9453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="401.3174" x="163.5" y="748.292">Mono&lt;CallToolResult&gt; callTool(CallToolRequest request)</text><ellipse cx="154.5" cy="761.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="239.5723" x="163.5" y="764.5889">Mono&lt;ListToolsResult&gt; listTools()</text><ellipse cx="154.5" cy="777.5391" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="310.707" x="163.5" y="780.8857">Mono&lt;ListResourcesResult&gt; listResources()</text><ellipse cx="154.5" cy="793.8359" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="535.1445" x="163.5" y="797.1826">Mono&lt;ReadResourceResult&gt; readResource(ReadResourceRequest request)</text><ellipse cx="154.5" cy="810.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="443.2285" x="163.5" y="813.4795">Mono&lt;ListResourceTemplatesResult&gt; listResourceTemplates()</text><ellipse cx="154.5" cy="826.4297" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="281.9824" x="163.5" y="829.7764">Mono&lt;ListPromptsResult&gt; listPrompts()</text><ellipse cx="154.5" cy="842.7266" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="461.501" x="163.5" y="846.0732">Mono&lt;GetPromptResult&gt; getPrompt(GetPromptRequest request)</text></g><!--class McpSyncClient--><g id="elem_McpSyncClient"><rect codeLine="43" fill="#F1F1F1" height="178.375" id="McpSyncClient" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="499.6006" x="7" y="436"/><ellipse cx="201.0825" cy="452" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M204.0513,457.6406 Q203.4731,457.9375 202.8325,458.0781 Q202.1919,458.2344 201.4888,458.2344 Q198.9888,458.2344 197.6606,456.5938 Q196.3481,454.9375 196.3481,451.8125 Q196.3481,448.6875 197.6606,447.0313 Q198.9888,445.375 201.4888,445.375 Q202.1919,445.375 202.8325,445.5313 Q203.4888,445.6875 204.0513,445.9844 L204.0513,448.7031 Q203.4263,448.125 202.8325,447.8594 Q202.2388,447.5781 201.6138,447.5781 Q200.27,447.5781 199.5825,448.6563 Q198.895,449.7188 198.895,451.8125 Q198.895,453.9063 199.5825,454.9844 Q200.27,456.0469 201.6138,456.0469 Q202.2388,456.0469 202.8325,455.7813 Q203.4263,455.5 204.0513,454.9219 L204.0513,457.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="102.9355" x="221.5825" y="456.8467">McpSyncClient</text><line style="stroke:#181818;stroke-width:0.5;" x1="8" x2="505.6006" y1="468" y2="468"/><line style="stroke:#181818;stroke-width:0.5;" x1="8" x2="505.6006" y1="476" y2="476"/><ellipse cx="18" cy="489.6484" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="176.2031" x="27" y="492.9951">InitializeResult initialize()</text><ellipse cx="18" cy="505.9453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="339.7734" x="27" y="509.292">CallToolResult callTool(CallToolRequest request)</text><ellipse cx="18" cy="522.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178.0283" x="27" y="525.5889">ListToolsResult listTools()</text><ellipse cx="18" cy="538.5391" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="249.1631" x="27" y="541.8857">ListResourcesResult listResources()</text><ellipse cx="18" cy="554.8359" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="473.6006" x="27" y="558.1826">ReadResourceResult readResource(ReadResourceRequest request)</text><ellipse cx="18" cy="571.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="381.6846" x="27" y="574.4795">ListResourceTemplatesResult listResourceTemplates()</text><ellipse cx="18" cy="587.4297" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="220.4385" x="27" y="590.7764">ListPromptsResult listPrompts()</text><ellipse cx="18" cy="603.7266" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="399.957" x="27" y="607.0732">GetPromptResult getPrompt(GetPromptRequest request)</text></g><!--class McpServer--><g id="elem_McpServer"><rect codeLine="55" fill="#F1F1F1" height="64.2969" id="McpServer" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="294.2559" x="1575" y="270.5"/><ellipse cx="1680.5913" cy="286.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1683.5601,292.1406 Q1682.9819,292.4375 1682.3413,292.5781 Q1681.7007,292.7344 1680.9976,292.7344 Q1678.4976,292.7344 1677.1694,291.0938 Q1675.8569,289.4375 1675.8569,286.3125 Q1675.8569,283.1875 1677.1694,281.5313 Q1678.4976,279.875 1680.9976,279.875 Q1681.7007,279.875 1682.3413,280.0313 Q1682.9976,280.1875 1683.5601,280.4844 L1683.5601,283.2031 Q1682.9351,282.625 1682.3413,282.3594 Q1681.7476,282.0781 1681.1226,282.0781 Q1679.7788,282.0781 1679.0913,283.1563 Q1678.4038,284.2188 1678.4038,286.3125 Q1678.4038,288.4063 1679.0913,289.4844 Q1679.7788,290.5469 1681.1226,290.5469 Q1681.7476,290.5469 1682.3413,290.2813 Q1682.9351,290 1683.5601,289.4219 L1683.5601,292.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="74.5732" x="1701.0913" y="291.3467">McpServer</text><line style="stroke:#181818;stroke-width:0.5;" x1="1576" x2="1868.2559" y1="302.5" y2="302.5"/><line style="stroke:#181818;stroke-width:0.5;" x1="1576" x2="1868.2559" y1="310.5" y2="310.5"/><ellipse cx="1586" cy="324.1484" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="268.2559" x="1595" y="327.4951">Builder using(McpTransport transport)</text></g><!--class McpAsyncServer--><g id="elem_McpAsyncServer"><rect codeLine="59" fill="#F1F1F1" height="145.7813" id="McpAsyncServer" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="360.5439" x="1485.5" y="691"/><ellipse cx="1603.3721" cy="707" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1606.3408,712.6406 Q1605.7627,712.9375 1605.1221,713.0781 Q1604.4814,713.2344 1603.7783,713.2344 Q1601.2783,713.2344 1599.9502,711.5938 Q1598.6377,709.9375 1598.6377,706.8125 Q1598.6377,703.6875 1599.9502,702.0313 Q1601.2783,700.375 1603.7783,700.375 Q1604.4814,700.375 1605.1221,700.5313 Q1605.7783,700.6875 1606.3408,700.9844 L1606.3408,703.7031 Q1605.7158,703.125 1605.1221,702.8594 Q1604.5283,702.5781 1603.9033,702.5781 Q1602.5596,702.5781 1601.8721,703.6563 Q1601.1846,704.7188 1601.1846,706.8125 Q1601.1846,708.9063 1601.8721,709.9844 Q1602.5596,711.0469 1603.9033,711.0469 Q1604.5283,711.0469 1605.1221,710.7813 Q1605.7158,710.5 1606.3408,709.9219 L1606.3408,712.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="116.2998" x="1623.8721" y="711.8467">McpAsyncServer</text><line style="stroke:#181818;stroke-width:0.5;" x1="1486.5" x2="1845.0439" y1="723" y2="723"/><ellipse cx="1496.5" cy="736.6484" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="151.5869" x="1505.5" y="739.9951">interface ToolHandler</text><line style="stroke:#181818;stroke-width:0.5;" x1="1486.5" x2="1845.0439" y1="747.2969" y2="747.2969"/><ellipse cx="1496.5" cy="760.9453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="334.5439" x="1505.5" y="764.292">Mono&lt;Void&gt; addTool(ToolHandler toolHandler)</text><ellipse cx="1496.5" cy="777.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="304.9238" x="1505.5" y="780.5889">Mono&lt;Void&gt; removeTool(String toolName)</text><ellipse cx="1496.5" cy="793.5391" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="271.6943" x="1505.5" y="796.8857">Mono&lt;Void&gt; notifyToolsListChanged()</text><ellipse cx="1496.5" cy="809.8359" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="307.2617" x="1505.5" y="813.1826">Mono&lt;Void&gt; notifyResourcesListChanged()</text><ellipse cx="1496.5" cy="826.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="292.8994" x="1505.5" y="829.4795">Mono&lt;Void&gt; notifyPromptsListChanged()</text></g><!--class McpSyncServer--><g id="elem_McpSyncServer"><rect codeLine="68" fill="#F1F1F1" height="145.7813" id="McpSyncServer" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="297.708" x="1696" y="452"/><ellipse cx="1786.4463" cy="468" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1789.415,473.6406 Q1788.8369,473.9375 1788.1963,474.0781 Q1787.5557,474.2344 1786.8525,474.2344 Q1784.3525,474.2344 1783.0244,472.5938 Q1781.7119,470.9375 1781.7119,467.8125 Q1781.7119,464.6875 1783.0244,463.0313 Q1784.3525,461.375 1786.8525,461.375 Q1787.5557,461.375 1788.1963,461.5313 Q1788.8525,461.6875 1789.415,461.9844 L1789.415,464.7031 Q1788.79,464.125 1788.1963,463.8594 Q1787.6025,463.5781 1786.9775,463.5781 Q1785.6338,463.5781 1784.9463,464.6563 Q1784.2588,465.7188 1784.2588,467.8125 Q1784.2588,469.9063 1784.9463,470.9844 Q1785.6338,472.0469 1786.9775,472.0469 Q1787.6025,472.0469 1788.1963,471.7813 Q1788.79,471.5 1789.415,470.9219 L1789.415,473.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108.3154" x="1806.9463" y="472.8467">McpSyncServer</text><line style="stroke:#181818;stroke-width:0.5;" x1="1697" x2="1992.708" y1="484" y2="484"/><line style="stroke:#181818;stroke-width:0.5;" x1="1697" x2="1992.708" y1="492" y2="492"/><ellipse cx="1707" cy="505.6484" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="271.708" x="1716" y="508.9951">void addTool(ToolHandler toolHandler)</text><ellipse cx="1707" cy="521.9453" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="242.0879" x="1716" y="525.292">void removeTool(String toolName)</text><ellipse cx="1707" cy="538.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="208.8584" x="1716" y="541.5889">void notifyToolsListChanged()</text><ellipse cx="1707" cy="554.5391" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="244.4258" x="1716" y="557.8857">void notifyResourcesListChanged()</text><ellipse cx="1707" cy="570.8359" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="230.0635" x="1716" y="574.1826">void notifyPromptsListChanged()</text><ellipse cx="1707" cy="587.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="242.2998" x="1716" y="590.4795">McpAsyncServer getAsyncServer()</text></g><!--class StdioClientTransport--><g id="elem_StdioClientTransport"><rect codeLine="78" fill="#F1F1F1" height="80.5938" id="StdioClientTransport" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="238.3242" x="630" y="914"/><ellipse cx="673.0463" cy="930" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M676.0151,935.6406 Q675.437,935.9375 674.7963,936.0781 Q674.1557,936.2344 673.4526,936.2344 Q670.9526,936.2344 669.6245,934.5938 Q668.312,932.9375 668.312,929.8125 Q668.312,926.6875 669.6245,925.0313 Q670.9526,923.375 673.4526,923.375 Q674.1557,923.375 674.7963,923.5313 Q675.4526,923.6875 676.0151,923.9844 L676.0151,926.7031 Q675.3901,926.125 674.7963,925.8594 Q674.2026,925.5781 673.5776,925.5781 Q672.2338,925.5781 671.5463,926.6563 Q670.8588,927.7188 670.8588,929.8125 Q670.8588,931.9063 671.5463,932.9844 Q672.2338,934.0469 673.5776,934.0469 Q674.2026,934.0469 674.7963,933.7813 Q675.3901,933.5 676.0151,932.9219 L676.0151,935.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="143.999" x="693.2789" y="934.8467">StdioClientTransport</text><line style="stroke:#181818;stroke-width:0.5;" x1="631" x2="867.3242" y1="946" y2="946"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="638" y="956.6484"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="156.0918" x="650" y="962.9951">Process serverProcess</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="638" y="972.9453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="212.3242" x="650" y="979.292">ServerParameters parameters</text><line style="stroke:#181818;stroke-width:0.5;" x1="631" x2="867.3242" y1="986.5938" y2="986.5938"/></g><!--class SseClientTransport--><g id="elem_SseClientTransport"><rect codeLine="83" fill="#F1F1F1" height="64.2969" id="SseClientTransport" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="171.8037" x="903" y="922.5"/><ellipse cx="921.0278" cy="938.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M923.9966,944.1406 Q923.4185,944.4375 922.7778,944.5781 Q922.1372,944.7344 921.4341,944.7344 Q918.9341,944.7344 917.606,943.0938 Q916.2935,941.4375 916.2935,938.3125 Q916.2935,935.1875 917.606,933.5313 Q918.9341,931.875 921.4341,931.875 Q922.1372,931.875 922.7778,932.0313 Q923.4341,932.1875 923.9966,932.4844 L923.9966,935.2031 Q923.3716,934.625 922.7778,934.3594 Q922.1841,934.0781 921.5591,934.0781 Q920.2153,934.0781 919.5278,935.1563 Q918.8403,936.2188 918.8403,938.3125 Q918.8403,940.4063 919.5278,941.4844 Q920.2153,942.5469 921.5591,942.5469 Q922.1841,942.5469 922.7778,942.2813 Q923.3716,942 923.9966,941.4219 L923.9966,944.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="133.0752" x="935.7007" y="943.3467">SseClientTransport</text><line style="stroke:#181818;stroke-width:0.5;" x1="904" x2="1073.8037" y1="954.5" y2="954.5"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="911" y="965.1484"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="145.8037" x="923" y="971.4951">WebClient webClient</text><line style="stroke:#181818;stroke-width:0.5;" x1="904" x2="1073.8037" y1="978.7969" y2="978.7969"/></g><!--class StdioServerTransport--><g id="elem_StdioServerTransport"><rect codeLine="87" fill="#F1F1F1" height="48" id="StdioServerTransport" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="181.3789" x="1110.5" y="930.5"/><ellipse cx="1125.5" cy="946.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1128.4688,952.1406 Q1127.8906,952.4375 1127.25,952.5781 Q1126.6094,952.7344 1125.9063,952.7344 Q1123.4063,952.7344 1122.0781,951.0938 Q1120.7656,949.4375 1120.7656,946.3125 Q1120.7656,943.1875 1122.0781,941.5313 Q1123.4063,939.875 1125.9063,939.875 Q1126.6094,939.875 1127.25,940.0313 Q1127.9063,940.1875 1128.4688,940.4844 L1128.4688,943.2031 Q1127.8438,942.625 1127.25,942.3594 Q1126.6563,942.0781 1126.0313,942.0781 Q1124.6875,942.0781 1124,943.1563 Q1123.3125,944.2188 1123.3125,946.3125 Q1123.3125,948.4063 1124,949.4844 Q1124.6875,950.5469 1126.0313,950.5469 Q1126.6563,950.5469 1127.25,950.2813 Q1127.8438,950 1128.4688,949.4219 L1128.4688,952.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="149.3789" x="1139.5" y="951.3467">StdioServerTransport</text><line style="stroke:#181818;stroke-width:0.5;" x1="1111.5" x2="1290.8789" y1="962.5" y2="962.5"/><line style="stroke:#181818;stroke-width:0.5;" x1="1111.5" x2="1290.8789" y1="970.5" y2="970.5"/></g><!--class SseServerTransport--><g id="elem_SseServerTransport"><rect codeLine="90" fill="#F1F1F1" height="48" id="SseServerTransport" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="170.4551" x="1327" y="930.5"/><ellipse cx="1342" cy="946.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1344.9688,952.1406 Q1344.3906,952.4375 1343.75,952.5781 Q1343.1094,952.7344 1342.4063,952.7344 Q1339.9063,952.7344 1338.5781,951.0938 Q1337.2656,949.4375 1337.2656,946.3125 Q1337.2656,943.1875 1338.5781,941.5313 Q1339.9063,939.875 1342.4063,939.875 Q1343.1094,939.875 1343.75,940.0313 Q1344.4063,940.1875 1344.9688,940.4844 L1344.9688,943.2031 Q1344.3438,942.625 1343.75,942.3594 Q1343.1563,942.0781 1342.5313,942.0781 Q1341.1875,942.0781 1340.5,943.1563 Q1339.8125,944.2188 1339.8125,946.3125 Q1339.8125,948.4063 1340.5,949.4844 Q1341.1875,950.5469 1342.5313,950.5469 Q1343.1563,950.5469 1343.75,950.2813 Q1344.3438,950 1344.9688,949.4219 L1344.9688,952.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="138.4551" x="1356" y="951.3467">SseServerTransport</text><line style="stroke:#181818;stroke-width:0.5;" x1="1328" x2="1496.4551" y1="962.5" y2="962.5"/><line style="stroke:#181818;stroke-width:0.5;" x1="1328" x2="1496.4551" y1="970.5" y2="970.5"/></g><!--class McpSchema--><g id="elem_McpSchema"><rect codeLine="94" fill="#F1F1F1" height="162.0781" id="McpSchema" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="357.0918" x="776.5" y="7"/><ellipse cx="908.3208" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M911.2896,28.6406 Q910.7114,28.9375 910.0708,29.0781 Q909.4302,29.2344 908.7271,29.2344 Q906.2271,29.2344 904.8989,27.5938 Q903.5864,25.9375 903.5864,22.8125 Q903.5864,19.6875 904.8989,18.0313 Q906.2271,16.375 908.7271,16.375 Q909.4302,16.375 910.0708,16.5313 Q910.7271,16.6875 911.2896,16.9844 L911.2896,19.7031 Q910.6646,19.125 910.0708,18.8594 Q909.4771,18.5781 908.8521,18.5781 Q907.5083,18.5781 906.8208,19.6563 Q906.1333,20.7188 906.1333,22.8125 Q906.1333,24.9063 906.8208,25.9844 Q907.5083,27.0469 908.8521,27.0469 Q909.4771,27.0469 910.0708,26.7813 Q910.6646,26.5 911.2896,25.9219 L911.2896,28.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="84.9502" x="928.8208" y="27.8467">McpSchema</text><line style="stroke:#181818;stroke-width:0.5;" x1="777.5" x2="1132.5918" y1="39" y2="39"/><ellipse cx="787.5" cy="52.6484" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117.0176" x="796.5" y="55.9951">class ErrorCodes</text><ellipse cx="787.5" cy="68.9453" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="124.3867" x="796.5" y="72.292">interface Request</text><ellipse cx="787.5" cy="85.2422" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="190.7021" x="796.5" y="88.5889">interface JSONRPCMessage</text><ellipse cx="787.5" cy="101.5391" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="195.002" x="796.5" y="104.8857">interface ResourceContents</text><ellipse cx="787.5" cy="117.8359" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="122.5684" x="796.5" y="121.1826">interface Content</text><ellipse cx="787.5" cy="134.1328" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="194.4619" x="796.5" y="137.4795">interface ServerCapabilities</text><line style="stroke:#181818;stroke-width:0.5;" x1="777.5" x2="1132.5918" y1="144.7813" y2="144.7813"/><ellipse cx="787.5" cy="158.4297" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" text-decoration="underline" textLength="331.0918" x="796.5" y="161.7764">JSONRPCMessage deserializeJsonRpcMessage()</text></g><!--class McpError--><g id="elem_McpError"><rect codeLine="104" fill="#F1F1F1" height="80.5938" id="McpError" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="135.1494" x="1168.5" y="47.5"/><ellipse cx="1201.4134" cy="63.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#181818;stroke-width:1;"/><path d="M1204.3822,69.1406 Q1203.8041,69.4375 1203.1634,69.5781 Q1202.5228,69.7344 1201.8197,69.7344 Q1199.3197,69.7344 1197.9916,68.0938 Q1196.6791,66.4375 1196.6791,63.3125 Q1196.6791,60.1875 1197.9916,58.5313 Q1199.3197,56.875 1201.8197,56.875 Q1202.5228,56.875 1203.1634,57.0313 Q1203.8197,57.1875 1204.3822,57.4844 L1204.3822,60.2031 Q1203.7572,59.625 1203.1634,59.3594 Q1202.5697,59.0781 1201.9447,59.0781 Q1200.6009,59.0781 1199.9134,60.1563 Q1199.2259,61.2188 1199.2259,63.3125 Q1199.2259,65.4063 1199.9134,66.4844 Q1200.6009,67.5469 1201.9447,67.5469 Q1202.5697,67.5469 1203.1634,67.2813 Q1203.7572,67 1204.3822,66.4219 L1204.3822,69.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63.3418" x="1219.3942" y="68.3467">McpError</text><line style="stroke:#181818;stroke-width:0.5;" x1="1169.5" x2="1302.6494" y1="79.5" y2="79.5"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1176.5" y="90.1484"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="56.4648" x="1188.5" y="96.4951">int code</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1176.5" y="106.4453"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="109.1494" x="1188.5" y="112.792">String message</text><line style="stroke:#181818;stroke-width:0.5;" x1="1169.5" x2="1302.6494" y1="120.0938" y2="120.0938"/></g><!--reverse link McpTransport to StdioClientTransport--><g id="link_McpTransport_StdioClientTransport"><path codeLine="110" d="M962.5336,837.1614 C910.6436,865.4314 866.97,889.23 821.59,913.96 " fill="none" id="McpTransport-backto-StdioClientTransport" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="none" points="978.34,828.55,959.6631,831.8926,965.4041,842.4302,978.34,828.55" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link McpTransport to SseClientTransport--><g id="link_McpTransport_SseClientTransport"><path codeLine="111" d="M1050.4381,844.2399 C1032.6481,875.8799 1020.77,897.01 1006.46,922.44 " fill="none" id="McpTransport-backto-SseClientTransport" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="none" points="1059.26,828.55,1045.2081,841.2993,1055.6681,847.1806,1059.26,828.55" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link McpTransport to StdioServerTransport--><g id="link_McpTransport_StdioServerTransport"><path codeLine="112" d="M1139.5609,844.2405 C1159.2709,879.3005 1173.74,905.03 1187.94,930.27 " fill="none" id="McpTransport-backto-StdioServerTransport" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="none" points="1130.74,828.55,1134.3307,847.1808,1144.791,841.3002,1130.74,828.55" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link McpTransport to SseServerTransport--><g id="link_McpTransport_SseServerTransport"><path codeLine="113" d="M1217.3513,837.7499 C1276.3113,872.8099 1330.49,905.03 1372.94,930.27 " fill="none" id="McpTransport-backto-SseServerTransport" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="none" points="1201.88,828.55,1214.2847,842.907,1220.418,832.5928,1201.88,828.55" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link McpSession to DefaultMcpSession--><g id="link_McpSession_DefaultMcpSession"><path codeLine="115" d="M1095,377.14 C1095,410.57 1095,434.95 1095,468.38 " fill="none" id="McpSession-backto-DefaultMcpSession" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="none" points="1095,359.14,1089,377.14,1101,377.14,1095,359.14" style="stroke:#181818;stroke-width:1;"/></g><!--link DefaultMcpSession to McpAsyncClient--><g id="link_DefaultMcpSession_McpAsyncClient"><path codeLine="116" d="M980.79,566.34 C896.62,596.07 790.2151,633.6539 684.6851,670.9239 " fill="none" id="DefaultMcpSession-to-McpAsyncClient" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="673.37,674.92,680.3596,676.6936,684.6851,670.9239,677.6955,669.1502,673.37,674.92" style="stroke:#181818;stroke-width:1;"/></g><!--link DefaultMcpSession to McpAsyncServer--><g id="link_DefaultMcpSession_McpAsyncServer"><path codeLine="117" d="M1209.32,570.36 C1283.38,599.42 1381.74,638.62 1468,675 C1480.13,680.12 1481.6385,680.7107 1494.1985,686.1507 " fill="none" id="DefaultMcpSession-to-McpAsyncServer" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="1505.21,690.92,1501.294,684.8648,1494.1985,686.1507,1498.1145,692.2058,1505.21,690.92" style="stroke:#181818;stroke-width:1;"/></g><!--link McpClient to McpAsyncClient--><g id="link_McpClient_McpAsyncClient"><path codeLine="119" d="M500.75,351.06 C522.34,412.87 551.53,523.58 524,614 C517.6,635.01 510.3131,650.6515 498.5131,669.6715 " fill="none" id="McpClient-to-McpAsyncClient" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="495.35,674.77,503.4937,669.231,497.9859,670.5212,496.6957,665.0135,495.35,674.77" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="48.3247" x="537" y="529.5669">creates</text></g><!--link McpClient to McpSyncClient--><g id="link_McpClient_McpSyncClient"><path codeLine="120" d="M433.46,351.07 C408.26,375.76 380.9553,402.5305 351.4853,431.4105 " fill="none" id="McpClient-to-McpSyncClient" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="347.2,435.61,356.4277,432.1676,350.7711,432.1104,350.8283,426.4538,347.2,435.61" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="48.3247" x="391" y="402.0669">creates</text></g><!--reverse link McpSyncClient to McpAsyncClient--><g id="link_McpSyncClient_McpAsyncClient"><path codeLine="121" d="M326.0922,624.0593 C340.0022,643.7993 347.85,654.93 361.76,674.68 " fill="none" id="McpSyncClient-backto-McpAsyncClient" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="319.18,614.25,319.3663,621.4587,326.0922,624.0593,325.9059,616.8506,319.18,614.25" style="stroke:#181818;stroke-width:1;"/></g><!--link McpServer to McpAsyncServer--><g id="link_McpServer_McpAsyncServer"><path codeLine="123" d="M1691.63,334.71 C1669.48,359.79 1641.28,397.14 1629,436 C1602.19,520.85 1620.0407,617.724 1639.4307,685.104 " fill="none" id="McpServer-to-McpAsyncServer" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="1641.09,690.87,1642.4451,681.1148,1639.7073,686.065,1634.7571,683.3272,1641.09,690.87" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="48.3247" x="1630" y="529.5669">creates</text></g><!--link McpServer to McpSyncServer--><g id="link_McpServer_McpSyncServer"><path codeLine="124" d="M1739.36,334.62 C1756.25,364.9 1779.5968,406.7502 1801.7168,446.4002 " fill="none" id="McpServer-to-McpSyncServer" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="1804.64,451.64,1803.7484,441.8316,1802.204,447.2735,1796.7621,445.7291,1804.64,451.64" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="48.3247" x="1777" y="402.0669">creates</text></g><!--reverse link McpSyncServer to McpAsyncServer--><g id="link_McpSyncServer_McpAsyncServer"><path codeLine="125" d="M1783.3378,607.6457 C1761.1178,637.0657 1742.71,661.44 1720.48,690.86 " fill="none" id="McpSyncServer-backto-McpAsyncServer" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="1790.57,598.07,1783.762,600.4471,1783.3378,607.6457,1790.1458,605.2686,1790.57,598.07" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link DefaultMcpSession to McpTransport--><g id="link_DefaultMcpSession_McpTransport"><path codeLine="127" d="M1095,593.57 C1095,628.86 1095,662.66 1095,699.41 " fill="none" id="DefaultMcpSession-backto-McpTransport" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="1095,581.57,1091,587.57,1095,593.57,1099,587.57,1095,581.57" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link McpSchema to McpSession--><g id="link_McpSchema_McpSession"><path codeLine="128" d="M1011.0311,174.0403 C1027.9311,199.6903 1042.96,222.5 1058.43,246 " fill="none" id="McpSchema-backto-McpSession" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="1007.73,169.03,1009.3415,178.7461,1010.4809,173.2052,1016.0218,174.3447,1007.73,169.03" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="29.7832" x="1039" y="212.0669">uses</text></g><!--link McpError to McpSession--><g id="link_McpError_McpSession"><path codeLine="129" d="M1209.48,128.97 C1187.62,161.91 1159.6878,204.0108 1135.3578,240.6708 " fill="none" id="McpError-to-McpSession" style="stroke:#181818;stroke-width:1;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="1132.04,245.67,1140.3495,240.3831,1134.8048,241.504,1133.6839,235.9593,1132.04,245.67" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="44.04" x="1163" y="212.0669">throws</text></g><!--SRC=[dLRRSjem47tdA_GMPnho0Hc6cPOsQJ8boM2cVLRi1ToH9LSIoT0q_zwrBbYI3Q5z0NbrzdfMAvsHcP10Rha6kQ85g57bbsHUD4j9kMg4rEHrHCY7kU1YybrKvPGKWdCeT7QzvOMk19-OlRlyuNxnE9k3KdGDqmio99sI3UKb0tcUs5J0ImVAOXrIst-ZyOnWKZ2X84ij6EcDnEXNMyPsTd-od98bsVAQIhMXx5gAEdju-edHav9gUa6MkmOMi089l80MhQtWVFGsYkkHOnYOhAr6YpI-bpRq1VpQWj9PhcN5rnYoteZoWZXNqku-KabhTSndloRtGbUhgg1jdLFhSzfChCXxcfB6-3YfDb4jCTiprmzrmw06herFCcDKAUoDelqdds55jqmdvHX7xQBzgjsnSM6a3KWYWeysWgw-hdvVRNF4Us49FC26ooeCCuaGGt5oGzIhQlCetiYdRSLAZ66hi5xPSC3daGPYFgeTBvmvsgvFLSmxlQDgcCS-xD1PT-HkUQKhoghVs24AIpybrLuId84PPMmf1FEWmdrdtOQfiE_5JlDRfNGBK5wLUK4MWt1VR2NEYH2u5mRW1T3IoprM1h8i1Xo9ouEMW4r9zR3h_MOIxoCUzaP7AauK06_02JrixGLPi9M46BAM9wIbVFNeYfawZQY4evIY0NQ6oEdpyc-q767a624zBlfK92oSIi8PoK4-uw7kZG0d_vyHq3kIeQrWfjAoDBorFsui4Tsjqn4ieHRFO3JS66_1zxI65CdRURSpzBQbc-6DkOOo6uRjANuVwYhU0tQJDaYbr-DX5SpDSKh-1lXEvWPpBES0S3ZR07GepuHFxB7Wqr-1NKl4zw3lhLoNbR3dFNuWZT4j1gRmrcxjkQzsmpembpzWfPMzeysogtAkOD3g3tXoq-N5hmAbDXXhFbGBZGxkuhafDb1JWbIHBrAAeHDa4OPlApJ0cIX13TxTiJ1-mwKAbiMPG17NYJadZOKsZHbjw5F5S9xQ6FOdEtanOeWWxSozKu8lci8_BUFZRLCtTKPN-AujmH3cdrasTbEm1J3R1vkgKQDeTap-N5uEziKGh4Vp8Li9SSEsKj0eU9WPJE-zDkg_uCPZaJm_tW5PhyQPwytBosdwWhaY1LukU0dqOVa1L20Nut4QqwWRww4x9ueDHR3y4AgJX-vyTlqQE5J4YJic4wnrWBp2EyOwiItc8zblwuqKB-el]--></g></svg>