1. 什么是MCP

1.1 简介

MCP?不是“麦当劳儿童套餐”(McDonald’s Happy Meal)的缩写哦!

MCP,全称 Model Context Protocol(模型上下文协议),是AI界冒出来的一位“社交达人”。简单说,MCP 就是一套让大模型能安全、高效、有条理地调用外部工具或服务的协议。比如你想让AI帮你订机票、查天气、甚至控制你家的智能咖啡机煮一杯“提神续命的真男人必点的美式”,MCP 就是那个在背后悄悄递话、协调资源、确保AI不会把你的航班订到火星去的幕后英雄。

“没有MCP的大模型,就像会背菜谱但进不了厨房的厨子。”
——某位差点被AI订错酒店的架构师

MCP最早是由 Anthropic 公司2024 年 11 月正式提出并开源的。Anthropic 是知名大模型 Claude 系列的开发公司,该协议现由 Linux 基金会旗下的 Agentic AI Foundation(AAIF) 管理(自 2025 年 12 月起),是一个完全开源、采用 Apache 2.0 许可的开放标准。

以下是MCP官方的定义,知道你们不喜欢,但是还是要提一嘴。

MCP (Model Context Protocol) is an open-source standard for connecting AI applications to external systems.Using MCP, AI applications like Claude or ChatGPT can connect to data sources (e.g. local files, databases), tools (e.g. search engines, calculators) and workflows (e.g. specialized prompts)—enabling them to access key information and perform tasks.Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect electronic devices, MCP provides a standardized way to connect AI applications to external systems.
​ ——MCP官方

图1.1 MCP 就像 AI 领域的万能接口API接口

图1.1 MCP 就像 AI 领域的万能接口API接口

1.2 为什么是MCP而不是HTTP?

不是调用工具嘛?本质不是调用API嘛,为什么是MCP呢?而不是HTTP呢?举几个通俗易懂的例子:

  • HTTP
    • LLM:“嘿空调,帮我调到25度!”
    • 空调:“??你先给我写个300字的HTTP请求书,注明Content-Type,等我有空回你个JSON,你再解析状态码猜猜我开没开。”
    • LLM:(疯狂翻RFC文档中)
  • MCP现场:
    • LLM:“空调,25度。”
    • 空调:“妥了。”(因为MCP早就把空调变成了“会说人话的工具”)

HTTP每次调用工具都得:“请问您的API端点是什么?鉴权头怎么带?参数格式是snake_case还是camelCase?错误码404和418分别代表您是想喝茶还是崩溃了?”

而MCP直接给工具办了张标准化身份证,LLM扫一眼就知道:“哦,你是调温度的,你是查天气的,咱们说人话就行”。MCP不是“另一个协议”,而是给LLM和工具之间配的专业翻译+标准化菜单,让AI不用每次都从零学习“如何和人类发明的混乱API体系吵架”。毕竟,让一个背过全宇宙知识的模型,还要去记“某公司2022年旧版API的诡异参数命名规范”,无异于让爱因斯坦学怎么用老式投币洗衣机——不是不行,但有点浪费天才啊!所以,不是非MCP不可,而是用了MCP,终于能让LLM专心干脑力活,而不是当API协议考古学家了

2. MCP项目实战——手把手打造私人首席服饰官

如果你对AI Agent是新手,建议先看AI Agent开发实战QuickStart,可以先了解AI Agent项目的一些初始化流程。

接下来笔者教大家如何利用AI Agent结合MCP工具如何打造自己的首席服饰搭配官。

翻一翻自己的衣柜,是不是每天都在为自己的穿衣打扮而发愁?接下来就让AI Agent根据你自己的衣柜内的服饰,每天根据你需要的风格推荐你的上衣,下装,鞋子,配饰等等,让你每天都和阿祖一样帅……

2.1 私人数据准备

  1. 为了说明问题,有手就行的在localhost安装一个MySQL,不会安装的给笔者留言,或者来陆家嘴找笔者手把手教学;

  2. MySQL创建一个数据库dressing_master;

  3. 在该库创建一张数据库表clothing_items,建表语句如下;

    CREATE TABLE `clothing_items` (
      `id` int NOT NULL AUTO_INCREMENT COMMENT '主键,自增ID主键',
      `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '服饰名称',
      `category` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类',
      `color` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '颜色',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='你的衣橱'
    
  4. 向这张表里面填入你的服饰详情,为了这个项目,身为普通家庭的笔者就先买100件服饰吧;

    INSERT INTO dressing_master.clothing_items (name, category, color) VALUES
    -- 衣服(40条)
    ('纯棉圆领短袖T恤', '衣服', '白色'),
    ('条纹修身长袖衬衫', '衣服', '浅蓝'),
    ('宽松落肩卫衣', '衣服', '灰色'),
    ('高领羊毛针织衫', '衣服', '驼色'),
    ('法式泡泡袖上衣', '衣服', '米白'),
    ('黑色基础款打底衫', '衣服', '黑色'),
    ('碎花雪纺罩衫', '衣服', '粉紫'),
    ('牛仔拼接夹克', '衣服', '水洗蓝'),
    ('oversize 纯色T恤', '衣服', '燕麦色'),
    ('真丝V领衬衫', '衣服', '墨绿'),
    ('复古格纹西装外套', '衣服', '棕灰'),
    ('运动速干防晒衣', '衣服', '藏青'),
    ('蕾丝拼接短上衣', '衣服', '象牙白'),
    ('灯芯绒短外套', '衣服', '酒红'),
    ('日系工装衬衫', '衣服', '卡其'),
    ('莫代尔基础背心', '衣服', '裸粉'),
    ('学院风针织开衫', '衣服', '深红'),
    ('亚麻透气短袖', '衣服', '原麻色'),
    ('亮片派对上衣', '衣服', '银色'),
    ('撞色拼接卫衣', '衣服', '黑白'),
    ('垂感垂坠感衬衫', '衣服', '雾霾蓝'),
    ('短款露脐针织衫', '衣服', '奶油黄'),
    ('polo领休闲上衣', '衣服', '海军蓝'),
    ('抽绳连帽卫衣', '衣服', '炭黑'),
    ('宫廷风荷叶边上衣', '衣服', '香槟金'),
    ('冰丝凉感T恤', '衣服', '薄荷绿'),
    ('双排扣风衣式上衣', '衣服', '橄榄绿'),
    ('镂空钩针罩衫', '衣服', '乳白'),
    ('机能风多口袋马甲', '衣服', '军绿'),
    ('缎面吊带背心', '衣服', '玫瑰金'),
    ('扎染艺术T恤', '衣服', '靛蓝'),
    ('小香风粗花呢上衣', '衣服', '黑白格'),
    ('高弹力运动背心', '衣服', '荧光橙'),
    ('立领中式盘扣上衣', '衣服', '正红'),
    ('透明PVC雨衣罩衫', '衣服', '透明'),
    ('羊羔毛短外套', '衣服', '奶咖'),
    ('不对称下摆衬衫', '衣服', '石墨灰'),
    ('金属光泽未来感上衣', '衣服', '太空银'),
    ('棉麻混纺短袖', '衣服', '沙色'),
    ('可拆卸围巾两件套上衣', '衣服', '焦糖色'),
    
    -- 裤子(30条)
    ('高腰直筒牛仔裤', '裤子', '经典蓝'),
    ('阔腿垂感西裤', '裤子', '炭黑'),
    ('微喇复古牛仔裤', '裤子', '浅洗蓝'),
    ('运动束脚卫裤', '裤子', '深灰'),
    ('九分烟管裤', '裤子', '藏青'),
    ('破洞做旧牛仔裤', '裤子', '中蓝'),
    ('灯芯绒高腰长裤', '裤子', '芥末黄'),
    ('瑜伽高弹力 leggings', '裤子', '午夜黑'),
    ('工装多袋休闲裤', '裤子', '卡其'),
    ('丝绒垂坠感长裤', '裤子', '勃艮第红'),
    ('纸袋腰西装裤', '裤子', '燕麦色'),
    ('骑行单车短裤', '裤子', '炭灰'),
    ('老爹风锥形牛仔裤', '裤子', '深靛蓝'),
    ('亚麻宽松阔腿裤', '裤子', '本白'),
    ('皮质仿皮紧身裤', '裤子', '亮黑'),
    ('格纹复古西裤', '裤子', '棕格'),
    ('侧边条纹运动裤', '裤子', '白+红'),
    ('高腰微喇西裤', '裤子', '雾灰'),
    ('牛仔背带裤', '裤子', '浅蓝'),
    ('抽绳休闲束口裤', '裤子', '军绿'),
    ('垂感天丝阔腿裤', '裤子', '豆沙粉'),
    ('五分卷边牛仔短裤', '裤子', '水洗蓝'),
    ('高腰A字短裤', '裤子', '黑色'),
    ('斜纹棉质长裤', '裤子', '深棕'),
    ('打底鲨鱼裤', '裤子', '裸肤色'),
    ('格子工装短裤', '裤子', '灰绿'),
    ('弹力小脚牛仔裤', '裤子', '深蓝'),
    ('西装料九分裤', '裤子', '浅灰'),
    ('抽褶侧边长裤', '裤子', '酒红'),
    ('防泼水户外休闲裤', '裤子', '深绿'),
    
    -- 连衣裙(15条)
    ('收腰A字连衣裙', '连衣裙', '碎花'),
    ('真丝吊带长裙', '连衣裙', '湖蓝'),
    ('小黑裙经典款', '连衣裙', '黑色'),
    ('法式茶歇裙', '连衣裙', '樱桃红'),
    ('针织裹身连衣裙', '连衣裙', '焦糖色'),
    ('泡泡袖娃娃裙', '连衣裙', '鹅黄'),
    ('高开叉缎面礼服裙', '连衣裙', '酒红'),
    ('棉质背心连衣裙', '连衣裙', '条纹'),
    ('蕾丝拼接连衣裙', '连衣裙', '象牙白'),
    ('不规则下摆连衣裙', '连衣裙', '墨绿'),
    ('V领裹身长裙', '连衣裙', '藏青'),
    ('灯笼袖宫廷风连衣裙', '连衣裙', '宝蓝'),
    ('牛仔背带连衣裙', '连衣裙', '浅蓝'),
    ('雪纺印花度假裙', '连衣裙', '热带棕榈'),
    ('针织短款连衣裙', '连衣裙', '燕麦色'),
    
    -- 鞋子(6条)
    ('小白鞋经典款', '鞋子', '白色'),
    ('切尔西靴', '鞋子', '黑色'),
    ('厚底老爹鞋', '鞋子', '米白'),
    ('尖头细跟高跟鞋', '鞋子', '裸粉'),
    ('运动缓震跑鞋', '鞋子', '灰蓝'),
    ('乐福平底鞋', '鞋子', '棕色'),
    
    -- 帽子(4条)
    ('宽檐草编遮阳帽', '帽子', '原色'),
    ('毛呢贝雷帽', '帽子', '酒红'),
    ('棒球鸭舌帽', '帽子', '藏青'),
    ('针织冷帽', '帽子', '炭灰'),
    
    -- 饰品(5条,含丝巾、包包等)
    ('真丝丝巾(90x90cm)', '饰品', '波点红'),
    ('迷你链条斜挎包', '饰品', '银色'),
    ('珍珠耳环套装', '饰品', '珍珠白'),
    ('羊绒围巾', '饰品', '驼色'),
    ('编织手提托特包', '饰品', '米棕');
    
  5. 效果数据展示,如图2.1。

    图2.1 MySQL数据库中的服饰详情

图2.1 MySQL数据库中的服饰详情

2.2 编写你的第一个MCP项目

用到的技术栈,推荐FastMCP v2.0,开发快捷方便,用到的依赖包如下;

[project]
name = "my-first-mcp"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "fastmcp>=2.14.3",
    "pymysql>=1.1.2",
]
  1. 找一个你最爱的文件夹,用uv先初始化你的mcp项目;
uv init my-first-mcp
  1. 然后构建你的项目脚手架
./my-first-mcp
├── README.md
├── main.py
├── pyproject.toml
├── src
│   ├── config.py
│   ├── server
│   │   └── server_start.py
│   └── tools
│       └── get_clothing_items.py
└── uv.lock
  1. 编写.env文件,主要是MySQL相关的配置;

    # MySQL Config
    MYSQL_IP="localhost"
    MYSQL_PORT=3306
    MYSQL_USERNAME="your mysql user"
    MYSQL_PASSCODE="your mysql passcode"
    
    
  2. 编写config.py文件,内容如下,该文件主要是用来需要连接MySQL的地方提供配置信息;

    import os
    
    from dotenv import load_dotenv
    
    load_dotenv() # 加载环境变量文件.env
    
    
    MYSQL_IP = os.getenv("MYSQL_IP", "")  # 获取你的MySQL用户名
    MYSQL_PORT = os.getenv("MYSQL_PORT", 3306)  # 获取你的MySQL密码
    MYSQL_USERNAME = os.getenv("MYSQL_USERNAME", "")  # 获取你的MySQL用户名
    MYSQL_PASSCODE = os.getenv("MYSQL_PASSCODE", "")  # 获取你的MySQL密码
    
  3. 编写tools文件夹里面的get_clothing_items.py,该文件是整个MCP服务器的核心,以MCP协议的方式获取MySQL内的服饰信息。

    import pymysql
    from dotenv import load_dotenv
    from fastmcp import FastMCP
    from src.config import MYSQL_IP,MYSQL_PORT,MYSQL_USERNAME,MYSQL_PASSCODE
    
    load_dotenv()
    
    # 初始化基本信息MCP模块
    DRESSING_MASTER_MCP= FastMCP(
        name="GetClothingItems",
        instructions="""
            从你的私人衣柜里面获取你现有的服饰。
        """
    )
    
    
    DRESSING_MASTER_DB_CONFIG = {
        "host": MYSQL_IP,
        "port": int(MYSQL_PORT),
        "user": MYSQL_USERNAME,
        "password": MYSQL_PASSCODE,
        "database": "",
        "charset": "utf8mb4"
    }
    
    print(MYSQL_IP,MYSQL_PORT,MYSQL_USERNAME,MYSQL_PASSCODE)
    
    @DRESSING_MASTER_MCP.tool()
    def get_clothing_items_info() -> dict:
        """
        获得到你的衣橱柜的服饰信息
        Returns:
            返回值类型:dict
            dict中字段的含义:
                success: 查询数据是否成功, True:成功,False: 未查到值或者程序报错。
                data: 返回衣橱柜的服饰信息列表,若未找到则返回错误信息
                    id: 主键,自增ID
                    name: 服饰名称,独一无二
                    category: 服饰分类,衣服,裤子,帽子等
                    color: 服饰颜色
        """
        connection = None
        try:
            DRESSING_MASTER_DB_CONFIG['database'] = 'dressing_master'
            connection = pymysql.connect(**DRESSING_MASTER_DB_CONFIG)
            with connection.cursor(pymysql.cursors.DictCursor) as cursor:
                sql = """
                    select * from dressing_master.clothing_items
                """
                cursor.execute(sql)
                result = cursor.fetchall()
                # print(result)
    
                if result:
                    print(f'result={result}')
                    return {"success": True, "data": result}
                else:
                    print(f'No matching records found.')
                    return {"success": True, "data": "No matching records found."}
        except Exception as e:
            print(f'Database error:{e}')
            return {"success": False, "error: ": f"{e}"}
        finally:
            if connection:
                connection.close()
    
    
    
  4. 写一个简单的server_start.py脚本,模拟MCP Server的部署,具体内容如下;

    from fastmcp import FastMCP
    from src.tools.get_clothing_items import DRESSING_MASTER_MCP
    from starlette.requests import Request
    from starlette.responses import PlainTextResponse
    
    # 主MCP服务器,启用静态 token 验证
    app = FastMCP(name="ClothingMCPServer")
    
    # 健康检查路由
    @app.custom_route("/actuator/health", methods=["GET"])
    async def health_check(request: Request) -> PlainTextResponse:
        return PlainTextResponse("OK")
    
    
    # 挂载获取衣服的模块
    app.mount(DRESSING_MASTER_MCP, prefix="DRESSING_MASTER_MCP")
    
    if __name__ == "__main__":
        app.run(transport="http", host="127.0.0.1", port=8000)
    
  5. 运行server_start.py,在localhost把这个MCP Server部署起来,如图2.2的效果;

图2.2 MCP Server在本地启动

图2.2 MCP Server在本地启动
  1. 本地安装MCP开发调试神器——MCP Inspector,先安装Node.js 18+,因为需要用到Node.js的自带工具npx,然后用shell命令启动MCP Inspector,效果如图2.3;

    ╰─$ npx @modelcontextprotocol/inspector@0.18.0
    Starting MCP inspector...
    ⚙️ Proxy server listening on localhost:6277
    🔑 Session token: 6c4e10913ed80fdd3128be5f10034954f5dc0e4a13cdcdf386411d647e2e3ba1
       Use this token to authenticate requests or set DANGEROUSLY_OMIT_AUTH=true to disable auth
    
    🚀 MCP Inspector is up and running at:
       http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=6c4e10913ed80fdd3128be5f10034954f5dc0e4a13cdcdf386411d647e2e3ba1
    
    🌐 Opening browser...
    New StreamableHttp connection request
    Query parameters: {"url":"http://0.0.0.0:8000","transportType":"streamable-http"}
    Created StreamableHttp client transport
    Client <-> Proxy  sessionId: d4c2964a-4ff4-465b-b935-a1547ff7fd8c
    ……
    

    图2.3 MCP Inspector调试效果

图2.3 MCP Inspector调试效果

恭喜你,你的第一台MCP Server已经部署成功了,更多MCP Server 的玩法,可以参考FastMCP官方文档。光有MCP Server 肯定是不够的,那部署好的MCP Server 怎么跟Agent联动呢?请读者进入下一环节。

2.3 AI Agent调用MCP Server

  1. 还是在你最爱的文件夹,用uv先初始化你的另一个项目my-agent-with-mcp,这个项目是用来构建一个agent去调用刚刚部署的MCP Server
uv init my-agent-with-mcp
  1. 然后构建你的项目脚手架和依赖的安装包
# 项目脚手架
./my-agent-with-mcp
├── README.md
├── main.py
├── overview.py
├── pyproject.toml
├── src
│   ├── app
│   │   └── chain.py
│   ├── config.py
│   ├── mcp
│   │   └── client.py
│   └── prompt
│       └── system_prompt.py
└── uv.lock


# 依赖的安装包
[project]
name = "my-agent-with-mcp"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "dotenv>=0.9.9",
    "langchain>=1.2.4",
    "langchain-mcp-adapters>=0.2.1",
    "langchain-ollama>=1.0.1",
    "langchain-openai>=1.1.7",
    "langfuse>=3.12.0",
    "rich>=14.2.0",
]

  1. 编写.env文件,主要是用到的LLM以及可监测性的LangFuse相关的配置;

    # ============================================================================
    # MODEL CONFIGURATION
    # ============================================================================
    
    # Default model for all agents
    # Examples: "anthropic:claude-haiku-4-5", "openai:gpt-4o-mini", "openai:gpt-4o"
    # Can be overridden per-agent in factory functions
    
    
    # 恭喜你不用一分钱先白嫖好内部模型和外部模型
    LOCAL_MODEL="ollama:qwen3:4b"          # 自己本地的Ollama模型
    EXTERNAL_MODEL="openai:Qwen/Qwen3-8B"  # 白嫖的硅基流动在线外部模型,这里注意下,如果初始化模型用init_chat_model(),他会根据“openai: ”自己主动去Mapping 下面的配置项OPENAI_API_KEY和OPENAI_BASE_URL,非常丝滑
    
    # If using OpenAI with siliconf
    OPENAI_API_KEY="sk-XXX"                # 需要自己注册硅基流动网站并且获取key,配置的前缀“OPEN_”会被初始化模型用init_chat_model()根据模型的“openai: ”自动引用
    OPENAI_BASE_URL="https://api.siliconflow.cn/v1"     # 硅基流动在线网址,配置的前缀“OPEN_”会被初始化模型用init_chat_model()根据模型的“openai: ”自动引用
    
    
    # ============================================================================
    # LANGFUSE CONFIGURATION
    # ============================================================================
    LANGFUSE_SECRET_KEY="sk-XXX"
    LANGFUSE_PUBLIC_KEY="pk-XXX"
    LANGFUSE_BASE_URL="http://localhost:3000"
    
    
    
  2. 编写config.py文件,内容如下,该文件主要是用来需要用到LLMLangFuse的地方提供配置信息;

    import os
    
    from dotenv import load_dotenv
    
    load_dotenv() # 加载环境变量文件.env
    
    # ============================================================================
    # MODEL CONFIGURATION
    # ============================================================================
    
    # DEFAULT_MODEL = os.getenv("LOCAL_MODEL", "anthropic:claude-haiku-4-5")   # 获取默认模型为环境变量中的本地Ollama模型模型
    
    DEFAULT_MODEL = os.getenv("EXTERNAL_MODEL", "anthropic:claude-haiku-4-5")  # 获取默认模型为环境变量中的外部硅基流动免费模型
    
    
    
  3. 编写mcp文件夹里面的client.py,该文件是连接MCP Server服务器的关键,内容如下;

    from langchain_mcp_adapters.client import MultiServerMCPClient
    
    async def list_vehicle_tools():
        mcp_config = {
            "get_clothing": {
                "url": f"http://0.0.0.0:8000/mcp",
                "transport": "streamable_http",
    
            }
        }
    
        client = MultiServerMCPClient(mcp_config)
        tools = await client.get_tools()
        return tools
    
    
  4. 编写prompt文件夹下的system_prompt.py,这个文件的关键是为agent提供系统提示词的定位,内容如下;

    system_prompt = """你是一个专业的服装搭配大师,根据工具调用获取服饰信息细节,搭配出满足客户风格的穿着打扮,将结果控制在500字以内。"""
    
  5. 编写app文件夹下的chain.py,这个文件是整个agent的核心,用来构建agent去调用MCP Server获取衣柜里的服饰信息,然后再让agent根据工具调用获取服饰信息细节,搭配出满足客户风格的穿着打扮,整个代码是基于LangChain的实现;

    import asyncio
    
    from langchain.agents import create_agent
    from langchain.chat_models import init_chat_model
    from src.config import DEFAULT_MODEL
    from src.prompt import system_prompt
    from src.mcp import client
    from langfuse.langchain import CallbackHandler
    from dotenv import load_dotenv
    
    load_dotenv()
    
    # Initialize Langfuse CallbackHandler for Langchain (tracing) LangFuse相关
    langfuse_handler = CallbackHandler() # LangFuse相关
    
    mcp_tools = asyncio.run(client.list_vehicle_tools())
    # print(mcp_tools)
    
    async def main():
    
        selected_search_tools = ["DRESSING_MASTER_MCP_get_clothing_items_info"]
    
        mcp_search_tools = [t for t in mcp_tools if t.name in selected_search_tools]
    
        llm = init_chat_model(
            model=DEFAULT_MODEL,
            temperature=0
        )
    
    
        agent = create_agent(
            model=llm,
            tools=mcp_search_tools,
            system_prompt=system_prompt.system_prompt
        )
    
        result = await agent.ainvoke({"messages": [
            {"role": "user", "content": "请帮我搭配韩式痞帅风格。"}
        ]},
            config={"callbacks": [langfuse_handler]}
        )
    
    
        for message in result["messages"]:
            message.pretty_print()
    
    
    if __name__ == '__main__':
        asyncio.run(main())
    
    
  6. 运行代码的效果如下,分别将人类的问题Human Message,AI决定去调工具的信息Ai Message,工具返回的信息Tool Message,以及最后agent根据工具调用获取服饰信息细节,搭配出满足客户风格的穿着打扮的总结Ai Message全部打印出来了,内容如下;

================================ Human Message =================================

请帮我搭配韩式痞帅风格。
================================== Ai Message ==================================
Tool Calls:
  DRESSING_MASTER_MCP_get_clothing_items_info (chatcmpl-tool-3b351d49250445cf9434c9a0d0d52c08)
 Call ID: chatcmpl-tool-3b351d49250445cf9434c9a0d0d52c08
  Args:
================================= Tool Message =================================
Name: DRESSING_MASTER_MCP_get_clothing_items_info

[{'type': 'text', 'text': '{"success":true,"data":[{"id":1,"name":"纯棉圆领短袖T恤","category":"衣服","color":"白色"},{"id":2,"name":"条纹修身长袖衬衫","category":"衣服","color":"浅蓝"},{"id":3,"name":"宽松落肩卫衣","category":"衣服","color":"灰色"},{"id":4,"name":"高领羊毛针织衫","category":"衣服","color":"驼色"},{"id":5,"name":"法式泡泡袖上衣","category":"衣服","color":"米白"},{"id":6,"name":"黑色基础款打底衫","category":"衣服","color":"黑色"},{"id":7,"name":"碎花雪纺罩衫","category":"衣服","color":"粉紫"},{"id":8,"name":"牛仔拼接夹克","category":"衣服","color":"水洗蓝"},{"id":9,"name":"oversize 纯色T恤","category":"衣服","color":"燕麦色"},{"id":10,"name":"真丝V领衬衫","category":"衣服","color":"墨绿"},{"id":11,"name":"复古格纹西装外套","category":"衣服","color":"棕灰"},{"id":12,"name":"运动速干防晒衣","category":"衣服","color":"藏青"},{"id":13,"name":"蕾丝拼接短上衣","category":"衣服","color":"象牙白"},{"id":14,"name":"灯芯绒短外套","category":"衣服","color":"酒红"},{"id":15,"name":"日系工装衬衫","category":"衣服","color":"卡其"},{"id":16,"name":"莫代尔基础背心","category":"衣服","color":"裸粉"},{"id":17,"name":"学院风针织开衫","category":"衣服","color":"深红"},{"id":18,"name":"亚麻透气短袖","category":"衣服","color":"原麻色"},{"id":19,"name":"亮片派对上衣","category":"衣服","color":"银色"},{"id":20,"name":"撞色拼接卫衣","category":"衣服","color":"黑白"},{"id":21,"name":"垂感垂坠感衬衫","category":"衣服","color":"雾霾蓝"},{"id":22,"name":"短款露脐针织衫","category":"衣服","color":"奶油黄"},{"id":23,"name":"polo领休闲上衣","category":"衣服","color":"海军蓝"},{"id":24,"name":"抽绳连帽卫衣","category":"衣服","color":"炭黑"},{"id":25,"name":"宫廷风荷叶边上衣","category":"衣服","color":"香槟金"},{"id":26,"name":"冰丝凉感T恤","category":"衣服","color":"薄荷绿"},{"id":27,"name":"双排扣风衣式上衣","category":"衣服","color":"橄榄绿"},{"id":28,"name":"镂空钩针罩衫","category":"衣服","color":"乳白"},{"id":29,"name":"机能风多口袋马甲","category":"衣服","color":"军绿"},{"id":30,"name":"缎面吊带背心","category":"衣服","color":"玫瑰金"},{"id":31,"name":"扎染艺术T恤","category":"衣服","color":"靛蓝"},{"id":32,"name":"小香风粗花呢上衣","category":"衣服","color":"黑白格"},{"id":33,"name":"高弹力运动背心","category":"衣服","color":"荧光橙"},{"id":34,"name":"立领中式盘扣上衣","category":"衣服","color":"正红"},{"id":35,"name":"透明PVC雨衣罩衫","category":"衣服","color":"透明"},{"id":36,"name":"羊羔毛短外套","category":"衣服","color":"奶咖"},{"id":37,"name":"不对称下摆衬衫","category":"衣服","color":"石墨灰"},{"id":38,"name":"金属光泽未来感上衣","category":"衣服","color":"太空银"},{"id":39,"name":"棉麻混纺短袖","category":"衣服","color":"沙色"},{"id":40,"name":"可拆卸围巾两件套上衣","category":"衣服","color":"焦糖色"},{"id":41,"name":"高腰直筒牛仔裤","category":"裤子","color":"经典蓝"},{"id":42,"name":"阔腿垂感西裤","category":"裤子","color":"炭黑"},{"id":43,"name":"微喇复古牛仔裤","category":"裤子","color":"浅洗蓝"},{"id":44,"name":"运动束脚卫裤","category":"裤子","color":"深灰"},{"id":45,"name":"九分烟管裤","category":"裤子","color":"藏青"},{"id":46,"name":"破洞做旧牛仔裤","category":"裤子","color":"中蓝"},{"id":47,"name":"灯芯绒高腰长裤","category":"裤子","color":"芥末黄"},{"id":48,"name":"瑜伽高弹力 leggings","category":"裤子","color":"午夜黑"},{"id":49,"name":"工装多袋休闲裤","category":"裤子","color":"卡其"},{"id":50,"name":"丝绒垂坠感长裤","category":"裤子","color":"勃艮第红"},{"id":51,"name":"纸袋腰西装裤","category":"裤子","color":"燕麦色"},{"id":52,"name":"骑行单车短裤","category":"裤子","color":"炭灰"},{"id":53,"name":"老爹风锥形牛仔裤","category":"裤子","color":"深靛蓝"},{"id":54,"name":"亚麻宽松阔腿裤","category":"裤子","color":"本白"},{"id":55,"name":"皮质仿皮紧身裤","category":"裤子","color":"亮黑"},{"id":56,"name":"格纹复古西裤","category":"裤子","color":"棕格"},{"id":57,"name":"侧边条纹运动裤","category":"裤子","color":"白+红"},{"id":58,"name":"高腰微喇西裤","category":"裤子","color":"雾灰"},{"id":59,"name":"牛仔背带裤","category":"裤子","color":"浅蓝"},{"id":60,"name":"抽绳休闲束口裤","category":"裤子","color":"军绿"},{"id":61,"name":"垂感天丝阔腿裤","category":"裤子","color":"豆沙粉"},{"id":62,"name":"五分卷边牛仔短裤","category":"裤子","color":"水洗蓝"},{"id":63,"name":"高腰A字短裤","category":"裤子","color":"黑色"},{"id":64,"name":"斜纹棉质长裤","category":"裤子","color":"深棕"},{"id":65,"name":"打底鲨鱼裤","category":"裤子","color":"裸肤色"},{"id":66,"name":"格子工装短裤","category":"裤子","color":"灰绿"},{"id":67,"name":"弹力小脚牛仔裤","category":"裤子","color":"深蓝"},{"id":68,"name":"西装料九分裤","category":"裤子","color":"浅灰"},{"id":69,"name":"抽褶侧边长裤","category":"裤子","color":"酒红"},{"id":70,"name":"防泼水户外休闲裤","category":"裤子","color":"深绿"},{"id":71,"name":"收腰A字连衣裙","category":"连衣裙","color":"碎花"},{"id":72,"name":"真丝吊带长裙","category":"连衣裙","color":"湖蓝"},{"id":73,"name":"小黑裙经典款","category":"连衣裙","color":"黑色"},{"id":74,"name":"法式茶歇裙","category":"连衣裙","color":"樱桃红"},{"id":75,"name":"针织裹身连衣裙","category":"连衣裙","color":"焦糖色"},{"id":76,"name":"泡泡袖娃娃裙","category":"连衣裙","color":"鹅黄"},{"id":77,"name":"高开叉缎面礼服裙","category":"连衣裙","color":"酒红"},{"id":78,"name":"棉质背心连衣裙","category":"连衣裙","color":"条纹"},{"id":79,"name":"蕾丝拼接连衣裙","category":"连衣裙","color":"象牙白"},{"id":80,"name":"不规则下摆连衣裙","category":"连衣裙","color":"墨绿"},{"id":81,"name":"V领裹身长裙","category":"连衣裙","color":"藏青"},{"id":82,"name":"灯笼袖宫廷风连衣裙","category":"连衣裙","color":"宝蓝"},{"id":83,"name":"牛仔背带连衣裙","category":"连衣裙","color":"浅蓝"},{"id":84,"name":"雪纺印花度假裙","category":"连衣裙","color":"热带棕榈"},{"id":85,"name":"针织短款连衣裙","category":"连衣裙","color":"燕麦色"},{"id":86,"name":"小白鞋经典款","category":"鞋子","color":"白色"},{"id":87,"name":"切尔西靴","category":"鞋子","color":"黑色"},{"id":88,"name":"厚底老爹鞋","category":"鞋子","color":"米白"},{"id":89,"name":"尖头细跟高跟鞋","category":"鞋子","color":"裸粉"},{"id":90,"name":"运动缓震跑鞋","category":"鞋子","color":"灰蓝"},{"id":91,"name":"乐福平底鞋","category":"鞋子","color":"棕色"},{"id":92,"name":"宽檐草编遮阳帽","category":"帽子","color":"原色"},{"id":93,"name":"毛呢贝雷帽","category":"帽子","color":"酒红"},{"id":94,"name":"棒球鸭舌帽","category":"帽子","color":"藏青"},{"id":95,"name":"针织冷帽","category":"帽子","color":"炭灰"},{"id":96,"name":"真丝丝巾(90x90cm)","category":"饰品","color":"波点红"},{"id":97,"name":"迷你链条斜挎包","category":"饰品","color":"银色"},{"id":98,"name":"珍珠耳环套装","category":"饰品","color":"珍珠白"},{"id":99,"name":"羊绒围巾","category":"饰品","color":"驼色"},{"id":100,"name":"编织手提托特包","category":"饰品","color":"米棕"}]}', 'id': 'lc_e11e85ad-1c55-4dec-b5c1-e41189a3012c'}]
================================== Ai Message ==================================

韩式痞帅风格注重随性与型格的平衡,强调剪裁利落、配色低调但细节有态度。以下是为你搭配的一套造型:

**上衣**:选择「条纹修身长袖衬衫」(浅蓝),微卷袖口增添随性感,扣子随意解开两颗,内搭「黑色基础款打底衫」,制造层次又不失沉稳。

**下装**:搭配「破洞做旧牛仔裤」(中蓝),轻微破洞设计提升街头感,裤脚微卷,展现脚踝线条,与整体慵懒帅气气质呼应。

**外套**(可选):外搭一件「牛仔拼接夹克」(水洗蓝),增加硬朗轮廓,强化痞感,适合春秋季节。

**鞋子**:选择「厚底老爹鞋」(米白),增高显腿长,同时带来年轻动感气息,与整体风格相得益彰。

**配饰**:戴一顶「棒球鸭舌帽」(藏青),帽檐压低一点,更显不羁;斜挎「迷你链条斜挎包」(银色),实用又时髦。

整体以蓝、黑、白为主色调,干净中带点叛逆,轻松打造韩剧男主般的痞帅魅力。

Process finished with exit code 0

  1. 这里要注意:最后总结Ai Message和具返回的信息Tool Message的区别,工具返回的信息Tool Message的数据一定是真实存在你衣柜里面的服饰,但是最后总结Ai Message里面服饰有一定机率未必是你衣柜里面的,为什么呢?这就是AI的幻觉,所以真实的项目一般都要把AI最后生成的服饰跟你的真实衣柜再Mapping一下,看看是否有误,该功能是可以程序自动化,此处笔者就先直接贴图说明问题,如图2.4,这次AI的结果未出现幻觉,全部是笔者衣柜的服饰;

    图2.4 AI推荐的服饰确实在衣柜里存在

图2.4 AI推荐的服饰确实在衣柜里存在
  1. my-agent-with-mcpPycharm的效果如图2.5;
    图2.5 my-agent-with-mcp在Pycharm
图2.5 my-agent-with-mcp在Pycharm
  1. LangFuse可观测性的效果展示如图2.6。
    图2.6 my-agent-with-mcp在LangFuse的效果展示
图2.6 my-agent-with-mcp在LangFuse的效果展示

恭喜你已经让你的AI Agent长出了手脚,让他可以通过MCP协议跟你的私人数据互动,从而真正实现AI Agent的能力的衍生,而不是单纯冰冷的回答问题;看完还不学起来并邀请你的热爱AI的宝子一起来学MCP?

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐