{"id":115,"date":"2026-03-22T20:17:15","date_gmt":"2026-03-22T12:17:15","guid":{"rendered":"https:\/\/fisssssh.top\/index.php\/2026\/05\/27\/mcp-spring-ai-guide\/"},"modified":"2026-03-22T20:17:15","modified_gmt":"2026-03-22T12:17:15","slug":"mcp-spring-ai-guide","status":"publish","type":"post","link":"https:\/\/fisssssh.top\/index.php\/2026\/03\/22\/mcp-spring-ai-guide\/","title":{"rendered":"MCP \u534f\u8bae\u5165\u95e8\u4e0e\u5b9e\u8df5 &#8211; \u57fa\u4e8e Spring AI \u7684\u4ee3\u7801\u77e5\u8bc6\u5e93"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u5728\u505a CodeStyle\uff08\u7801\u8702\uff09\u9879\u76ee\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u6df1\u5ea6\u7814\u7a76\u4e86 MCP\uff08Model Context Protocol\uff09\u534f\u8bae\u53ca\u5176\u5728 Spring AI \u4e2d\u7684\u5b9e\u73b0\u3002MCP \u6b63\u5728\u5feb\u901f\u6210\u4e3a AI \u5de5\u5177\u751f\u6001\u7684\u6807\u51c6\u5316\u534f\u8bae\uff0c\u4f46\u56fd\u5185\u76f8\u5173\u7684\u6df1\u5165\u6587\u7ae0\u8fd8\u4e0d\u591a\u3002\u672c\u6587\u4ece\u534f\u8bae\u539f\u7406\u3001Spring AI \u5b9e\u73b0\u3001\u5230 CodeStyle \u7684\u5b9e\u9645\u67b6\u6784\uff0c\u7cfb\u7edf\u6027\u5730\u8bb0\u5f55\u8fd9\u4e00\u8def\u7684\u5b66\u4e60\u548c\u5b9e\u8df5\u7ecf\u9a8c\u3002<\/p>\n\n\n\n<h2 id=\"\u4e00-mcp-\u534f\u8bae\u6df1\u5ea6\u89e3\u6790\" class=\"wp-block-heading\">\u4e00\u3001MCP \u534f\u8bae\u6df1\u5ea6\u89e3\u6790<\/h2>\n\n\n\n<h3 id=\"1-1-\u4e3a\u4ec0\u4e48\u9700\u8981-mcp\" class=\"wp-block-heading\">1.1 \u4e3a\u4ec0\u4e48\u9700\u8981 MCP\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 MCP \u51fa\u73b0\u4e4b\u524d\uff0cAI \u6a21\u578b\u4e0e\u5916\u90e8\u5de5\u5177\u7684\u96c6\u6210\u5904\u4e8e&#8221;\u767e\u82b1\u9f50\u653e\u3001\u5404\u81ea\u4e3a\u6218&#8221;\u7684\u72b6\u6001\u3002OpenAI \u6709 Function Calling\u3001Anthropic \u6709 Tool Use\u3001Google \u6709 Function Declaration\u2014\u2014\u6bcf\u79cd\u6a21\u578b\u90fd\u6709\u81ea\u5df1\u7684\u4e00\u5957\u5de5\u5177\u8c03\u7528\u534f\u8bae\u3002\u5f00\u53d1\u8005\u5982\u679c\u8981\u652f\u6301\u591a\u79cd\u6a21\u578b\uff0c\u9700\u8981\u5199\u591a\u5957\u9002\u914d\u4ee3\u7801\u3002\u66f4\u9ebb\u70e6\u7684\u662f\uff0c\u5de5\u5177\u63d0\u4f9b\u65b9\uff08\u5982\u6570\u636e\u5e93\u3001API \u670d\u52a1\uff09\u4e5f\u8981\u4e3a\u6bcf\u79cd\u6a21\u578b\u9002\u914d\u4e00\u5957\u63a5\u53e3\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MCP \u89e3\u51b3\u7684\u5c31\u662f\u8fd9\u4e2a\u95ee\u9898\uff1a<strong>\u5b9a\u4e49\u4e00\u5957\u901a\u7528\u7684\u3001\u6a21\u578b\u65e0\u5173\u7684\u3001\u5f00\u653e\u7684\u5de5\u5177\u4ea4\u4e92\u6807\u51c6<\/strong>\u3002\u7c7b\u4f3c\u4e8e USB \u534f\u8bae\u4e4b\u4e8e\u5916\u8bbe\uff0cMCP \u8ba9\u4efb\u4f55 AI \u6a21\u578b\u90fd\u80fd&#8221;\u5373\u63d2\u5373\u7528&#8221;\u5730\u4f7f\u7528\u4efb\u4f55 MCP \u517c\u5bb9\u7684\u5de5\u5177\uff0c\u628a\u751f\u6001\u63a5\u5165\u7684 N\u00d7M \u95ee\u9898\u964d\u7ef4\u6210\u4e86 N+M\u3002<\/p>\n\n\n\n<h3 id=\"1-2-\u534f\u8bae\u67b6\u6784\u4e0e\u4e09\u5927\u539f\u8bed\" class=\"wp-block-heading\">1.2 \u534f\u8bae\u67b6\u6784\u4e0e\u4e09\u5927\u539f\u8bed<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">MCP \u91c7\u7528\u7ecf\u5178\u7684 <strong>Client-Server<\/strong> \u67b6\u6784\uff0c\u57fa\u4e8e JSON-RPC 2.0 \u901a\u4fe1\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MCP Client (AI IDE \/ Host)  &lt;-- JSON-RPC 2.0 --&gt;  MCP Server (Tool Provider)\n  \u4f8b\u5982\uff1aCursor\u3001Claude Desktop             \u4f8b\u5982\uff1a\u6570\u636e\u5e93\u5de5\u5177\u3001\u6587\u4ef6\u7cfb\u7edf\u3001\n       Cherry Studio\u3001Windsurf                  API \u7f51\u5173\u3001\u4ee3\u7801\u6a21\u677f\u5e93<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">MCP \u534f\u8bae\u5b9a\u4e49\u4e86\u4e09\u4e2a\u6838\u5fc3\u539f\u8bed\uff08Primitives\uff09\uff0c\u6bcf\u4e2a\u90fd\u662f\u4e00\u4e2a\u72ec\u7acb\u7684 JSON-RPC \u65b9\u6cd5\u65cf\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u539f\u8bed<\/th><th>\u65b9\u5411<\/th><th>\u5178\u578b\u65b9\u6cd5<\/th><th>\u7528\u9014<\/th><\/tr><\/thead><tbody><tr><td><strong>Tools<\/strong><\/td><td>Client\u2192Server<\/td><td>tools\/list, tools\/call<\/td><td>AI\u8c03\u7528\u5916\u90e8\u5de5\u5177\u6267\u884c\u64cd\u4f5c\uff08\u67e5\u6570\u636e\u5e93\u3001\u8c03API\u3001\u751f\u6210\u4ee3\u7801\uff09<\/td><\/tr><tr><td><strong>Resources<\/strong><\/td><td>Client\u2192Server<\/td><td>resources\/list, resources\/read<\/td><td>AI\u8bfb\u53d6\u5916\u90e8\u6570\u636e\u6e90\uff08\u6587\u4ef6\u5185\u5bb9\u3001\u914d\u7f6e\u3001\u6587\u6863\uff09<\/td><\/tr><tr><td><strong>Prompts<\/strong><\/td><td>Server\u2192Client<\/td><td>prompts\/list, prompts\/get<\/td><td>\u670d\u52a1\u7aef\u63d0\u4f9b\u9884\u7f6e\u63d0\u793a\u8bcd\u6a21\u677f\uff0c\u6307\u5bfcAI\u5982\u4f55\u4f7f\u7528\u5de5\u5177<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 id=\"1-3-\u4f20\u8f93\u5c42-stdio-vs-http\" class=\"wp-block-heading\">1.3 \u4f20\u8f93\u5c42\uff1astdio vs HTTP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">MCP \u652f\u6301\u4e24\u79cd\u4f20\u8f93\u65b9\u5f0f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>stdio\uff08\u6807\u51c6\u8f93\u5165\u8f93\u51fa\uff09<\/strong>\uff1aMCP Server \u4f5c\u4e3a\u5b50\u8fdb\u7a0b\u542f\u52a8\uff0c\u901a\u8fc7 stdin\/stdout \u4e0e Client \u901a\u4fe1\u3002\u4f18\u52bf\u662f\u96f6\u7f51\u7edc\u914d\u7f6e\u3001\u5929\u7136\u9694\u79bb\uff0c\u9002\u5408\u672c\u5730\u5de5\u5177\u3002IDE\uff08Cursor\u3001Windsurf\uff09\u666e\u904d\u91c7\u7528\u6b64\u65b9\u5f0f\u3002<\/li>\n<li><strong>HTTP + SSE<\/strong>\uff1aMCP Server \u4f5c\u4e3a HTTP \u670d\u52a1\u8fd0\u884c\uff0cClient \u901a\u8fc7\u7f51\u7edc\u8fde\u63a5\u3002\u9002\u5408\u8fdc\u7a0b\u5de5\u5177\u6216\u9700\u8981\u6c34\u5e73\u6269\u5c55\u7684\u573a\u666f\u3002CodeStyle \u7684\u8fdc\u7a0b\u68c0\u7d22\u6a21\u5f0f\u4f7f\u7528\u6b64\u65b9\u5f0f\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u4e2a\u5178\u578b\u7684 tools\/list JSON-RPC \u4ea4\u4e92\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Request (Client -&gt; Server)\n{\n  \"jsonrpc\": \"2.0\", \"id\": 1,\n  \"method\": \"tools\/list\", \"params\": {}\n}\n\n\/\/ Response (Server -&gt; Client)\n{\n  \"jsonrpc\": \"2.0\", \"id\": 1,\n  \"result\": {\n    \"tools\": [{\n      \"name\": \"codestyleSearch\",\n      \"description\": \"\u641c\u7d22\u4ee3\u7801\u6a21\u677f\u5e93\uff0c\u5339\u914d\u6700\u4f73\u5b9e\u8df5\",\n      \"inputSchema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"keyword\": { \"type\": \"string\", \"description\": \"\u641c\u7d22\u5173\u952e\u8bcd\" },\n          \"language\": { \"type\": \"string\", \"description\": \"\u7f16\u7a0b\u8bed\u8a00\" }\n        }\n      }\n    }]\n  }\n}<\/code><\/pre>\n\n\n\n<h2 id=\"\u4e8c-spring-ai-\u7684-mcp-\u5b9e\u73b0\" class=\"wp-block-heading\">\u4e8c\u3001Spring AI \u7684 MCP \u5b9e\u73b0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring AI \u4ece 2.0 \u7248\u672c\u5f00\u59cb\u6df1\u5ea6\u96c6\u6210 MCP\uff0c\u63d0\u4f9b\u5f00\u7bb1\u5373\u7528\u7684 <code>McpServer<\/code> \u548c <code>McpClient<\/code>\u3002<\/p>\n\n\n\n<h3 id=\"2-1-tool-\u6ce8\u89e3\u9a71\u52a8\u7684\u5de5\u5177\u66b4\u9732\" class=\"wp-block-heading\">2.1 @Tool \u6ce8\u89e3\u9a71\u52a8\u7684\u5de5\u5177\u66b4\u9732<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Spring AI MCP Server \u7684\u6838\u5fc3\u8bbe\u8ba1\u662f<strong>\u6ce8\u89e3\u9a71\u52a8<\/strong>\u3002\u5f00\u53d1\u8005\u53ea\u9700\u5728\u65b9\u6cd5\u4e0a\u6dfb\u52a0 <code>@Tool<\/code> \u6ce8\u89e3\uff0c\u6846\u67b6\u4f1a\u81ea\u52a8\u5b8c\u6210\uff1a\u626b\u63cf\u6ce8\u89e3 \u2192 \u63d0\u53d6\u65b9\u6cd5\u7b7e\u540d\u548c\u53c2\u6570\u7c7b\u578b \u2192 \u751f\u6210 JSON Schema \u2192 \u6ce8\u518c\u4e3a MCP Tool \u2192 \u66b4\u9732\u7ed9 MCP Client\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Component\npublic class CodestyleTools {\n\n    @Tool(description = \"\u641c\u7d22\u4ee3\u7801\u6a21\u677f\u5e93\uff0c\u5339\u914d\u6700\u4f73\u5b9e\u8df5\u7684\u4ee3\u7801\u6a21\u677f\")\n    public List&lt;TemplateResult&gt; codestyleSearch(\n        @ToolParam(description = \"\u641c\u7d22\u5173\u952e\u8bcd\uff0c\u5982CRUD\u3001\u5206\u9875\u67e5\u8be2\") String keyword,\n        @ToolParam(description = \"\u7f16\u7a0b\u8bed\u8a00\uff1aJava, TypeScript, Python\u7b49\") String language\n    ) {\n        return searchService.search(keyword, language);\n    }\n\n    @Tool(description = \"\u6839\u636e\u6a21\u677f\u8def\u5f84\u83b7\u53d6\u5b8c\u6574\u6a21\u677f\u5185\u5bb9\")\n    public String getTemplateByPath(\n        @ToolParam(description = \"\u6a21\u677f\u8def\u5f84\uff0c\u5982 continew\/CRUD\/1.0.0\/backend\/Controller.ftl\")\n        String path\n    ) {\n        return templateService.loadTemplate(path);\n    }\n\n    @Tool(description = \"\u5206\u6790\u9879\u76ee\u4ee3\u7801\u7ed3\u6784\")\n    public ProjectAnalysis analyzeProject(\n        @ToolParam(description = \"\u9879\u76ee\u6839\u76ee\u5f55\u8def\u5f84\") String projectPath\n    ) {\n        return analyzer.analyze(projectPath);\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">MCP Server \u542f\u52a8\u540e\uff0cClient \u81ea\u52a8\u901a\u8fc7 <code>tools\/list<\/code> \u53d1\u73b0\u8fd9\u4e9b\u5de5\u5177\u3002\u5f53\u7528\u6237\u5728 Cursor \u4e2d\u8f93\u5165&#8221;\u5e2e\u6211\u5199\u7528\u6237\u7ba1\u7406CRUD&#8221;\u65f6\uff0cAI \u81ea\u52a8\u8c03\u7528 <code>codestyleSearch<\/code> \u83b7\u53d6\u6a21\u677f\uff0c\u518d\u6839\u636e\u6a21\u677f\u751f\u6210\u4ee3\u7801\u3002\u6574\u4e2a\u8fc7\u7a0b\u7528\u6237\u65e0\u611f\uff0c\u4f46\u751f\u6210\u7684\u4ee3\u7801\u98ce\u683c\u5b8c\u5168\u7b26\u5408\u56e2\u961f\u89c4\u8303\u3002<\/p>\n\n\n\n<h3 id=\"2-2-tool-group-\u6309\u9700\u66b4\u9732-\u8282\u7701-token\" class=\"wp-block-heading\">2.2 Tool Group\uff1a\u6309\u9700\u66b4\u9732\uff0c\u8282\u7701 Token<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6bcf\u4e2a MCP \u5de5\u5177\u7684 Schema\uff08\u540d\u79f0\u3001\u63cf\u8ff0\u3001\u53c2\u6570\u7c7b\u578b\uff09\u90fd\u4f1a\u5360\u7528 AI \u7684\u4e0a\u4e0b\u6587\u7a97\u53e3 token\u3002\u5982\u679c\u66b4\u97326\u4e2a\u5de5\u5177\uff0c\u6bcf\u4e2a\u67093-5\u4e2a\u53c2\u6570\uff0c\u5de5\u5177\u63cf\u8ff0\u5c31\u53ef\u80fd\u53602000+ tokens\u3002\u901a\u8fc7 <code>codestyle.tool-group<\/code> \u914d\u7f6e\u5b9e\u73b0\u6309\u9700\u66b4\u9732\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-Dcodestyle.tool-group=all<\/code>\uff08\u9ed8\u8ba4\uff09\uff1a\u66b4\u9732\u5168\u90e8\u5de5\u5177\uff085-6\u4e2a\uff09\uff0c\u529f\u80fd\u6700\u5168<\/li>\n<li><code>-Dcodestyle.tool-group=analyze<\/code>\uff1a\u4ec5\u66b4\u9732\u4ee3\u7801\u5206\u6790\u5de5\u5177\uff082\u4e2a\uff09\uff0c\u8282\u7701\u7ea660%\u7684token<\/li>\n<li><code>-Dcodestyle.tool-group=template<\/code>\uff1a\u4ec5\u66b4\u9732\u6a21\u677f\u76f8\u5173\u5de5\u5177\uff083\u4e2a\uff09<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u662f MCP \u5b9e\u8df5\u4e2d\u5bb9\u6613\u88ab\u5ffd\u7565\u4f46\u975e\u5e38\u91cd\u8981\u7684\u4f18\u5316\u2014\u2014\u4e0d\u662f\u5de5\u5177\u8d8a\u591a\u8d8a\u597d\uff0c\u800c\u662f\u8d8a\u7cbe\u51c6\u8d8a\u597d\u3002<\/p>\n\n\n\n<h2 id=\"\u4e09-codestyle-\u7cfb\u7edf\u67b6\u6784\u8bbe\u8ba1\" class=\"wp-block-heading\">\u4e09\u3001CodeStyle \u7cfb\u7edf\u67b6\u6784\u8bbe\u8ba1<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CodeStyle \u7684\u5b8c\u6574\u7cfb\u7edf\u67b6\u6784\u5206\u4e3a\u56db\u5c42\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5c42\u4e00\uff1aAI IDE \u5c42\n  Cursor \/ Windsurf \/ Trae \/ Claude Desktop\n  \u901a\u8fc7 MCP \u534f\u8bae\u6216 Claude Skill \u8fde\u63a5\n------------------------------------------------------\n\u5c42\u4e8c\uff1aMCP Server \u5c42\n  mcp-codestyle-server (Spring AI MCP)\n  +-- Lucene \u4e2d\u6587\u5206\u8bcd\u5168\u6587\u68c0\u7d22\n  +-- \u53cc\u6a21\u5f0f\u68c0\u7d22\uff08\u672c\u5730Lucene \/ \u8fdc\u7a0bHTTP API\uff09\n  +-- SHA256 \u589e\u91cf\u540c\u6b65\n  +-- Maven \u98ce\u683c\u591a\u7248\u672c\u76ee\u5f55\n------------------------------------------------------\n\u5c42\u4e09\uff1aCodeStyle \u7ba1\u7406\u540e\u53f0\n  codestyle-admin (Spring Boot + Vue 3)\n  +-- \u68c0\u7d22\u63d2\u4ef6 (Elasticsearch RAG)\n  +-- Wiki \u63d2\u4ef6 (Markdown \u77e5\u8bc6\u5e93)\n  +-- \u4ee3\u7801\u751f\u6210\u5668 (FreeMarker \u6a21\u677f\u5f15\u64ce)\n  +-- \u591a\u79df\u6237\u7ba1\u7406 + \u4efb\u52a1\u8c03\u5ea6 (XXL-Job)\n------------------------------------------------------\n\u5c42\u56db\uff1a\u6570\u636e\u5b58\u50a8\u5c42\n  MySQL (\u4e1a\u52a1\u6570\u636e) \/ Redis (\u70ed\u7f13\u5b58)\n  Elasticsearch (\u5168\u6587\u68c0\u7d22)\n  codestyle-repository (Git \u6a21\u677f\u4ed3\u5e93)<\/code><\/pre>\n\n\n\n<h3 id=\"3-1-\u4e24\u9636\u6bb5\u6e10\u8fdb\u5f0f-rag-\u68c0\u7d22\" class=\"wp-block-heading\">3.1 \u4e24\u9636\u6bb5\u6e10\u8fdb\u5f0f RAG \u68c0\u7d22<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u662f CodeStyle \u6700\u6838\u5fc3\u7684\u8bbe\u8ba1\u2014\u2014<strong>\u4e24\u9636\u6bb5\u6e10\u8fdb\u5f0f\u53ec\u56de\u7b56\u7565<\/strong>\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u9636\u6bb5\u4e00\uff1a\u8f7b\u91cf\u9884\u89c8<\/strong>\u3002\u7528\u6237\u641c\u7d22\u65f6\uff0c\u7cfb\u7edf\u4e0d\u7acb\u5373\u52a0\u8f7d\u6240\u6709\u5339\u914d\u6a21\u677f\u7684\u5b8c\u6574\u5185\u5bb9\u3002\u800c\u662f\u53ea\u67e5\u8be2 meta.json \u7d22\u5f15\u6587\u4ef6\uff08\u8f7b\u91cf\u7ea7\u5143\u6570\u636e\u6c47\u603b\uff09\uff0c\u8fd4\u56de\u6bcf\u4e2a\u6a21\u677f\u7684 description\u3001\u5206\u7c7b\u3001\u6807\u7b7e\u7b49\u6458\u8981\u4fe1\u606f\u3002\u4e00\u6b21\u641c\u7d22\u5339\u914d15\u4e2a\u6a21\u677f\uff0c\u4ec5\u6d88\u8017\u51e0\u767e\u4e2a token\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u9636\u6bb5\u4e8c\uff1a\u6309\u9700\u52a0\u8f7d<\/strong>\u3002\u7528\u6237\/AI \u4ece\u9884\u89c8\u5217\u8868\u4e2d\u9009\u62e9\u611f\u5174\u8da3\u7684\u6a21\u677f\u540e\uff0c\u901a\u8fc7 <code>getTemplateByPath<\/code> \u52a0\u8f7d\u5b8c\u6574\u5185\u5bb9\u3002\u5982\u679c\u672c\u5730\u7f13\u5b58\u4e0d\u5b58\u5728\uff08\u9996\u6b21\u4f7f\u7528\uff09\uff0c\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u540c\u6b65\u4e0b\u8f7d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u4e2a\u8bbe\u8ba1\u7684\u6536\u76ca\u975e\u5e38\u663e\u8457\uff1a<strong>\u51cf\u5c11\u7ea680%\u7684\u65e0\u6548\u4e0a\u4e0b\u6587\u6d88\u8017<\/strong>\u3002\u5047\u8bbe\u641c\u7d22&#8221;CRUD\u6a21\u677f&#8221;\u5339\u914d15\u4e2a\u7ed3\u679c\uff0c\u6bcf\u4e2a\u5b8c\u6574\u6a21\u677f\u7ea62000 tokens\uff0c\u4e00\u6b21\u6027\u52a0\u8f7d\u5c31\u662f30000 tokens\u2014\u2014\u52a0\u4e0a\u5bf9\u8bdd\u5386\u53f2\u548c\u7cfb\u7edf\u63d0\u793a\u8bcd\uff0c\u5f88\u5bb9\u6613\u8d85\u51fa\u6a21\u578b\u4e0a\u4e0b\u6587\u7a97\u53e3\u3002\u4e24\u9636\u6bb5\u7b56\u7565\u53ea\u9700\u7ea6500 tokens\u5b8c\u6210\u5339\u914d\u548c\u7b5b\u9009\uff0c\u518d\u52a0\u8f7d1-2\u4e2a\u5b8c\u6574\u6a21\u677f\uff08\u7ea64000 tokens\uff09\u3002<\/p>\n\n\n\n<h3 id=\"3-2-\u53cc\u6a21\u5f0f\u68c0\u7d22-lucene-\u672c\u5730-vs-es-\u8fdc\u7a0b\" class=\"wp-block-heading\">3.2 \u53cc\u6a21\u5f0f\u68c0\u7d22\uff1aLucene \u672c\u5730 vs ES \u8fdc\u7a0b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CodeStyle MCP Server \u652f\u6301\u4e24\u79cd\u68c0\u7d22\u6a21\u5f0f\uff0c\u901a\u8fc7\u914d\u7f6e\u5207\u6362\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7ef4\u5ea6<\/th><th>\u672c\u5730 Lucene \u6a21\u5f0f<\/th><th>\u8fdc\u7a0b Open API \u6a21\u5f0f<\/th><\/tr><\/thead><tbody><tr><td>\u9002\u7528\u573a\u666f<\/td><td>\u4e2a\u4eba\u5f00\u53d1\u8005\u3001\u79bb\u7ebf\u73af\u5883<\/td><td>\u56e2\u961f\/\u4f01\u4e1a\u3001\u591a\u7528\u6237\u5171\u4eab<\/td><\/tr><tr><td>\u5206\u8bcd\u5668<\/td><td>SmartChineseAnalyzer<\/td><td>Elasticsearch ik_max_word<\/td><\/tr><tr><td>\u90e8\u7f72\u4f9d\u8d56<\/td><td>\u96f6\u4f9d\u8d56\uff0cjar \u5185\u7f6e\u7d22\u5f15<\/td><td>\u9700\u90e8\u7f72\u7ba1\u7406\u540e\u53f0<\/td><\/tr><tr><td>\u6570\u636e\u5b9e\u65f6\u6027<\/td><td>\u5b9a\u65f6SHA256\u589e\u91cf\u540c\u6b65<\/td><td>\u5b9e\u65f6\u67e5\u8be2\u540e\u7aef ES<\/td><\/tr><tr><td>\u8ba4\u8bc1\u65b9\u5f0f<\/td><td>\u65e0\u9700\u8ba4\u8bc1<\/td><td>AccessKey + SecretKey HMAC\u7b7e\u540d<\/td><\/tr><tr><td>\u542f\u52a8\u65f6\u95f4<\/td><td>\u51b7\u542f\u52a83-5\u79d2\uff08\u5efa\u7d22\u5f15\uff09<\/td><td>\u5373\u65f6\uff08\u65e0\u672c\u5730\u7d22\u5f15\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u672c\u5730 Lucene \u6a21\u5f0f\u4f7f\u7528 SmartChineseAnalyzer\uff08\u4e2d\u6587\u667a\u80fd\u5206\u8bcd\u5668\uff09\u3002\u641c\u7d22&#8221;\u5206\u9875\u67e5\u8be2\u63a5\u53e3&#8221;\u7684\u5206\u8bcd\u7ed3\u679c\u662f [&#8220;\u5206\u9875&#8221;, &#8220;\u67e5\u8be2&#8221;, &#8220;\u63a5\u53e3&#8221;]\uff0c\u800c\u975e\u9010\u5b57\u62c6\u5206\u3002\u7d22\u5f15\u5b58\u50a8\u5728 mcp-cache\/ \u76ee\u5f55\uff0c\u9996\u6b21\u542f\u52a8\u4ece\u8fdc\u7a0b\u62c9\u53d6\u6a21\u677f\u5efa\u7d22\u5f15\uff0c\u4e4b\u540e\u4ec5\u505a SHA256 \u589e\u91cf\u66f4\u65b0\u3002<\/p>\n\n\n\n<h3 id=\"3-3-sha256-\u589e\u91cf\u540c\u6b65\u4e0e\u591a\u7248\u672c\u5171\u5b58\" class=\"wp-block-heading\">3.3 SHA256 \u589e\u91cf\u540c\u6b65\u4e0e\u591a\u7248\u672c\u5171\u5b58<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6a21\u677f\u4ed3\u5e93\u6301\u7eed\u8fed\u4ee3\uff0cMCP Server \u9700\u4fdd\u6301\u672c\u5730\u7f13\u5b58\u540c\u6b65\u3002\u589e\u91cf\u66f4\u65b0\u6d41\u7a0b\uff1a\u4e0b\u8f7d\u6700\u65b0 meta.json \u7d22\u5f15\uff08\u4ec5\u51e0KB\uff09\u2192 \u904d\u5386\u6bcf\u6761\u6a21\u677f\u6761\u76ee\uff0c\u7528\u672c\u5730\u6587\u4ef6 SHA256 \u6bd4\u5bf9 \u2192 \u4ec5\u4e0b\u8f7d\u54c8\u5e0c\u4e0d\u4e00\u81f4\u7684\u6587\u4ef6\u3002\u501f\u9274 Git \u7684 diff \u601d\u60f3\uff0c\u4f46\u66f4\u8f7b\u91cf\u2014\u2014\u4e0d\u9700\u8981\u5b8c\u6574\u7248\u672c\u63a7\u5236\uff0c\u53ea\u9700\u77e5\u9053&#8221;\u662f\u5426\u9700\u8981\u66f4\u65b0&#8221;\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u501f\u9274 Maven \u4ed3\u5e93\u7684 <code>groupId\/artifactId\/version\/<\/code> \u76ee\u5f55\u7ed3\u6784\uff0cCodeStyle \u652f\u6301\u591a\u7248\u672c\u6a21\u677f\u5171\u5b58\u3002\u4e0d\u540c\u9879\u76ee\u53ef\u5f15\u7528\u4e0d\u540c\u7248\u672c\u7684\u6a21\u677f\uff0c\u5347\u7ea7\u4e0d\u4f1a\u5f71\u54cd\u4ecd\u5728\u5f00\u53d1\u4e2d\u7684\u65e7\u9879\u76ee\u3002<\/p>\n\n\n\n<h2 id=\"\u56db-\u5b8c\u6574\u4ee3\u7801\u751f\u6210\u6d41\u7a0b\" class=\"wp-block-heading\">\u56db\u3001\u5b8c\u6574\u4ee3\u7801\u751f\u6210\u6d41\u7a0b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e00\u4e2a\u5b9e\u9645\u573a\u666f\u4e3a\u4f8b\uff0c\u5f00\u53d1\u8005\u5728 Cursor \u4e2d\u5199 Spring Boot \u9879\u76ee\uff0c\u9700\u8981\u6dfb\u52a0\u5206\u9875\u7528\u6237\u7ba1\u7406 CRUD\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5bf9\u8bdd\u89e6\u53d1<\/strong>\uff1a\u5728 Cursor \u4e2d\u8f93\u5165&#8221;\u5e2e\u6211\u5199 User \u7684\u5206\u9875\u67e5\u8be2\u63a5\u53e3\uff0c\u53c2\u8003\u56e2\u961f\u89c4\u8303&#8221;<\/li>\n<li><strong>\u5de5\u5177\u53d1\u73b0<\/strong>\uff1aCursor \u4ece tools\/list \u53d1\u73b0 <code>codestyleSearch<\/code> \u5de5\u5177\uff0c\u5176\u63cf\u8ff0\u5339\u914d\u7528\u6237\u610f\u56fe<\/li>\n<li><strong>\u6e10\u8fdb\u5f0f\u68c0\u7d22<\/strong>\uff1aMCP Server \u6267\u884c Lucene \u641c\u7d22\uff0c\u8fd4\u56de8\u4e2a\u5339\u914d\u6a21\u677f\u7684 description\uff08\u8f7b\u91cf\u9884\u89c8\uff0c\u7ea6500 tokens\uff09<\/li>\n<li><strong>AI \u7b5b\u9009<\/strong>\uff1aAI \u5224\u65ad&#8221;Spring Boot \u5206\u9875 Controller&#8221;\u6a21\u677f\u6700\u5339\u914d\uff0c\u8c03\u7528 <code>getTemplateByPath<\/code> \u83b7\u53d6 FreeMarker \u6a21\u677f<\/li>\n<li><strong>\u53d8\u91cf\u586b\u5145<\/strong>\uff1aAI \u6839\u636e\u7528\u6237\u6307\u5b9a\u7684\u7c7b\u540d User\u3001\u5305\u540d com.example.user\u3001\u8868\u540d t_user \u586b\u5145\u6a21\u677f\uff0c\u751f\u6210\u5b8c\u6574 Controller\/Service\/Mapper<\/li>\n<li><strong>\u98ce\u683c\u4e00\u81f4<\/strong>\uff1a\u751f\u6210\u7684\u4ee3\u7801\u5b8c\u5168\u7b26\u5408\u56e2\u961f\u89c4\u8303\u2014\u2014\u7edf\u4e00\u547d\u540d\u7ea6\u5b9a\u3001\u5f02\u5e38\u5904\u7406\u6a21\u5f0f\u3001\u5206\u9875\u5c01\u88c5\u65b9\u5f0f<\/li>\n<\/ol>\n\n\n\n<h2 id=\"\u4e94-\u5173\u952e\u8bbe\u8ba1\u51b3\u7b56\" class=\"wp-block-heading\">\u4e94\u3001\u5173\u952e\u8bbe\u8ba1\u51b3\u7b56<\/h2>\n\n\n\n<h3 id=\"5-1-\u4e3a\u4ec0\u4e48\u7528-lucene-\u800c\u4e0d\u662f\u5d4c\u5165\u5f0f-es\" class=\"wp-block-heading\">5.1 \u4e3a\u4ec0\u4e48\u7528 Lucene \u800c\u4e0d\u662f\u5d4c\u5165\u5f0f ES\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">MCP Server \u7684\u8bbe\u8ba1\u76ee\u6807\u662f&#8221;3\u5206\u949f\u63a5\u5165&#8221;\uff0c\u8981\u6c42\u96f6\u914d\u7f6e\u5373\u63d2\u5373\u7528\u3002Elasticsearch \u5373\u4f7f\u662f\u5d4c\u5165\u5f0f\u90e8\u7f72\u4e5f\u9700\u8981\u5806\u5185\u5b58\u914d\u7f6e\u548c\u7aef\u53e3\u7ba1\u7406\u3002Lucene \u662f\u7eaf Java \u5e93\uff0c\u53ef\u76f4\u63a5\u6253\u8fdb jar\uff0c\u542f\u52a8\u65f6\u5728\u672c\u5730\u5efa\u7d22\u5f15\uff0c\u5b8c\u5168\u79bb\u7ebf\u53ef\u7528\u3002<\/p>\n\n\n\n<h3 id=\"5-2-\u542f\u52a8\u65f6\u5feb\u901f\u5931\u8d25-fail-fast\" class=\"wp-block-heading\">5.2 \u542f\u52a8\u65f6\u5feb\u901f\u5931\u8d25\uff08Fail-Fast\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u8fdc\u7a0b\u68c0\u7d22\u6a21\u5f0f\u4e0b\uff0c\u5982\u679c AccessKey \u9519\u8bef\u6216\u540e\u7aef\u4e0d\u53ef\u8fbe\uff0c\u4e0e\u5176\u5728\u7528\u6237\u89e6\u53d1\u641c\u7d22\u65f6\u624d\u62a5\u9519\uff0c\u4e0d\u5982\u5728\u542f\u52a8\u65f6\u5c31\u9a8c\u8bc1\u3002CodeStyle \u5728 <code>ApplicationRunner<\/code> \u4e2d\u5b9e\u73b0\uff1a\u6d4b\u8bd5\u8fdc\u7a0b API \u8fde\u901a\u6027\u3001\u9a8c\u8bc1\u7b7e\u540d\u5408\u6cd5\u6027\u3001\u68c0\u67e5\u7f13\u5b58\u76ee\u5f55\u53ef\u5199\u6027\u3002\u4efb\u4f55\u5931\u8d25\u90fd\u4f1a\u5728\u542f\u52a8\u65e5\u5fd7\u4e2d\u660e\u786e\u63d0\u793a\u5e76\u963b\u6b62\u542f\u52a8\u3002<\/p>\n\n\n\n<h3 id=\"5-3-\u4e0a\u4e0b\u6587\u7a97\u53e3\u7ba1\u7406-\u6700\u5927\u7684\u6559\u8bad\" class=\"wp-block-heading\">5.3 \u4e0a\u4e0b\u6587\u7a97\u53e3\u7ba1\u7406\u2014\u2014\u6700\u5927\u7684\u6559\u8bad<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6700\u521d\u8bbe\u8ba1\u662f\u641c\u7d22\u540e\u76f4\u63a5\u8fd4\u56de\u6240\u6709\u5339\u914d\u6a21\u677f\u7684\u5b8c\u6574\u5185\u5bb9\uff0c\u4f46\u5b9e\u9645\u53d1\u73b0\u8fd9\u4f1a\u8fc5\u901f\u8017\u5c3d AI \u7684\u4e0a\u4e0b\u6587\u7a97\u53e3\u3002\u4e00\u4e2a CRUD \u6a21\u677f\u7ea6500\u884c\u4ee3\u7801\uff08\u7ea62000 tokens\uff09\uff0c\u641c\u7d22\u8fd4\u56de10\u4e2a\u5c31\u662f20000 tokens\uff0c\u52a0\u4e0a\u5f53\u524d\u4ee3\u7801\u3001\u5bf9\u8bdd\u5386\u53f2\u3001\u7cfb\u7edf\u63d0\u793a\u8bcd\uff0c\u5f88\u5bb9\u6613\u8d85\u51fa\u9650\u5236\u5bfc\u81f4 AI&#8221;\u9057\u5fd8&#8221;\u524d\u9762\u5185\u5bb9\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6539\u4e3a\u4e24\u9636\u6bb5\u6e10\u8fdb\u5f0f\u68c0\u7d22\u540e\uff0c\u4e0a\u4e0b\u6587\u6d88\u8017\u964d\u4f4e\u4e86\u7ea680%\u3002\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48&#8221;\u6e10\u8fdb\u5f0f&#8221;\u662f\u6574\u4e2a RAG \u67b6\u6784\u7684\u6838\u5fc3\u8bbe\u8ba1\u7406\u5ff5\u2014\u2014\u4e0d\u662f\u8fd4\u56de\u8d8a\u591a\u8d8a\u597d\uff0c\u800c\u662f\u8fd4\u56de\u8d8a\u7cbe\u51c6\u8d8a\u597d\u3002<\/p>\n\n\n\n<h2 id=\"\u516d-\u603b\u7ed3\u4e0e\u5c55\u671b\" class=\"wp-block-heading\">\u516d\u3001\u603b\u7ed3\u4e0e\u5c55\u671b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">MCP \u534f\u8bae\u4e3a AI \u5de5\u5177\u751f\u6001\u5e26\u6765\u4e86\u771f\u6b63\u7684\u7edf\u4e00\u63a5\u53e3\u3002\u5bf9\u5de5\u5177\u63d0\u4f9b\u65b9\uff08\u5982 CodeStyle\uff09\uff0c\u53ea\u9700\u5b9e\u73b0\u4e00\u6b21 MCP Server\uff0c\u5c31\u80fd\u88ab\u6240\u6709\u4e3b\u6d41 AI IDE \u4f7f\u7528\u3002Spring AI \u7684\u6ce8\u89e3\u9a71\u52a8\u5b9e\u73b0\u8ba9 Java \u5f00\u53d1\u8005\u51e0\u4e4e\u96f6\u5b66\u4e60\u6210\u672c\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CodeStyle \u5728\u6b64\u57fa\u7840\u4e0a\u6784\u5efa\u4e86\u5b8c\u6574\u7684\u4ee3\u7801\u77e5\u8bc6\u5e93\u4f53\u7cfb\u2014\u2014\u4ece\u6a21\u677f\u5236\u4f5c\u3001\u5b58\u50a8\u3001\u68c0\u7d22\u5230 IDE \u5185\u4ee3\u7801\u751f\u6210\uff0c\u5f62\u6210\u95ed\u73af\u3002\u76ee\u524d\u9879\u76ee\u5df2\u5728 GitHub \u5f00\u6e90\uff0c\u6838\u5fc3\u4ee3\u7801\u7ea6 15000 \u884c Java + 5000 \u884c Vue\uff0c\u4e24\u4e2a\u7248\u672c\u8fed\u4ee3\u4e0b\u6765\uff0c\u67b6\u6784\u5df2\u7ecf\u76f8\u5bf9\u7a33\u5b9a\u3002\u672a\u6765\u4f1a\u8ddf\u8fdb MCP \u534f\u8bae\u7684 Streaming \u54cd\u5e94\u548c\u66f4\u7ec6\u7c92\u5ea6\u7684\u6743\u9650\u63a7\u5236\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9879\u76ee\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/ShanEior\/codestyle\" target=\"_blank\" rel=\"noreferrer noopener\">CodeStyle\uff08\u7801\u8702\uff09<\/a> | <a href=\"https:\/\/github.com\/ShanEior\/mcp-codestyle-server\" target=\"_blank\" rel=\"noreferrer noopener\">MCP Codestyle Server<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u505a CodeStyle\uff08\u7801\u8702\uff09\u9879\u76ee\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u6df1\u5ea6\u7814\u7a76\u4e86 MCP\uff08Model Context Protoco [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[18,17,15,16],"class_list":["post-115","post","type-post","status-publish","format-standard","hentry","category-rz","tag-codestyle","tag-java","tag-mcp","tag-spring-ai"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/posts\/115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/comments?post=115"}],"version-history":[{"count":1,"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/posts\/115\/revisions"}],"predecessor-version":[{"id":119,"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/posts\/115\/revisions\/119"}],"wp:attachment":[{"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/media?parent=115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/categories?post=115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fisssssh.top\/index.php\/wp-json\/wp\/v2\/tags?post=115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}