<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MCP Server 之旅第 6 站:FC MCP Server研發實戰

      系列文章已詳細介紹了 MCP 協議的基本概念及其在函數計算(FC)托管 MCP Server 場景下的應用。相信讀者已經對 MCP 協議的原理和應用場景有了初步了解。但對于 AI 應用開發者來說,如何開發一個高效的 MCP Server?有哪些最佳實踐?本文將結合實際案例,深入剖析 FC MCP Server 的設計與實現。

      背景與設計目標

      MCP(Model Context Protocol)協議為 AI 應用開發者提供了標準化的上下文交互能力。MCP Client 負責“思考”,而 MCP Server 則為其賦能“行動”——即操作外部系統,實現自動化的業務流程。

      在實際應用中,MCP Server 通常與 MCP Client(如 Cursor IDE)配合,完成代碼生成、構建、部署等一系列自動化操作。本文以“引導 MCP Client 生成網頁應用代碼工程,并自動構建、部署到函數計算”為例,詳細剖析 FC MCP Server 的設計與實現。

          subgraph "本地主機"
              Host["裝有MCP Client的主機\n(Claude, IDEs, Tools)"]
              S1["MCP Server A"]
              S2["FC MCP Server"]
              Host <-->|"MCP Protocol"| S1
              Host <-->|"MCP Protocol"| S2
              S1 <--> |"文件系統API"| D1[("本地\n文件系統 A")]
                      S2 <--> |"文件系統API"| D1
          end
          subgraph "互聯網"
                  subgraph "函數實例"
                          S3["MCP Server C"]
                      end
                      Host <-->|"MCP Protocal with Authentication"| S3
              S2 <-->|"OpenAPI + Devs"| D2[("函數計算API服務 B")]
                      S3 <-->|"Web APIs"| D3[("遠程\服務 C")]
          end 
      

      MCP Server 的核心能力

      MCP Server 主要提供三大核心能力:

      • 資源:以 URI 形式暴露給 MCP Client 文件或數據,支持資源讀寫和批量查找。資源是文本或二進制類型的數據,需要支持讀寫以及批量查找的方法。通過資源訪問協議訪問,并返回資源的類型以及內容。
      • 工具:封裝對外部系統的操作,供 LLM 調用(需用戶批準),返回操作結果。MCP Client通過工具調用協議訪問,并返回調用的結果。
      • 提示詞:面對不同的參數化的業務場景,引導MCP Client完成具體任務的提示詞。通過提示詞獲取協議訪問,并返回目標業務場景對應的提示詞。

      MCP Server 的“資源”和“提示詞”能力目前并非所有 MCP Client 都支持,實際開發時應以“工具”為核心。

      從MCP協議來看,工具側設計需要如下能力:

      • 工具發現:提供tools/list方法,返回可用工具列表以及調用方式。
      • 工具調用:提供tools/call能力,返回工具執行的結果。
        借助 MCP SDK,開發者只需關注工具參數設計和實現邏輯,協議適配由 SDK 自動完成。
      import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
      
      const server = new McpServer({
          name: "alibabacloud-fc-mcp-server",
          version: "0.0.1",
      });
      
      // 此處添加工具實現
      server.tool(
          "toolName",
          "toolDescription",
          {
              arg1:  z.string().describe("參數說明,例如:這是一個參數")
          },
          async (args) => {
              const { arg1 } = args;
              return { 
                isError: false, 
                content: [
                  { 
                    type: "text", 
                    text: `成功,得到參數:${arg1}` 
                  }
                ] 
              }
          }
      )
      
      
      async function main() {
          const transport = new StdioServerTransport();
          await server.connect(transport);
      }
      
      main().catch((error) => {
          process.stderr.write(JSON.stringify(error));
          process.exit(1);
      });
      

      FC MCP Server工具的設計與最佳實踐

      參考官方文檔,工具設計應遵循以下原則:

      • 名稱與描述清晰:工具名稱和描述應準確反映其功能和使用場景,便于 LLM 理解。
      • 參數定義規范:使用詳細的 JSON Schema 定義參數,包括類型、描述、默認值、枚舉等。
      • 包含使用示例:在描述中給出調用示例,幫助 LLM 正確使用工具。
      • 完善錯誤處理:實現合理的錯誤校驗和提示,提升健壯性。
      • 操作專注原子:每個工具只做一件事,保持原子性,避免副作用。

      為滿足將MCP Client生成的網頁類型代碼工程部署到函數計算,我們至少需要設計一個工具,實現將代碼工程以Custom Runtime的形式,部署到函數計算。

      下面是工具的示例代碼,完整的源代碼可以參考這里

      server.tool(
              // 提供與工具實際作用相符的名稱與描述信息,說明工具的具體使用場景以及需要注意的事項,便于MCP Client理解
              "put-custom-runtime-function",
              "將構建完成的匹配阿里云自定義運行時的工程,部署到函數計算。代碼工程不需要手動打包,會自動處理。如果函數已存在,則嘗試覆蓋并更新目標函數。",
              {
                  // 提供完整的參數定義,包括參數的類型、描述、默認值、枚舉值等,便于MCP Client理解
                  location: locationSchema,
                  functionName: functionNameSchema,
                  region: regionSchema,
                  // ...其他部署參數,根據實際需求添加
                  // TODO
              },
              async (args) => {
                  // args的數據結構與上述schema定義一致
                  const { location } = args;
                  if (!fs.existsSync(location)) {
                      return { isError: true, content: [{ type: "text", text: `執行失敗,需要指定本地代碼工程根路徑` }] };
                  }
                  return await createCustomRuntimeFunction(args);
              }
          );
      ?
      

      FC MCP Server 的測試最佳實踐

      開發測試

      • 使用 MCP Inspector 工具查看 MCP Server 的工具列表及調用方式,詳見官方文檔
      • 推薦日志輸出到文件或 stderr,便于問題定位和追蹤。
      
      # 對代碼工程進行構建
      npm install && npm run build
      
      # 使用MCP Inspector工具,啟動MCP Server
      npx @modelcontextprotocol/inspector -e ALIBABA_CLOUD_ACCESS_KEY_ID=${ALIBABA_CLOUD_ACCESS_KEY_ID} -e ALIBABA_CLOUD_ACCESS_KEY_SECRET=${ALIBABA_CLOUD_ACCESS_KEY_SECRET} node build/index.js
      
      # 根據輸出的地址,打開調試頁面
      # MCP Inspector is up and running at http://127.0.0.1:6274 ??
      
      

      日志示例:

      console.error("這是一行需要記錄的日志")
      

      集成測試

      • 工具測試需關注返回結構的語義正確性,而非僅僅是數據結構本身。
      • 工具名稱、Schema 描述等會直接影響業務效果。
      • 工具與提示詞需同步維護,確保整體體驗一致。

      集成到 Cursor IDE

      配置示例:

      {
        "mcpServers": {
          "alibabacloud-fc-mcp-server": {
            "command": "node",
            "args": ["${absolute-path-to-your-project}/build/index.js"],
            "env": {
                "ALIBABA_CLOUD_ACCESS_KEY_ID": "${your-access-key-id}",
                "ALIBABA_CLOUD_ACCESS_KEY_SECRET": "${your-access-key-secret}"
            }
          }
        }
      }
      

      配置方式如下所示:

      完成配置后,檢查工具列表是否符合預期。

      使用提示詞,測試代碼生成、構建并部署的能力

      在 Cursor IDE 新建空項目,打開Agent 模式。輸入下方 Prompts ,然后要求智能IDE生成一個網頁小游戲2048,并部署到函數計算。

      # 角色  
      你是一位專業的阿里云函數計算(FC) Copilot,專注于為客戶提供關于構建、部署代碼到函數計算的建議。
      
      
      ## 函數計算構建約束
      
      - 工程必須構建以后,才能部署在函數計算。對于Python等語言,需要將依賴安裝到代碼工程根路徑下的./python中;Node等語言,需要將依賴安裝到相對根路徑下的./node_modules中,Java等語言,需要使用maven或gradle等工具,將工程打包為帶有依賴的Jar。這樣運行時依賴才能被讀取到。
      - 工程構建必須滿足函數計算運行時約束。
      - 不需要將工程打包,構建完成后可以直接調用MCP Server的工具進行部署。
      
      ## 函數計算運行時約束
      
      - 用戶必須在運行時暴露一個端口提供http服務。
      - 運行環境是debian10,并預先安裝了Python3.10版本、Node20版本、OpenJDK JRE21版本。
      - 函數計算運行時中,提供了Python、Node、Java、Golang四種語言的某個具體版本的運行環境。 Python3.10的安裝路徑是/opt/python3.10,已默認將/opt/python3.10/bin以及代碼包中的/code/python添加到PATH環境變量中。Node20的安裝路徑是/opt/nodejs20,已默認將/opt/nodejs20/bin以及代碼包中的/code/node_modules添加到PATH環境變量中。OpenJDK21的安裝路徑是/opt/java21,已默認/opt/java21/bin添加到PATH環境變量中,且已經添加環境變量JAVA_HOME=/opt/java21。如果要修改環境變量中的PATH,應該將上述的PATH內容包含。Golang語言不需要運行環境支持。
      
      ## 技能  
      
      ### 技能一:問題拆解與分析  
      - 能夠對用戶提出的問題進行深入拆解,明確問題的核心需求及可能涉及的步驟或指令。
      - 提供清晰的任務分解步驟,確保每一步都能指向最終解決方案。
      - 回答結果中盡量以表格的形式進行整理。
      
      ### 技能二:alibabacloud-fc-mcp-server MCP工具調用  
      - 熟練調用alibabacloud-fc-mcp-server MCP工具獲取函數相關信息或執行相關操作。
      - 工具調用前必須先完成任務拆解,并確保調用邏輯清晰且符合客戶需求。
      - 根據用戶的具體問題,選擇合適的MCP功能模塊進行操作,如創建自定義運行時函數、更新自定義運行時函數等。
      
      ## 限制條件  
      - **任務拆解優先**:必須先給出詳細的任務拆解步驟。
      - **工具依賴明確**:所有需要調用MCP工具的操作,都應基于清晰的任務需求和邏輯推理。 
      - **代碼生成與構建**:代碼必須在本地完成構建,然后部署運行在函數計算上。代碼的生成與構建必須滿足函數計算構建與運行時約束。
      

      等待 agent 生成項目并部署到阿里云函數計算。

      訪問測試地址,獲取2048小游戲頁面,確認符合預期。

      FC MCP Server的云上部署改造

      云上部署 MCP Server 時需注意:

      • 協議適配:云端無法通過stdio協議通信,需切換為 sse 協議。
      • 代碼包傳遞:云端無法直接訪問本地路徑。代碼包需要通過其他方式傳遞給FC MCP Server。

      如下圖所示:

      對于第一個問題,參考前文,Function AI通過MCP Proxy組件,已經解決了協議轉換的問題。推薦通過 Function AI 的 MCP部署,實現協議轉換,無需手動適配。

      對于第二個問題,我們可以考慮如下方案。將代碼工程構建后,通過OSS MCP Server(待開發)上傳到云端,獲取下載地址codeuri,然后將codeuri作為工具調用參數傳遞至FC MCP Server。FC MCP Server可以通過OSS的OpenAPI,將代碼包下載到本地后,完成后續的部署操作。

      對應的改造代碼如下所示:

      // 通過環境變量,區分本地模式與遠程模式
      const remoteMode = process.env.REMOTE_MODE === 'true';
      
      //...省略其他代碼
      if (remoteMode) {
        server.tool(
              "put-custom-runtime-function",
              "提供構建完成的匹配阿里云自定義運行時的zip格式的代碼包的可下載鏈接以及其他函數部署配置,創建函數并部署代碼到該函數。如果函數已存在,則嘗試覆蓋并更新目標函數。建議使用該方法前先確認函數是否存在,如果存在需要確認更新目標函數",
              {
                  codeUri: codeUriSchema,
                  functionName: functionNameSchema,
                  region: regionSchema,
                  //...省略其他代碼
              },
              async (args) => {
                  // 添加適配代碼,將codeuri下載到本地location
                  const { codeUri } = args;
                  if (!codeUri) {
                      return { isError: true, content: [{ type: "text", text: `執行失敗,需要指定codeUri參數` }] };
                  }
                  const location = path.join(os.tmpdir(), `code-${Date.now()}.zip`);
                  // 下載代碼到本地location位置
                  await downloadFile(codeUri, location);
      
                  if (!fs.existsSync(location)) {
                      return { isError: true, content: [{ type: "text", text: `執行失敗,需要指定本地代碼工程根路徑` }] };
                  }
                  const nextArgs = {
                      ...args,
                      location,
                  }
                  return await createCustomRuntimeFunction(nextArgs);
              }
          );
      } else {
        server.tool(
              "put-custom-runtime-function",
              "將構建完成的匹配阿里云自定義運行時的工程,部署到函數計算。代碼工程不需要手動打包,會自動處理。如果函數已存在,則嘗試覆蓋并更新目標函數。建議使用該方法前先確認函數是否存在",
              {
                  location: locationSchema,
                  functionName: functionNameSchema,
                  region: regionSchema,
                  //...省略其他代碼
              },
              async (args) => {
                  const { location } = args;
                  if (!fs.existsSync(location)) {
                      return { isError: true, content: [{ type: "text", text: `執行失敗,需要指定本地代碼工程根路徑` }] };
                  }
                  return await createCustomRuntimeFunction(args);
              }
          );
      }
      
      
      
      

      完整的改造代碼可以參考這里。改造完畢后的FC MCP Server可以通過Function AI一鍵部署到函數計算上。

      部署到函數計算后,可以通過如下配置集成,有效解決配置需要AK/SK帶來的安全風險:

      {
        "mcpServers": {
          "aliyun-fc-mcp-server": {
            "url": "https://xxx.cn-hangzhou.fcapp.run/sse",
            "headers": {
              "Authorization": "Bearer Token"
            }
          }
        }
      }
      

      總結

      本文通過演示FC MCP Server的設計、研發、測試、上云的實戰過程,為MCP Server應用開發者展示了研發MCP Server,并部署到函數計算的便捷性。

      將MCP Server部署到函數計算,可以有效解決本地部署MCP Server帶來的安全問題,避免敏感信息(例如AK/SK)的外泄,此外還能充分利用函數計算的彈性和按需計費優勢,極大降低運維和部署成本

      更多內容關注 Serverless 微信公眾號(ID:serverlessdevs),匯集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,用戶最佳實踐。

      posted @ 2025-06-19 16:18  Serverless社區  閱讀(114)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本一区二区三区黄色网| 爱性久久久久久久久| 亚洲精品不卡无码福利在线观看 | 日韩无人区码卡1卡2卡| 国产色精品久久人妻| 国产精品亚洲五月天高清| 乃东县| 亚洲精品动漫一区二区三| 日韩加勒比一本无码精品| 中文字幕亚洲精品人妻| 亚洲午夜无码久久久久小说| 加勒比亚洲视频在线播放| 国产精品女人毛片在线看| 中文字幕乱码在线人视频| 久久精品色一情一乱一伦| 亚洲精品麻豆一区二区| 无码免费大香伊蕉在人线国产| 精品不卡一区二区三区| 亚洲情A成黄在线观看动漫尤物| 国产精品不卡一区二区久久| 毛片免费观看天天干天天爽| 开心五月婷婷综合网站| 天美传媒一区二区| 99久久夜色精品国产亚洲| 天堂中文8资源在线8| 人人澡人摸人人添| 亚洲香蕉免费有线视频| 国产精品亚洲av三区色| 精品熟女少妇av免费久久| 和田市| 国内精品久久久久影院网站| 在线免费成人亚洲av| 国产按头口爆吞精在线视频| 久热这里有精品视频播放| 国产极品粉嫩福利姬萌白酱| 风韵丰满熟妇啪啪区老熟熟女| 国产日产亚洲系列最新| 日韩一区二区在线观看的| 无码国模国产在线观看免费| 日韩A人毛片精品无人区乱码 | 河北真实伦对白精彩脏话|