精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文掌握 MCP 上下文協議:從理論到實踐

人工智能
本文介紹了 模型上下文協議(Model Context Protocol,MCP),一種用于規范大型語言模型(LLM?)與外部數據源及工具之間交互的開放標準。內容涵蓋了 MCP? 協議的整體架構(客戶端與服務器的一對一連接模式)、消息傳輸機制(采用 JSON-RPC 2.0 格式)、以及客戶端與服務器支持的核心原語。

MCP

模型上下文協議(Model Context Protocol,簡稱 MCP)是一種開放標準,旨在標準化大型語言模型(LLM)與外部數據源和工具之間的交互方式。由 Anthropic 于 2024 年 11 月推出,MCP 通過定義統一的接口,使 AI 應用能夠安全、靈活地訪問和操作本地及遠程數據資源,提升模型的功能性和可擴展性。

圖片圖片

Transports(傳輸層)

在 MCP 協議中,傳輸層提供了客戶端與服務器之間通信的基礎,其負責處理消息的發送與接收的底層機制。

消息格式

MCP 協議使用 JSON-RPC 2.0 作為消息傳輸格式,包含以下三種類型的 JSON-RPC 消息:

  • Request 請求:
{
  "jsonrpc": "2.0",
  "id": 1,                            // 請求 ID(數字或字符串)
  "method": "string",                 // 方法名
  "params": {}                        // 可選,參數對象
}
  • Response 響應:
{
  "jsonrpc": "2.0",
  "id": 1,                            // 對應請求的 ID
  "result": {},                       // 可選,成功結果
  "error": {                          // 可選,錯誤信息
    "code": 123,
    "message": "錯誤描述",
    "data": {}                        // 可選,附加數據
  }
}
  • Notification通知:
{
  "jsonrpc": "2.0",
  "method": "string",                 // 通知方法名
  "params": {}                        // 可選,參數對象
}

內置傳輸類型

MCP 協議內置了兩種標準傳輸方式:標準輸入/輸出(stdio) 和 Server-Sent Events(SSE) 。

標準輸入/輸出(stdio)

stdio 傳輸通過 標準輸入輸出流 實現客戶端與服務器之間的通信,適用于本地集成與命令行工具。

推薦在以下場景使用 stdio:

  • 構建命令行工具
  • 本地系統集成
  • 簡單進程間通信
  • 與 shell 腳本協作

Go server 示例:

s := server.NewMCPServer(
 "My Server", // Server name
 "1.0.0",     // Version
)

if err := server.ServeStdio(s); err != nil {
 log.Fatalf("Server error: %v", err)
}

Server-Sent Events (SSE)

SSE 傳輸 通過 HTTP POST 請求實現 客戶端到服務器通信,同時支持 服務器到客戶端流式傳輸 。

推薦在以下場景使用 SSE:

  • 僅需要服務器到客戶端的流式通信
  • 運行在受限網絡環境
  • 實現簡單的推送更新

Go server 示例:

s := server.NewMCPServer(
 "My Server", // Server name
 "1.0.0",     // Version
)

sseServer := server.NewSSEServer(s)
err := sseServer.Start(":8080")
if err != nil {
 panic(err)
}

MCP 的通用架構

MCP 遵循 CS 架構(client-server),具體包含的組件如下:

  • Host 主機:發起連接 LLM 的應用程序,例如 Claude for Desktop 或其他的 AI 應用。
  • MCP Client 客戶端:運行在主機里的客戶端,與 MCP Server 服務器保持 1:1 連接,負責協議通信。
  • MCP Server 服務器:負責向客戶端提供 資源、提示 和 工具 的服務器。

圖片圖片

MCP 客戶端

客戶端可以實現額外的功能來與 MCP 服務器進行交互。

Roots 根

Roots 是MCP 協議中的一個概念,用于界定服務器可操作的邊界。客戶端可以定義 Roots,以告知服務器相關的資源信息及其位置。

root 是客戶端建議服務器應關注的 URI。當 客戶端 連接到服務器時,它會聲明 服務器 應處理哪些 root。雖然這些 root 主要是文件系統路徑,但 root 也可以是 HTTP URL。

# 文件系統路徑
file:///home/chenmingyong/workspace
# HTTP URL
https://chenmingyong.cn/

功能

Roots 有以下幾個功能:

  • 引導:指示服務器相關資源及其位置。
  • 明確歸屬:清楚標識哪些資源屬于當前工作區。
  • 便于管理:支持同時處理多個不同的資源。

工作機制

當客戶端具備 Roots 功能時,通常會:

  • 在連接服務器時聲明自身的 Roots 支持能力
  • 向服務器發送建議的 Roots 列表
  • 在 Roots 發生變更時(若協議支持)主動通知服務器

示例

{
  "roots": [
    {
      "uri": "file:///home/chenmingyong/workspace/frontend",
      "name": "Frontend Repository"
    },
    {
      "uri": "https://chenmingyong.cn/",
      "name": "API Endpoint"
    }
  ]
}

Sampling 采樣

采樣是 MCP 協議中一項強大的功能,允許服務器通過客戶端向 LLM 大模型請求補全結果,從而實現更復雜的代理行為,同時確保安全性與隱私性。

工作原理

采樣流程遵循以下步驟:

  • 服務器發送請求:服務器向客戶端發送 sampling/createMessage 請求。
  • 客戶端審核請求:客戶端收到請求后可以對其審查和修改。
  • 客戶端發起采樣:客戶端向 LLM 發送采樣請求。
  • 客戶端審核結果:客戶端審核 LLM 返回的補全內容。
  • 客戶端返回結果:客戶端將最終結果發送回服務器。

圖片圖片

這種 人機協作(Human-in-the-loop) 設計,確保用戶能控制 LLM 看到的內容以及生成的結果,兼顧自動化與安全性。

消息格式

采樣請求使用同一的消息結構,示例如下:

{
  "messages": [
    {
      "role": "user" | "assistant",            // 消息角色
      "content": {
        "type": "text" | "image",              // 內容類型

        // 文本內容
        "text": "string",

        // 圖片內容
        "data": "string",                      // Base64 編碼
        "mimeType": "string"                   // MIME 類型

      }

    }
  ],
"modelPreferences": {                        // 可選,模型偏好設置
    "hints": [                                 // 模型提示
      {
        "name": "string"                       // 建議的模型名稱

      }
    ],
    "costPriority": 0.0,                       // 降低成本的優先級 (0-1)
    "speedPriority": 0.0,                      // 低延遲的優先級 (0-1)
    "intelligencePriority": 0.0                // 模型能力的優先級 (0-1)
  },
"systemPrompt": "string",                    // 可選,系統提示詞

"includeContext": "none" | "thisServer" | "allServers",  // 上下文包含范圍
"temperature": 0.0,                          // 隨機性控制
"maxTokens": 100,                            // 最大生成 Token 數

"stopSequences": ["string"],                 // 停止序列
"metadata": {}                               // 其他元數據
}

響應格式

客戶端返回采樣結果的結構如下:

{
  "model": "string",                      // 使用的模型名稱
"stopReason": "endTurn" | "stopSequence" | "maxTokens" | "string",  // 停止原因

"role": "user" | "assistant",           // 消息角色
"content": {
    "type": "text" | "image",             // 內容類型
    "text": "string",                     // 文本內容
    "data": "string",                     // 圖片內容 (Base64)
    "mimeType": "string"                  // MIME 類型
  }
}

示例請求

以下是一個示例采樣請求:

{
  "method": "sampling/createMessage",
"params": {
    "messages": [
      {
        "role": "user",
        "content": {
          "type": "text",
          "text": "當前目錄下有哪些文件?"

        }
      }
    ],
    "systemPrompt": "你是一名文件系統助手。",
    "includeContext": "thisServer",
    "maxTokens": 100
  }
}

MCP 服務器

在 MCP 協議中,服務器提供了為 LLM 大模型添加上下文的基礎構件。通過 Propmts(提示詞)、Resources(資源)和 Tools(工具)這三種 原語(Primitives), 客戶端、服務器與語言模型之間能夠實現 高效且靈活的交互。

Prompts 提示詞

提示詞 允許服務器定義可復用的提示詞模板和工作流,客戶端可以輕松將這些模板呈現給用戶或 LLM。

提示詞結構

一個提示詞的結構定義如下所示:

{
  "name": "string",               // 提示詞唯一標識符
  "description": "string",        // 可選,人類可讀的描述
  "arguments": [                  // 可選參數列表
    {
      "name": "string",           // 參數標識符
      "description": "string",    // 可選,參數描述
      "required": "boolean"       // 是否為必填參數
    }
  ]
}

獲取提示詞

客戶端可以通過調用 prompts/list 獲取可用的提示詞列表:

請求示例:

{
  method: "prompts/list"
}

響應示例:

{
  "prompts": [
    {
      "name": "analyze-code",                       // 提示詞唯一標識符
      "description": "分析代碼以發現潛在改進點",   // 提示詞描述
      "arguments": [
        {
          "name": "language",                       // 參數名稱
          "description": "編程語言",                // 參數描述
          "required": true                          // 是否必填
        }
      ]
    }
  ]
}

獲取提示詞詳情

如果客戶端要使用提示詞,需要通過 prompts/get 接口獲取提示詞詳情。

請求示例:

{
  "method": "prompts/get",
  "params": {
    "name": "analyze-code",              // 要使用的提示詞名稱
    "arguments": {
      "language": "go"               // 動態參數
    }
  }
}

響應示例:

{
  "description": "分析 Go 代碼以發現潛在改進點",  // 提示詞描述
  "messages": [
    {
      "role": "user",                    // 消息發送方
      "content": {
        "type": "text",                  // 內容類型
        "text": "請分析以下 Go 代碼,找出可能的改進空間:\n\n```go\npackage main\n\nimport "fmt"\n\nfunc main() {\n\n fmt.Println("Hello, World!")\n}\n```"
      }
    }
  ]
}

動態提示詞

提示詞不僅可以是靜態模板,也支持根據參數動態生成內容,甚至可以嵌入 資源上下文。

提示詞定義示例:

{
  "name": "analyze-project",                    // 提示詞名稱
"description": "分析項目日志與代碼",          // 描述
"arguments": [
    {
      "name": "timeframe",                      // 參數名稱
      "description": "要分析的日志時間范圍",    // 參數描述
      "required": true                          // 是否必填
    },
    {
      "name": "fileUri",                        // 參數名稱
      "description": "待審查的代碼文件 URI",    // 參數描述
      "required": true                          // 是否必填
    }
  ]
}

prompts/get 請求返回示例:

{
  "messages": [
    {
      "role": "user",
      "content": {
        "type": "text",
        "text": "請分析以下系統日志和代碼文件,找出潛在問題:"
      }
    },
    {
      "role": "user",
      "content": {
        "type": "resource",
        "resource": {
          "uri": "logs://chenmingyong/recent?timeframe=1h",                      // 資源 URI
          "text": "[2024-03-14 15:32:11] ERROR: network.py:127 連接超時\n[2024-03-14 15:32:15] WARN: 正在重試連接 (第 2/3 次)\n[2024-03-14 15:32:20] ERROR: 達到最大重試次數",
          "mimeType": "text/plain"                                  // 資源類型
        }
      }
    },
    {
      "role": "user",
      "content": {
        "type": "resource",
        "resource": {
          "uri": "file:///path/chenmingyong/code.py",                        // 代碼文件 URI
          "text": "def connect_to_service(timeout=30):\n    retries = 3\n    for attempt in range(retries):\n        try:\n            return establish_connection(timeout)\n        except TimeoutError:\n            if attempt == retries - 1:\n                raise\n            time.sleep(5)\n\ndef establish_connection(timeout):\n    # 連接實現\n    pass",
          "mimeType": "text/x-python"
        }
      }
    }
  ]
}

多輪提示工作流

提示詞還支持定義多輪對話流程,通過預設的多步提示,引導用戶完成復雜任務。

const debugWorkflow = {
  name: "debug-error",
async getMessages(error: string) {
    return [
      {
        role: "user",
        content: {
          type: "text",
          text: `我遇到了一個錯誤:${error}`
        }
      },
      {
        role: "assistant",
        content: {
          type: "text",
          text: "我來幫你分析這個錯誤。你之前嘗試過哪些操作?"
        }
      },
      {
        role: "user",
        content: {
          type: "text",
          text: "我嘗試重啟服務,但錯誤依然存在。"
        }
      }
    ];
  }
};

Resources 資源

Resources(資源)是 MCP 協議中的核心原語之一,服務器通過它可以向客戶端提供可讀的數據或內容,用作 LLM 交互的上下文信息。

資源 URI

每個資源通過 URI 進行標識,格式如下:

[協議]://[主機]/[路徑]

示例:

file:///home/chenmingyong/documents/go.pdf
postgres://database/chenmingyong/schema
screen://localhost/chenmingyong/display1

具體的協議(protocol)與路徑結構由 MCP 服務器自行定義,服務器也可以設計自定義的 URI 格式。

資源類型

資源內容分為兩種類型:

文本類型

包含 UTF_8 編碼的文本數據,例如:

  • 源代碼
  • 配置文件
  • 日志文件
  • JSON / XML 數據
  • 普通文本
二進制資源

包含 Base64 編碼的原始二進制數據,例如:

  • 圖片
  • PDF 文件
  • 音頻 / 視頻文件
  • 其他非文本格式

獲取資源列表

客戶端可以通過調用服務器的 resources/list 獲取資源列表,每個資源包含以下信息:

{
  "uri": "string",             // 資源唯一標識符
  "name": "string",            // 資源名稱(人類可讀)

  "description": "string",     // 可選,資源描述
  "mimeType": "string"         // 可選,資源 MIME 類型
}

對于動態資源,服務器可以通過 URI 模板方式暴露資源,客戶端可根據模板構建有效的資源 URI:

{
  "uriTemplate": "string",     // 符合 RFC 6570 的 URI 模板
  "name": "string",            // 模板名稱(人類可讀)

  "description": "string",     // 可選,模板描述
  "mimeType": "string"         // 可選,匹配資源的 MIME 類型
}

獲取資源詳情

客戶端可以通過 resources/read 接口讀取資源內容,只需傳入資源的 URI。

服務器會返回資源內容列表:

{
  contents: [
    {
      uri: string;        // 資源唯一標識符
      mimeType?: string;  // 可選,資源 MIME 類型

      // 以下二選一
      text?: string;      // 文本資源
      blob?: string;      // 二進制資源
    }
  ]
}

資源更新

MCP 支持通過兩種方式通知資源變更。

列表變更

當可用資源列表發生變更時,服務器會通過 notifications/resources/list_changed 通知客戶端。

內容變更

客戶端可以訂閱特定資源的更新流程如下:

  • 客戶端發送 resources/subscribe 請求,指定資源 URI
  • 資源發生變更時,服務器通過 notifications/resources/updated 通知客戶端
  • 客戶端可通過 resources/read 獲取最新內容
  • 客戶端可通過 resources/unsubscribe 取消訂閱

Tools 工具

Tools(工具) 是 MCP 協議中的一項關鍵原語,服務器可通過它向客戶端暴露可執行功能,供 LLM 使用(通常需要用戶批準,確保人類參與決策)。Tools 的核心概念包括:

  • 發現(Discovery):客戶端可通過 tools/list 接口獲取可用工具列表。
  • 調用(Invocation):客戶端可通過 tools/call接口發起工具調用請求,由服務器執行具體操作并返回結果。
  • 靈活性(Flexibility):工具既可以是簡單的計算函數,也可以是復雜的 API 集成。

工具結構定義

每個工具的結構定義如下所示:

{
  "name": "string",                // 工具唯一標識符
  "description": "string",         // 可選,工具描述

  "inputSchema": {                 // 工具參數的 JSON Schema
    "type": "object",

    "properties": { ... }          // 工具參數定義
  }
}

工具實現示例

  • 與本地系統交互的工具
{
  "name": "execute_command",                      // 工具名稱
"description": "執行 shell 命令",               // 描述

"inputSchema": {
    "type": "object",

    "properties": {
      "command": { "type": "string" },            // 命令名稱

      "args": {
        "type": "array",

        "items": { "type": "string" }             // 命令參數
      }
    }
  }
}
  • 外部 API 集成類工具
{
  "name": "github_create_issue",                  // 工具名稱
"description": "在 GitHub 創建 Issue",         // 描述

"inputSchema": {
    "type": "object",

    "properties": {
      "title": { "type": "string" },              // Issue 標題

      "body": { "type": "string" },               // Issue 內容
      "labels": {

        "type": "array",
        "items": { "type": "string" }             // Issue 標簽
      }

    }
  }
}

MCP Server 原語控制層級

每個原語的 控制層級 可總結如下:

原語

控制方

Description  描述

Example  示例

Prompts

用戶控制

由用戶選擇調用的交互式模板

斜杠命令(/command)、菜單選項

Resources

應用控制

由客戶端附加并管理的上下文數據

文件內容,git 歷史記錄

Tools

模型控制

暴露給 LLM 以便其執行操作的功能接口

API POST 請求、文件寫入

服務器實現

以下是基于 Go 語言實現的 MCP 服務器代碼示例:

package main

import (
"context"
"errors"
"fmt"
"os"

"github.com/mark3labs/mcp-go/mcp"
"github.com/mark3labs/mcp-go/server"
)

func main() {
 s := server.NewMCPServer(
"Server Demo",
"1.0.0",
 )

// 添加工具
 {
  calculatorTool := mcp.NewTool("calculate",
   mcp.WithDescription("執行基本的算術運算"),
   mcp.WithString("operation",
    mcp.Required(),
    mcp.Description("要執行的算術運算類型"),
    mcp.Enum("add", "subtract", "multiply", "divide"), // 保持英文
   ),
   mcp.WithNumber("x",
    mcp.Required(),
    mcp.Description("第一個數字"),
   ),
   mcp.WithNumber("y",
    mcp.Required(),
    mcp.Description("第二個數字"),
   ),
  )

  s.AddTool(calculatorTool, func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
   op := request.Params.Arguments["operation"].(string)
   x := request.Params.Arguments["x"].(float64)
   y := request.Params.Arguments["y"].(float64)

   var result float64
   switch op {
   case"add":
    result = x + y
   case"subtract":
    result = x - y
   case"multiply":
    result = x * y
   case"divide":
    if y == 0 {
     returnnil, errors.New("不允許除以零")
    }
    result = x / y
   }

   return mcp.FormatNumberResult(result), nil
  })
 }

// 添加資源
 {
// 靜態資源示例 - 暴露一個 README 文件
  resource := mcp.NewResource(
   "docs://readme",
   "項目說明文檔",
   mcp.WithResourceDescription("項目的 README 文件"),
   mcp.WithMIMEType("text/markdown"),
  )

// 添加資源及其處理函數
  s.AddResource(resource, func(ctx context.Context, request mcp.ReadResourceRequest) ([]mcp.ResourceContents, error) {
   content, err := os.ReadFile("README.md")
   if err != nil {
    returnnil, err
   }

   return []mcp.ResourceContents{
    mcp.TextResourceContents{
     URI:      "docs://readme",
     MIMEType: "text/markdown",
     Text:     string(content),
    },
   }, nil
  })
 }

// 添加提示詞
 {
// 簡單問候提示
  s.AddPrompt(mcp.NewPrompt("greeting",
   mcp.WithPromptDescription("一個友好的問候提示"),
   mcp.WithArgument("name",
    mcp.ArgumentDescription("要問候的人的名字"),
   ),
  ), func(ctx context.Context, request mcp.GetPromptRequest) (*mcp.GetPromptResult, error) {
   name := request.Params.Arguments["name"]
   if name == "" {
    name = "朋友"
   }

   return mcp.NewGetPromptResult(
    "友好的問候",
    []mcp.PromptMessage{
     mcp.NewPromptMessage(
      mcp.RoleAssistant,
      mcp.NewTextContent(fmt.Sprintf("你好,%s!今天有什么可以幫您的嗎?", name)),
     ),
    },
   ), nil
  })
 }

// 啟動基于 stdio 傳輸類型的服務
if err := server.ServeStdio(s); err != nil {
  fmt.Printf("Server error: %v\n", err)
 }
}

上述代碼示例演示了如何創建一個 MCP Server,并展示了添加工具、資源和提示詞的方法。

需要注意的是,由于 mcp-go 庫當前尚未支持 Sampling(采樣)功能,示例中未包含該功能的相關用法。

客戶端實現

基于上面定義的服務器,以下是基于 Go 語言實現的 MCP 客戶端代碼示例:

package main

import (
"context"
"fmt"
"time"

"github.com/mark3labs/mcp-go/client"
"github.com/mark3labs/mcp-go/mcp"
)

func main() {

// 創建一個基于 stdio 的MCP客戶端
 mcpClient, err := client.NewStdioMCPClient(
"./client/server",
  []string{},
 )
if err != nil {
panic(err)
 }
defer mcpClient.Close()

 ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

 fmt.Println("初始化 mcp 客戶端...")
 initRequest := mcp.InitializeRequest{}
 initRequest.Params.ProtocolVersion = mcp.LATEST_PROTOCOL_VERSION
 initRequest.Params.ClientInfo = mcp.Implementation{
  Name:    "Client Demo",
  Version: "1.0.0",
 }

// 初始化MCP客戶端并連接到服務器
 initResult, err := mcpClient.Initialize(ctx, initRequest)
if err != nil {
panic(err)
 }
 fmt.Printf(
"\n初始化成功,服務器信息: %s %s\n\n",
  initResult.ServerInfo.Name,
  initResult.ServerInfo.Version,
 )

// 從服務器獲取提示詞列表
 fmt.Println("提示詞列表:")
 promptsRequest := mcp.ListPromptsRequest{}
 prompts, err := mcpClient.ListPrompts(ctx, promptsRequest)
if err != nil {
panic(err)
 }
for _, prompt := range prompts.Prompts {
  fmt.Printf("- %s: %s\n", prompt.Name, prompt.Description)
  fmt.Println("參數:", prompt.Arguments)
 }

// 從服務器獲取資源列表
 fmt.Println()
 fmt.Println("資源列表:")
 resourcesRequest := mcp.ListResourcesRequest{}
 resources, err := mcpClient.ListResources(ctx, resourcesRequest)
if err != nil {
panic(err)
 }
for _, resource := range resources.Resources {
  fmt.Printf("- uri: %s, name: %s, description: %s, MIME類型: %s\n", resource.URI, resource.Name, resource.Description, resource.MIMEType)
 }

// 從服務器獲取工具列表
 fmt.Println()
 fmt.Println("可用工具列表:")
 toolsRequest := mcp.ListToolsRequest{}
 tools, err := mcpClient.ListTools(ctx, toolsRequest)
if err != nil {
panic(err)
 }

for _, tool := range tools.Tools {
  fmt.Printf("- %s: %s\n", tool.Name, tool.Description)
  fmt.Println("參數:", tool.InputSchema.Properties)
 }
 fmt.Println()

// 調用工具
 fmt.Println("調用工具: calculate")
 toolRequest := mcp.CallToolRequest{
  Request: mcp.Request{
   Method: "tools/call",
  },
 }
 toolRequest.Params.Name = "calculate"
 toolRequest.Params.Arguments = map[string]any{
"operation": "add",
"x":         1,
"y":         1,
 }
// Call the tool
 result, err := mcpClient.CallTool(ctx, toolRequest)
if err != nil {
panic(err)
 }
 fmt.Println("調用工具結果:", result.Content[0].(mcp.TextContent).Text)
}

運行上述代碼的結果如下所示:

初始化 mcp 客戶端...

初始化成功,服務器信息: Server Demo 1.0.0

提示詞列表:
- greeting: 一個友好的問候提示
參數: [{name 要問候的人的名字 false}]

資源列表:
- uri: docs://readme, name: 項目說明文檔, description: 項目的 README 文件, MIME類型: text/markdown

可用工具列表:
- calculate: 執行基本的算術運算
參數: map[operation:map[description:要執行的算術運算類型 enum:[add subtract multiply divide] type:string] x:map[description:第一個數字 type:number] y:map[description:第二個數字 type:number]]

調用工具: calculate
調用工具結果: 2.00

提示詞、資源以及工具列表和之前定義 MCP Server 時所設置的數據一致。

若想獲取完整代碼鏈接,可關注本公眾號,回復 MCP。

小結

本文介紹了 模型上下文協議(Model Context Protocol,MCP),一種用于規范大型語言模型(LLM)與外部數據源及工具之間交互的開放標準。內容涵蓋了 MCP 協議的整體架構(客戶端與服務器的一對一連接模式)、消息傳輸機制(采用 JSON-RPC 2.0 格式)、以及客戶端與服務器支持的核心原語,包括:

  • 客戶端原語:roots(根路徑)、sampling(采樣)
  • 服務器原語:prompts(提示詞)、resources(資源)、tools(工具)
  • Server原語的控制層級分類

最后,本文提供了基于 Go 語言 的 MCP 客戶端與服務器的示例實現,幫助開發者快速理解和應用該協議。

責任編輯:武曉燕 來源: 程序員陳明勇
相關推薦

2025-03-18 09:10:00

MCPAI模型上下文協議

2025-01-08 11:10:46

2025-03-18 08:14:05

2025-09-26 08:52:57

2025-03-26 03:00:00

MCPAI應用

2025-07-08 08:29:46

MCP協議AI

2025-06-18 04:00:00

2021-01-26 05:19:56

語言Go Context

2024-03-28 09:36:29

2025-10-14 01:55:00

AI應用上下文工程機器人

2019-06-17 16:47:54

網絡協議DNS

2025-05-20 02:11:00

2025-03-18 10:34:33

2025-04-01 08:38:25

模型上下文協議MCPLLM

2025-08-07 08:00:00

2025-05-08 07:38:36

模型上下文協議MCPAI模型

2025-11-06 07:53:31

2023-06-28 08:08:06

Flask上下文生命周期

2017-05-11 14:00:02

Flask請求上下文應用上下文

2017-11-28 15:20:27

Python語言編程
點贊
收藏

51CTO技術棧公眾號

欧美电影一区二区三区| 大白屁股一区二区视频| 在线电影中文日韩| 伊人成人222| 先锋成人av| 91香蕉视频mp4| 国产精品久久一区主播| 亚洲综合网在线| 乱亲女h秽乱长久久久| 欧美伊人久久大香线蕉综合69| 美女黄色片网站| 日本成人动漫在线观看| 蜜桃av一区二区在线观看| 欧美大胆在线视频| mm131丰满少妇人体欣赏图| 欧美特黄色片| 欧美性xxxxx极品娇小| 色一情一乱一伦一区二区三区| av中文字幕观看| 日韩av二区在线播放| 久久久久久av| 天天爽天天爽天天爽| 丝袜久久网站| 欧美mv日韩mv亚洲| 国产又黄又猛视频| 久草免费在线视频| 亚洲综合另类小说| 亚洲综合视频一区| 青青草娱乐在线| 国产91精品一区二区麻豆亚洲| 国产精品爽黄69天堂a| 亚欧视频在线观看| 影音先锋成人在线电影| 上原亚衣av一区二区三区| 亚洲成人日韩在线| 国产精品国产| 欧美成人艳星乳罩| 99精品视频国产| 欧美日韩破处视频| 在线亚洲欧美专区二区| 亚洲精品无码久久久久久| 成人性生交大片免费看在线播放| 国产精品三级视频| 欧美动漫一区二区| 亚洲色图 校园春色| 成人免费av在线| 97神马电影| 精品国产999久久久免费| 国模大尺度一区二区三区| 国产精品一区电影| 中文字幕男人天堂| 麻豆精品久久精品色综合| 国产精品老女人视频| 国内免费精品视频| 999亚洲国产精| 久久久久久久久久久91| 免费看一级一片| 综合视频在线| 欧美激情乱人伦| 久久久久亚洲av无码专区体验| 一本一道久久综合狠狠老| 久久夜色撩人精品| 亚洲成人生活片| 欧美午夜一区| 久久免费视频在线观看| 精品美女久久久久| 模特精品在线| 国产精品视频在线播放| 久久久久久久久久成人| 免费观看在线综合| 成人欧美一区二区三区在线| 国产女无套免费视频| 国产成人鲁色资源国产91色综| 波多野结衣一区二区三区在线观看| 国产视频在线观看视频| 国产成人精品三级麻豆| 狠狠色噜噜狠狠狠狠色吗综合| 欧美美女搞黄| 国产精品久久久久久久岛一牛影视| 黄色免费高清视频| av影视在线| 色天天综合色天天久久| 日日干夜夜操s8| 亚洲精品在线国产| 亚洲免费av网址| 中文字幕91视频| 一区在线视频| 国产精品视频久久| 丰满人妻一区二区三区免费| 久久婷婷色综合| 久久精品国产精品亚洲精品色 | 亚洲天堂第一页| 婷婷丁香综合网| 激情综合视频| 国产精品毛片a∨一区二区三区|国| 国产人妖在线播放| 91毛片在线观看| 国产在线拍揄自揄拍无码| 高清精品在线| 欧美日韩精品三区| 久久人妻少妇嫩草av无码专区 | 精品久久在线| 欧美精品一区视频| 四虎成人免费影院| 亚洲精品综合| 91久久精品国产| 日韩偷拍自拍| 亚洲一区免费观看| 欧美伦理片在线观看| 国产精品一区二区中文字幕| 中文一区二区视频| 精品国产乱码一区二区| 国内精品久久久久影院薰衣草 | av中文天堂在线| 亚洲最大成人网4388xx| 欧美一级特黄a| 日韩av影院| 欧美高清在线观看| 又污又黄的网站| 久久久美女毛片| 国产精品69久久久| crdy在线观看欧美| 深夜福利国产精品| 无码人妻一区二区三区免费| 不卡的av中国片| 佐佐木明希av| 国产精品亚洲d| 日韩国产中文字幕| 国产精品第二十页| 国产大陆a不卡| 四虎免费在线观看视频| 91精品国产66| 亚洲欧洲在线免费| 国产一区二区99| aaa亚洲精品一二三区| www.激情网| 欧美黄色一级| 久久久99免费视频| 亚洲视频在线免费播放| 国产嫩草影院久久久久| 国产精品99久久免费黑人人妻| 精品无人区一区二区| 久久久久久久一| 亚洲免费视频网| 亚洲制服丝袜av| 自拍偷拍激情视频| 欧美1区3d| 97超碰在线播放| 精品在线观看一区二区| 天天操夜夜操av| 青草av.久久免费一区| 久久综合伊人77777麻豆| 高清在线视频不卡| 亚洲精品97久久| 色婷婷av国产精品| 久久精品亚洲国产奇米99| 欧美三级电影一区| aa一级黄色片| 国产精品腿扒开做爽爽爽挤奶网站| 国产免费一区二区| 偷拍自拍在线看| 国产午夜精品一区理论片飘花| 久久久黄色大片| 国产日韩欧美制服另类| 日本中文字幕高清| 性xxxx欧美老肥妇牲乱| 亚洲xxx自由成熟| 欧美1—12sexvideos| 亚洲高清免费观看高清完整版| 国产成人亚洲欧洲在线| 久久久精品中文字幕麻豆发布| 亚洲一区二区三区四区五区xx| 成人毛片免费看| 亚洲mm色国产网站| 51漫画成人app入口| 亚洲女人天堂av| 国产精品久久久久久免费播放| 一区二区三区国产| 男生裸体视频网站| 久久精品国产99久久6 | 外国精品视频在线观看 | 色婷婷久久一区二区三区麻豆| 欧美激情亚洲色图| 国产一区二区三区四区在线观看| 国产色一区二区三区| 蜜桃精品wwwmitaows| 成人午夜激情网| 国产精品原创| 深夜福利日韩在线看| 色欲久久久天天天综合网| 在线视频中文字幕一区二区| 欧美黄色aaa| 久久久久久亚洲综合影院红桃| 亚洲色图偷拍视频| 99精品国产99久久久久久福利| 亚洲欧洲精品在线| 美女视频免费精品| 91久久精品国产91久久| 欧美专区福利免费| 欧美黑人国产人伦爽爽爽| 国产黄色在线| 亚洲第一区第一页| ,一级淫片a看免费| 色哟哟国产精品| 久久久久久久黄色| 国产精品久久久一本精品 | av天堂永久资源网| 亚洲精品国产首次亮相| 日韩aⅴ视频一区二区三区| www国产精品| 成人国产精品一区二区| 日本韩国欧美| 97视频在线观看亚洲| a级影片在线| 色老头一区二区三区在线观看| 午夜国产在线观看| 日韩欧美在线1卡| 亚洲自拍第二页| 欧美性生交xxxxx久久久| 精品无码人妻一区二区三| 亚洲视频一区在线| 女人十八毛片嫩草av| 91蜜桃婷婷狠狠久久综合9色| 色婷婷狠狠18禁久久| 精品在线免费视频| 亚洲狼人综合干| 欧美亚洲专区| 国产网站免费在线观看| 激情欧美一区| 女人被男人躁得好爽免费视频 | av资源免费看| 51午夜精品国产| 国产一区二区在线不卡| 欧美理论片在线| 国产一区二区三区在线观看| 欧美午夜精品免费| 国产成人精品亚洲| 欧美日韩一区久久| 中文字幕在线观看国产| 欧美日韩在线不卡| 日本视频www色| 欧美色综合天天久久综合精品| 国产精品高清无码| 欧美性猛片aaaaaaa做受| 无码视频一区二区三区| 色婷婷久久久亚洲一区二区三区| 天天做天天爱夜夜爽| 精品国产精品自拍| 制服.丝袜.亚洲.中文.综合懂色| 午夜欧美在线一二页| 亚洲日本韩国在线| 狠狠操狠狠色综合网| 欧美男人亚洲天堂| 欧美少妇性性性| 97超碰中文字幕| 日韩一区二区免费高清| 性欧美8khd高清极品| 精品成人a区在线观看| 性xxxx视频| 亚洲天堂开心观看| 在线观看免费网站黄| 久久久精品在线观看| 青青在线视频| 97精品一区二区视频在线观看| 无遮挡爽大片在线观看视频| 日本a级片电影一区二区| 日韩欧美2区| 91网站免费看| 国产精品一区二区三区美女| 欧美在线视频二区| 爽成人777777婷婷| 国产爆乳无码一区二区麻豆 | 亚洲精品视频自拍| 日本熟女一区二区| 欧美在线你懂的| 精品国产黄色片| 日韩精品电影网| 亚洲成人三级| 久久久久久久久久久av| 欧洲av不卡| 亚洲一区二区三| 亚洲精品国产精品粉嫩| 亚洲最大免费| 亚洲在线播放| 亚洲免费黄色录像| 不卡高清视频专区| 日本裸体美女视频| 天天操天天色综合| 一区二区三区精彩视频| 日韩av最新在线观看| 亚洲精品传媒| 欧美一区二区三区艳史| vam成人资源在线观看| 久久综合色一本| 女主播福利一区| 妓院一钑片免看黄大片| 成人福利电影精品一区二区在线观看| 99久久久无码国产精品性| 亚洲免费av网站| 成年人晚上看的视频| 精品999在线播放| 免费在线看a| 欧美最顶级的aⅴ艳星| 精品中文视频| 午夜精品一区二区三区四区| 伊人久久大香线蕉av超碰演员| 日本爱爱免费视频| caoporn国产一区二区| 91免费公开视频| 在线视频一区二区三| 五月婷婷丁香六月| 久久91亚洲精品中文字幕奶水| 精品欧美一区二区三区在线观看| 国产高清精品一区| 五月开心六月丁香综合色啪| 一本久道中文无码字幕av| 成人毛片在线观看| 中文字幕电影av| 欧美日韩专区在线| 理论视频在线| 2019亚洲男人天堂| 成人搞黄视频| 黄色片免费在线观看视频| 国内外成人在线视频| 精品熟妇无码av免费久久| 欧美色图在线视频| 日本韩国免费观看| 欧美日韩国产成人在线| 国产乱码精品一区二区三区亚洲人| 日韩精品欧美一区二区三区| 羞羞答答国产精品www一本| 成人在线电影网站| 亚洲已满18点击进入久久| 99国产成人精品| 久久国产视频网站| 色播一区二区| 日韩在线视频在线| 国产福利一区二区三区视频 | y111111国产精品久久婷婷| 香蕉av一区二区| 欧美性受xxxxxx黑人xyx性爽| 中文字幕高清一区| 在线观看毛片网站| 中文字幕欧美日韩va免费视频| 免费高清视频在线一区| 色就是色欧美| 日本91福利区| 99热6这里只有精品| 欧美裸体一区二区三区| 精产国品自在线www| 亚洲aa中文字幕| 欧美三级特黄| 国产十八熟妇av成人一区| 黄色一区二区在线| 男男激情在线| 国产精品日韩在线| 午夜精品视频一区二区三区在线看| 欧美特黄aaa| 亚洲美女区一区| 亚洲精品免费在线观看视频| 久久青草福利网站| 欧美日韩一区二区三区不卡视频| 成人综合视频在线| 国产欧美一区二区精品性色| 亚洲无码精品国产| 欧美成人精品三级在线观看| 成人搞黄视频| 日韩欧美xxxx| 1024成人网| 黄色av免费观看| 国产成人精品视频在线| 97国产成人高清在线观看| 精品人妻无码中文字幕18禁| 婷婷开心久久网| 国产精品影院在线| 国产在线观看高清视频| 亚洲国产精品网站| 涩涩涩在线视频| 色视频一区二区三区| 国产精品99久| 天天操天天摸天天干| 日韩中文字幕在线免费观看| 88久久精品| 国产视频一区二区视频| 亚洲精品欧美激情| 亚洲 欧美 精品| 91精品国产自产在线老师啪| 亚洲国产裸拍裸体视频在线观看乱了中文| 蜜桃传媒一区二区亚洲av| 欧美高清一级片在线| 国产伦久视频在线观看| 亚洲午夜高清视频| 国产不卡视频一区| 国产精品国产精品国产| 欧美日韩福利在线观看| 精品日韩免费| v天堂中文在线| 欧美理论电影在线| 国模冰冰炮一区二区| av在线免费观看国产|