{"id":1905,"date":"2026-04-04T20:02:32","date_gmt":"2026-04-04T12:02:32","guid":{"rendered":"https:\/\/eve2333.top\/?p=1905"},"modified":"2026-04-04T20:02:32","modified_gmt":"2026-04-04T12:02:32","slug":"%e6%89%8b%e6%90%93rag%e7%b3%bb%e7%bb%9f-ragent-ai%ef%bc%888%ef%bc%89","status":"publish","type":"post","link":"https:\/\/eve2333.top\/?p=1905","title":{"rendered":"\u624b\u6413RAG\u7cfb\u7edf \u2013 Ragent AI\uff088\uff09"},"content":{"rendered":"\n<p><strong>\u4e0d\u8981\u628a\u6240\u6709\u6d3b\u513f\u90fd\u4e22\u7ed9\u201cTools\uff08\u5de5\u5177\uff09\u201d\u53bb\u5e72\uff0c\u8981\u5b66\u4f1a\u7528\u201cResources\uff08\u8d44\u6e90\uff09\u201d\u548c\u201cPrompts\uff08\u63d0\u793a\u8bcd\uff09\u201d\u3002<\/strong><\/p>\n\n\n\n<p>\u6211\u7528\u901a\u4fd7\u7684\u6bd4\u55bb\u7ed9\u4f60\u7ffb\u8bd1\u4e00\u4e0b\u8fd9\u4e09\u4e2a\u6982\u5ff5\uff0c\u4f60\u5c31\u5168\u61c2\u4e86\uff1a<\/p>\n\n\n\n<p>\u5047\u8bbe\u4f60\u96c7\u4e86\u4e00\u4e2a\u975e\u5e38\u806a\u660e\u7684&nbsp;<strong>AI \u52a9\u7406<\/strong>\uff0c\u4f60\u8981\u600e\u4e48\u8ba9\u4ed6\u5e2e\u4f60\u5e72\u6d3b\uff1fMCP \u534f\u8bae\u4e3a\u4ed6\u63d0\u4f9b\u4e86\u4e09\u79cd\u5e2e\u5fd9\u7684\u65b9\u5f0f\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Tools\uff08\u5de5\u5177\uff09\uff1a\u8ba9 AI \u53bb\u201c\u505a\u4e8b\u201d\uff08\u52a8\u8bcd\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6982\u5ff5<\/strong>\uff1a\u4f60\u53ef\u4ee5\u7ed9 AI \u63d0\u4f9b\u5404\u79cd\u5de5\u5177\uff0cAI \u5728\u9700\u8981\u7684\u65f6\u5019\u4f1a\u81ea\u5df1\u51b3\u5b9a\u62ff\u54ea\u4e2a\u5de5\u5177\u53bb\u5e72\u6d3b\u3002<\/li>\n\n\n\n<li><strong>\u6bd4\u55bb<\/strong>\uff1a\u76f8\u5f53\u4e8e\u4f60\u7ed9 AI \u52a9\u7406\u53d1\u4e86<strong>\u8ba1\u7b97\u5668\u3001\u8f66\u94a5\u5319\u3001\u53d1\u90ae\u4ef6\u7684\u8d26\u53f7<\/strong>\u3002<\/li>\n\n\n\n<li><strong>\u573a\u666f<\/strong>\uff1a\u4f60\u8ba9 AI \u201c\u5e2e\u6211\u7ed9\u8001\u677f\u53d1\u5c01\u90ae\u4ef6\u201d\uff0c\u6216\u8005\u201c\u628a\u6570\u636e\u5e93\u91cc\u7684\u67d0\u6761\u8bb0\u5f55\u5220\u6389\u201d\u3002\u8fd9\u4f1a<strong>\u4ea7\u751f\u5b9e\u9645\u7684\u64cd\u4f5c\u6216\u6539\u53d8<\/strong>\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Resources\uff08\u8d44\u6e90\uff09\uff1a\u8ba9 AI \u53bb\u201c\u770b\u8d44\u6599\u201d\uff08\u540d\u8bcd\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6982\u5ff5<\/strong>\uff1a\u63d0\u4f9b\u7ed9 AI \u9605\u8bfb\u7684\u53ea\u8bfb\u6570\u636e\u6216\u80cc\u666f\u4fe1\u606f\u3002<\/li>\n\n\n\n<li><strong>\u6587\u7ae0\u91cc\u7684\u75db\u70b9<\/strong>\uff1a\u4ee5\u524d\u5f88\u591a\u5f00\u53d1\u8005\u4e60\u60ef\u7528 Tools \u6765\u505a\u4e00\u5207\u3002\u6bd4\u5982\u5199\u4e00\u4e2a\u53eb\u00a0\u83b7\u53d6\u914d\u7f6e\u4fe1\u606f\u00a0\u7684\u5de5\u5177\uff0c\u8ba9 AI \u53bb\u8c03\u7528\u3002\u6587\u7ae0\u6307\u51fa\u8fd9\u6837\u5f88\u522b\u626d\u2014\u2014\u8fd9\u5c31\u50cf\u4f60\u53bb\u9910\u5385\u70b9\u83dc\uff08\u8c03\u7528 Tool\uff09\uff0c\u670d\u52a1\u5458\u4e0d\u7ed9\u4f60\u4e0a\u83dc\uff0c\u5374\u7ed9\u4f60\u7aef\u6765\u4e86\u4e00\u672c\u83dc\u5355\uff08\u53ea\u8bfb\u4fe1\u606f\uff09\u3002<\/li>\n\n\n\n<li><strong>\u6b63\u786e\u7684\u505a\u6cd5<\/strong>\uff1a\u76f4\u63a5\u628a\u83dc\u5355\u4f5c\u4e3a\u00a0<strong>Resources\uff08\u8d44\u6e90\uff09<\/strong>\u00a0\u7ed9 AI\u3002<\/li>\n\n\n\n<li><strong>\u6bd4\u55bb<\/strong>\uff1a\u76f8\u5f53\u4e8e\u4f60\u7ed9 AI \u52a9\u7406\u6254\u8fc7\u53bb\u4e00\u672c<strong>\u516c\u53f8\u5458\u5de5\u624b\u518c\u3001\u4e00\u4efd\u53c2\u8003\u6587\u4ef6\u3001\u6216\u8005\u5f53\u524d\u7684\u7cfb\u7edf\u914d\u7f6e\u6587\u4ef6<\/strong>\u3002AI \u53ea\u662f\u201c\u770b\u201d\u8fd9\u4e9b\u8d44\u6599\uff0c\u4e0d\u4f1a\u6539\u53d8\u4efb\u4f55\u4e1c\u897f\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. Prompts\uff08\u63d0\u793a\u8bcd\uff09\uff1a\u8ba9 AI \u6309\u201c\u6807\u51c6\u6d41\u7a0b\u201d\u5de5\u4f5c\uff08\u8bf4\u660e\u4e66\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6982\u5ff5<\/strong>\uff1a\u9884\u5148\u5199\u597d\u7684\u3001\u7ed3\u6784\u5316\u7684\u6307\u4ee4\u6a21\u677f\u3002<\/li>\n\n\n\n<li><strong>\u6587\u7ae0\u91cc\u7684\u75db\u70b9<\/strong>\uff1a\u6709\u4e9b\u590d\u6742\u7684\u4efb\u52a1\uff0c\u9700\u8981\u7ed9 AI \u8bbe\u5b9a\u5f88\u957f\u3001\u5f88\u590d\u6742\u7684\u89c4\u5219\uff08\u6bd4\u5982\u626e\u6f14\u4ec0\u4e48\u89d2\u8272\u3001\u5206\u51e0\u6b65\u56de\u7b54\u3001\u5931\u8d25\u4e86\u600e\u4e48\u529e\uff09\u3002\u5982\u679c\u6bcf\u4e2a\u63a5\u5165 AI \u7684\u8f6f\u4ef6\uff08Client\uff09\u90fd\u8981\u81ea\u5df1\u5199\u4e00\u904d\u8fd9\u5957\u590d\u6742\u7684\u89c4\u5219\uff0c\u4e0d\u4ec5\u9ebb\u70e6\u8fd8\u5bb9\u6613\u51fa\u9519\u3002<\/li>\n\n\n\n<li><strong>\u6b63\u786e\u7684\u505a\u6cd5<\/strong>\uff1a\u628a\u8fd9\u5957\u89c4\u5219\u56fa\u5316\u6210\u00a0<strong>Prompts\uff08\u63d0\u793a\u8bcd\u6a21\u677f\uff09<\/strong>\u00a0\u653e\u5728\u670d\u52a1\u7aef\u3002<\/li>\n\n\n\n<li><strong>\u6bd4\u55bb<\/strong>\uff1a\u76f8\u5f53\u4e8e\u516c\u53f8\u7684\u00a0<strong>SOP\uff08\u6807\u51c6\u4f5c\u4e1a\u7a0b\u5e8f\uff09\u6216\u8005\u201c\u586b\u7a7a\u9898\u8868\u683c\u201d<\/strong>\u3002\u6bd4\u5982\u4f60\u4eec\u6709\u4e00\u5957\u5b8c\u7f8e\u7684\u201c\u7ffb\u8bd1\u6587\u7ae0\u6a21\u677f\u201d\uff0c\u4ee5\u540e\u6240\u6709\u4eba\uff08\u591a\u4e2a Client\uff09\u53ea\u8981\u544a\u8bc9 AI \u52a9\u7406\uff1a\u201c\u7528\u90a3\u5957\u2018\u7ffb\u8bd1\u6a21\u677f\u2019\uff0c\u628a\u8fd9\u7bc7\u82f1\u6587\u653e\u8fdb\u53bb\u201d\uff0cAI \u5c31\u80fd\u6309\u6700\u9ad8\u6807\u51c6\u4ea7\u51fa\uff0c\u4e0d\u9700\u8981\u6bcf\u4e2a\u4eba\u518d\u91cd\u65b0\u6559 AI \u600e\u4e48\u7ffb\u8bd1\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5728\u7b80\u5355\u7684 AI \u9879\u76ee\u91cc\uff0c\u5927\u5bb6\u4e60\u60ef\u53ea\u7528&nbsp;<strong>Tools\uff08\u5de5\u5177\uff09<\/strong>\uff0c\u8ba9 AI \u81ea\u5df1\u53bb\u8c03\u63a5\u53e3\u5c31\u5b8c\u4e8b\u4e86\u3002<br>\u4f46\u5728\u5927\u578b\u7684\u3001\u6b63\u89c4\u7684\u9879\u76ee\u91cc\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u60f3\u8ba9 AI\u00a0<strong>\u529e\u4e8b<\/strong>\uff0c\u7528 Tools\uff08\u6267\u884c\u52a8\u4f5c\uff09\u3002<\/li>\n\n\n\n<li>\u60f3\u8ba9 AI\u00a0<strong>\u770b\u8d44\u6599<\/strong>\uff0c\u7528 Resources\uff08\u63d0\u4f9b\u53ea\u8bfb\u6570\u636e\uff09\u3002<\/li>\n\n\n\n<li>\u60f3\u8ba9 AI\u00a0<strong>\u6309\u56fa\u5b9a\u5957\u8def\u53d1\u8bdd<\/strong>\uff0c\u7528 Prompts\uff08\u63d0\u4f9b\u586b\u7a7a\u6a21\u677f\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"resources-server\">Resources\uff1a\u8ba9 Server \u66b4\u9732\u6570\u636e\u7ed9\u6a21\u578b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-resources\">1. Resources \u662f\u4ec0\u4e48<\/h3>\n\n\n\n<p>Resources\uff08\u8d44\u6e90\uff09\u662f MCP \u534f\u8bae\u63d0\u4f9b\u7684\u4e09\u7c7b\u80fd\u529b\u4e4b\u4e00\u3002\u4e00\u53e5\u8bdd\u6982\u62ec\uff1a<strong>Server \u66b4\u9732\u6570\u636e\uff0cClient \u6765\u8bfb\u53d6\uff0c\u7ed9\u6a21\u578b\u63d0\u4f9b\u4e0a\u4e0b\u6587<\/strong>\u3002<\/p>\n\n\n\n<p>\u548c Tools \u7684\u533a\u522b\u5f88\u5173\u952e\uff0c\u7528\u9910\u5385\u6765\u6253\u6bd4\u65b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tools \u50cf\u70b9\u83dc<\/strong>\u2014\u2014\u4f60\u544a\u8bc9\u53a8\u623f\u8981\u505a\u4e00\u9053\u7ea2\u70e7\u8089\uff0c\u53a8\u623f\u5f00\u706b\u7092\u83dc\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u6709\u526f\u4f5c\u7528\uff08\u6d88\u8017\u98df\u6750\u3001\u4ea7\u751f\u4e00\u9053\u83dc\uff09\u3002\u5bf9\u5e94\u5230\u7cfb\u7edf\u91cc\u5c31\u662f\uff1a\u4e0b\u8ba2\u5355\uff08\u5199\u6570\u636e\u5e93\uff09\u3001\u53d1\u90ae\u4ef6\uff08\u89e6\u53d1\u5916\u90e8\u64cd\u4f5c\uff09\u3001\u63d0\u4ea4\u9000\u8d27\u7533\u8bf7\uff08\u4fee\u6539\u8ba2\u5355\u72b6\u6001\uff09<\/li>\n\n\n\n<li><strong>Resources \u50cf\u770b\u83dc\u5355<\/strong>\u2014\u2014\u4f60\u62ff\u8d77\u83dc\u5355\u7ffb\u4e86\u7ffb\uff0c\u770b\u770b\u6709\u4ec0\u4e48\u83dc\u3001\u4ef7\u683c\u591a\u5c11\u3002\u8fd9\u4e2a\u8fc7\u7a0b\u6ca1\u6709\u4efb\u4f55\u526f\u4f5c\u7528\uff0c\u83dc\u5355\u4e0d\u4f1a\u56e0\u4e3a\u4f60\u770b\u4e86\u4e00\u773c\u5c31\u5c11\u4e00\u9875\u3002\u5bf9\u5e94\u5230\u7cfb\u7edf\u91cc\u5c31\u662f\uff1a\u83b7\u53d6\u5e94\u7528\u914d\u7f6e\u3001\u67e5\u770b\u6570\u636e\u5e93\u8868\u7ed3\u6784\u3001\u8bfb\u53d6\u7cfb\u7edf\u72b6\u6001<\/li>\n<\/ul>\n\n\n\n<p>\u534f\u8bae\u5c42\u9762\u7684\u5b9a\u4e49\u4e5f\u5f88\u76f4\u63a5\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u7ef4\u5ea6<\/th><th class=\"has-text-align-left\" data-align=\"left\">Tools<\/th><th class=\"has-text-align-left\" data-align=\"left\">Resources<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u672c\u8d28<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6267\u884c\u64cd\u4f5c<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u63d0\u4f9b\u6570\u636e<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u526f\u4f5c\u7528<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u53ef\u80fd\u6709\uff08\u53ef\u8bfb\u53ef\u5199\uff09<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\uff08\u53ea\u8bfb\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u8c01\u6765\u51b3\u5b9a\u8c03\u7528<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6a21\u578b\u51b3\u5b9a\uff08model-controlled\uff09<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7528\u6237\/\u5e94\u7528\u51b3\u5b9a\uff08application-controlled\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u534f\u8bae\u65b9\u6cd5<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>tools\/call<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>resources\/read<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u7c7b\u6bd4<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u70b9\u83dc<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u770b\u83dc\u5355<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u6ce8\u610f\u8c01\u6765\u51b3\u5b9a\u8c03\u7528\u8fd9\u4e00\u884c\u3002Tools \u662f\u6a21\u578b\u9a71\u52a8\u7684\u2014\u2014\u6a21\u578b\u5206\u6790\u7528\u6237\u610f\u56fe\u540e\u81ea\u5df1\u51b3\u5b9a\u8981\u4e0d\u8981\u8c03\u5de5\u5177\u3002\u800c Resources \u662f\u5e94\u7528\u9a71\u52a8\u7684\u2014\u2014\u901a\u5e38\u7531 Host \u5e94\u7528\u6216\u7528\u6237\u624b\u52a8\u9009\u62e9\u8981\u8bfb\u53d6\u54ea\u4e9b\u8d44\u6e90\uff0c\u4f5c\u4e3a\u4e0a\u4e0b\u6587\u63d0\u4f9b\u7ed9\u6a21\u578b\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-resources\">2. \u5b9e\u9645\u573a\u666f\u7406\u89e3 Resources<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"2-1\">2.1 \u5ba2\u670d\u7cfb\u7edf\u7684\u4e0a\u4e0b\u6587\u9884\u52a0\u8f7d<\/h4>\n\n\n\n<p>\u5149\u770b\u5b9a\u4e49\u53ef\u80fd\u8fd8\u662f\u89c9\u5f97\u62bd\u8c61\uff0c\u7528\u4e00\u4e2a\u4f01\u4e1a\u5ba2\u670d\u573a\u666f\u6765\u611f\u53d7\u4e00\u4e0b Resources \u7684\u4ef7\u503c\u3002<\/p>\n\n\n\n<p>\u7528\u6237\u6253\u5f00\u5728\u7ebf\u5ba2\u670d\u5bf9\u8bdd\u7a97\u53e3\uff0c\u8fd8\u6ca1\u5f00\u53e3\u8bf4\u8bdd\uff0c\u4f60\u7684\u7cfb\u7edf\u5c31\u5df2\u7ecf\u77e5\u9053\u4e86\u8fd9\u4e2a\u7528\u6237\u662f\u8c01\u3002\u8fd9\u65f6\u5019\uff0c\u7a0b\u5e8f\u5458\u5728 Host \u5e94\u7528\u7684\u4ee3\u7801\u91cc\u9884\u8bbe\u597d\u903b\u8f91\uff1a\u7528\u6237\u8fdb\u5165\u5bf9\u8bdd\u65f6\uff0c\u4e3b\u52a8\u4ece MCP Server \u8bfb\u53d6\u4e00\u6279 Resources\uff0c\u4f5c\u4e3a\u4e0a\u4e0b\u6587\u63d0\u4f9b\u7ed9\u6a21\u578b\uff1a\uff08\u5305\u62ecip\u5730\u5740\u5386\u53f2\u4e2a\u4eba\u4fe1\u606f\u7b49\u90fd\u53ef\u4ee5\u83b7\u5f97\uff09<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>customer:\/\/users\/user_12345\/profile<\/code> \u2192 \u8fd9\u4e2a\u7528\u6237\u7684\u4f1a\u5458\u7b49\u7ea7\u3001\u6ce8\u518c\u65f6\u95f4\u3001\u5386\u53f2\u6295\u8bc9\u8bb0\u5f55<\/li>\n\n\n\n<li><code>customer:\/\/users\/user_12345\/recent-orders<\/code> \u2192 \u6700\u8fd1 3 \u7b14\u8ba2\u5355\u4fe1\u606f<\/li>\n\n\n\n<li><code>docs:\/\/return-policy<\/code> \u2192 \u5f53\u524d\u9000\u8d27\u653f\u7b56<\/li>\n\n\n\n<li><code>docs:\/\/vip-privileges<\/code> \u2192 VIP \u4f1a\u5458\u4e13\u5c5e\u6743\u76ca<\/li>\n<\/ul>\n\n\n\n<p>Host \u4ee3\u7801\u5927\u81f4\u957f\u8fd9\u6837\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u7a0b\u5e8f\u5458\u5728 Host \u5e94\u7528\u91cc\u5199\u7684\u7f16\u6392\u903b\u8f91publicvoidonUserEnterChat(String userId){\/\/ \u4e3b\u52a8\u8bfb\u53d6\u8fd9\u4e2a\u7528\u6237\u76f8\u5173\u7684 ResourcesString profile = mcpClient.readResource(\"customer:\/\/users\/\"+ userId +\"\/profile\");String orders = mcpClient.readResource(\"customer:\/\/users\/\"+ userId +\"\/recent-orders\");String policy = mcpClient.readResource(\"docs:\/\/return-policy\");\/\/ \u628a\u8fd9\u4e9b\u5185\u5bb9\u62fc\u5230\u4e0a\u4e0b\u6587\u91cc\uff0c\u53d1\u7ed9\u6a21\u578bString context = profile +\"\\n\"+ orders +\"\\n\"+ policy;callLLM(systemPrompt, context, userMessage);}<\/code><\/pre>\n\n\n\n<p>\u7528\u6237\u5f00\u53e3\u8bf4\uff1a\u201c\u6211\u4e70\u7684\u4e1c\u897f\u6709\u95ee\u9898\u60f3\u9000\u201d\uff0c\u6a21\u578b\u5df2\u7ecf\u77e5\u9053\u4ed6\u662f\u91d1\u5361\u4f1a\u5458\u3001\u4e0a\u5468\u521a\u4e70\u4e86\u4e00\u53f0 iPhone\u3001\u4eab\u53d7 15 \u5929\u65e0\u7406\u7531\u9000\u8d27\u2014\u2014<strong>\u4e00\u8f6e\u5bf9\u8bdd\u5c31\u80fd\u7ed9\u51fa\u7cbe\u51c6\u56de\u7b54<\/strong>\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u6ce8\u610f\uff1a\u8fd9\u91cc\u8bfb\u53d6 Resources \u540e\u585e\u8fdb\u4e0a\u4e0b\u6587\u662f Host \u5e94\u7528\u7684\u7f16\u6392\u7b56\u7565\uff0c\u4e0d\u662f MCP Resources \u534f\u8bae\u81ea\u52a8\u5b8c\u6210\u7684\u3002MCP \u534f\u8bae\u5b9a\u4e49\u4e86\u8d44\u6e90\u5982\u4f55\u88ab\u5217\u51fa\uff08<code>resources\/list<\/code>\uff09\u3001\u5982\u4f55\u88ab\u8bfb\u53d6\uff08<code>resources\/read<\/code>\uff09\uff0c\u4f46\u8bfb\u5230\u4e4b\u540e\u600e\u4e48\u7528\u3001\u8981\u4e0d\u8981\u653e\u8fdb\u6a21\u578b\u4e0a\u4e0b\u6587\uff0c\u7531 Host \u5e94\u7528\u81ea\u5df1\u51b3\u5b9a\u3002<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>\u5982\u679c\u8fd9\u4e9b\u4fe1\u606f\u5168\u7528 Tools \u6765\u505a\u4f1a\u600e\u6837\uff1f\u6a21\u578b\u9700\u8981\u5148\u5224\u65ad\u201c\u6211\u8be5\u67e5\u4ec0\u4e48\u201d\uff0c\u7136\u540e\u4f9d\u6b21\u8c03\u7528\u5de5\u5177\uff0c\u80fd\u8dd1\u901a\uff0c\u4f46\u6709\u4e24\u4e2a\u95ee\u9898\uff1a\u4e00\u662f<strong>\u989d\u5916\u7684\u63a8\u7406\u548c\u8c03\u7528\u5ef6\u8fdf<\/strong>\u2014\u2014\u6a21\u578b\u8981\u5148\u63a8\u7406\u51fa\u9700\u8981\u8c03\u54ea\u4e9b\u5de5\u5177\uff0c\u6bcf\u4e2a\u5de5\u5177\u8c03\u7528\u90fd\u6709\u7f51\u7edc\u5f00\u9500\uff1b\u4e8c\u662f<strong>\u6f0f\u8c03\u7528\u7684\u98ce\u9669<\/strong>\u2014\u2014\u6a21\u578b\u4e0d\u4e00\u5b9a\u6bcf\u6b21\u90fd\u80fd\u610f\u8bc6\u5230\u8981\u67e5\u8fd9\u4e09\u6837\u4e1c\u897f\uff0c\u5b83\u53ef\u80fd\u53ea\u67e5\u4e86\u8ba2\u5355\uff0c\u5fd8\u4e86\u67e5\u4f1a\u5458\u7b49\u7ea7\uff0c\u7ed9\u51fa\u7684\u7b54\u6848\u5c31\u5c11\u4e86 VIP \u4e13\u5c5e\u6743\u76ca\u8fd9\u5757\u3002<\/p>\n\n\n\n<p>Resources \u7684\u4ef7\u503c\u5c31\u5728\u8fd9\u91cc\uff1a<strong>\u5e94\u7528\u63d0\u524d\u628a\u8be5\u7ed9\u7684\u4e0a\u4e0b\u6587\u5168\u7ed9\u4e86\uff0c\u6a21\u578b\u4e0d\u7528\u731c\uff0c\u6ca1\u6709\u989d\u5916\u7684\u63a8\u7406\u94fe\u8def\u548c\u5de5\u5177\u8c03\u7528\u5ef6\u8fdf\uff0c\u4e5f\u4e0d\u4f1a\u6f0f\u6389\u5173\u952e\u4fe1\u606f\u3002<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"2-2-java-resources\">2.2 Java \u5fae\u670d\u52a1\u9879\u76ee\u91cc Resources \u53ef\u80fd\u6709\u70b9\u9e21\u808b<\/h4>\n\n\n\n<p>\u5982\u679c\u4f60\u662f Java \u7a0b\u5e8f\u5458\uff0c\u9879\u76ee\u672c\u8eab\u5c31\u662f\u5fae\u670d\u52a1\u67b6\u6784\u2014\u2014\u7528\u6237\u670d\u52a1\u3001\u8ba2\u5355\u670d\u52a1\u3001\u5185\u5bb9\u670d\u52a1\u5404\u81ea\u72ec\u7acb\u90e8\u7f72\uff0c\u901a\u8fc7 Feign \/ Dubbo \/ gRPC \u4e92\u76f8\u8c03\u7528\u3002\u90a3\u4e0a\u9762\u8fd9\u4e2a\u573a\u666f\uff0c\u4f60\u5b8c\u5168\u53ef\u4ee5\u8fd9\u4e48\u5199\uff1a\u76f4\u63a5\u901a\u8fc7\u5fae\u670d\u52a1\u8fdc\u7a0b\u8c03\u7528\u83b7\u53d6\u6570\u636e\uff1b\u8c03\u7528\u94fe\u8def\u6e05\u6670\uff0c\u7c7b\u578b\u5b89\u5168\uff0c\u8fd8\u6709\u73b0\u6210\u7684\u7194\u65ad\u3001\u91cd\u8bd5\u3001\u76d1\u63a7\u3002\u7ed5\u4e00\u5708\u8d70 MCP Resources \u534f\u8bae\uff0c\u53cd\u800c\u591a\u4e86\u4e00\u5c42\u62bd\u8c61\uff0c\u6ca1\u6709\u660e\u663e\u6536\u76ca\u3002<\/p>\n\n\n\n<p><strong>\u6240\u4ee5\u7ed3\u8bba\u662f\uff1a\u5982\u679c\u4f60\u7684 AI \u5e94\u7528\u53ea\u6709\u4e00\u4e2a Client\uff08\u4f60\u81ea\u5df1\u7684\u540e\u7aef\u670d\u52a1\uff09\uff0c\u800c\u4e14\u5df2\u7ecf\u6709\u6210\u719f\u7684\u5fae\u670d\u52a1\u4f53\u7cfb\uff0cResources \u786e\u5b9e\u4e0d\u662f\u5fc5\u9009\u9879\uff0c\u76f4\u63a5\u7528\u73b0\u6709\u7684\u8fdc\u7a0b\u8c03\u7528\u5c31\u597d\u3002<\/strong><\/p>\n\n\n\n<p>MCP Resources \u771f\u6b63\u6709\u4f18\u52bf\u7684\u573a\u666f\u662f<strong>\u8de8 Client \u5171\u4eab\u6570\u636e\u6e90<\/strong>\u2014\u2014\u540c\u4e00\u4e2a MCP Server \u66b4\u9732\u7684\u8d44\u6e90\uff0cClaude Desktop \u80fd\u8bfb\u3001Cursor \u80fd\u8bfb\u3001\u4f60\u81ea\u5df1\u7684 Web \u5e94\u7528\u4e5f\u80fd\u8bfb\uff0c\u5927\u5bb6\u901a\u8fc7\u7edf\u4e00\u7684 <code>resources\/read<\/code> \u534f\u8bae\u83b7\u53d6\u6570\u636e\uff0c\u6570\u636e\u83b7\u53d6\u903b\u8f91\u5199\u5728 Server \u7aef\u4e00\u6b21\uff0c\u4e0d\u7528\u6bcf\u4e2a Client \u5404\u5199\u4e00\u5957\u3002\u5982\u679c\u4f60\u7684\u7cfb\u7edf\u53ea\u6709\u4e00\u4e2a Client\uff0c\u8fd9\u4e2a\u4f18\u52bf\u5c31\u4e0d\u5b58\u5728\u4e86\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>MCP \u534f\u8bae\u5b9a\u4e49\u4e86\u4e24\u79cd\u8d44\u6e90\u7c7b\u578b\uff1a\u76f4\u63a5\u8d44\u6e90\uff08Direct Resources\uff09\u548c\u8d44\u6e90\u6a21\u677f\uff08Resource Templates\uff09\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"3-1-direct-resources\">3.1 \u76f4\u63a5\u8d44\u6e90\uff08Direct Resources\uff09<\/h4>\n\n\n\n<p>\u76f4\u63a5\u8d44\u6e90\u6709\u4e00\u4e2a\u56fa\u5b9a\u7684 URI\uff0c\u6307\u5411\u4e00\u4e2a\u786e\u5b9a\u7684\u6570\u636e\u3002\u5c31\u50cf\u4e00\u4e2a\u56fa\u5b9a\u7684\u6587\u4ef6\u8def\u5f84\uff0c\u4efb\u4f55\u65f6\u5019\u8bbf\u95ee\u90fd\u662f\u540c\u4e00\u4efd\u6570\u636e\uff08\u5185\u5bb9\u53ef\u80fd\u66f4\u65b0\uff0c\u4f46\u5730\u5740\u4e0d\u53d8\uff09\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docs:\/\/product-manual          \u2192 \u4ea7\u54c1\u624b\u518c\nconfig:\/\/app\/settings          \u2192 \u5e94\u7528\u914d\u7f6e\nfile:\/\/\/var\/log\/app.log        \u2192 \u5e94\u7528\u65e5\u5fd7<\/code><\/pre>\n\n\n\n<p>\u76f4\u63a5\u8d44\u6e90\u9002\u5408\u90a3\u4e9b\u6570\u91cf\u6709\u9650\u3001\u76f8\u5bf9\u56fa\u5b9a\u7684\u6570\u636e\u2014\u2014\u4f60\u7684\u7cfb\u7edf\u91cc\u6709\u54ea\u4e9b\u8d44\u6e90\u662f\u660e\u786e\u7684\uff0c\u53ef\u4ee5\u5728 Server \u542f\u52a8\u65f6\u5c31\u6ce8\u518c\u597d\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"3-2-resource-templates\">3.2 \u8d44\u6e90\u6a21\u677f\uff08Resource Templates\uff09<\/h4>\n\n\n\n<p>\u8d44\u6e90\u6a21\u677f\u4f7f\u7528 URI \u6a21\u677f\uff08\u9075\u5faa <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc6570\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >RFC 6570<\/a> \u89c4\u8303\uff09\uff0cURI \u91cc\u6709\u53c2\u6570\u5360\u4f4d\u7b26\u3002Client \u586b\u5165\u5177\u4f53\u53c2\u6570\u540e\uff0c\u624d\u80fd\u8bbf\u95ee\u5230\u5bf9\u5e94\u7684\u8d44\u6e90\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>order:\/\/users\/{userId}\/orders\/{orderId}   \u2192 \u67d0\u7528\u6237\u7684\u67d0\u4e2a\u8ba2\u5355\u8be6\u60c5\nfile:\/\/\/logs\/{date}\/error.log             \u2192 \u67d0\u5929\u7684\u9519\u8bef\u65e5\u5fd7\ndb:\/\/tables\/{tableName}\/schema            \u2192 \u67d0\u5f20\u8868\u7684\u8868\u7ed3\u6784<\/code><\/pre>\n\n\n\n<p>\u8d44\u6e90\u6a21\u677f\u9002\u5408\u90a3\u4e9b\u6570\u91cf\u4e0d\u56fa\u5b9a\u3001\u9700\u8981\u52a8\u6001\u751f\u6210\u7684\u6570\u636e\u2014\u2014\u6bd4\u5982\u4f60\u4e0d\u53ef\u80fd\u4e3a\u6bcf\u4e2a\u8ba2\u5355\u90fd\u6ce8\u518c\u4e00\u4e2a\u76f4\u63a5\u8d44\u6e90\uff0c\u4f46\u4f60\u53ef\u4ee5\u6ce8\u518c\u4e00\u4e2a\u6a21\u677f\uff0c\u8ba9 Client \u4f20\u5165\u8ba2\u5355\u53f7\u6765\u83b7\u53d6\u5177\u4f53\u6570\u636e\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"3-3\">3.3 \u600e\u4e48\u9009<\/h4>\n\n\n\n<p>\u5224\u65ad\u6807\u51c6\u5f88\u7b80\u5355\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u573a\u666f<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u9009\u62e9<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u7406\u7531<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u7cfb\u7edf\u516c\u544a\u3001\u670d\u52a1\u6761\u6b3e\u3001\u7f16\u7801\u89c4\u8303<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u76f4\u63a5\u8d44\u6e90<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5185\u5bb9\u56fa\u5b9a\uff0c\u6570\u91cf\u6709\u9650<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u5e94\u7528\u914d\u7f6e\u3001\u7cfb\u7edf\u72b6\u6001<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u76f4\u63a5\u8d44\u6e90<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5730\u5740\u56fa\u5b9a\uff0c\u4e0d\u4f9d\u8d56\u53c2\u6570<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u7528\u6237\u8ba2\u5355\u8be6\u60c5\u3001\u7528\u6237\u4e2a\u4eba\u4fe1\u606f<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8d44\u6e90\u6a21\u677f<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9700\u8981\u7528\u6237 ID \/ \u8ba2\u5355\u53f7\u4f5c\u4e3a\u53c2\u6570<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u65e5\u671f\u7ef4\u5ea6\u7684\u65e5\u5fd7\u6587\u4ef6<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8d44\u6e90\u6a21\u677f<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9700\u8981\u65e5\u671f\u4f5c\u4e3a\u53c2\u6570<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u6570\u636e\u5e93\u8868\u7ed3\u6784<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8d44\u6e90\u6a21\u677f<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9700\u8981\u8868\u540d\u4f5c\u4e3a\u53c2\u6570<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4\">4. \u534f\u8bae\u5c42\u9762\u600e\u4e48\u4ea4\u4e92<\/h3>\n\n\n\n<p>Client \u548c Server \u4e4b\u95f4\u5173\u4e8e Resources \u7684\u4ea4\u4e92\uff0c\u6d89\u53ca\u56db\u4e2a\u534f\u8bae\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u534f\u8bae\u65b9\u6cd5<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u7528\u9014<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u8fd4\u56de\u5185\u5bb9<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>resources\/list<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5217\u51fa\u6240\u6709\u53ef\u7528\u7684\u76f4\u63a5\u8d44\u6e90<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8d44\u6e90\u63cf\u8ff0\u6570\u7ec4\uff08uri\u3001name\u3001mimeType \u7b49\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>resources\/templates\/list<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5217\u51fa\u6240\u6709\u8d44\u6e90\u6a21\u677f<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8d44\u6e90\u6a21\u677f\u5b9a\u4e49\u6570\u7ec4\uff08uriTemplate\u3001name \u7b49\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>resources\/read<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8bfb\u53d6\u6307\u5b9a\u8d44\u6e90\u7684\u5185\u5bb9<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8d44\u6e90\u6570\u636e\uff08\u6587\u672c\u6216\u4e8c\u8fdb\u5236\uff09\uff0c\u9644\u5e26\u5143\u4fe1\u606f<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>resources\/subscribe<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8ba2\u9605\u8d44\u6e90\u53d8\u66f4\u901a\u77e5<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8ba2\u9605\u786e\u8ba4\uff08\u53ef\u9009\u80fd\u529b\uff0c\u975e\u5fc5\u987b\u652f\u6301\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u524d\u4e09\u4e2a\u662f\u6838\u5fc3\uff0c\u7b2c\u56db\u4e2a\u662f\u53ef\u9009\u7684\u9ad8\u7ea7\u80fd\u529b\uff08\u540e\u9762\u4f1a\u5355\u72ec\u8bf4\uff09\u3002\u4ea4\u4e92\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"954\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775304151-image-1024x954.png\" alt=\"\" class=\"wp-image-1911\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775304151-image-1024x954.png 1024w, https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775304151-image-300x280.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775304151-image-768x716.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775304151-image.png 1130w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u5c55\u5f00\u8bf4\u4e00\u4e0b\u524d\u4e09\u4e2a\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>resources\/list<\/code><\/strong>\uff1aClient \u95ee Server\uff1a\u201c\u4f60\u6709\u54ea\u4e9b\u76f4\u63a5\u8d44\u6e90\uff1f\u201d\uff0cServer \u8fd4\u56de\u8d44\u6e90\u5217\u8868\uff0c\u6bcf\u4e2a\u8d44\u6e90\u5305\u542b <code>uri<\/code>\uff08\u8d44\u6e90\u5730\u5740\uff09\u3001<code>name<\/code>\uff08\u8d44\u6e90\u540d\u79f0\uff09\u3001<code>description<\/code>\uff08\u63cf\u8ff0\uff09\u3001<code>mimeType<\/code>\uff08\u5185\u5bb9\u7c7b\u578b\uff0c\u6bd4\u5982 <code>text\/plain<\/code>\u3001<code>application\/json<\/code>\uff09<\/li>\n\n\n\n<li><strong><code>resources\/templates\/list<\/code><\/strong>\uff1aClient \u95ee\uff1a\u201c\u4f60\u6709\u54ea\u4e9b\u8d44\u6e90\u6a21\u677f\uff1f\u201d\uff0cServer \u8fd4\u56de\u6a21\u677f\u5217\u8868\uff0c\u6bcf\u4e2a\u6a21\u677f\u5305\u542b <code>uriTemplate<\/code>\uff08URI \u6a21\u677f\uff0c\u5982 <code>order:\/\/users\/{userId}\/orders\/{orderId}<\/code>\uff09<\/li>\n\n\n\n<li><strong><code>resources\/read<\/code><\/strong>\uff1aClient \u4f20\u5165\u5177\u4f53\u7684 URI\uff0cServer \u8fd4\u56de\u8d44\u6e90\u5185\u5bb9<\/li>\n<\/ul>\n\n\n\n<p>\u8d44\u6e90\u5185\u5bb9\u7684\u8fd4\u56de\u683c\u5f0f\u662f\u4e00\u4e2a <code>contents<\/code> \u6570\u7ec4\uff0c\u652f\u6301\u4e24\u79cd\u5185\u5bb9\u7c7b\u578b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u6587\u672c\u5185\u5bb9{\"uri\":\"docs:\/\/product-manual\",\"mimeType\":\"text\/plain\",\"text\":\"\u9000\u8d27\u653f\u7b56\uff1a\u81ea\u6536\u8d27\u4e4b\u65e5\u8d77 7 \u5929\u5185\u53ef\u65e0\u7406\u7531\u9000\u8d27...\"}\/\/ \u4e8c\u8fdb\u5236\u5185\u5bb9\uff08Base64 \u7f16\u7801\uff09{\"uri\":\"diagrams:\/\/architecture\",\"mimeType\":\"image\/png\",\"blob\":\"iVBORw0KGgo...\"}<\/code><\/pre>\n\n\n\n<p>\u5927\u591a\u6570\u573a\u666f\u7528\u6587\u672c\u5185\u5bb9\u5c31\u591f\u4e86\u3002\u4e8c\u8fdb\u5236\u5185\u5bb9\u4e3b\u8981\u7528\u4e8e\u56fe\u7247\u3001PDF \u8fd9\u7c7b\u975e\u6587\u672c\u6570\u636e\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u4f60\u53ef\u80fd\u6ce8\u610f\u5230\u4e86\uff0c<code>resources\/read<\/code> \u4e00\u6b21\u53ef\u4ee5\u8fd4\u56de\u591a\u4e2a\u5185\u5bb9\uff08<code>contents<\/code> \u662f\u6570\u7ec4\uff09\u3002\u6bd4\u5982\u8bfb\u53d6\u4e00\u4e2a\u76ee\u5f55\u65f6\uff0cServer \u53ef\u4ee5\u628a\u76ee\u5f55\u4e0b\u6240\u6709\u6587\u4ef6\u7684\u5185\u5bb9\u4e00\u6b21\u6027\u8fd4\u56de\u3002<\/p>\n<\/blockquote>\n\n\n\n<p>\u51e0\u4e2a\u8981\u6ce8\u610f\u7684\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1.<strong><code>uri<\/code> \u5c5e\u6027<\/strong>\uff1a\u76f4\u63a5\u8d44\u6e90\u5199\u56fa\u5b9a URI\uff08\u5982 <code>docs:\/\/return-policy<\/code>\uff09\uff0c\u8d44\u6e90\u6a21\u677f\u5199\u5e26\u5360\u4f4d\u7b26\u7684 URI\uff08\u5982 <code>order:\/\/{orderId}<\/code>\uff09\u3002\u6846\u67b6\u4f1a\u6839\u636e URI \u4e2d\u662f\u5426\u5305\u542b <code>{...}<\/code> \u6765\u81ea\u52a8\u5224\u65ad\u662f\u76f4\u63a5\u8d44\u6e90\u8fd8\u662f\u8d44\u6e90\u6a21\u677f<\/li>\n\n\n\n<li>2.<strong>\u8fd4\u56de\u7c7b\u578b\u662f <code>ReadResourceResult<\/code><\/strong>\uff1a\u91cc\u9762\u5305\u4e00\u4e2a <code>TextResourceContents<\/code>\uff08\u6587\u672c\u5185\u5bb9\uff09\u6216 <code>BlobResourceContents<\/code>\uff08\u4e8c\u8fdb\u5236\u5185\u5bb9\uff09\u3002\u6ce8\u610f\u6784\u9020 <code>TextResourceContents<\/code> \u65f6\u8981\u4f20\u5165\u5b9e\u9645\u7684 URI\uff08\u6a21\u677f\u53c2\u6570\u5df2\u586b\u5165\u7684\uff09\uff0c\u4e0d\u662f\u6a21\u677f URI<\/li>\n\n\n\n<li>3.<strong>\u65b9\u6cd5\u53c2\u6570\u81ea\u52a8\u6620\u5c04<\/strong>\uff1a\u5982\u679c URI \u6a21\u677f\u662f <code>order:\/\/{orderId}<\/code>\uff0c\u65b9\u6cd5\u53c2\u6570\u540d\u5199 <code>orderId<\/code> \u5c31\u80fd\u81ea\u52a8\u63a5\u6536\u5230 Client \u4f20\u5165\u7684\u503c<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5-2-tools\">5.2 \u548c Tools \u5bf9\u6bd4\uff1a\u540c\u4e00\u4e2a\u9700\u6c42\u7528\u4e24\u79cd\u65b9\u5f0f\u5b9e\u73b0<\/h4>\n\n\n\n<p>\u62ff\u67e5\u8ba2\u5355\u8be6\u60c5\u6765\u8bf4\uff0c\u7528 Tools \u548c Resources \u90fd\u80fd\u5b9e\u73b0\u3002\u533a\u522b\u5728\u4e8e\uff1a<\/p>\n\n\n\n<p><strong>Tools \u65b9\u5f0f<\/strong>\uff08\u4e4b\u524d\u90a3\u7bc7\u7684\u505a\u6cd5\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@McpTool(description =\"\u67e5\u8be2\u8ba2\u5355\u7684\u7269\u6d41\u72b6\u6001\u548c\u8be6\u7ec6\u4fe1\u606f\")publicStringgetOrderStatus(@ToolParam(description =\"\u8ba2\u5355\u53f7\")String orderId){return\"{\\\"orderId\\\": \\\"\"+ orderId +\"\\\", \\\"status\\\": \\\"\u8fd0\u8f93\u4e2d\\\"}\";}<\/code><\/pre>\n\n\n\n<p>\u6a21\u578b\u5728\u5bf9\u8bdd\u8fc7\u7a0b\u4e2d\u81ea\u5df1\u51b3\u5b9a\u8981\u4e0d\u8981\u8c03\u8fd9\u4e2a\u5de5\u5177\u3002\u7528\u6237\u95ee\u201c\u6211\u7684\u8ba2\u5355\u5230\u54ea\u4e86\u201d\uff0c\u6a21\u578b\u5206\u6790\u540e\u8f93\u51fa <code>tool_calls<\/code>\uff0c\u4f60\u7684\u4ee3\u7801\u6267\u884c\uff0c\u7ed3\u679c\u8fd4\u56de\u7ed9\u6a21\u578b\u3002<\/p>\n\n\n\n<p><strong>Resources \u65b9\u5f0f<\/strong>\uff08\u672c\u7bc7\u7684\u505a\u6cd5\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@McpResource(uri =\"order:\/\/{orderId}\", name =\"\u8ba2\u5355\u8be6\u60c5\", description =\"...\")publicReadResourceResultgetOrderDetail(String orderId){returnnewReadResourceResult(List.of(newTextResourceContents(\"order:\/\/\"+ orderId,\"application\/json\", content)));}<\/code><\/pre>\n\n\n\n<p>Host \u5e94\u7528\u6216\u7528\u6237\u4e3b\u52a8\u9009\u62e9\u8981\u8bfb\u53d6\u54ea\u4e2a\u8d44\u6e90\uff0c\u628a\u8d44\u6e90\u5185\u5bb9\u4f5c\u4e3a\u4e0a\u4e0b\u6587\u63d0\u4f9b\u7ed9\u6a21\u578b\u3002\u6a21\u578b\u4e0d\u53c2\u4e0e\u662f\u5426\u8bfb\u53d6\u7684\u51b3\u7b56\u3002<\/p>\n\n\n\n<p><strong>\u600e\u4e48\u9009<\/strong>\uff1a\u5982\u679c\u8fd9\u4e2a\u64cd\u4f5c\u4f1a\u4ea7\u751f\u526f\u4f5c\u7528\uff08\u4e0b\u5355\u3001\u9000\u6b3e\u3001\u53d1\u90ae\u4ef6\uff09\uff0c\u6216\u8005\u9700\u8981\u6a21\u578b\u6839\u636e\u5bf9\u8bdd\u5185\u5bb9\u81ea\u4e3b\u5224\u65ad\u8981\u4e0d\u8981\u6267\u884c\u2014\u2014\u7528 Tools\u3002\u5982\u679c\u53ea\u662f\u7ed9\u6a21\u578b\u63d0\u4f9b\u53c2\u8003\u8d44\u6599\uff0c\u7531\u5e94\u7528\u6216\u7528\u6237\u51b3\u5b9a\u8981\u4e0d\u8981\u770b\u2014\u2014\u7528 Resources\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u5b9e\u9645\u9879\u76ee\u4e2d\uff0c\u4e24\u8005\u7ecf\u5e38\u914d\u5408\u4f7f\u7528\u3002\u6bd4\u5982\uff1a\u5148\u901a\u8fc7 Resources \u628a\u5e94\u7528\u914d\u7f6e\u52a0\u8f7d\u5230\u4e0a\u4e0b\u6587\uff0c\u518d\u901a\u8fc7 Tools \u8ba9\u6a21\u578b\u5728\u9700\u8981\u65f6\u67e5\u8be2\u5177\u4f53\u8ba2\u5355\u72b6\u6001\u3002<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"6\">6. \u8d44\u6e90\u53d8\u66f4\u8ba2\u9605<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"6-1\">6.1 \u8d44\u6e90\u53d8\u66f4\u8ba2\u9605\u6d41\u7a0b<\/h4>\n\n\n\n<p>MCP \u534f\u8bae\u652f\u6301\u8d44\u6e90\u53d8\u66f4\u8ba2\u9605\uff1aClient \u901a\u8fc7 <code>resources\/subscribe<\/code> \u8ba2\u9605\u67d0\u4e2a\u8d44\u6e90\uff0c\u8d44\u6e90\u5185\u5bb9\u53d1\u751f\u53d8\u5316\u65f6\uff0cServer \u53d1\u9001 <code>notifications\/resources\/updated<\/code> \u901a\u77e5\uff1bClient \u6536\u5230\u901a\u77e5\u540e\uff0c\u518d\u8c03\u7528 <code>resources\/read<\/code> \u83b7\u53d6\u6700\u65b0\u5185\u5bb9\u3002<\/p>\n\n\n\n<p>\u6ce8\u610f\uff1a\u901a\u77e5\u7684\u662f\u201c\u8fd9\u4e2a\u8d44\u6e90\u66f4\u65b0\u4e86\u201d\u8fd9\u4e2a\u4e8b\u4ef6\uff0c\u4e0d\u662f\u76f4\u63a5\u628a\u65b0\u5185\u5bb9\u63a8\u7ed9 Client\u3002Client \u6536\u5230\u901a\u77e5\u540e\u9700\u8981\u81ea\u5df1\u91cd\u65b0\u8bfb\u4e00\u6b21\u3002<\/p>\n\n\n\n<p>\u8fd9\u4e2a\u673a\u5236\u9002\u5408\u914d\u7f6e\u70ed\u66f4\u65b0\u3001\u7f13\u5b58\u5931\u6548\u901a\u77e5\u3001\u5b9e\u65f6\u6570\u636e\u770b\u677f\u7b49\u573a\u666f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"6-2\">6.2 \u4ec0\u4e48\u65f6\u5019\u9700\u8981\u8ba2\u9605\uff0c\u4ec0\u4e48\u65f6\u5019\u4e0d\u9700\u8981<\/h4>\n\n\n\n<p>\u4f60\u53ef\u80fd\u4f1a\u60f3\uff1a\u524d\u9762 Java \u5b9e\u6218\u91cc\u7684\u8d44\u6e90\u5185\u5bb9\u90fd\u662f\u4ee3\u7801\u91cc\u5199\u6b7b\u7684\uff0c\u600e\u4e48\u901a\u77e5\uff1f<\/p>\n\n\n\n<p>\u5173\u952e\u533a\u5206\u662f\uff1a<strong>URI \u5199\u6b7b \u2260 \u5185\u5bb9\u5199\u6b7b<\/strong>\u3002\u5224\u65ad\u8981\u4e0d\u8981\u652f\u6301\u8ba2\u9605\uff0c\u770b\u7684\u662f\u540c\u4e00\u4e2a URI \u5728\u8fd0\u884c\u671f\u662f\u5426\u4f1a\u8fd4\u56de\u4e0d\u540c\u5185\u5bb9\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u573a\u666f<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u662f\u5426\u9700\u8981\u8ba2\u9605<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u7406\u7531<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u8d44\u6e90\u5185\u5bb9\u5199\u5728\u4ee3\u7801\u5e38\u91cf\u91cc<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4e0d\u9700\u8981<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5185\u5bb9\u662f\u7f16\u8bd1\u671f\u5e38\u91cf\uff0c\u8fdb\u7a0b\u4e0d\u91cd\u542f\u5c31\u4e0d\u4f1a\u53d8<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u914d\u7f6e\u9879\u5b58\u5728\u6570\u636e\u5e93 \/ Nacos \/ Apollo<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9700\u8981<\/td><td class=\"has-text-align-left\" data-align=\"left\">URI \u56fa\u5b9a\uff08\u5982 <code>config:\/\/app\/settings<\/code>\uff09\uff0c\u4f46\u5e95\u5c42\u6570\u636e\u4f1a\u88ab\u8fd0\u7ef4\u4fee\u6539<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u5b9e\u65f6\u9500\u552e\u770b\u677f<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9700\u8981<\/td><td class=\"has-text-align-left\" data-align=\"left\">URI \u56fa\u5b9a\uff08\u5982 <code>dashboard:\/\/sales\/today<\/code>\uff09\uff0c\u4f46\u805a\u5408\u6570\u636e\u6301\u7eed\u53d8\u5316<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u7528\u6237\u8d44\u6599\u7f13\u5b58<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u770b\u60c5\u51b5<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7528\u6237\u6539\u4e86\u4e2a\u4eba\u4fe1\u606f\u540e\uff0c<code>customer:\/\/users\/{id}\/profile<\/code> \u7684\u5185\u5bb9\u5c31\u53d8\u4e86<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u6362\u53e5\u8bdd\u8bf4\uff0c\u8ba2\u9605\u901a\u77e5\u7684\u89e6\u53d1\u70b9\u4e0d\u5728\u8d44\u6e90\u5b9a\u4e49\u4ee3\u7801\u672c\u8eab\uff0c\u800c\u5728\u8d44\u6e90\u80cc\u540e\u7684\u6570\u636e\u6e90\u53d8\u5316\u4e8b\u4ef6\u2014\u2014\u53ef\u80fd\u662f\u6587\u4ef6\u53d8\u5316\uff08WatchService\uff09\u3001\u6570\u636e\u5e93\u914d\u7f6e\u53d8\u5316\uff08\u8f6e\u8be2 \/ CDC \/ \u6d88\u606f\u961f\u5217\uff09\u3001\u914d\u7f6e\u4e2d\u5fc3\u56de\u8c03\uff08Nacos Listener\uff09\u3001\u6216\u8005\u4e1a\u52a1\u4ee3\u7801\u4e3b\u52a8\u89e6\u53d1\u4e8b\u4ef6\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"6-3\">6.3 \u662f\u5426\u652f\u6301\u8ba2\u9605\u80fd\u529b\uff1f<\/h4>\n\n\n\n<p>\u662f\u5426\u652f\u6301\u8ba2\u9605\uff0c\u53d6\u51b3\u4e8e Server \u548c Client \u7684 capabilities \u58f0\u660e\u4ee5\u53ca\u5404\u81ea\u5b9e\u73b0\u60c5\u51b5\u3002\u5728\u5f53\u524d\u751f\u6001\u91cc\uff0c\u8ba2\u9605\u76f8\u5173\u7684 API \u4ecd\u5728\u8fed\u4ee3\u4e2d\uff0c\u4e0d\u5c11\u5ba2\u6237\u7aef\u5bf9\u8d44\u6e90\u8ba2\u9605\u7684\u652f\u6301\u8fd8\u4e0d\u7b97\u5b8c\u5584\u3002\u5982\u679c\u4f60\u7684\u8d44\u6e90\u5185\u5bb9\u672c\u8eab\u5c31\u662f\u5e38\u91cf\uff0c\u4e0d\u9700\u8981\u5f3a\u884c\u4e0a\u8ba2\u9605\u3002<\/p>\n\n\n\n<p>\u6211\u5199\u8fd9\u7bc7\u6587\u6863\u7684\u65f6\u5019\uff0c\u662f 2026.3.16 \u53f7\uff0c<a href=\"https:\/\/github.com\/modelcontextprotocol\/java-sdk\/releases\/tag\/v1.1.0\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >MCP Java SDK 1.1.0<\/a> \u662f 3.13 \u53f7\u53d1\u5e03\uff0c\u6211\u770b\u624d\u652f\u6301\u4e86 Resources \u652f\u6301\u8ba2\u9605\u529f\u80fd\u3002\u81f3\u4e8e\u50cf SpringAI \u6216\u8005 LangChain4j \u96c6\u6210\u7684\u8bdd\uff0c\u53ef\u80fd\u53c8\u5f97\u665a\u4e2a\u4e00\u6bb5\u65f6\u95f4\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prompts\">Prompts\uff1a\u628a\u6700\u4f73\u5b9e\u8df5\u5c01\u88c5\u6210\u53ef\u590d\u7528\u6a21\u677f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-prompts\">1. Prompts \u662f\u4ec0\u4e48<\/h3>\n\n\n\n<p>\u5728 Tools\u3001Resources \u4e4b\u5916\uff0cMCP \u8fd8\u5b9a\u4e49\u4e86\u7b2c\u4e09\u7c7b\u80fd\u529b\uff1aPrompts\uff08\u63d0\u793a\u8bcd\u6a21\u677f\uff09\u3002\u4e00\u53e5\u8bdd\u6982\u62ec\uff1a<strong>Server \u9884\u5b9a\u4e49 Prompt \u6a21\u677f\uff0cClient \u4f20\u5165\u53c2\u6570\u540e\u83b7\u53d6\u4e00\u7ec4\u53ef\u76f4\u63a5\u7528\u4e8e\u6a21\u578b\u8c03\u7528\u7684 messages<\/strong>\u3002<\/p>\n\n\n\n<p>\u7528\u516c\u53f8\u5185\u90e8\u7684\u6587\u6863\u6a21\u677f\u6765\u7c7b\u6bd4\uff1a\u516c\u53f8\u6709\u6807\u51c6\u7684\u5468\u62a5\u6a21\u677f\u3001\u8bf7\u5047\u5355\u6a21\u677f\u3001\u9879\u76ee\u590d\u76d8\u6a21\u677f\u3002\u4f60\u5199\u5468\u62a5\u65f6\u4e0d\u7528\u4ece\u96f6\u5f00\u59cb\uff0c\u6253\u5f00\u6a21\u677f\u586b\u7a7a\u5c31\u884c\u2014\u2014\u9879\u76ee\u540d\u79f0\u586b\u8fd9\u91cc\u3001\u672c\u5468\u8fdb\u5c55\u586b\u90a3\u91cc\u3001\u4e0b\u5468\u8ba1\u5212\u586b\u90a3\u91cc\u3002\u683c\u5f0f\u7edf\u4e00\uff0c\u5185\u5bb9\u5b8c\u6574\uff0c\u65b0\u5458\u5de5\u4e5f\u4e0d\u4f1a\u6f0f\u5199\u5173\u952e\u4fe1\u606f\u3002<\/p>\n\n\n\n<p>Prompts \u505a\u7684\u5c31\u662f\u8fd9\u4ef6\u4e8b\uff0c\u53ea\u4e0d\u8fc7\u6a21\u677f\u4e0d\u662f\u7ed9\u4eba\u7528\u7684\uff0c\u662f\u7ed9\u6a21\u578b\u7528\u7684\u3002Server \u5b9a\u4e49\u597d\u4e00\u5957\u7ecf\u8fc7\u9a8c\u8bc1\u7684 Prompt \u6a21\u677f\uff08\u89d2\u8272\u5b9a\u4e49\u3001\u56de\u7b54\u89c4\u5219\u3001\u5f15\u7528\u8981\u6c42\u3001\u515c\u5e95\u7b56\u7565\u90fd\u5199\u597d\u4e86\uff09\uff0cClient \u53ea\u9700\u8981\u4f20\u5165\u53c2\u6570\uff08\u6bd4\u5982\u68c0\u7d22\u5230\u7684 chunk \u548c\u7528\u6237\u95ee\u9898\uff09\uff0c\u5c31\u80fd\u62ff\u5230\u4e00\u7ec4\u5b8c\u6574\u7684 messages \u6570\u7ec4\uff0c\u53ef\u76f4\u63a5\u7528\u4e8e\u6a21\u578b\u8c03\u7528\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"1-1-prompt\">1.1 \u548c\u76f4\u63a5\u5199 Prompt \u6709\u4ec0\u4e48\u533a\u522b<\/h4>\n\n\n\n<p>\u4f60\u53ef\u80fd\u4f1a\u95ee\uff1a\u6211\u5728 Client \u7aef\u76f4\u63a5\u62fc Prompt \u4e0d\u4e5f\u4e00\u6837\u5417\uff1f\u4e3a\u4ec0\u4e48\u8981\u901a\u8fc7 MCP Server \u6765\u83b7\u53d6\uff1f<\/p>\n\n\n\n<p>\u533a\u522b\u5728\u4e8e<strong>\u7ba1\u7406\u548c\u590d\u7528<\/strong>\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u7ef4\u5ea6<\/th><th class=\"has-text-align-left\" data-align=\"left\">Client \u7aef\u81ea\u5df1\u5199 Prompt<\/th><th class=\"has-text-align-left\" data-align=\"left\">Server \u7aef MCP Prompts<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u7248\u672c\u7edf\u4e00<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6bcf\u4e2a Client \u5404\u5199\u5404\u7684\uff0c\u7248\u672c\u4e0d\u4e00\u81f4<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7edf\u4e00\u7ef4\u62a4\uff0c\u6240\u6709 Client \u62ff\u5230\u540c\u4e00\u7248\u672c<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u66f4\u65b0\u65b9\u5f0f<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6539 Prompt \u8981\u6539\u6bcf\u4e2a Client \u7684\u4ee3\u7801<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u53ea\u6539 Server \u7aef\uff0cClient \u4e0b\u6b21\u83b7\u53d6\u5c31\u662f\u65b0\u7248<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u6700\u4f73\u5b9e\u8df5\u6c89\u6dc0<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7ecf\u9a8c\u6563\u843d\u5728\u5404\u5904<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u96c6\u4e2d\u6c89\u6dc0\u5728 Server \u7aef<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u53c2\u6570\u6821\u9a8c<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5404 Client \u81ea\u884c\u6821\u9a8c<\/td><td class=\"has-text-align-left\" data-align=\"left\">Server \u7aef\u7edf\u4e00\u5b9a\u4e49\u53c2\u6570\u548c\u6821\u9a8c\u89c4\u5219<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u5982\u679c\u4f60\u7684\u7cfb\u7edf\u53ea\u6709\u4e00\u4e2a Client\uff0c\u76f4\u63a5\u5199 Prompt \u5b8c\u5168\u6ca1\u95ee\u9898\u3002\u4f46\u5982\u679c\u6709\u591a\u4e2a Client\uff08\u6bd4\u5982 Claude Desktop\u3001Cursor\u3001\u4f60\u81ea\u5df1\u7684 Web \u5e94\u7528\u90fd\u63a5\u5165\u4e86\u540c\u4e00\u4e2a MCP Server\uff09\uff0cPrompts \u7684\u4ef7\u503c\u5c31\u4f53\u73b0\u51fa\u6765\u4e86\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"1-2-prompts\">1.2 Prompts \u7684\u63a7\u5236\u6a21\u5f0f<\/h4>\n\n\n\n<p>\u548c Tools\u3001Resources \u4e00\u6837\uff0cPrompts \u4e5f\u6709\u81ea\u5df1\u7684\u63a7\u5236\u6a21\u5f0f\uff1a<strong>Client \u9a71\u52a8\uff08\u901a\u5e38\u7531\u7528\u6237\u9009\u62e9\uff09<\/strong>\u3002<\/p>\n\n\n\n<p>\u4e09\u79cd\u80fd\u529b\u7684\u63a7\u5236\u6a21\u5f0f\u5bf9\u6bd4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tools<\/strong>\uff1a\u6a21\u578b\u9a71\u52a8\u2014\u2014\u6a21\u578b\u81ea\u5df1\u51b3\u5b9a\u4ec0\u4e48\u65f6\u5019\u8c03\u7528\u4ec0\u4e48\u5de5\u5177<\/li>\n\n\n\n<li><strong>Resources<\/strong>\uff1a\u5e94\u7528\u9a71\u52a8\u2014\u2014Host \u5e94\u7528\u51b3\u5b9a\u52a0\u8f7d\u54ea\u4e9b\u8d44\u6e90\u4f5c\u4e3a\u4e0a\u4e0b\u6587<\/li>\n\n\n\n<li><strong>Prompts<\/strong>\uff1aClient \u9a71\u52a8\u2014\u2014Client \u51b3\u5b9a\u4f55\u65f6\u83b7\u53d6\u54ea\u4e2a\u6a21\u677f\uff08\u901a\u5e38\u7531\u7528\u6237\u5728 UI \u91cc\u901a\u8fc7\u659c\u6760\u547d\u4ee4\u6216\u83dc\u5355\u9009\u62e9\u89e6\u53d1\uff0c\u4f46\u4e5f\u53ef\u4ee5\u662f\u81ea\u52a8\u5316\u6d41\u7a0b\u8c03\u7528\uff09<\/li>\n<\/ul>\n\n\n\n<p>\u6bd4\u5982\u5728 Claude Desktop \u91cc\uff0c\u7528\u6237\u8f93\u5165 <code>\/knowledge-qa<\/code> \u5c31\u80fd\u89e6\u53d1\u77e5\u8bc6\u5e93\u95ee\u7b54\u6a21\u677f\uff0c\u8f93\u5165 <code>\/doc-summary<\/code> \u5c31\u80fd\u89e6\u53d1\u6587\u6863\u6458\u8981\u6a21\u677f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2\">2. \u534f\u8bae\u5c42\u9762\u600e\u4e48\u4ea4\u4e92<\/h3>\n\n\n\n<p>Prompts \u7684\u4ea4\u4e92\u5f88\u7b80\u5355\uff0c\u5c31\u4e24\u4e2a\u6838\u5fc3\u8bf7\u6c42\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>prompts\/list<\/code><\/strong>\uff1aClient \u95ee Server\uff1a\u201c\u4f60\u6709\u54ea\u4e9b Prompt \u6a21\u677f\uff1f\u201d\uff0cServer \u8fd4\u56de\u6a21\u677f\u5217\u8868<\/li>\n\n\n\n<li><strong><code>prompts\/get<\/code><\/strong>\uff1aClient \u4f20\u5165\u6a21\u677f\u540d\u79f0\u548c\u53c2\u6570\uff0cServer \u8fd4\u56de\u586b\u597d\u53c2\u6570\u7684\u5b8c\u6574 messages \u6570\u7ec4<\/li>\n<\/ul>\n\n\n\n<p><code>prompts\/list<\/code> \u8fd4\u56de\u7684\u6bcf\u4e2a\u6a21\u677f\u5305\u542b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"name\": \"knowledge-qa\",\n  \"description\": \"\u77e5\u8bc6\u5e93\u95ee\u7b54\u6a21\u677f\uff0c\u57fa\u4e8e\u68c0\u7d22\u5230\u7684\u5185\u5bb9\u56de\u7b54\u7528\u6237\u95ee\u9898\",\n  \"arguments\": &#91;\n    {\n      \"name\": \"context\",\n      \"description\": \"\u68c0\u7d22\u5230\u7684\u77e5\u8bc6\u7247\u6bb5\uff0c\u591a\u4e2a\u7247\u6bb5\u7528\u6362\u884c\u5206\u9694\",\n      \"required\": true\n    },\n    {\n      \"name\": \"question\",\n      \"description\": \"\u7528\u6237\u7684\u539f\u59cb\u95ee\u9898\",\n      \"required\": true\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p><code>prompts\/get<\/code> \u7684\u8bf7\u6c42\u548c\u54cd\u5e94\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u8bf7\u6c42\n{\n  \"method\": \"prompts\/get\",\n  \"params\": {\n    \"name\": \"knowledge-qa\",\n    \"arguments\": {\n      \"context\": \"&#91;1] AirPods Pro \u4fdd\u4fee\u671f\u4e3a 1 \u5e74\\n&#91;2] AppleCare+ \u53ef\u5ef6\u957f\u81f3 2 \u5e74\",\n      \"question\": \"AirPods Pro \u7684\u4fdd\u4fee\u671f\u591a\u4e45\uff1f\"\n    }\n  }\n}\n\n\/\/ \u54cd\u5e94\n{\n  \"description\": \"\u77e5\u8bc6\u5e93\u95ee\u7b54\",\n  \"messages\": &#91;\n    {\n      \"role\": \"user\",\n      \"content\": {\n        \"type\": \"text\",\n        \"text\": \"\u4f60\u662f\u4e00\u4e2a\u4f01\u4e1a\u77e5\u8bc6\u5e93\u52a9\u624b\u3002\u8bf7\u4e25\u683c\u57fa\u4e8e\u4ee5\u4e0b\u53c2\u8003\u8d44\u6599\u56de\u7b54\u95ee\u9898...\\n\\n\u53c2\u8003\u8d44\u6599\uff1a\\n&#91;1] AirPods Pro \u4fdd\u4fee\u671f\u4e3a 1 \u5e74\\n&#91;2] AppleCare+ \u53ef\u5ef6\u957f\u81f3 2 \u5e74\\n\\n\u95ee\u9898\uff1aAirPods Pro \u7684\u4fdd\u4fee\u671f\u591a\u4e45\uff1f\"\n      }\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p>\u6ce8\u610f\u8fd4\u56de\u7684\u662f <strong>messages \u6570\u7ec4<\/strong>\uff0c\u4e0d\u662f\u7eaf\u6587\u672c\u5b57\u7b26\u4e32\u3002\u8fd9\u610f\u5473\u7740 Server \u53ef\u4ee5\u7cbe\u786e\u63a7\u5236\u6d88\u606f\u7684\u7ed3\u6784\u2014\u2014\u628a\u89d2\u8272\u5b9a\u4e49\u3001\u56de\u7b54\u89c4\u5219\u3001\u53c2\u8003\u8d44\u6599\u548c\u95ee\u9898\u7ec4\u88c5\u6210\u5b8c\u6574\u7684\u5bf9\u8bdd\u3002Client \u62ff\u5230\u8fd9\u4e2a\u6570\u7ec4\u540e\uff0c\u53ef\u4ee5\u76f4\u63a5\u7528\u4e8e\u6a21\u578b\u8c03\u7528\uff0c\u4e5f\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u9700\u8981\u505a\u8fdb\u4e00\u6b65\u5904\u7406\uff08\u6bd4\u5982\u628a\u6307\u4ee4\u90e8\u5206\u653e\u8fdb system \u6d88\u606f\uff09\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u6ce8\u610f\uff1aMCP \u534f\u8bae\u89c4\u8303\u4e2d\uff0cPromptMessage \u7684 role \u53ea\u652f\u6301 <code>\"user\"<\/code> \u548c <code>\"assistant\"<\/code> \u4e24\u79cd\u89d2\u8272\uff0c\u4e0d\u652f\u6301 <code>\"system\"<\/code>\u3002\u5982\u679c\u4f60\u9700\u8981\u8bbe\u7f6e system \u7ea7\u522b\u7684\u6307\u4ee4\uff0c\u53ef\u4ee5\u628a\u6307\u4ee4\u5185\u5bb9\u653e\u5728\u7b2c\u4e00\u6761 user \u6d88\u606f\u91cc\uff0c\u6216\u8005\u7531 Client \u62ff\u5230 messages \u540e\u81ea\u884c\u62c6\u5206\u5230 system \u6d88\u606f\u4e2d\u2014\u2014\u8fd9\u5c5e\u4e8e Client \u7684\u7f16\u6392\u7b56\u7565\uff0c\u4e0d\u662f MCP Prompts \u534f\u8bae\u8d1f\u8d23\u7684\u3002<\/p>\n<\/blockquote>\n\n\n\n<p>\u6ce8\u610f\uff1aMCP \u534f\u8bae\u89c4\u8303\u4e2d\uff0cPromptMessage \u7684 role \u53ea\u652f\u6301 <code>\"user\"<\/code> \u548c <code>\"assistant\"<\/code> \u4e24\u79cd\u89d2\u8272\uff0c\u4e0d\u652f\u6301 <code>\"system\"<\/code>\u3002\u5982\u679c\u4f60\u9700\u8981\u8bbe\u7f6e system \u7ea7\u522b\u7684\u6307\u4ee4\uff0c\u53ef\u4ee5\u628a\u6307\u4ee4\u5185\u5bb9\u653e\u5728\u7b2c\u4e00\u6761 user \u6d88\u606f\u91cc\uff0c\u6216\u8005\u7531 Client \u62ff\u5230 messages \u540e\u81ea\u884c\u62c6\u5206\u5230 system \u6d88\u606f\u4e2d\u2014\u2014\u8fd9\u5c5e\u4e8e Client \u7684\u7f16\u6392\u7b56\u7565\uff0c\u4e0d\u662f MCP Prompts \u534f\u8bae\u8d1f\u8d23\u7684\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1.<strong><code>@McpPrompt<\/code> \u6ce8\u89e3<\/strong>\uff1a<code>name<\/code> \u662f\u6a21\u677f\u7684\u552f\u4e00\u6807\u8bc6\uff08Client \u7528\u8fd9\u4e2a\u540d\u5b57\u6765\u83b7\u53d6\u6a21\u677f\uff09\uff0c<code>description<\/code> \u662f\u6a21\u677f\u7684\u63cf\u8ff0<\/li>\n\n\n\n<li>2.<strong><code>@McpArg<\/code> \u6ce8\u89e3<\/strong>\uff1a\u5b9a\u4e49\u6a21\u677f\u7684\u53c2\u6570\u3002<code>required = true<\/code> \u8868\u793a\u5fc5\u586b\u53c2\u6570\uff0c<code>required = false<\/code> \u8868\u793a\u53ef\u9009\u53c2\u6570<\/li>\n\n\n\n<li>3.<strong>\u8fd4\u56de\u7c7b\u578b\u662f <code>GetPromptResult<\/code><\/strong>\uff1a\u5305\u542b\u4e00\u4e2a\u63cf\u8ff0\u548c\u4e00\u4e2a <code>PromptMessage<\/code> \u5217\u8868\u3002\u6bcf\u4e2a <code>PromptMessage<\/code> \u6709 <code>Role<\/code>\uff08USER \/ ASSISTANT\uff09\u548c\u5185\u5bb9\uff08<code>TextContent<\/code>\uff09\u3002\u6ce8\u610f MCP \u534f\u8bae\u53ea\u652f\u6301 <code>user<\/code> \u548c <code>assistant<\/code> \u4e24\u79cd\u89d2\u8272\uff0c\u4e0d\u652f\u6301 <code>system<\/code>\u2014\u2014\u5982\u679c\u9700\u8981\u8bbe\u7f6e\u7cfb\u7edf\u6307\u4ee4\uff0c\u628a\u5b83\u653e\u5728 user \u6d88\u606f\u7684\u5f00\u5934\u5373\u53ef<\/li>\n\n\n\n<li>4.<strong>\u53c2\u6570\u7c7b\u578b\u90fd\u662f <code>String<\/code><\/strong>\uff1a\u5373\u4f7f\u8bed\u4e49\u4e0a\u662f\u6570\u5b57\uff08\u5982 <code>maxLength<\/code>\uff09\uff0cMCP \u534f\u8bae\u4f20\u9012\u7684\u53c2\u6570\u90fd\u662f\u5b57\u7b26\u4e32\uff0c\u9700\u8981\u5728\u65b9\u6cd5\u5185\u81ea\u884c\u8f6c\u6362<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"3-2-prompts-prompt\">3.2 Prompts \u548c\u7cfb\u5217\u524d\u9762\u8bb2\u7684 Prompt \u5de5\u7a0b\u7684\u5173\u7cfb<\/h4>\n\n\n\n<p>\u4f60\u53ef\u80fd\u6ce8\u610f\u5230\u4e86\uff0c<code>knowledge-qa<\/code> \u6a21\u677f\u91cc\u7684\u90a3\u4e9b\u89c4\u5219\uff08\u9650\u5b9a\u77e5\u8bc6\u6765\u6e90\u3001\u5f15\u7528\u6807\u6ce8\u3001\u515c\u5e95\u6307\u4ee4\uff09\uff0c\u548c\u7cfb\u5217\u4e2d\u8bb2 RAG \u4e4b Prompt \u5de5\u7a0b\u91cc\u8bb2\u7684\u5185\u5bb9\u4e00\u6a21\u4e00\u6837\u3002<\/p>\n\n\n\n<p>\u6ca1\u9519\uff0cMCP Prompts \u5c31\u662f\u628a\u4f60\u5728 Prompt \u5de5\u7a0b\u4e2d\u6c89\u6dc0\u7684\u6700\u4f73\u5b9e\u8df5\uff0c\u5c01\u88c5\u6210\u53ef\u590d\u7528\u7684\u6a21\u677f\u3002\u4ee5\u524d\u8fd9\u4e9b Prompt \u5199\u5728\u6bcf\u4e2a Client \u7684\u4ee3\u7801\u91cc\uff0c\u73b0\u5728\u96c6\u4e2d\u653e\u5230 MCP Server \u4e0a\uff0c\u6240\u6709 Client \u5171\u7528\u4e00\u5957\u3002<\/p>\n\n\n\n<p>Prompt \u5de5\u7a0b\u89e3\u51b3\u7684\u662f\u600e\u4e48\u5199\u597d Prompt\uff0cMCP Prompts \u89e3\u51b3\u7684\u662f\u600e\u4e48\u628a\u597d Prompt \u5206\u53d1\u51fa\u53bb\u3002<\/p>\n\n\n\n<p>\u62ff\u5230\u4e00\u4e2a\u9700\u6c42\u65f6\uff0c\u7528\u8fd9\u4e2a\u51b3\u7b56\u6d41\u7a0b\u6765\u5224\u65ad\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"382\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775289729-image-1024x382.png\" alt=\"\" class=\"wp-image-1907\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775289729-image-1024x382.png 1024w, https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775289729-image-300x112.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775289729-image-768x286.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775289729-image-1536x573.png 1536w, https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775289729-image.png 1598w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u4e00\u4e2a\u6210\u719f\u7684 MCP Server \u901a\u5e38\u4f1a\u540c\u65f6\u63d0\u4f9b\u4e09\u79cd\u80fd\u529b\u3002\u62ff\u4f01\u4e1a\u77e5\u8bc6\u5e93\u52a9\u624b\u6765\u8bf4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tools<\/strong>\uff1a\u67e5\u5e74\u5047\uff08<code>getUserAnnualLeave<\/code>\uff09\u3001\u67e5\u8ba2\u5355\u72b6\u6001\uff08<code>getOrderStatus<\/code>\uff09\u2014\u2014\u9700\u8981\u8c03\u7528\u5916\u90e8\u7cfb\u7edf\uff0c\u53ef\u80fd\u6709\u526f\u4f5c\u7528<\/li>\n\n\n\n<li><strong>Resources<\/strong>\uff1a\u5e94\u7528\u914d\u7f6e\uff08<code>config:\/\/app\/settings<\/code>\uff09\u3001\u6570\u636e\u5e93\u8868\u7ed3\u6784\uff08<code>db:\/\/tables\/{tableName}\/schema<\/code>\uff09\u3001\u7cfb\u7edf\u8fd0\u884c\u72b6\u6001\uff08<code>status:\/\/health<\/code>\uff09\u2014\u2014\u4e0d\u8d70\u68c0\u7d22\uff0c\u4f5c\u4e3a\u56fa\u5b9a\u4e0a\u4e0b\u6587\u63d0\u4f9b<\/li>\n\n\n\n<li><strong>Prompts<\/strong>\uff1a\u77e5\u8bc6\u5e93\u95ee\u7b54\u6a21\u677f\uff08<code>knowledge-qa<\/code>\uff09\u3001\u6587\u6863\u6458\u8981\u6a21\u677f\uff08<code>doc-summary<\/code>\uff09\u2014\u2014\u6807\u51c6\u5316\u7684\u4ea4\u4e92\u6d41\u7a0b<\/li>\n<\/ul>\n\n\n\n<p>\u4e09\u8005\u5404\u53f8\u5176\u804c\uff0c\u914d\u5408\u4f7f\u7528\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">MCP\u4e4b\u5b98\u65b9Java-SDK\u6df1\u5ea6\u89e3\u6790<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1.<strong><code>@McpPrompt<\/code> \u6ce8\u89e3<\/strong>\uff1a<code>name<\/code> \u662f\u6a21\u677f\u7684\u552f\u4e00\u6807\u8bc6\uff08Client \u7528\u8fd9\u4e2a\u540d\u5b57\u6765\u83b7\u53d6\u6a21\u677f\uff09\uff0c<code>description<\/code> \u662f\u6a21\u677f\u7684\u63cf\u8ff0<\/li>\n\n\n\n<li>2.<strong><code>@McpArg<\/code> \u6ce8\u89e3<\/strong>\uff1a\u5b9a\u4e49\u6a21\u677f\u7684\u53c2\u6570\u3002<code>required = true<\/code> \u8868\u793a\u5fc5\u586b\u53c2\u6570\uff0c<code>required = false<\/code> \u8868\u793a\u53ef\u9009\u53c2\u6570<\/li>\n\n\n\n<li>3.<strong>\u8fd4\u56de\u7c7b\u578b\u662f <code>GetPromptResult<\/code><\/strong>\uff1a\u5305\u542b\u4e00\u4e2a\u63cf\u8ff0\u548c\u4e00\u4e2a <code>PromptMessage<\/code> \u5217\u8868\u3002\u6bcf\u4e2a <code>PromptMessage<\/code> \u6709 <code>Role<\/code>\uff08USER \/ ASSISTANT\uff09\u548c\u5185\u5bb9\uff08<code>TextContent<\/code>\uff09\u3002\u6ce8\u610f MCP \u534f\u8bae\u53ea\u652f\u6301 <code>user<\/code> \u548c <code>assistant<\/code> \u4e24\u79cd\u89d2\u8272\uff0c\u4e0d\u652f\u6301 <code>system<\/code>\u2014\u2014\u5982\u679c\u9700\u8981\u8bbe\u7f6e\u7cfb\u7edf\u6307\u4ee4\uff0c\u628a\u5b83\u653e\u5728 user \u6d88\u606f\u7684\u5f00\u5934\u5373\u53ef<\/li>\n\n\n\n<li>4.<strong>\u53c2\u6570\u7c7b\u578b\u90fd\u662f <code>String<\/code><\/strong>\uff1a\u5373\u4f7f\u8bed\u4e49\u4e0a\u662f\u6570\u5b57\uff08\u5982 <code>maxLength<\/code>\uff09\uff0cMCP \u534f\u8bae\u4f20\u9012\u7684\u53c2\u6570\u90fd\u662f\u5b57\u7b26\u4e32\uff0c\u9700\u8981\u5728\u65b9\u6cd5\u5185\u81ea\u884c\u8f6c\u6362<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"java-sdk-6\">Java SDK \u5168\u666f\uff1a6 \u4e2a\u6a21\u5757\u5404\u53f8\u5176\u804c<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1\">1. \u6a21\u5757\u603b\u89c8<\/h3>\n\n\n\n<p>\u6253\u5f00 Java SDK \u7684\u4ed3\u5e93\uff0c\u4f60\u4f1a\u770b\u5230\u5b83\u4e0d\u662f\u4e00\u4e2a\u5355\u4f53\u6a21\u5757\u9879\u76ee\uff0c\u800c\u662f\u62c6\u6210\u4e86 6 \u4e2a Maven \u6a21\u5757\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u6a21\u5757<\/th><th class=\"has-text-align-left\" data-align=\"left\">Maven ArtifactId<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u4f5c\u7528<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-bom<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-bom<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">BOM\uff08Bill of Materials\uff09\uff0c\u7edf\u4e00\u7ba1\u7406\u6240\u6709\u6a21\u5757\u7684\u7248\u672c\u53f7\uff0c\u5f15\u5165\u540e\u4e0d\u7528\u9010\u4e2a\u6307\u5b9a\u7248\u672c<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-core<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-core<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6838\u5fc3\u5b9e\u73b0\uff0cClient\u3001Server\u3001Transport\u3001Schema \u5168\u90e8\u6838\u5fc3\u4ee3\u7801\u90fd\u5728\u8fd9\u91cc<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-json-jackson2<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-json-jackson2<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Jackson 2.x \u7684 JSON \u5e8f\u5217\u5316\u5b9e\u73b0<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-json-jackson3<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-json-jackson3<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Jackson 3.x \u7684 JSON \u5e8f\u5217\u5316\u5b9e\u73b0<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4fbf\u6377\u5305\uff0c\u7b49\u4e8e <code>mcp-core<\/code> + <code>mcp-json-jackson3<\/code>\uff0c\u5f15\u5165\u8fd9\u4e00\u4e2a\u5c31\u591f\u4e86<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-test<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>mcp-test<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6d4b\u8bd5\u5de5\u5177\u548c\u96c6\u6210\u6d4b\u8bd5<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u5927\u591a\u6570\u573a\u666f\u4e0b\uff0c\u4f60\u53ea\u9700\u8981\u5728 <code>pom.xml<\/code> \u91cc\u5f15\u5165\u4e00\u4e2a\u4f9d\u8d56\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;&lt;groupId&gt;io.modelcontextprotocol.sdk&lt;\/groupId&gt;&lt;artifactId&gt;mcp&lt;\/artifactId&gt;&lt;version&gt;1.1.0&lt;\/version&gt;&lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e2a <code>mcp<\/code> \u4fbf\u6377\u5305\u5df2\u7ecf\u5e2e\u4f60\u6253\u5305\u4e86 <code>mcp-core<\/code>\uff08\u6838\u5fc3\u5b9e\u73b0\uff09\u548c <code>mcp-json-jackson3<\/code>\uff08JSON \u5e8f\u5217\u5316\uff09\uff0c\u62ff\u6765\u5c31\u80fd\u7528\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sdk\">SDK \u6838\u5fc3\u67b6\u6784\uff1a\u56db\u5c42\u5206\u660e<\/h2>\n\n\n\n<p>\u4e86\u89e3\u5b8c\u6a21\u5757\u5212\u5206\uff0c\u63a5\u4e0b\u6765\u770b SDK \u5185\u90e8\u7684\u4ee3\u7801\u7ed3\u6784\u3002\u6574\u4e2a <code>mcp-core<\/code> \u6a21\u5757\u7684\u4ee3\u7801\u5206\u6210\u56db\u5c42\uff0c\u4ece\u4e0b\u5f80\u4e0a\u4f9d\u6b21\u662f\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"903\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775291539-image.png\" alt=\"\" class=\"wp-image-1909\" style=\"aspect-ratio:1.036557149467839;width:527px;height:auto\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775291539-image.png 936w, https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775291539-image-300x289.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2026\/04\/1775291539-image-768x741.png 768w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/figure>\n\n\n\n<p>\u6bcf\u4e00\u5c42\u7684\u804c\u8d23\u5f88\u6e05\u6670\uff0c\u4ece\u4e0b\u5f80\u4e0a\u770b\uff1aSchema \u5c42\u5b9a\u4e49\u534f\u8bae\u91cc\u6709\u54ea\u4e9b\u6d88\u606f\u7c7b\u578b\uff0cTransport \u5c42\u8d1f\u8d23\u628a\u6d88\u606f\u9001\u8fbe\uff0cSession \u5c42\u7ba1\u7406\u4e00\u6b21\u5b8c\u6574\u7684\u8fde\u63a5\u4f1a\u8bdd\uff0cClient\/Server \u5c42\u662f\u5f00\u53d1\u8005\u76f4\u63a5\u6253\u4ea4\u9053\u7684 API\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-schema\">1. Schema \u5c42\uff1a\u534f\u8bae\u7684\u5b57\u5178<\/h3>\n\n\n\n<p><code>McpSchema<\/code> \u662f\u6574\u4e2a SDK \u91cc\u6700\u5927\u7684\u4e00\u4e2a\u7c7b\u2014\u20142786 \u884c\u4ee3\u7801\uff0c\u5168\u662f\u6570\u636e\u7ed3\u6784\u5b9a\u4e49\u3002\u5b83\u5c31\u50cf\u4e00\u672c\u5b57\u5178\uff0c\u89c4\u5b9a\u4e86 Client \u548c Server \u4e4b\u95f4\u80fd\u8bf4\u54ea\u4e9b\u8bdd\u3001\u6bcf\u53e5\u8bdd\u7684\u683c\u5f0f\u662f\u4ec0\u4e48\u3002<\/p>\n\n\n\n<p>\u4e4b\u524d\u8bb2 MCP \u534f\u8bae\u89c4\u8303 JSON-RPC 2.0 \u90a3\u7bc7\u6587\u7ae0\u91cc\uff0c\u5927\u5bb6\u5df2\u7ecf\u77e5\u9053 MCP \u5e95\u5c42\u7528 JSON-RPC 2.0 \u901a\u4fe1\u3002<code>McpSchema<\/code> \u505a\u7684\u4e8b\u60c5\u5c31\u662f\u628a\u534f\u8bae\u89c4\u8303\u91cc\u5b9a\u4e49\u7684\u6240\u6709\u6d88\u606f\u7c7b\u578b\uff0c\u90fd\u53d8\u6210\u4e86 Java \u7684 Record \u7c7b\uff08Java 16+ \u7684\u4e0d\u53ef\u53d8\u6570\u636e\u7c7b\uff09\u3002<\/p>\n\n\n\n<p>\u6311\u51e0\u4e2a\u4f60\u6700\u5e38\u63a5\u89e6\u7684\u7c7b\u578b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u7c7b\u578b<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u5bf9\u5e94\u7684\u534f\u8bae\u64cd\u4f5c<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u8bf4\u660e<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>McpSchema.Tool<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5de5\u5177\u5b9a\u4e49<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5305\u542b\u5de5\u5177\u540d\u79f0\u3001\u63cf\u8ff0\u3001\u53c2\u6570\u7684 JSON Schema<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>McpSchema.CallToolRequest<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>tools\/call<\/code> \u8bf7\u6c42<\/td><td class=\"has-text-align-left\" data-align=\"left\">Client \u8c03\u7528\u5de5\u5177\u65f6\u53d1\u7684\u8bf7\u6c42\uff0c\u5305\u542b\u5de5\u5177\u540d\u548c\u53c2\u6570<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>McpSchema.CallToolResult<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>tools\/call<\/code> \u54cd\u5e94<\/td><td class=\"has-text-align-left\" data-align=\"left\">Server \u6267\u884c\u5de5\u5177\u540e\u8fd4\u56de\u7684\u7ed3\u679c<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>McpSchema.Resource<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8d44\u6e90\u5b9a\u4e49<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5305\u542b\u8d44\u6e90 URI\u3001\u540d\u79f0\u3001\u63cf\u8ff0\u3001MIME \u7c7b\u578b<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>McpSchema.Prompt<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Prompt \u6a21\u677f\u5b9a\u4e49<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5305\u542b\u6a21\u677f\u540d\u79f0\u3001\u63cf\u8ff0\u3001\u53c2\u6570\u5217\u8868<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>McpSchema.InitializeRequest<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>initialize<\/code> \u8bf7\u6c42<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8fde\u63a5\u5efa\u7acb\u65f6\u7684\u63e1\u624b\u8bf7\u6c42<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>McpSchema.InitializeResult<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>initialize<\/code> \u54cd\u5e94<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u63e1\u624b\u54cd\u5e94\uff0c\u5305\u542b Server \u7684\u80fd\u529b\u58f0\u660e<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u8fd9\u4e9b\u7c7b\u578b\u6700\u7ec8\u4f1a\u88ab\u5305\u88c5\u6210 JSON-RPC \u7684 Request \/ Response \u5728 Client \u548c Server \u4e4b\u95f4\u4f20\u8f93\u3002\u6bd4\u5982 Client \u8c03\u7528\u5de5\u5177\u65f6\uff0c\u5b9e\u9645\u53d1\u51fa\u7684 JSON-RPC \u6d88\u606f\u957f\u8fd9\u6837\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools\/call\",\"params\":{\"name\":\"getUserAnnualLeave\",\"arguments\":{\"employeeId\":\"E001\"}}}<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d <code>params<\/code> \u90e8\u5206\u5c31\u662f <code>McpSchema.CallToolRequest<\/code> \u5bf9\u8c61\u5e8f\u5217\u5316\u540e\u7684\u7ed3\u679c\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-transport\">2. Transport \u5c42\uff1a\u6d88\u606f\u7684\u5feb\u9012\u516c\u53f8<\/h3>\n\n\n\n<p>Transport \u5c42\u7684\u804c\u8d23\u5f88\u5355\u4e00\uff1a\u628a JSON-RPC \u6d88\u606f\u4ece\u4e00\u7aef\u9001\u5230\u53e6\u4e00\u7aef\u3002\u5b83\u4e0d\u5173\u5fc3\u6d88\u606f\u5185\u5bb9\u662f\u4ec0\u4e48\uff08\u5de5\u5177\u8c03\u7528\u8fd8\u662f\u8d44\u6e90\u8bfb\u53d6\uff09\uff0c\u53ea\u7ba1\u9001\u8fbe\u3002<\/p>\n\n\n\n<p>SDK \u63d0\u4f9b\u4e86\u4e09\u79cd Transport \u5b9e\u73b0\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e09\u5bb6\u4e0d\u540c\u7684\u5feb\u9012\u516c\u53f8\uff0c\u5404\u6709\u5404\u7684\u914d\u9001\u65b9\u5f0f\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"2-1-stdio-transport\">2.1 Stdio Transport<\/h4>\n\n\n\n<p>\u901a\u8fc7\u8fdb\u7a0b\u7684 stdin \/ stdout \u4f20\u8f93\u6d88\u606f\u3002MCP Server \u4f5c\u4e3a\u5b50\u8fdb\u7a0b\u542f\u52a8\uff0cClient\uff08Host \u5e94\u7528\uff09\u901a\u8fc7\u6807\u51c6\u8f93\u5165\u8f93\u51fa\u548c\u5b83\u901a\u4fe1\u3002\u6bcf\u6761\u6d88\u606f\u662f\u4e00\u884c JSON \u6587\u672c\uff0c\u7528\u6362\u884c\u7b26\u5206\u9694\u3002<\/p>\n\n\n\n<p>\u4f60\u5728 Claude Desktop \u91cc\u914d\u7f6e\u672c\u5730 MCP Server \u65f6\uff0c\u7528\u7684\u5c31\u662f\u8fd9\u79cd\u65b9\u5f0f\u3002Claude Desktop \u542f\u52a8\u4f60\u7684 Java \u8fdb\u7a0b\uff0c\u7136\u540e\u901a\u8fc7 stdin \u53d1\u8bf7\u6c42\u3001\u4ece stdout \u8bfb\u54cd\u5e94\u3002<\/p>\n\n\n\n<p>\u5173\u952e\u7c7b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5ba2\u6237\u7aef\uff1a<code>StdioClientTransport<\/code><\/li>\n\n\n\n<li>\u670d\u52a1\u7aef\uff1a<code>StdioServerTransportProvider<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"2-2-sse-transport\">2.2 SSE Transport<\/h4>\n\n\n\n<p>\u57fa\u4e8e Server-Sent Events \u7684\u4f20\u8f93\u3002\u5982\u679c\u4f60\u8bfb\u8fc7\u4e4b\u524d\u7684 SSE \u7cfb\u5217\u6587\u7ae0\uff0c\u5bf9\u8fd9\u4e2a\u5e94\u8be5\u4e0d\u964c\u751f\u3002<\/p>\n\n\n\n<p>SSE \u672c\u8eab\u662f\u5355\u5411\u7684\uff08\u53ea\u80fd Server \u5411 Client \u63a8\u9001\uff09\uff0c\u6240\u4ee5 MCP \u7684 SSE Transport \u5b9e\u9645\u4e0a\u8d70\u4e86\u4e24\u6761\u8def\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Server \u2192 Client\uff1a\u901a\u8fc7 SSE \u957f\u8fde\u63a5\u63a8\u9001\u4e8b\u4ef6\uff08\u54cd\u5e94\u3001\u901a\u77e5\uff09<\/li>\n\n\n\n<li>Client \u2192 Server\uff1a\u901a\u8fc7\u5355\u72ec\u7684 HTTP POST \u8bf7\u6c42\u53d1\u9001\uff08\u8bf7\u6c42\uff09<\/li>\n<\/ul>\n\n\n\n<p>\u5173\u952e\u7c7b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5ba2\u6237\u7aef\uff1a<code>HttpClientSseClientTransport<\/code>\uff08\u57fa\u4e8e JDK \u5185\u7f6e\u7684 <code>HttpClient<\/code>\uff0c\u4e0d\u4f9d\u8d56\u7b2c\u4e09\u65b9 HTTP \u5e93\uff09<\/li>\n\n\n\n<li>\u670d\u52a1\u7aef\uff1a<code>HttpServletSseServerTransportProvider<\/code>\uff08\u57fa\u4e8e Jakarta Servlet\uff09<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"2-3-streamable-http-transport\">2.3 Streamable HTTP Transport<\/h4>\n\n\n\n<p>SSE Transport \u7684\u8fdb\u5316\u7248\u3002\u53cc\u5411\u90fd\u8d70 HTTP\uff0cClient \u7684\u8bf7\u6c42\u548c Server \u7684\u54cd\u5e94\u90fd\u53ef\u4ee5\u6d41\u5f0f\u4f20\u8f93\uff0c\u4e0d\u9700\u8981\u7ef4\u6301\u4e00\u4e2a\u989d\u5916\u7684 SSE \u957f\u8fde\u63a5\uff0c\u6309\u9700\u5efa\u7acb\u8fde\u63a5\u5373\u53ef\u3002<\/p>\n\n\n\n<p>\u8fd9\u662f MCP \u534f\u8bae\u8f83\u65b0\u5f15\u5165\u7684\u4f20\u8f93\u65b9\u5f0f\uff0c\u4e5f\u662f\u5b98\u65b9\u63a8\u8350\u7684\u8fdc\u7a0b\u4f20\u8f93\u65b9\u6848\u3002<\/p>\n\n\n\n<p>\u5173\u952e\u7c7b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5ba2\u6237\u7aef\uff1a<code>HttpClientStreamableHttpTransport<\/code><\/li>\n\n\n\n<li>\u670d\u52a1\u7aef\uff1a<code>HttpServletStreamableServerTransportProvider<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"2-4-transport\">2.4 \u4e09\u79cd Transport \u600e\u4e48\u9009<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u7ef4\u5ea6<\/th><th class=\"has-text-align-left\" data-align=\"left\">Stdio<\/th><th class=\"has-text-align-left\" data-align=\"left\">SSE<\/th><th class=\"has-text-align-left\" data-align=\"left\">Streamable HTTP<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u901a\u4fe1\u65b9\u5f0f<\/td><td class=\"has-text-align-left\" data-align=\"left\">stdin \/ stdout<\/td><td class=\"has-text-align-left\" data-align=\"left\">SSE \u63a8\u9001 + HTTP POST<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u53cc\u5411 HTTP \u6d41<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u9002\u7528\u8303\u56f4<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4ec5\u672c\u5730<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u672c\u5730 + \u8fdc\u7a0b<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u672c\u5730 + \u8fdc\u7a0b<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u7f51\u7edc\u8981\u6c42<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\uff08\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff09<\/td><td class=\"has-text-align-left\" data-align=\"left\">HTTP<\/td><td class=\"has-text-align-left\" data-align=\"left\">HTTP<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u5b9e\u73b0\u590d\u6742\u5ea6<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4f4e<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4e2d<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4e2d<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u751f\u4ea7\u5c31\u7eea\u5ea6<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9002\u5408\u672c\u5730\u5f00\u53d1<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u53ef\u7528\u4e8e\u751f\u4ea7<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u63a8\u8350\u751f\u4ea7\u4f7f\u7528<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u5178\u578b\u573a\u666f<\/td><td class=\"has-text-align-left\" data-align=\"left\">Claude Desktop \u672c\u5730\u5de5\u5177<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4f20\u7edf Web \u73af\u5883<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4f01\u4e1a\u7ea7\u8fdc\u7a0b\u90e8\u7f72<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u7b80\u5355\u6765\u8bf4\uff1a<strong>\u672c\u5730\u5f00\u53d1\u8c03\u8bd5\u7528 Stdio\uff0c\u751f\u4ea7\u73af\u5883\u8fdc\u7a0b\u90e8\u7f72\u7528 Streamable HTTP\uff0cSSE \u4f5c\u4e3a\u517c\u5bb9\u6027\u8f83\u597d\u7684\u8fc7\u6e21\u65b9\u6848<\/strong>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-session\">3. Session \u5c42\uff1a\u5bf9\u8bdd\u7684\u7a97\u53e3<\/h3>\n\n\n\n<p>Transport \u53ea\u7ba1\u9001\u6d88\u606f\uff0c\u4f46\u4e00\u6b21\u5b8c\u6574\u7684 MCP \u901a\u4fe1\u4e0d\u53ea\u662f\u5355\u6761\u6d88\u606f\u7684\u6536\u53d1\u2014\u2014Client \u548c Server \u5efa\u7acb\u8fde\u63a5\u540e\uff0c\u9700\u8981\u5148\u63e1\u624b\uff08<code>initialize<\/code>\uff09\uff0c\u4ea4\u6362\u5404\u81ea\u7684\u80fd\u529b\u58f0\u660e\uff08\u6211\u652f\u6301\u54ea\u4e9b\u529f\u80fd\u3001\u4f60\u652f\u6301\u54ea\u4e9b\u529f\u80fd\uff09\uff0c\u7136\u540e\u624d\u80fd\u6b63\u5f0f\u6536\u53d1\u8bf7\u6c42\u3002<\/p>\n\n\n\n<p>Session \u5c42\u7ba1\u7406\u7684\u5c31\u662f\u8fd9\u6574\u4e2a\u8fde\u63a5\u751f\u547d\u5468\u671f\u3002\u5b83\u8d1f\u8d23\u4e09\u4ef6\u4e8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1.<strong>\u7ef4\u62a4\u8fde\u63a5\u72b6\u6001<\/strong>\uff1a\u662f\u5426\u5df2\u521d\u59cb\u5316\u3001\u662f\u5426\u5df2\u5173\u95ed<\/li>\n\n\n\n<li>2.<strong>\u8bf7\u6c42-\u54cd\u5e94\u914d\u5bf9<\/strong>\uff1a\u6bcf\u4e2a JSON-RPC \u8bf7\u6c42\u6709\u4e00\u4e2a <code>id<\/code>\uff0cSession \u8981\u628a\u6536\u5230\u7684\u54cd\u5e94\u6309 <code>id<\/code> \u8def\u7531\u56de\u5bf9\u5e94\u7684\u8bf7\u6c42\uff08\u56e0\u4e3a\u53ef\u80fd\u540c\u65f6\u6709\u591a\u4e2a\u8bf7\u6c42\u5728\u7b49\u5f85\u54cd\u5e94\uff09<\/li>\n\n\n\n<li>3.<strong>\u5904\u7406\u901a\u77e5\u6d88\u606f<\/strong>\uff1aJSON-RPC \u9664\u4e86\u8bf7\u6c42-\u54cd\u5e94\uff0c\u8fd8\u6709\u901a\u77e5\uff08Notification\uff09\u2014\u2014\u4e0d\u9700\u8981\u54cd\u5e94\u7684\u5355\u5411\u6d88\u606f\uff0c\u6bd4\u5982\u5de5\u5177\u5217\u8868\u53d8\u66f4\u901a\u77e5<\/li>\n<\/ol>\n\n\n\n<p>\u5173\u952e\u7c7b\uff1a<code>McpClientSession<\/code>\uff08\u5ba2\u6237\u7aef\u4f1a\u8bdd\uff09\u3001<code>McpServerSession<\/code>\uff08\u670d\u52a1\u7aef\u4f1a\u8bdd\uff09\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-client-server-api\">4. Client\/Server \u5c42\uff1a\u5f00\u53d1\u8005\u76f4\u63a5\u6253\u4ea4\u9053\u7684 API<\/h3>\n\n\n\n<p>\u6700\u4e0a\u5c42\u5c31\u662f\u4f60\u5b9e\u9645\u4f7f\u7528\u7684 API \u4e86\u3002SDK \u63d0\u4f9b\u4e86 Builder \u6a21\u5f0f\u6765\u521b\u5efa Client \u548c Server\uff0cAPI \u8bbe\u8ba1\u7b80\u6d01\u6e05\u6670\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"4-1-mcp-server\">4.1 McpServer<\/h4>\n\n\n\n<p><code>McpServer<\/code> \u662f\u670d\u52a1\u7aef\u7684\u5165\u53e3\u7c7b\uff0c\u63d0\u4f9b\u4e24\u4e2a\u9759\u6001\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>McpServer.sync(transportProvider)<\/code> \u2014\u2014\u521b\u5efa\u540c\u6b65 Server<\/li>\n\n\n\n<li><code>McpServer.async(transportProvider)<\/code> \u2014\u2014\u521b\u5efa\u5f02\u6b65 Server<\/li>\n<\/ul>\n\n\n\n<p>\u901a\u8fc7 Builder \u94fe\u5f0f\u8c03\u7528\u6ce8\u518c\u5de5\u5177\u3001\u8d44\u6e90\u3001Prompt\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>McpSyncServer server = McpServer.sync(transportProvider)\n    .serverInfo(new McpSchema.Implementation(\"my-server\", \"1.0.0\"))\n    .tool(\n        new McpSchema.Tool(\"getUserAnnualLeave\", \"\u67e5\u8be2\u5458\u5de5\u5269\u4f59\u5e74\u5047\u5929\u6570\", jsonSchema),\n        (exchange, request) -> {\n            String employeeId = request.arguments().get(\"employeeId\").toString();\n            String result = \"\u5458\u5de5 \" + employeeId + \" \u5269\u4f59\u5e74\u5047\uff1a5 \u5929\";\n            return new McpSchema.CallToolResult(\n                List.of(new McpSchema.TextContent(result)), false\n            );\n        }\n    )\n    .build();<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"4-2-mcp-client\">4.2 McpClient<\/h4>\n\n\n\n<p><code>McpClient<\/code> \u662f\u5ba2\u6237\u7aef\u7684\u5165\u53e3\u7c7b\uff0c\u540c\u6837\u63d0\u4f9b\u540c\u6b65\u548c\u5f02\u6b65\u4e24\u4e2a\u7248\u672c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>McpSyncClient client = McpClient.sync(transport)\n    .clientInfo(new McpSchema.Implementation(\"my-client\", \"1.0.0\"))\n    .build();\n\n\/\/ \u5efa\u7acb\u8fde\u63a5\uff0c\u5b8c\u6210\u63e1\u624b\nclient.initialize();\n\n\/\/ \u53d1\u73b0 Server \u7aef\u6709\u54ea\u4e9b\u5de5\u5177\nMcpSchema.ListToolsResult toolsResult = client.listTools();\nfor (McpSchema.Tool tool : toolsResult.tools()) {\n    System.out.println(\"\u5de5\u5177\uff1a\" + tool.name() + \" - \" + tool.description());\n}\n\n\/\/ \u8c03\u7528\u5de5\u5177\nMap&lt;String, Object> args = Map.of(\"employeeId\", \"E001\");\nMcpSchema.CallToolResult result = client.callTool(\n    new McpSchema.CallToolRequest(\"getUserAnnualLeave\", args)\n);\n\n\/\/ \u5173\u95ed\u8fde\u63a5\nclient.closeGracefully();<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"4-3-vs\">4.3 \u540c\u6b65 vs \u5f02\u6b65\u600e\u4e48\u9009<\/h4>\n\n\n\n<p>SDK \u63d0\u4f9b\u4e86\u540c\u6b65\u548c\u5f02\u6b65\u4e24\u5957 API\uff0c\u5206\u522b\u5bf9\u5e94 <code>McpSyncClient<\/code> \/ <code>McpAsyncClient<\/code> \u548c <code>McpSyncServer<\/code> \/ <code>McpAsyncServer<\/code>\u3002<\/p>\n\n\n\n<p>\u5f02\u6b65 API \u57fa\u4e8e Project Reactor\uff08\u4e00\u4e2a\u54cd\u5e94\u5f0f\u7f16\u7a0b\u5e93\uff09\uff0c\u8fd4\u56de <code>Mono&lt;T&gt;<\/code> \u548c <code>Flux&lt;T&gt;<\/code> \u7c7b\u578b\u3002\u5982\u679c\u4f60\u7528\u8fc7 Spring WebFlux\uff0c\u5bf9\u8fd9\u5957\u4e1c\u897f\u5e94\u8be5\u4e0d\u964c\u751f\u3002<\/p>\n\n\n\n<p>\u5b9e\u9645\u4e0a\u540c\u6b65 API \u5185\u90e8\u5c31\u662f\u5bf9\u5f02\u6b65 API \u7684 <code>.block()<\/code> \u5c01\u88c5\u2014\u2014\u8c03\u7528\u5f02\u6b65\u65b9\u6cd5\u7136\u540e\u963b\u585e\u7b49\u5f85\u7ed3\u679c\u3002\u6240\u4ee5\u4e24\u5957 API \u7684\u5e95\u5c42\u5b9e\u73b0\u662f\u540c\u4e00\u5957\u4ee3\u7801\u3002<\/p>\n\n\n\n<p>\u600e\u4e48\u9009\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4f20\u7edf Spring MVC \u9879\u76ee<\/strong>\uff08\u963b\u585e\u5f0f\uff09\uff1a\u7528\u540c\u6b65 API\uff0c\u7b80\u5355\u76f4\u89c2<\/li>\n\n\n\n<li><strong>Spring WebFlux \u9879\u76ee<\/strong>\uff08\u54cd\u5e94\u5f0f\uff09\u6216\u9700\u8981\u5904\u7406\u5927\u91cf\u5e76\u53d1\u8fde\u63a5\uff1a\u7528\u5f02\u6b65 API<\/li>\n\n\n\n<li><strong>\u4e0d\u786e\u5b9a<\/strong>\uff1a\u7528\u540c\u6b65\uff0c\u7b49\u9047\u5230\u6027\u80fd\u74f6\u9888\u518d\u5207\u5f02\u6b65<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sdk-mcp-server\">\u5b9e\u6218\uff1a\u7528\u7eaf SDK \u6784\u5efa MCP Server<\/h2>\n\n\n\n<p>\u5149\u770b\u67b6\u6784\u56fe\u4e0d\u591f\u76f4\u89c2\uff0c\u4e0b\u9762\u7528\u7eaf SDK\uff08\u4e0d\u4f9d\u8d56 Spring AI\uff09\u6765\u642d\u4e00\u4e2a MCP Server\uff0c\u5b9e\u73b0\u4e24\u4e2a\u5de5\u5177\uff1a<code>getUserAnnualLeave<\/code>\uff08\u67e5\u5e74\u5047\uff09\u548c <code>getOrderStatus<\/code>\uff08\u67e5\u8ba2\u5355\u72b6\u6001\uff09\u3002\u548c\u4e4b\u524d Spring AI \u7248\u672c\u505a\u4e2a\u5bf9\u6bd4\uff0c\u4f60\u5c31\u80fd\u611f\u53d7\u5230 Spring AI \u5e2e\u4f60\u7701\u4e86\u591a\u5c11\u4e8b\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2\">2. \u5b8c\u6574\u4ee3\u7801<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>importio.modelcontextprotocol.server.McpServer;importio.modelcontextprotocol.server.McpSyncServer;importio.modelcontextprotocol.server.transport.StdioServerTransportProvider;importio.modelcontextprotocol.spec.McpSchema;importjava.util.List;importjava.util.Map;importjava.util.concurrent.CountDownLatch;publicclassEnterpriseMcpServer{publicstaticvoidmain(String&#91;] args)throwsInterruptedException{\/\/ 1. \u521b\u5efa Transport\uff1a\u4f7f\u7528 Stdio \u65b9\u5f0f\uff08\u901a\u8fc7 stdin\/stdout \u901a\u4fe1\uff09StdioServerTransportProvider transportProvider =newStdioServerTransportProvider();\/\/ 2. \u6784\u5efa Server\uff0c\u6ce8\u518c\u5de5\u5177McpSyncServer server =McpServer.sync(transportProvider).serverInfo(newMcpSchema.Implementation(\"enterprise-server\",\"1.0.0\"))\/\/ \u6ce8\u518c\u5de5\u5177\uff1a\u67e5\u5e74\u5047.tool(buildAnnualLeaveTool(),(exchange, request)-&gt;handleAnnualLeave(request))\/\/ \u6ce8\u518c\u5de5\u5177\uff1a\u67e5\u8ba2\u5355\u72b6\u6001.tool(buildOrderStatusTool(),(exchange, request)-&gt;handleOrderStatus(request)).build();System.err.println(\"Enterprise MCP Server \u5df2\u542f\u52a8\uff0c\u7b49\u5f85 Client \u8fde\u63a5...\");\/\/ 3. \u6ce8\u518c\u5173\u95ed\u94a9\u5b50\uff0c\u8fdb\u7a0b\u9000\u51fa\u65f6\u4f18\u96c5\u5173\u95ed ServerRuntime.getRuntime().addShutdownHook(newThread(server::close));\/\/ 4. \u963b\u585e\u4e3b\u7ebf\u7a0b\uff0c\u4fdd\u6301\u8fdb\u7a0b\u5b58\u6d3b\/\/ build() \u5185\u90e8\u7684 stdin \u76d1\u542c\u7ebf\u7a0b\u662f\u5b88\u62a4\u7ebf\u7a0b\uff0c\u5982\u679c main \u65b9\u6cd5\u7ed3\u675f\uff0cJVM \u4f1a\u76f4\u63a5\u9000\u51fa\/\/ \u6240\u4ee5\u5fc5\u987b\u624b\u52a8\u963b\u585e\u4e3b\u7ebf\u7a0b\uff0c\u8ba9 Server \u6301\u7eed\u8fd0\u884cnewCountDownLatch(1).await();}\/\/ ========== \u5de5\u5177\u5b9a\u4e49 ==========\/**\n     * \u6784\u5efa\u67e5\u5e74\u5047\u5de5\u5177\u7684\u5b9a\u4e49\n     * \u9700\u8981\u624b\u52a8\u62fc JSON Schema \u6765\u63cf\u8ff0\u53c2\u6570\n     *\/privatestaticMcpSchema.ToolbuildAnnualLeaveTool(){\/\/ \u53c2\u6570\u7684 JSON SchemaString inputSchema =\"\"\"\n            {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"employeeId\": {\n                        \"type\": \"string\",\n                        \"description\": \"\u5458\u5de5\u5de5\u53f7\uff0c\u5982 E001\"\n                    }\n                },\n                \"required\": &#91;\"employeeId\"]\n            }\n            \"\"\";returnnewMcpSchema.Tool(\"getUserAnnualLeave\",\"\u67e5\u8be2\u5458\u5de5\u5269\u4f59\u5e74\u5047\u5929\u6570\uff0c\u5305\u62ec\u603b\u5929\u6570\u3001\u5df2\u4f7f\u7528\u5929\u6570\u3001\u5269\u4f59\u5929\u6570\",McpSchema.JsonSchema.fromJson(inputSchema));}\/**\n     * \u6784\u5efa\u67e5\u8ba2\u5355\u72b6\u6001\u5de5\u5177\u7684\u5b9a\u4e49\n     *\/privatestaticMcpSchema.ToolbuildOrderStatusTool(){String inputSchema =\"\"\"\n            {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"orderId\": {\n                        \"type\": \"string\",\n                        \"description\": \"\u8ba2\u5355\u7f16\u53f7\uff0c\u5982 ORD-20260301-001\"\n                    }\n                },\n                \"required\": &#91;\"orderId\"]\n            }\n            \"\"\";returnnewMcpSchema.Tool(\"getOrderStatus\",\"\u67e5\u8be2\u8ba2\u5355\u7684\u7269\u6d41\u72b6\u6001\u548c\u8be6\u7ec6\u4fe1\u606f\",McpSchema.JsonSchema.fromJson(inputSchema));}\/\/ ========== \u5de5\u5177\u5904\u7406\u51fd\u6570 ==========privatestaticMcpSchema.CallToolResulthandleAnnualLeave(McpSchema.CallToolRequest request){\/\/ \u4ece\u8bf7\u6c42\u4e2d\u63d0\u53d6\u53c2\u6570String employeeId = request.arguments().get(\"employeeId\").toString();\/\/ \u5b9e\u9645\u9879\u76ee\u4e2d\u8fd9\u91cc\u8c03\u7528 HR \u7cfb\u7edf\u67e5\u8be2String result =String.format(\"\u5458\u5de5 %s \u7684\u5e74\u5047\u4fe1\u606f\uff1a\u603b\u5e74\u5047 15 \u5929\uff0c\u5df2\u4f7f\u7528 10 \u5929\uff0c\u5269\u4f59 5 \u5929\", employeeId\n        );returnnewMcpSchema.CallToolResult(List.of(newMcpSchema.TextContent(result)),false\/\/ isError = false\uff0c\u8868\u793a\u6267\u884c\u6210\u529f);}privatestaticMcpSchema.CallToolResulthandleOrderStatus(McpSchema.CallToolRequest request){String orderId = request.arguments().get(\"orderId\").toString();\/\/ \u5b9e\u9645\u9879\u76ee\u4e2d\u8fd9\u91cc\u8c03\u7528\u8ba2\u5355\u7cfb\u7edf\u67e5\u8be2String result =String.format(\"\u8ba2\u5355 %s \u72b6\u6001\uff1a\u5df2\u53d1\u8d27\uff0c\u5feb\u9012\u5355\u53f7 SF1234567890\uff0c\u9884\u8ba1\u660e\u5929\u9001\u8fbe\", orderId\n        );returnnewMcpSchema.CallToolResult(List.of(newMcpSchema.TextContent(result)),false);}}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3\">3. \u4ee3\u7801\u89e3\u8bfb<\/h3>\n\n\n\n<p>\u5bf9\u7167\u4ee3\u7801\uff0c\u4f60\u53ef\u4ee5\u770b\u5230\u7528\u7eaf SDK \u6784\u5efa MCP Server \u9700\u8981\u505a\u56db\u4ef6\u4e8b\uff1a<\/p>\n\n\n\n<p><strong>\u7b2c\u4e00\u6b65\uff1a\u521b\u5efa Transport<\/strong>\u3002\u8fd9\u91cc\u7528 <code>StdioServerTransportProvider<\/code>\uff0c\u8868\u793a\u901a\u8fc7 stdin\/stdout \u548c Client \u901a\u4fe1\u3002\u5982\u679c\u8981\u8fdc\u7a0b\u90e8\u7f72\uff0c\u6362\u6210 <code>HttpServletSseServerTransportProvider<\/code> \u6216 <code>HttpServletStreamableServerTransportProvider<\/code>\u3002<\/p>\n\n\n\n<p><strong>\u7b2c\u4e8c\u6b65\uff1a\u6784\u5efa\u5de5\u5177\u5b9a\u4e49<\/strong>\u3002\u8fd9\u662f\u6700\u8d39\u52b2\u7684\u90e8\u5206\u2014\u2014\u4f60\u9700\u8981\u624b\u52a8\u62fc JSON Schema \u6765\u63cf\u8ff0\u6bcf\u4e2a\u5de5\u5177\u7684\u53c2\u6570\u3002\u53c2\u6570\u540d\u3001\u53c2\u6570\u7c7b\u578b\u3001\u53c2\u6570\u63cf\u8ff0\u3001\u662f\u5426\u5fc5\u586b\uff0c\u90fd\u8981\u81ea\u5df1\u5199\u3002\u5bf9\u6bd4\u4e00\u4e0b Function Call \u90a3\u7bc7\u6587\u7ae0\u91cc\u7528 Gson \u624b\u52a8\u6784\u5efa JSON Schema \u7684\u4ee3\u7801\uff0c\u7ed3\u6784\u662f\u4e00\u6837\u7684\uff0c\u53ea\u662f SDK \u63d0\u4f9b\u4e86 <code>McpSchema.Tool<\/code> \u8fd9\u4e2a\u7c7b\u6765\u627f\u8f7d\u3002<\/p>\n\n\n\n<p><strong>\u7b2c\u4e09\u6b65\uff1a\u7f16\u5199\u5904\u7406\u51fd\u6570<\/strong>\u3002\u6bcf\u4e2a\u5de5\u5177\u9700\u8981\u4e00\u4e2a\u5904\u7406\u51fd\u6570\uff0c\u63a5\u6536 <code>McpSchema.CallToolRequest<\/code>\uff08\u5305\u542b\u5de5\u5177\u540d\u548c\u53c2\u6570\uff09\uff0c\u8fd4\u56de <code>McpSchema.CallToolResult<\/code>\uff08\u5305\u542b\u6267\u884c\u7ed3\u679c\uff09\u3002<\/p>\n\n\n\n<p><strong>\u7b2c\u56db\u6b65\uff1a\u963b\u585e\u4e3b\u7ebf\u7a0b\u4fdd\u6d3b<\/strong>\u3002\u8fd9\u4e00\u6b65\u5bb9\u6613\u88ab\u5ffd\u7565\u3002<code>build()<\/code> \u65b9\u6cd5\u8fd4\u56de\u540e\u4e0d\u4f1a\u963b\u585e\u4e3b\u7ebf\u7a0b\uff0c\u800c SDK \u5185\u90e8\u76d1\u542c stdin \u7684\u7ebf\u7a0b\u662f\u5b88\u62a4\u7ebf\u7a0b\uff08Daemon Thread\uff09\u2014\u2014\u5b88\u62a4\u7ebf\u7a0b\u4e0d\u4f1a\u963b\u6b62 JVM \u9000\u51fa\u3002\u5982\u679c <code>main<\/code> \u65b9\u6cd5\u6267\u884c\u5b8c\u5c31\u7ed3\u675f\u4e86\uff0cJVM \u4f1a\u7acb\u523b\u9000\u51fa\uff0cServer \u6839\u672c\u6765\u4e0d\u53ca\u5904\u7406\u4efb\u4f55\u8bf7\u6c42\u3002\u6240\u4ee5\u5fc5\u987b\u7528 <code>new CountDownLatch(1).await()<\/code> \u624b\u52a8\u963b\u585e\u4e3b\u7ebf\u7a0b\uff0c\u8ba9\u8fdb\u7a0b\u4e00\u76f4\u6d3b\u7740\u3002\u540c\u65f6\u6ce8\u518c <code>ShutdownHook<\/code>\uff0c\u5728\u8fdb\u7a0b\u88ab\u7ec8\u6b62\u65f6\uff08\u6bd4\u5982 Ctrl+C\uff09\u4f18\u96c5\u5173\u95ed Server\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u6ce8\u610f <code>System.err.println<\/code> \u800c\u4e0d\u662f <code>System.out.println<\/code>\u3002\u56e0\u4e3a Stdio Transport \u7528 stdout \u4f20\u8f93 JSON-RPC \u6d88\u606f\uff0c\u5982\u679c\u4f60\u5f80 stdout \u6253\u65e5\u5fd7\uff0c\u4f1a\u548c\u534f\u8bae\u6d88\u606f\u6df7\u5728\u4e00\u8d77\uff0cClient \u5c31\u89e3\u6790\u4e0d\u4e86\u4e86\u3002\u65e5\u5fd7\u8f93\u51fa\u8981\u8d70 stderr\u3002<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-sdk-vs-spring-ai\">4. \u5bf9\u6bd4\uff1aSDK \u76f4\u63a5\u5199 vs Spring AI \u6ce8\u89e3<\/h3>\n\n\n\n<p>\u540c\u4e00\u4e2a\u67e5\u5e74\u5047\u5de5\u5177\uff0c\u4e24\u79cd\u65b9\u5f0f\u7684\u4ee3\u7801\u91cf\u5bf9\u6bd4\uff1a<\/p>\n\n\n\n<p><strong>Spring AI \u65b9\u5f0f\u2014\u20143 \u884c\u641e\u5b9a\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@McpTool(description =\"\u67e5\u8be2\u5458\u5de5\u5269\u4f59\u5e74\u5047\u5929\u6570\uff0c\u5305\u62ec\u603b\u5929\u6570\u3001\u5df2\u4f7f\u7528\u5929\u6570\u3001\u5269\u4f59\u5929\u6570\")publicStringgetUserAnnualLeave(@McpToolParam(description =\"\u5458\u5de5\u5de5\u53f7\uff0c\u5982 E001\")String employeeId){returnString.format(\"\u5458\u5de5 %s \u7684\u5e74\u5047\u4fe1\u606f\uff1a\u603b\u5e74\u5047 15 \u5929\uff0c\u5df2\u4f7f\u7528 10 \u5929\uff0c\u5269\u4f59 5 \u5929\", employeeId);}<\/code><\/pre>\n\n\n\n<p><strong>SDK \u65b9\u5f0f\u2014\u2014\u9700\u8981 30+ \u884c\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ 1. \u624b\u52a8\u62fc JSON Schema\uff0810+ \u884c\uff09String inputSchema =\"\"\"\n    {\n        \"type\": \"object\",\n        \"properties\": {\n            \"employeeId\": {\n                \"type\": \"string\",\n                \"description\": \"\u5458\u5de5\u5de5\u53f7\uff0c\u5982 E001\"\n            }\n        },\n        \"required\": &#91;\"employeeId\"]\n    }\n    \"\"\";McpSchema.Tool tool =newMcpSchema.Tool(\"getUserAnnualLeave\",\"\u67e5\u8be2\u5458\u5de5\u5269\u4f59\u5e74\u5047\u5929\u6570\uff0c\u5305\u62ec\u603b\u5929\u6570\u3001\u5df2\u4f7f\u7528\u5929\u6570\u3001\u5269\u4f59\u5929\u6570\",McpSchema.JsonSchema.fromJson(inputSchema));\/\/ 2. \u624b\u52a8\u7f16\u5199\u5904\u7406\u51fd\u6570\uff0c\u624b\u52a8\u63d0\u53d6\u53c2\u6570\uff085+ \u884c\uff09BiFunction&lt;McpSyncServerExchange, McpSchema.CallToolRequest, McpSchema.CallToolResult&gt; handler =(exchange, request)-&gt;{String employeeId = request.arguments().get(\"employeeId\").toString();String result =String.format(\"\u5458\u5de5 %s \u7684\u5e74\u5047\u4fe1\u606f\uff1a...\", employeeId);returnnewMcpSchema.CallToolResult(List.of(newMcpSchema.TextContent(result)),false);};\/\/ 3. \u6ce8\u518c\u5230 Server BuilderMcpServer.sync(transport).tool(tool, handler).build();<\/code><\/pre>\n\n\n\n<p>\u5dee\u8ddd\u4e00\u76ee\u4e86\u7136\u3002Spring AI \u5e2e\u4f60\u505a\u4e86\u4e09\u4ef6\u4e8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1.<strong>\u4ece\u65b9\u6cd5\u7b7e\u540d\u81ea\u52a8\u751f\u6210 JSON Schema<\/strong>\uff1a\u65b9\u6cd5\u53c2\u6570\u540d\u53d8\u6210 Schema \u7684 <code>properties<\/code>\uff0c\u53c2\u6570\u7c7b\u578b\u53d8\u6210 <code>type<\/code>\uff0c<code>@McpToolParam<\/code> \u7684 <code>description<\/code> \u53d8\u6210\u53c2\u6570\u63cf\u8ff0\uff0c\u65b9\u6cd5\u540d\u53d8\u6210\u5de5\u5177\u540d<\/li>\n\n\n\n<li>2.<strong>\u81ea\u52a8\u628a\u8bf7\u6c42\u53c2\u6570\u6620\u5c04\u5230\u65b9\u6cd5\u53c2\u6570<\/strong>\uff1aClient \u4f20\u8fc7\u6765\u7684 <code>arguments<\/code> \u91cc\u7684\u503c\uff0c\u81ea\u52a8\u6309\u540d\u79f0\u5339\u914d\u5230\u65b9\u6cd5\u53c2\u6570\u4e0a<\/li>\n\n\n\n<li>3.<strong>\u81ea\u52a8\u628a\u8fd4\u56de\u503c\u5305\u88c5\u6210 <code>CallToolResult<\/code><\/strong>\uff1a\u4f60\u8fd4\u56de\u4e00\u4e2a <code>String<\/code>\uff0c\u6846\u67b6\u5e2e\u4f60\u5305\u6210 <code>TextContent<\/code> \u518d\u5305\u6210 <code>CallToolResult<\/code><\/li>\n<\/ol>\n\n\n\n<p>\u7406\u89e3\u4e86\u8fd9\u4e9b\uff0c\u4f60\u5c31\u77e5\u9053 <code>@McpTool<\/code> \u6ce8\u89e3\u4e0d\u662f\u9b54\u6cd5\uff0c\u800c\u662f\u5bf9 SDK API \u7684\u5de5\u7a0b\u5c01\u88c5\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sdk-mcp-client\">\u5b9e\u6218\uff1a\u7528\u7eaf SDK \u6784\u5efa MCP Client<\/h2>\n\n\n\n<p>Server \u7aef\u5199\u5b8c\u4e86\uff0c\u518d\u6765\u770b Client \u7aef\u3002\u4e0b\u9762\u8fd9\u6bb5\u4ee3\u7801\u5c55\u793a\u4e86\u4e00\u4e2a MCP Client \u7684\u5b8c\u6574\u751f\u547d\u5468\u671f\uff1a\u8fde\u63a5 Server \u2192 \u53d1\u73b0\u5de5\u5177 \u2192 \u8c03\u7528\u5de5\u5177 \u2192 \u5173\u95ed\u8fde\u63a5\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1\">1. \u5b8c\u6574\u4ee3\u7801<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>importio.modelcontextprotocol.client.McpClient;importio.modelcontextprotocol.client.McpSyncClient;importio.modelcontextprotocol.client.transport.StdioClientTransport;importio.modelcontextprotocol.spec.McpSchema;importjava.util.Map;publicclassEnterpriseMcpClient{publicstaticvoidmain(String&#91;] args){\/\/ 1. \u521b\u5efa Transport\uff0c\u6307\u5411 Server \u8fdb\u7a0b\/\/ ServerParameters \u5b9a\u4e49\u4e86\u8981\u542f\u52a8\u7684\u5b50\u8fdb\u7a0b\u547d\u4ee4StdioClientTransport transport =StdioClientTransport.builder(\"java\").args(\"-jar\",\"enterprise-mcp-server.jar\").build();\/\/ 2. \u521b\u5efa ClientMcpSyncClient client =McpClient.sync(transport).clientInfo(newMcpSchema.Implementation(\"enterprise-client\",\"1.0.0\")).build();try{\/\/ 3. \u5efa\u7acb\u8fde\u63a5\uff0c\u5b8c\u6210\u63e1\u624b\n            client.initialize();System.out.println(\"\u5df2\u8fde\u63a5\u5230 MCP Server\");\/\/ 4. \u53d1\u73b0\u5de5\u5177McpSchema.ListToolsResult toolsResult = client.listTools();System.out.println(\"Server \u63d0\u4f9b\u4e86 \"+ toolsResult.tools().size()+\" \u4e2a\u5de5\u5177\uff1a\");for(McpSchema.Tool tool : toolsResult.tools()){System.out.println(\"  - \"+ tool.name()+\"\uff1a\"+ tool.description());}\/\/ 5. \u8c03\u7528\u5de5\u5177\uff1a\u67e5\u5e74\u5047McpSchema.CallToolResult leaveResult = client.callTool(newMcpSchema.CallToolRequest(\"getUserAnnualLeave\",Map.of(\"employeeId\",\"E001\")));System.out.println(\"\\n\u67e5\u5e74\u5047\u7ed3\u679c\uff1a\");for(McpSchema.Content content : leaveResult.content()){if(content instanceofMcpSchema.TextContent text){System.out.println(\"  \"+ text.text());}}\/\/ 6. \u8c03\u7528\u5de5\u5177\uff1a\u67e5\u8ba2\u5355McpSchema.CallToolResult orderResult = client.callTool(newMcpSchema.CallToolRequest(\"getOrderStatus\",Map.of(\"orderId\",\"ORD-20260301-001\")));System.out.println(\"\\n\u67e5\u8ba2\u5355\u7ed3\u679c\uff1a\");for(McpSchema.Content content : orderResult.content()){if(content instanceofMcpSchema.TextContent text){System.out.println(\"  \"+ text.text());}}}finally{\/\/ 7. \u5173\u95ed\u8fde\u63a5\n            client.closeGracefully();System.out.println(\"\\n\u8fde\u63a5\u5df2\u5173\u95ed\");}}}<\/code><\/pre>\n\n\n\n<p>\u8fd0\u884c\u8f93\u51fa\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5df2\u8fde\u63a5\u5230 MCP Server\nServer \u63d0\u4f9b\u4e86 2 \u4e2a\u5de5\u5177\uff1a\n  - getUserAnnualLeave\uff1a\u67e5\u8be2\u5458\u5de5\u5269\u4f59\u5e74\u5047\u5929\u6570\uff0c\u5305\u62ec\u603b\u5929\u6570\u3001\u5df2\u4f7f\u7528\u5929\u6570\u3001\u5269\u4f59\u5929\u6570\n  - getOrderStatus\uff1a\u67e5\u8be2\u8ba2\u5355\u7684\u7269\u6d41\u72b6\u6001\u548c\u8be6\u7ec6\u4fe1\u606f\n\n\u67e5\u5e74\u5047\u7ed3\u679c\uff1a\n  \u5458\u5de5 E001 \u7684\u5e74\u5047\u4fe1\u606f\uff1a\u603b\u5e74\u5047 15 \u5929\uff0c\u5df2\u4f7f\u7528 10 \u5929\uff0c\u5269\u4f59 5 \u5929\n\n\u67e5\u8ba2\u5355\u7ed3\u679c\uff1a\n  \u8ba2\u5355 ORD-20260301-001 \u72b6\u6001\uff1a\u5df2\u53d1\u8d27\uff0c\u5feb\u9012\u5355\u53f7 SF1234567890\uff0c\u9884\u8ba1\u660e\u5929\u9001\u8fbe\n\n\u8fde\u63a5\u5df2\u5173\u95ed<\/code><\/pre>\n\n\n\n<p>\u6574\u4e2a\u6d41\u7a0b\u548c HTTP \u7684\u8bf7\u6c42-\u54cd\u5e94\u5f88\u50cf\uff0c\u53ea\u4e0d\u8fc7\u591a\u4e86\u4e00\u4e2a\u63e1\u624b\u9636\u6bb5\u3002\u63e1\u624b\u65f6\u53cc\u65b9\u4ea4\u6362\u80fd\u529b\u58f0\u660e\u2014\u2014Server \u544a\u8bc9 Client \u81ea\u5df1\u652f\u6301\u54ea\u4e9b\u529f\u80fd\uff08Tools\uff1fResources\uff1fPrompts\uff1f\uff09\uff0cClient \u4e5f\u544a\u8bc9 Server \u81ea\u5df1\u652f\u6301\u54ea\u4e9b\u529f\u80fd\uff08\u6bd4\u5982\u662f\u5426\u652f\u6301 Sampling\uff09\u3002\u63e1\u624b\u5b8c\u6210\u540e\u624d\u80fd\u6b63\u5f0f\u901a\u4fe1\u3002<\/p>\n\n\n\n<p>\u5728\u5b9e\u9645\u573a\u666f\u4e2d\uff0cServer \u7aef\u7684\u5de5\u5177\u5217\u8868\u53ef\u80fd\u4f1a\u52a8\u6001\u53d8\u5316\u2014\u2014\u6bd4\u5982\u8fd0\u7ef4\u4eba\u5458\u901a\u8fc7\u7ba1\u7406\u540e\u53f0\u65b0\u589e\u4e86\u4e00\u4e2a\u5de5\u5177\uff0c\u6216\u8005\u67d0\u4e2a\u5de5\u5177\u56e0\u4e3a\u6545\u969c\u88ab\u4e0b\u7ebf\u4e86\u3002SDK \u63d0\u4f9b\u4e86 <code>toolsChangeConsumer<\/code> \u6765\u76d1\u542c\u8fd9\u79cd\u53d8\u5316\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>McpSyncClient client = McpClient.sync(transport)\n    .clientInfo(new McpSchema.Implementation(\"my-client\", \"1.0.0\"))\n    .toolsChangeConsumer(tools -> {\n        System.out.println(\"\u5de5\u5177\u5217\u8868\u5df2\u66f4\u65b0\uff0c\u5f53\u524d\u5de5\u5177\u6570\u91cf\uff1a\" + tools.size());\n        for (McpSchema.Tool tool : tools) {\n            System.out.println(\"  - \" + tool.name());\n        }\n    })\n    .build();<\/code><\/pre>\n\n\n\n<p>\u5f53 Server \u7aef\u53d1\u51fa\u5de5\u5177\u5217\u8868\u53d8\u66f4\u901a\u77e5\u65f6\uff0c\u8fd9\u4e2a\u56de\u8c03\u4f1a\u88ab\u81ea\u52a8\u89e6\u53d1\u3002\u5728 Spring AI \u6ce8\u89e3\u65b9\u5f0f\u4e2d\uff0c\u8fd9\u4e2a\u76d1\u542c\u662f\u81ea\u52a8\u5904\u7406\u7684\uff0c\u4f60\u4e0d\u9700\u8981\u624b\u52a8\u6ce8\u518c\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Server \u9700\u8981\u4e3b\u52a8\u53d1\u9001\u901a\u77e5\uff0cClient \u624d\u80fd\u611f\u77e5\u5230\u53d8\u5316\u3002\u5982\u679c Server \u7aef\u6ca1\u6709\u5b9e\u73b0\u901a\u77e5\u673a\u5236\uff0c\u8fd9\u4e2a\u56de\u8c03\u4e0d\u4f1a\u89e6\u53d1\u3002SDK \u5185\u90e8\u6536\u5230\u53d8\u66f4\u901a\u77e5\u540e\u4f1a\u81ea\u52a8\u83b7\u53d6\u6700\u65b0\u5de5\u5177\u5217\u8868\uff0c\u7136\u540e\u4f20\u7ed9\u56de\u8c03\u3002<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"transport\">Transport \u673a\u5236\u8be6\u89e3<\/h2>\n\n\n\n<p>\u524d\u9762\u5728\u67b6\u6784\u5206\u5c42\u91cc\u7b80\u5355\u4ecb\u7ecd\u4e86\u4e09\u79cd Transport\uff0c\u8fd9\u91cc\u5c55\u5f00\u8bf4\u8bf4\u5b83\u4eec\u5404\u81ea\u7684\u901a\u4fe1\u539f\u7406\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-stdio\">1. Stdio\uff1a\u8fdb\u7a0b\u95f4\u7684\u4f20\u7eb8\u6761<\/h3>\n\n\n\n<p>Stdio Transport \u7684\u539f\u7406\u6700\u7b80\u5355\u2014\u2014\u4e24\u4e2a\u8fdb\u7a0b\u4e4b\u95f4\u901a\u8fc7\u6807\u51c6\u8f93\u5165\u8f93\u51fa\u4f20\u9012\u6d88\u606f\uff1a<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>\u53d1\u6307\u4ee4 (stdin)\uff1a<\/strong> Host \u901a\u8fc7<strong>\u6807\u51c6\u8f93\u5165\u6d41<\/strong>\uff0c\u5411\u4f60\u7684 Java \u7a0b\u5e8f\u53d1\u9001 <strong>JSON-RPC \u8bf7\u6c42<\/strong>\uff08\u6307\u4ee4\uff09\u3002 <em>\u6ce8\u610f\uff1a\u6d88\u606f\u662f\u4e00\u884c\u4e00\u6761\uff0c\u7528\u6362\u884c\u7b26\u5206\u9694\u3002<\/em><\/li>\n\n\n\n<li><strong>\u56de\u7ed3\u679c (stdout)\uff1a<\/strong> \u4f60\u7684 Java \u7a0b\u5e8f\u5904\u7406\u5b8c\u6307\u4ee4\u540e\uff0c\u5fc5\u987b\u901a\u8fc7<strong>\u6807\u51c6\u8f93\u51fa\u6d41<\/strong>\uff0c\u628a <strong>JSON-RPC \u54cd\u5e94<\/strong>\uff08\u7ed3\u679c\uff09\u53d1\u56de\u7ed9 Host\u3002 <em>\u6ce8\u610f\uff1a\u540c\u6837\u662f\u4e00\u884c\u4e00\u6761\u6d88\u606f\u3002<\/em><\/li>\n\n\n\n<li><strong>\u6253\u65e5\u5fd7 (stderr) \u2014\u2014 \u6700\u91cd\u8981\u7684\u4e00\u70b9\uff1a<\/strong> \u4f60\u7684 Java \u7a0b\u5e8f\u4ea7\u751f\u7684\u8c03\u8bd5\u4fe1\u606f\u3001\u65e5\u5fd7\uff0c\u5fc5\u987b\u8d70<strong>\u6807\u51c6\u9519\u8bef\u6d41 (stderr)<\/strong>\u3002 <em>\u56fe\u4e2d\u7ea2\u8272\u4fbf\u7b7e\u7279\u522b\u5f3a\u8c03\uff1a<strong>\u4e0d\u8981\u5f80 stdout \u6253\u65e5\u5fd7\uff01<\/strong> \u5426\u5219 Host \u4f1a\u628a\u4f60\u7684\u65e5\u5fd7\u5f53\u6210\u6307\u4ee4\u53bb\u89e3\u6790\uff0c\u5bfc\u81f4\u901a\u4fe1\u5d29\u6e83\u3002<\/em><\/li>\n<\/ol>\n\n\n\n<p>\u4f18\u70b9\u662f\u7b80\u5355\u3001\u5b89\u5168\uff08\u4e0d\u66b4\u9732\u7f51\u7edc\u7aef\u53e3\uff09\u3002\u7f3a\u70b9\u662f\u53ea\u80fd\u672c\u5730\u901a\u4fe1\uff0c\u800c\u4e14\u8fdb\u7a0b\u7684\u751f\u547d\u5468\u671f\u7ba1\u7406\u6bd4\u8f83\u590d\u6742\u2014\u2014Host \u8981\u8d1f\u8d23\u542f\u52a8 Server \u5b50\u8fdb\u7a0b\u3001\u76d1\u63a7\u8fdb\u7a0b\u72b6\u6001\u3001\u5728\u4e0d\u9700\u8981\u65f6\u6740\u6389\u8fdb\u7a0b\u3002<\/p>\n\n\n\n<p>\u9002\u5408\u7684\u573a\u666f\uff1a\u672c\u5730\u5f00\u53d1\u8c03\u8bd5\u3001Claude Desktop \/ Cursor \u96c6\u6210\u672c\u5730\u5de5\u5177\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-sse\">2. SSE\uff1a\u57fa\u4e8e\u4e8b\u4ef6\u6d41\u7684\u8fdc\u7a0b\u901a\u4fe1<\/h3>\n\n\n\n<p>SSE Transport \u7528\u4e8e\u8fdc\u7a0b\u573a\u666f\uff0c\u901a\u4fe1\u8d70 HTTP \u534f\u8bae\u3002\u548c\u4e4b\u524d SSE \u7cfb\u5217\u6587\u7ae0\u91cc\u8bb2\u7684\u4e00\u6837\uff0cSSE \u672c\u8eab\u53ea\u652f\u6301\u670d\u52a1\u7aef\u5411\u5ba2\u6237\u7aef\u5355\u5411\u63a8\u9001\uff0c\u6240\u4ee5 MCP \u7684 SSE Transport \u5b9e\u9645\u4e0a\u662f\u4e24\u6761\u8def\uff1a<\/p>\n\n\n\n<p>Client \u5148\u901a\u8fc7 GET \u8bf7\u6c42\u5efa\u7acb SSE \u957f\u8fde\u63a5\uff0cServer \u901a\u8fc7\u8fd9\u6761\u8fde\u63a5\u63a8\u9001\u54cd\u5e94\u548c\u901a\u77e5\u3002Client \u53d1\u8bf7\u6c42\u65f6\u8d70\u5355\u72ec\u7684 HTTP POST\u3002<\/p>\n\n\n\n<p>\u4f18\u70b9\u662f\u57fa\u4e8e\u6807\u51c6 HTTP\uff0c\u7a7f\u8d8a\u9632\u706b\u5899\u548c\u53cd\u5411\u4ee3\u7406\u65b9\u4fbf\uff0cSSE \u81ea\u5e26\u65ad\u7ebf\u91cd\u8fde\u673a\u5236\u3002\u7f3a\u70b9\u662f Client \u2192 Server \u65b9\u5411\u4e0d\u662f\u6d41\u5f0f\u7684\uff0c\u6bcf\u6b21\u8981\u53d1\u4e00\u4e2a\u5b8c\u6574\u7684 HTTP POST \u8bf7\u6c42\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-streamable-http\">3. Streamable HTTP\uff1a\u53cc\u5411\u6d41\u5f0f\u901a\u4fe1<\/h3>\n\n\n\n<p>Streamable HTTP \u662f MCP \u534f\u8bae\u8f83\u65b0\u63a8\u51fa\u7684\u4f20\u8f93\u65b9\u5f0f\uff0c\u7b80\u5316\u4e86 SSE Transport \u7684\u53cc\u901a\u9053\u67b6\u6784\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Client \u7684\u8bf7\u6c42\u901a\u8fc7 HTTP POST \u53d1\u9001\uff0c\u54cd\u5e94\u4f53\u53ef\u4ee5\u662f\u666e\u901a JSON\uff08\u7b80\u5355\u8bf7\u6c42\uff09\uff0c\u4e5f\u53ef\u4ee5\u662f SSE \u6d41\uff08\u9700\u8981\u6d41\u5f0f\u8fd4\u56de\u6216\u670d\u52a1\u5668\u4e3b\u52a8\u63a8\u9001\u65f6\uff09<\/li>\n\n\n\n<li>\u4e0d\u9700\u8981\u9884\u5148\u5efa\u7acb SSE \u957f\u8fde\u63a5\uff0c\u6309\u9700\u5efa\u7acb\u8fde\u63a5<\/li>\n\n\n\n<li>Server \u53ef\u4ee5\u5728\u54cd\u5e94\u5934\u91cc\u8fd4\u56de Session ID\uff0cClient \u540e\u7eed\u8bf7\u6c42\u5e26\u4e0a\u8fd9\u4e2a ID \u6765\u5173\u8054\u4f1a\u8bdd<\/li>\n<\/ul>\n\n\n\n<p>\u76f8\u6bd4 SSE Transport\uff0cStreamable HTTP \u66f4\u7b80\u6d01\u2014\u2014\u4e0d\u9700\u8981\u7ef4\u62a4\u4e00\u4e2a\u989d\u5916\u7684 SSE \u957f\u8fde\u63a5\u901a\u9053\uff0c\u6bcf\u4e2a POST \u8bf7\u6c42\u7684\u54cd\u5e94\u672c\u8eab\u5c31\u53ef\u4ee5\u662f\u6d41\u5f0f\u7684\u3002<\/p>\n\n\n\n<p>\u8fd9\u662f MCP \u534f\u8bae\u76ee\u524d\u4e3b\u63a8\u7684\u8fdc\u7a0b\u4f20\u8f93\u65b9\u5f0f\uff0c\u9002\u5408\u4f01\u4e1a\u7ea7\u751f\u4ea7\u73af\u5883\u90e8\u7f72\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"spring-ai-sdk\">Spring AI \u4e0e\u5b98\u65b9 SDK \u7684\u5173\u7cfb<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1\">1. \u4e00\u5f20\u56fe\u770b\u6e05\u5c42\u6b21<\/h3>\n\n\n\n<p>\u4f60\u7528 Spring AI \u5199\u7684 MCP Server\uff0c\u5e95\u5c42\u7684\u4f9d\u8d56\u94fe\u6761\u662f\u8fd9\u6837\u7684\uff1a<\/p>\n\n\n\n<p>\u5f00\u53d1\u8005\u76f4\u63a5\u9762\u5bf9\u7684\u90e8\u5206\u3002\u4f60\u53ea\u9700\u8981\u58f0\u660e\u5f0f\u5728 Java \u65b9\u6cd5\u4e0a\u52a0\u4e0a\u6ce8\u89e3\uff08\u5982 <code>@McpTool<\/code>\uff09\uff0c\u544a\u8bc9\u7cfb\u7edf\u201c\u8fd9\u662f\u4e00\u4e2a\u5de5\u5177\u201d\u6216\u201c\u8fd9\u662f\u4e00\u4e2a\u8d44\u6e90\u201d\u3002<\/p>\n\n\n\n<p>Spring AI MCP Starter \u5c42\u8fd9\u662f Spring \u5b98\u65b9\u63d0\u4f9b\u7684\u201c\u589e\u5f3a\u5305\u201d\u3002\u5b83\u8d1f\u8d23\u628a\u4f60\u5728\u4e0a\u5c42\u5199\u7684\u6ce8\u89e3\u201c\u7ffb\u8bd1\u201d\u6210\u673a\u5668\u80fd\u61c2\u7684\u4e1c\u897f\u3002<strong>\u81ea\u52a8\u626b\u63cf<\/strong>\u53d1\u73b0\u4f60\u7684 <code>@McpTool<\/code>\u3002\u81ea\u52a8\u628a\u4f60\u7684 Java \u65b9\u6cd5\u53c2\u6570\u751f\u6210\u4e3a <strong>JSON Schema<\/strong>\uff08\u8ba9 AI \u77e5\u9053\u600e\u4e48\u8c03\u7528\u4f60\uff09\u3002\u4f60\u7684\u670d\u52a1\u968f Spring Boot <strong>\u751f\u547d\u5468\u671f\u7ed1\u5b9a<\/strong>\uff0c\u4e0d\u7528\u624b\u52a8\u7ba1\u7406\u8fdb\u7a0b<\/p>\n\n\n\n<p>MCP Java SDK \u5c42\u8fd9\u662f\u5b98\u65b9\u7684\u5e95\u5c42\u5e93 (<code>io.modelcontextprotocol.sdk<\/code>)\u3002Spring AI \u5176\u5b9e\u662f\u8c03\u7528\u4e86\u8fd9\u4e00\u5c42\u7684 API \u6765\u5e72\u6d3b\u7684\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\n<ul class=\"wp-block-list\">\n<li><code>McpServer<\/code> \/ <code>McpClient<\/code>\uff1a\u5904\u7406\u670d\u52a1\u7aef\u6216\u5ba2\u6237\u7aef\u903b\u8f91\u3002<\/li>\n\n\n\n<li><code>Transport<\/code>\uff1a\u5904\u7406\u5177\u4f53\u7684\u4f20\u8f93\u65b9\u5f0f\uff08\u6bd4\u5982\u7b2c\u4e00\u5f20\u56fe\u91cc\u7684 <strong>Stdio<\/strong>\uff0c\u6216\u8005\u8fd9\u91cc\u7684 <strong>SSE<\/strong>\u3001<strong>HTTP<\/strong>\uff09\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u5e95\u5c42\u901a\u4fe1\u5c42\u91cc\u9762\uff0c\u8fd9\u662f\u7269\u7406\u5c42\u9762\u7684\u6570\u636e\u4ea4\u6362\u3002\u6240\u6709\u7684\u5bf9\u8c61\u6700\u7ec8\u90fd\u88ab<strong>\u5e8f\u5217\u5316<\/strong>\u6210\u4e86 <strong>JSON-RPC 2.0 \u6d88\u606f<\/strong>\u3002 <code>stdin<\/code>\/<code>stdout<\/code> \u91cc\u4f20\u8f93\u7684\u5177\u4f53\u6570\u636e\u683c\u5f0f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-spring-ai-sdk\">2. Spring AI \u5728 SDK \u4e4b\u4e0a\u505a\u4e86\u4ec0\u4e48<\/h3>\n\n\n\n<p>\u5177\u4f53\u6765\u8bf4\uff0cSpring AI MCP Starter \u5728\u5b98\u65b9 SDK \u4e4b\u4e0a\u5c01\u88c5\u4e86\u4e09\u4ef6\u4e8b\uff1a<\/p>\n\n\n\n<p><strong>\u6ce8\u89e3\u9a71\u52a8\u7684\u5de5\u5177\u6ce8\u518c<\/strong>\uff1a\u626b\u63cf\u6240\u6709\u6807\u6ce8\u4e86 <code>@McpTool<\/code> \/ <code>@McpResource<\/code> \/ <code>@McpPrompt<\/code> \u7684 Bean \u548c\u65b9\u6cd5\uff0c\u901a\u8fc7\u53cd\u5c04\u8bfb\u53d6\u65b9\u6cd5\u7b7e\u540d\u548c\u6ce8\u89e3\u5c5e\u6027\uff0c\u81ea\u52a8\u8f6c\u6362\u4e3a SDK \u7684 <code>McpSchema.Tool<\/code> \/ <code>McpSchema.Resource<\/code> \/ <code>McpSchema.Prompt<\/code> \u5bf9\u8c61\uff0c\u518d\u8c03\u7528 SDK \u7684 Builder API \u6ce8\u518c\u5230 Server \u4e0a\u3002<\/p>\n\n\n\n<p><strong>\u81ea\u52a8\u914d\u7f6e Transport<\/strong>\uff1a\u6839\u636e\u4f60\u5f15\u5165\u7684 Starter \u4f9d\u8d56\u81ea\u52a8\u9009\u62e9 Transport \u5b9e\u73b0\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u5f15\u5165\u7684 Starter<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u81ea\u52a8\u914d\u7f6e\u7684 Transport<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>spring-ai-starter-mcp-server<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>StdioServerTransportProvider<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>spring-ai-starter-mcp-server-webmvc<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>HttpServletSseServerTransportProvider<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>spring-ai-starter-mcp-server-webflux<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">WebFlux \u7248 Transport<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Spring Boot \u751f\u547d\u5468\u671f\u7ba1\u7406<\/strong>\uff1aServer \u7684\u542f\u52a8\u548c\u5173\u95ed\u4e0e Spring \u5bb9\u5668\u7684\u751f\u547d\u5468\u671f\u7ed1\u5b9a\u2014\u2014\u5bb9\u5668\u542f\u52a8\u65f6\u81ea\u52a8\u6784\u5efa\u5e76\u542f\u52a8 MCP Server\uff0c\u5bb9\u5668\u5173\u95ed\u65f6\u81ea\u52a8\u4f18\u96c5\u5173\u95ed Server\u3002\u4f60\u4e0d\u9700\u8981\u624b\u52a8\u5199 <code>server.build()<\/code> \u548c <code>server.closeGracefully()<\/code>\u3002<\/p>\n\n\n\n<p>\u5927\u591a\u6570 Java \u9879\u76ee\u76f4\u63a5\u7528 Spring AI \u5c31\u591f\u4e86\u2014\u2014\u7701\u4e8b\uff0c\u7ea6\u5b9a\u4f18\u4e8e\u914d\u7f6e\uff0c\u548c Spring Boot \u751f\u6001\u65e0\u7f1d\u96c6\u6210\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0d\u8981\u628a\u6240\u6709\u6d3b\u513f\u90fd\u4e22\u7ed9\u201cTools\uff08\u5de5\u5177\uff09\u201d\u53bb\u5e72\uff0c\u8981\u5b66\u4f1a\u7528\u201cResources\uff08\u8d44\u6e90\uff09\u201d\u548c\u201cPrompts\uff08\u63d0\u793a\u8bcd\uff09\u201d\u3002 \u6211\u7528\u901a\u4fd7\u7684 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-1905","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1905"}],"version-history":[{"count":3,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1905\/revisions"}],"predecessor-version":[{"id":1912,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1905\/revisions\/1912"}],"wp:attachment":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}