[{"data":1,"prerenderedAt":1456},["ShallowReactive",2],{"content:\u002F2025\u002F12\u002Fmcp-server-intro":3,"surround:\u002F2025\u002F12\u002Fmcp-server-intro":1445},{"id":4,"title":5,"body":6,"categories":1423,"date":1425,"description":1426,"draft":1427,"extension":1428,"image":1429,"meta":1430,"navigation":132,"path":1432,"permalink":1429,"published":1429,"readingTime":1433,"recommend":1429,"references":1429,"seo":1438,"sitemap":1439,"stem":1440,"tags":1441,"type":1443,"updated":1425,"__hash__":1444},"content\u002Fposts\u002F2025\u002F12\u002Fmcp-server-intro.md","MCP Server 基础概念与入门实践",{"type":7,"value":8,"toc":1408},"minimark",[9,13,16,20,23,29,33,36,61,64,72,75,206,210,213,224,228,233,240,243,271,275,291,295,310,314,591,594,598,612,616,625,628,636,639,646,649,653,656,662,665,671,677,681,684,687,693,1379,1382,1385,1388,1393,1399,1404],[10,11,12],"p",{},"随着ai的快速发展，mcp server也逐渐被大家所熟知，但是我只是大概知道有这么个东西，经常在一些文档、组件库当中看到其接入方式，但是具体怎么使用，还是一头雾水",[10,14,15],{},"于是，这周末我花了一点时间研究了一下mcp server",[17,18,19],"h2",{"id":19},"什么是mcp协议",[10,21,22],{},"mcp协议是model context protocol的缩写，是一种用于与ai模型交互的协议。",[24,25,26],"blockquote",{},[10,27,28],{},"mcp协议的目的是：提供一个标准化的接口，实现标准输入【自然语言】与大模型之间的交互",[17,30,32],{"id":31},"mcp-server的原理","mcp server的原理",[10,34,35],{},"mcp server的原理是：",[37,38,39,43,46,49,52,55,58],"ol",{},[40,41,42],"li",{},"人通过mcp client输入文字",[40,44,45],{},"向mcp server获取list of tools",[40,47,48],{},"mcp client将文字和list of tools发送给大模型",[40,50,51],{},"大模型根据文字和list of tools选择一个最合适工具",[40,53,54],{},"提供参数，调用mcp server的tool，获取结果",[40,56,57],{},"mcp server将输出结果返回给大模型",[40,59,60],{},"大模型对信息进行总结，并返回给用户",[10,62,63],{},"对应有两个作用：",[37,65,66,69],{},[40,67,68],{},"接受mcp client调用，返回list of tools",[40,70,71],{},"接受大模型调用，选择最合适的tool，大模型提供参数，mcp server调用tool，返回结果给大模型",[10,73,74],{},"具体流程图如下：",[76,77,82],"pre",{"className":78,"code":79,"language":80,"meta":81,"style":81},"language-mermaid shiki shiki-themes github-light github-dark","sequenceDiagram\n    participant User as 用户\n    participant Client as MCP Client\n    participant Server as MCP Server\n    participant Model as 大模型\n\n    User->>Client: 输入文字（自然语言）\n    Client->>Server: 请求可用工具列表\n    Server-->>Client: 返回工具列表\n    Client->>Model: 发送文字 + 工具列表\n    Model->>Model: 分析输入，选择工具\n    Model->>Server: 调用工具并传入参数\n    Server-->>Model: 返回工具执行结果\n    Model->>Client: 整合结果生成自然语言\n    Client-->>User: 返回最终结果\n","mermaid","",[83,84,85,93,103,111,119,127,134,142,150,158,166,174,182,190,198],"code",{"__ignoreMap":81},[86,87,90],"span",{"class":88,"data-line":89,"line":89},"line",1,[86,91,92],{},"sequenceDiagram\n",[86,94,96,100],{"class":88,"data-line":95,"line":95},2,[86,97,99],{"class":98},"indent","    ",[86,101,102],{},"participant User as 用户\n",[86,104,106,108],{"class":88,"data-line":105,"line":105},3,[86,107,99],{"class":98},[86,109,110],{},"participant Client as MCP Client\n",[86,112,114,116],{"class":88,"data-line":113,"line":113},4,[86,115,99],{"class":98},[86,117,118],{},"participant Server as MCP Server\n",[86,120,122,124],{"class":88,"data-line":121,"line":121},5,[86,123,99],{"class":98},[86,125,126],{},"participant Model as 大模型\n",[86,128,130],{"class":88,"data-line":129,"line":129},6,[86,131,133],{"emptyLinePlaceholder":132},true,"\n",[86,135,137,139],{"class":88,"data-line":136,"line":136},7,[86,138,99],{"class":98},[86,140,141],{},"User->>Client: 输入文字（自然语言）\n",[86,143,145,147],{"class":88,"data-line":144,"line":144},8,[86,146,99],{"class":98},[86,148,149],{},"Client->>Server: 请求可用工具列表\n",[86,151,153,155],{"class":88,"data-line":152,"line":152},9,[86,154,99],{"class":98},[86,156,157],{},"Server-->>Client: 返回工具列表\n",[86,159,161,163],{"class":88,"data-line":160,"line":160},10,[86,162,99],{"class":98},[86,164,165],{},"Client->>Model: 发送文字 + 工具列表\n",[86,167,169,171],{"class":88,"data-line":168,"line":168},11,[86,170,99],{"class":98},[86,172,173],{},"Model->>Model: 分析输入，选择工具\n",[86,175,177,179],{"class":88,"data-line":176,"line":176},12,[86,178,99],{"class":98},[86,180,181],{},"Model->>Server: 调用工具并传入参数\n",[86,183,185,187],{"class":88,"data-line":184,"line":184},13,[86,186,99],{"class":98},[86,188,189],{},"Server-->>Model: 返回工具执行结果\n",[86,191,193,195],{"class":88,"data-line":192,"line":192},14,[86,194,99],{"class":98},[86,196,197],{},"Model->>Client: 整合结果生成自然语言\n",[86,199,201,203],{"class":88,"data-line":200,"line":200},15,[86,202,99],{"class":98},[86,204,205],{},"Client-->>User: 返回最终结果\n",[17,207,209],{"id":208},"mcp-server的实现","mcp server的实现",[10,211,212],{},"mcp server的实现方式有多种，官方也提供了多种语言的sdk",[24,214,215],{},[10,216,217,218],{},"官方Github仓库地址：",[219,220,221],"a",{"href":221,"rel":222},"https:\u002F\u002Fgithub.com\u002Forgs\u002Fmodelcontextprotocol\u002Frepositories",[223],"nofollow",[17,225,227],{"id":226},"python实现一个简单的mcp-server","python实现一个简单的mcp server",[229,230,232],"h3",{"id":231},"_1-下载uv","1. 下载uv",[10,234,235,236],{},"官方文档：",[219,237,238],{"href":238,"rel":239},"https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F",[223],[10,241,242],{},"安装命令",[76,244,248],{"className":245,"code":246,"language":247,"meta":81,"style":81},"language-bash shiki shiki-themes github-light github-dark","curl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh\n","bash",[83,249,250],{"__ignoreMap":81},[86,251,252,256,260,264,268],{"class":88,"data-line":89,"line":89},[86,253,255],{"class":254},"sScJk","curl",[86,257,259],{"class":258},"sj4cs"," -LsSf",[86,261,263],{"class":262},"sZZnC"," https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh",[86,265,267],{"class":266},"szBVR"," |",[86,269,270],{"class":254}," sh\n",[229,272,274],{"id":273},"_2-创建项目","2. 创建项目",[76,276,278],{"className":245,"code":277,"language":247,"meta":81,"style":81},"uv new mcp-server-demo\n",[83,279,280],{"__ignoreMap":81},[86,281,282,285,288],{"class":88,"data-line":89,"line":89},[86,283,284],{"class":254},"uv",[86,286,287],{"class":262}," new",[86,289,290],{"class":262}," mcp-server-demo\n",[229,292,294],{"id":293},"_3-安装mcp-server依赖","3. 安装mcp server依赖",[76,296,298],{"className":245,"code":297,"language":247,"meta":81,"style":81},"uv add \"mcp[cli]\"\n",[83,299,300],{"__ignoreMap":81},[86,301,302,304,307],{"class":88,"data-line":89,"line":89},[86,303,284],{"class":254},[86,305,306],{"class":262}," add",[86,308,309],{"class":262}," \"mcp[cli]\"\n",[229,311,313],{"id":312},"_4-新建mainpy","4. 新建main.py",[76,315,319],{"className":316,"code":317,"language":318,"meta":81,"style":81},"language-python shiki shiki-themes github-light github-dark","from mcp.server.fastmcp import FastMCP\n\nmcp = FastMCP(\"Demo\")\n\n\n@mcp.tool()\ndef add(a: int, b: int) -> int:\n    # 这个注释是必须要写的\n    \"\"\"Add two numbers\"\"\"\n    return a + b\n\n\n@mcp.resource(\"greeting:\u002F\u002F{name}\")\ndef get_greeting(name: str) -> str:\n    \"\"\"Get a Peosonize Greeting\"\"\"\n    return f\"Hello, {name}\"\n\n\nif __name__ == \"__main__\":\n    print()\n    mcp.run(transport=\"stdio\")\n","python",[83,320,321,336,340,361,365,369,378,415,423,430,446,450,454,472,499,506,531,536,541,558,570],{"__ignoreMap":81},[86,322,323,326,330,333],{"class":88,"data-line":89,"line":89},[86,324,325],{"class":266},"from",[86,327,329],{"class":328},"sVt8B"," mcp.server.fastmcp ",[86,331,332],{"class":266},"import",[86,334,335],{"class":328}," FastMCP\n",[86,337,338],{"class":88,"data-line":95,"line":95},[86,339,133],{"emptyLinePlaceholder":132},[86,341,342,345,348,351,355,358],{"class":88,"data-line":105,"line":105},[86,343,344],{"class":328},"mcp ",[86,346,347],{"class":266},"=",[86,349,350],{"class":328}," FastMCP",[86,352,354],{"class":353},"sSDpw","(",[86,356,357],{"class":262},"\"Demo\"",[86,359,360],{"class":353},")\n",[86,362,363],{"class":88,"data-line":113,"line":113},[86,364,133],{"emptyLinePlaceholder":132},[86,366,367],{"class":88,"data-line":121,"line":121},[86,368,133],{"emptyLinePlaceholder":132},[86,370,371,374,376],{"class":88,"data-line":129,"line":129},[86,372,373],{"class":254},"@mcp.tool",[86,375,354],{"class":353},[86,377,360],{"class":353},[86,379,380,383,385,387,390,393,396,398,401,404,407,410,412],{"class":88,"data-line":136,"line":136},[86,381,382],{"class":266},"def",[86,384,306],{"class":254},[86,386,354],{"class":353},[86,388,389],{"class":328},"a: ",[86,391,392],{"class":258},"int",[86,394,395],{"class":328},", b: ",[86,397,392],{"class":258},[86,399,400],{"class":353},")",[86,402,403],{"class":328}," -",[86,405,406],{"class":328},">",[86,408,409],{"class":328}," ",[86,411,392],{"class":258},[86,413,414],{"class":328},":\n",[86,416,417,419],{"class":88,"data-line":144,"line":144},[86,418,99],{"class":98},[86,420,422],{"class":421},"sJ8bj","# 这个注释是必须要写的\n",[86,424,425,427],{"class":88,"data-line":152,"line":152},[86,426,99],{"class":98},[86,428,429],{"class":262},"\"\"\"Add two numbers\"\"\"\n",[86,431,432,434,437,440,443],{"class":88,"data-line":160,"line":160},[86,433,99],{"class":98},[86,435,436],{"class":266},"return",[86,438,439],{"class":328}," a ",[86,441,442],{"class":266},"+",[86,444,445],{"class":328}," b\n",[86,447,448],{"class":88,"data-line":168,"line":168},[86,449,133],{"emptyLinePlaceholder":132},[86,451,452],{"class":88,"data-line":176,"line":176},[86,453,133],{"emptyLinePlaceholder":132},[86,455,456,459,461,464,467,470],{"class":88,"data-line":184,"line":184},[86,457,458],{"class":254},"@mcp.resource",[86,460,354],{"class":353},[86,462,463],{"class":262},"\"greeting:\u002F\u002F",[86,465,466],{"class":258},"{name}",[86,468,469],{"class":262},"\"",[86,471,360],{"class":353},[86,473,474,476,479,481,484,487,489,491,493,495,497],{"class":88,"data-line":192,"line":192},[86,475,382],{"class":266},[86,477,478],{"class":254}," get_greeting",[86,480,354],{"class":353},[86,482,483],{"class":328},"name: ",[86,485,486],{"class":258},"str",[86,488,400],{"class":353},[86,490,403],{"class":328},[86,492,406],{"class":328},[86,494,409],{"class":328},[86,496,486],{"class":258},[86,498,414],{"class":328},[86,500,501,503],{"class":88,"data-line":200,"line":200},[86,502,99],{"class":98},[86,504,505],{"class":262},"\"\"\"Get a Peosonize Greeting\"\"\"\n",[86,507,509,511,513,516,519,522,525,528],{"class":88,"data-line":508,"line":508},16,[86,510,99],{"class":98},[86,512,436],{"class":266},[86,514,515],{"class":266}," f",[86,517,518],{"class":262},"\"Hello, ",[86,520,521],{"class":353},"{",[86,523,524],{"class":328},"name",[86,526,527],{"class":353},"}",[86,529,530],{"class":262},"\"\n",[86,532,534],{"class":88,"data-line":533,"line":533},17,[86,535,133],{"emptyLinePlaceholder":132},[86,537,539],{"class":88,"data-line":538,"line":538},18,[86,540,133],{"emptyLinePlaceholder":132},[86,542,544,547,550,553,556],{"class":88,"data-line":543,"line":543},19,[86,545,546],{"class":266},"if",[86,548,549],{"class":258}," __name__",[86,551,552],{"class":266}," ==",[86,554,555],{"class":262}," \"__main__\"",[86,557,414],{"class":328},[86,559,561,563,566,568],{"class":88,"data-line":560,"line":560},20,[86,562,99],{"class":98},[86,564,565],{"class":258},"print",[86,567,354],{"class":353},[86,569,360],{"class":353},[86,571,573,575,578,580,584,586,589],{"class":88,"data-line":572,"line":572},21,[86,574,99],{"class":98},[86,576,577],{"class":328},"mcp.run",[86,579,354],{"class":353},[86,581,583],{"class":582},"s4XuR","transport",[86,585,347],{"class":266},[86,587,588],{"class":262},"\"stdio\"",[86,590,360],{"class":353},[10,592,593],{},"函数下方的多行注释是必须要写的，这是mcp server的规范，用于描述工具的用途和参数。",[229,595,597],{"id":596},"_5-运行mcp-server","5. 运行mcp server",[76,599,601],{"className":245,"code":600,"language":247,"meta":81,"style":81},"uv run mcp-server-demo\n",[83,602,603],{"__ignoreMap":81},[86,604,605,607,610],{"class":88,"data-line":89,"line":89},[86,606,284],{"class":254},[86,608,609],{"class":262}," run",[86,611,290],{"class":262},[229,613,615],{"id":614},"_6-在cherry-studio中接入mcp-server","6. 在cherry studio中接入mcp server",[24,617,618],{},[10,619,620,621],{},"cherry studio官方地址：",[219,622,623],{"href":623,"rel":624},"https:\u002F\u002Fwww.cherry-ai.com\u002F",[223],[10,626,627],{},"用这个ai客户端的原因是：",[37,629,630,633],{},[40,631,632],{},"国内服务器，速度快",[40,634,635],{},"免费使用Qwen3-8B和GLM4.5大模型",[10,637,638],{},"在cherry studio中接入mcp server：",[10,640,641],{},[642,643],"img",{"alt":644,"src":645},"image-20251229020855873","https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fcodepzj\u002Fimages@main\u002F20251229021031618.png",[10,647,648],{},"保存后启动，如果开关能正常启用，则说明mcp server接入成功",[229,650,652],{"id":651},"_7-使用","7. 使用",[10,654,655],{},"选择“加法”这个tool",[10,657,658],{},[642,659],{"alt":660,"src":661},"image-20251229021157270","https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fcodepzj\u002Fimages@main\u002F20251229021159310.png",[10,663,664],{},"然后提问",[10,666,667],{},[642,668],{"alt":669,"src":670},"image-20251229021352842","https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fcodepzj\u002Fimages@main\u002F20251229021355176.png",[10,672,673],{},[674,675,676],"strong",{},"非常🐮🍺，真的实现了！",[17,678,680],{"id":679},"ai编程软件接入mcp-server","ai编程软件接入mcp server",[10,682,683],{},"cursor，codex，claude code，trae等其实都是mcp client，他们也可以接入许多mcp server去实现更加复杂的功能，提升开发效率",[10,685,686],{},"举个cursor的例子",[10,688,689,690],{},"新建",[83,691,692],{"code":692},".cursor\u002Fmcp.json",[76,694,698],{"className":695,"code":696,"language":697,"meta":81,"style":81},"language-json shiki shiki-themes github-light github-dark","{\n  \"mcpServers\": {\n    \"mysql\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"--directory\",\n        \"\u002FUsers\u002Fpzj\u002FCode\u002Fmcp\u002Fmysql_mcp_server\",\n        \"run\",\n        \"mysql_mcp_server\"\n      ],\n      \"env\": {\n        \"MYSQL_HOST\": \"xx.xx.xx.xx\",\n        \"MYSQL_PORT\": \"3306\",\n        \"MYSQL_USER\": \"xx\",\n        \"MYSQL_PASSWORD\": \"xx\",\n        \"MYSQL_DATABASE\": \"xx\"\n      }\n    },\n    \"Ant Design Components\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"@jzone-mcp\u002Fantd-components-mcp\"\n      ]\n    },\n    \"next-devtools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"next-devtools-mcp@latest\"]\n    },\n    \"tailwindcss-server\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tailwindcss-mcp-server\"]\n    },\n    \"note-server - API 文档\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"apifox-mcp-server@latest\",\n        \"--project-id=xx\"\n      ],\n      \"env\": {\n        \"APIFOX_ACCESS_TOKEN\": \"xx\"\n      }\n    }\n  }\n}\n","json",[83,699,700,705,719,733,752,768,783,798,813,826,841,856,876,896,916,935,953,966,978,991,1008,1022,1036,1050,1063,1077,1094,1121,1134,1148,1165,1189,1202,1216,1233,1248,1263,1279,1293,1308,1323,1341,1354,1365,1374],{"__ignoreMap":81},[86,701,702],{"class":88,"data-line":89,"line":89},[86,703,704],{"class":353},"{\n",[86,706,707,710,713,716],{"class":88,"data-line":95,"line":95},[86,708,709],{"class":98},"  ",[86,711,712],{"class":258},"\"mcpServers\"",[86,714,715],{"class":328},": ",[86,717,704],{"class":718},"sJX2D",[86,720,721,723,725,728,730],{"class":88,"data-line":105,"line":105},[86,722,709],{"class":98},[86,724,709],{"class":98},[86,726,727],{"class":258},"\"mysql\"",[86,729,715],{"class":328},[86,731,704],{"class":732},"sqkie",[86,734,735,737,739,741,744,746,749],{"class":88,"data-line":113,"line":113},[86,736,709],{"class":98},[86,738,709],{"class":98},[86,740,709],{"class":98},[86,742,743],{"class":258},"\"command\"",[86,745,715],{"class":328},[86,747,748],{"class":262},"\"uv\"",[86,750,751],{"class":328},",\n",[86,753,754,756,758,760,763,765],{"class":88,"data-line":121,"line":121},[86,755,709],{"class":98},[86,757,709],{"class":98},[86,759,709],{"class":98},[86,761,762],{"class":258},"\"args\"",[86,764,715],{"class":328},[86,766,767],{"class":353},"[\n",[86,769,770,772,774,776,778,781],{"class":88,"data-line":129,"line":129},[86,771,709],{"class":98},[86,773,709],{"class":98},[86,775,709],{"class":98},[86,777,709],{"class":98},[86,779,780],{"class":262},"\"--directory\"",[86,782,751],{"class":328},[86,784,785,787,789,791,793,796],{"class":88,"data-line":136,"line":136},[86,786,709],{"class":98},[86,788,709],{"class":98},[86,790,709],{"class":98},[86,792,709],{"class":98},[86,794,795],{"class":262},"\"\u002FUsers\u002Fpzj\u002FCode\u002Fmcp\u002Fmysql_mcp_server\"",[86,797,751],{"class":328},[86,799,800,802,804,806,808,811],{"class":88,"data-line":144,"line":144},[86,801,709],{"class":98},[86,803,709],{"class":98},[86,805,709],{"class":98},[86,807,709],{"class":98},[86,809,810],{"class":262},"\"run\"",[86,812,751],{"class":328},[86,814,815,817,819,821,823],{"class":88,"data-line":152,"line":152},[86,816,709],{"class":98},[86,818,709],{"class":98},[86,820,709],{"class":98},[86,822,709],{"class":98},[86,824,825],{"class":262},"\"mysql_mcp_server\"\n",[86,827,828,830,832,834,836,839],{"class":88,"data-line":160,"line":160},[86,829,709],{"class":98},[86,831,709],{"class":98},[86,833,709],{"class":98},[86,835,81],{"class":328},[86,837,838],{"class":353},"]",[86,840,751],{"class":328},[86,842,843,845,847,849,852,854],{"class":88,"data-line":168,"line":168},[86,844,709],{"class":98},[86,846,709],{"class":98},[86,848,709],{"class":98},[86,850,851],{"class":258},"\"env\"",[86,853,715],{"class":328},[86,855,704],{"class":353},[86,857,858,860,862,864,866,869,871,874],{"class":88,"data-line":176,"line":176},[86,859,709],{"class":98},[86,861,709],{"class":98},[86,863,709],{"class":98},[86,865,709],{"class":98},[86,867,868],{"class":258},"\"MYSQL_HOST\"",[86,870,715],{"class":328},[86,872,873],{"class":262},"\"xx.xx.xx.xx\"",[86,875,751],{"class":328},[86,877,878,880,882,884,886,889,891,894],{"class":88,"data-line":184,"line":184},[86,879,709],{"class":98},[86,881,709],{"class":98},[86,883,709],{"class":98},[86,885,709],{"class":98},[86,887,888],{"class":258},"\"MYSQL_PORT\"",[86,890,715],{"class":328},[86,892,893],{"class":262},"\"3306\"",[86,895,751],{"class":328},[86,897,898,900,902,904,906,909,911,914],{"class":88,"data-line":192,"line":192},[86,899,709],{"class":98},[86,901,709],{"class":98},[86,903,709],{"class":98},[86,905,709],{"class":98},[86,907,908],{"class":258},"\"MYSQL_USER\"",[86,910,715],{"class":328},[86,912,913],{"class":262},"\"xx\"",[86,915,751],{"class":328},[86,917,918,920,922,924,926,929,931,933],{"class":88,"data-line":200,"line":200},[86,919,709],{"class":98},[86,921,709],{"class":98},[86,923,709],{"class":98},[86,925,709],{"class":98},[86,927,928],{"class":258},"\"MYSQL_PASSWORD\"",[86,930,715],{"class":328},[86,932,913],{"class":262},[86,934,751],{"class":328},[86,936,937,939,941,943,945,948,950],{"class":88,"data-line":508,"line":508},[86,938,709],{"class":98},[86,940,709],{"class":98},[86,942,709],{"class":98},[86,944,709],{"class":98},[86,946,947],{"class":258},"\"MYSQL_DATABASE\"",[86,949,715],{"class":328},[86,951,952],{"class":262},"\"xx\"\n",[86,954,955,957,959,961,963],{"class":88,"data-line":533,"line":533},[86,956,709],{"class":98},[86,958,709],{"class":98},[86,960,709],{"class":98},[86,962,81],{"class":328},[86,964,965],{"class":353},"}\n",[86,967,968,970,972,974,976],{"class":88,"data-line":538,"line":538},[86,969,709],{"class":98},[86,971,709],{"class":98},[86,973,81],{"class":328},[86,975,527],{"class":732},[86,977,751],{"class":328},[86,979,980,982,984,987,989],{"class":88,"data-line":543,"line":543},[86,981,709],{"class":98},[86,983,709],{"class":98},[86,985,986],{"class":258},"\"Ant Design Components\"",[86,988,715],{"class":328},[86,990,704],{"class":732},[86,992,993,995,997,999,1001,1003,1006],{"class":88,"data-line":560,"line":560},[86,994,709],{"class":98},[86,996,709],{"class":98},[86,998,709],{"class":98},[86,1000,743],{"class":258},[86,1002,715],{"class":328},[86,1004,1005],{"class":262},"\"npx\"",[86,1007,751],{"class":328},[86,1009,1010,1012,1014,1016,1018,1020],{"class":88,"data-line":572,"line":572},[86,1011,709],{"class":98},[86,1013,709],{"class":98},[86,1015,709],{"class":98},[86,1017,762],{"class":258},[86,1019,715],{"class":328},[86,1021,767],{"class":353},[86,1023,1025,1027,1029,1031,1033],{"class":88,"data-line":1024,"line":1024},22,[86,1026,709],{"class":98},[86,1028,709],{"class":98},[86,1030,709],{"class":98},[86,1032,709],{"class":98},[86,1034,1035],{"class":262},"\"@jzone-mcp\u002Fantd-components-mcp\"\n",[86,1037,1039,1041,1043,1045,1047],{"class":88,"data-line":1038,"line":1038},23,[86,1040,709],{"class":98},[86,1042,709],{"class":98},[86,1044,709],{"class":98},[86,1046,81],{"class":328},[86,1048,1049],{"class":353},"]\n",[86,1051,1053,1055,1057,1059,1061],{"class":88,"data-line":1052,"line":1052},24,[86,1054,709],{"class":98},[86,1056,709],{"class":98},[86,1058,81],{"class":328},[86,1060,527],{"class":732},[86,1062,751],{"class":328},[86,1064,1066,1068,1070,1073,1075],{"class":88,"data-line":1065,"line":1065},25,[86,1067,709],{"class":98},[86,1069,709],{"class":98},[86,1071,1072],{"class":258},"\"next-devtools\"",[86,1074,715],{"class":328},[86,1076,704],{"class":732},[86,1078,1080,1082,1084,1086,1088,1090,1092],{"class":88,"data-line":1079,"line":1079},26,[86,1081,709],{"class":98},[86,1083,709],{"class":98},[86,1085,709],{"class":98},[86,1087,743],{"class":258},[86,1089,715],{"class":328},[86,1091,1005],{"class":262},[86,1093,751],{"class":328},[86,1095,1097,1099,1101,1103,1105,1107,1110,1113,1116,1119],{"class":88,"data-line":1096,"line":1096},27,[86,1098,709],{"class":98},[86,1100,709],{"class":98},[86,1102,709],{"class":98},[86,1104,762],{"class":258},[86,1106,715],{"class":328},[86,1108,1109],{"class":353},"[",[86,1111,1112],{"class":262},"\"-y\"",[86,1114,1115],{"class":328},", ",[86,1117,1118],{"class":262},"\"next-devtools-mcp@latest\"",[86,1120,1049],{"class":353},[86,1122,1124,1126,1128,1130,1132],{"class":88,"data-line":1123,"line":1123},28,[86,1125,709],{"class":98},[86,1127,709],{"class":98},[86,1129,81],{"class":328},[86,1131,527],{"class":732},[86,1133,751],{"class":328},[86,1135,1137,1139,1141,1144,1146],{"class":88,"data-line":1136,"line":1136},29,[86,1138,709],{"class":98},[86,1140,709],{"class":98},[86,1142,1143],{"class":258},"\"tailwindcss-server\"",[86,1145,715],{"class":328},[86,1147,704],{"class":732},[86,1149,1151,1153,1155,1157,1159,1161,1163],{"class":88,"data-line":1150,"line":1150},30,[86,1152,709],{"class":98},[86,1154,709],{"class":98},[86,1156,709],{"class":98},[86,1158,743],{"class":258},[86,1160,715],{"class":328},[86,1162,1005],{"class":262},[86,1164,751],{"class":328},[86,1166,1168,1170,1172,1174,1176,1178,1180,1182,1184,1187],{"class":88,"data-line":1167,"line":1167},31,[86,1169,709],{"class":98},[86,1171,709],{"class":98},[86,1173,709],{"class":98},[86,1175,762],{"class":258},[86,1177,715],{"class":328},[86,1179,1109],{"class":353},[86,1181,1112],{"class":262},[86,1183,1115],{"class":328},[86,1185,1186],{"class":262},"\"tailwindcss-mcp-server\"",[86,1188,1049],{"class":353},[86,1190,1192,1194,1196,1198,1200],{"class":88,"data-line":1191,"line":1191},32,[86,1193,709],{"class":98},[86,1195,709],{"class":98},[86,1197,81],{"class":328},[86,1199,527],{"class":732},[86,1201,751],{"class":328},[86,1203,1205,1207,1209,1212,1214],{"class":88,"data-line":1204,"line":1204},33,[86,1206,709],{"class":98},[86,1208,709],{"class":98},[86,1210,1211],{"class":258},"\"note-server - API 文档\"",[86,1213,715],{"class":328},[86,1215,704],{"class":732},[86,1217,1219,1221,1223,1225,1227,1229,1231],{"class":88,"data-line":1218,"line":1218},34,[86,1220,709],{"class":98},[86,1222,709],{"class":98},[86,1224,709],{"class":98},[86,1226,743],{"class":258},[86,1228,715],{"class":328},[86,1230,1005],{"class":262},[86,1232,751],{"class":328},[86,1234,1236,1238,1240,1242,1244,1246],{"class":88,"data-line":1235,"line":1235},35,[86,1237,709],{"class":98},[86,1239,709],{"class":98},[86,1241,709],{"class":98},[86,1243,762],{"class":258},[86,1245,715],{"class":328},[86,1247,767],{"class":353},[86,1249,1251,1253,1255,1257,1259,1261],{"class":88,"data-line":1250,"line":1250},36,[86,1252,709],{"class":98},[86,1254,709],{"class":98},[86,1256,709],{"class":98},[86,1258,709],{"class":98},[86,1260,1112],{"class":262},[86,1262,751],{"class":328},[86,1264,1266,1268,1270,1272,1274,1277],{"class":88,"data-line":1265,"line":1265},37,[86,1267,709],{"class":98},[86,1269,709],{"class":98},[86,1271,709],{"class":98},[86,1273,709],{"class":98},[86,1275,1276],{"class":262},"\"apifox-mcp-server@latest\"",[86,1278,751],{"class":328},[86,1280,1282,1284,1286,1288,1290],{"class":88,"data-line":1281,"line":1281},38,[86,1283,709],{"class":98},[86,1285,709],{"class":98},[86,1287,709],{"class":98},[86,1289,709],{"class":98},[86,1291,1292],{"class":262},"\"--project-id=xx\"\n",[86,1294,1296,1298,1300,1302,1304,1306],{"class":88,"data-line":1295,"line":1295},39,[86,1297,709],{"class":98},[86,1299,709],{"class":98},[86,1301,709],{"class":98},[86,1303,81],{"class":328},[86,1305,838],{"class":353},[86,1307,751],{"class":328},[86,1309,1311,1313,1315,1317,1319,1321],{"class":88,"data-line":1310,"line":1310},40,[86,1312,709],{"class":98},[86,1314,709],{"class":98},[86,1316,709],{"class":98},[86,1318,851],{"class":258},[86,1320,715],{"class":328},[86,1322,704],{"class":353},[86,1324,1326,1328,1330,1332,1334,1337,1339],{"class":88,"data-line":1325,"line":1325},41,[86,1327,709],{"class":98},[86,1329,709],{"class":98},[86,1331,709],{"class":98},[86,1333,709],{"class":98},[86,1335,1336],{"class":258},"\"APIFOX_ACCESS_TOKEN\"",[86,1338,715],{"class":328},[86,1340,952],{"class":262},[86,1342,1344,1346,1348,1350,1352],{"class":88,"data-line":1343,"line":1343},42,[86,1345,709],{"class":98},[86,1347,709],{"class":98},[86,1349,709],{"class":98},[86,1351,81],{"class":328},[86,1353,965],{"class":353},[86,1355,1357,1359,1361,1363],{"class":88,"data-line":1356,"line":1356},43,[86,1358,709],{"class":98},[86,1360,709],{"class":98},[86,1362,81],{"class":328},[86,1364,965],{"class":732},[86,1366,1368,1370,1372],{"class":88,"data-line":1367,"line":1367},44,[86,1369,709],{"class":98},[86,1371,81],{"class":328},[86,1373,965],{"class":718},[86,1375,1377],{"class":88,"data-line":1376,"line":1376},45,[86,1378,965],{"class":353},[10,1380,1381],{},"可以看到，我在cursor中接入了mysql，ant design，next，tailwindcss，apifox等mcp server，这样我就可以在cursor中使用这些工具来辅助我编程，大大提升开发效率",[10,1383,1384],{},"但是，我发现市面上的mcp server大多数都是一些小工具以及组件库的mcp server",[10,1386,1387],{},"对于一些后端的服务如mysql，redis，mongodb，elasticsearch，kafka，rabbitmq等，市面上的mcp server可能有，但是仅仅只是执行命令而已，而且数据非常敏感并且交给ai操作安全性特别低",[10,1389,1390],{},[674,1391,1392],{},"ai竟然真能删库跑路",[10,1394,1395],{},[642,1396],{"alt":1397,"src":1398},"e1d9557be738210c25fd35d942881dfc","https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fcodepzj\u002Fimages@main\u002F20251229022607508.png",[10,1400,1401],{},[674,1402,1403],{},"所以我们在使用ai写代码的时候，一定要进行code review，不要把ai写的代码直接提交到仓库，代码是ai写的，锅不能甩给ai，风险是自己的🤡",[1405,1406,1407],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sSDpw, html code.shiki .sSDpw{--shiki-default:#005cc5;--shiki-dark:#79b8ff}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJX2D, html code.shiki .sJX2D{--shiki-default:#e36209;--shiki-dark:#ffab70}html pre.shiki code .sqkie, html code.shiki .sqkie{--shiki-default:#5a32a3;--shiki-dark:#b392f0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":81,"searchDepth":113,"depth":113,"links":1409},[1410,1411,1412,1413,1422],{"id":19,"depth":95,"text":19},{"id":31,"depth":95,"text":32},{"id":208,"depth":95,"text":209},{"id":226,"depth":95,"text":227,"children":1414},[1415,1416,1417,1418,1419,1420,1421],{"id":231,"depth":105,"text":232},{"id":273,"depth":105,"text":274},{"id":293,"depth":105,"text":294},{"id":312,"depth":105,"text":313},{"id":596,"depth":105,"text":597},{"id":614,"depth":105,"text":615},{"id":651,"depth":105,"text":652},{"id":679,"depth":95,"text":680},[1424],"工程实践","2025-12-28","mcp server原理理解，实操教程，ai客户端引入以及对ai编程的一些看法",false,"md",null,{"slots":1431},{},"\u002F2025\u002F12\u002Fmcp-server-intro",{"text":1434,"minutes":1435,"time":1436,"words":1437},"6 min read",5.035,302100,1007,{"title":5,"description":1426},{"loc":1432},"posts\u002F2025\u002F12\u002Fmcp-server-intro",[1442],"mcp","tech","QZFKQGCaHnHxa7eX07TulVTnvS6cibf5W_DBz7qQvC4",[1446,1451],{"title":1447,"path":1448,"stem":1449,"date":1450,"type":1443,"children":-1},"gRPC 四种通信模式详解","\u002F2025\u002F12\u002Fgrpc-4method","posts\u002F2025\u002F12\u002Fgrpc-4method","2025-12-16",{"title":1452,"path":1453,"stem":1454,"date":1455,"type":1443,"children":-1},"使用 Go 构建第一个 gRPC 服务","\u002F2026\u002F01\u002Fgrpc-hello-demo","posts\u002F2026\u002F01\u002Fgrpc-hello-demo","2026-01-01",1786555054712]