MCP入门指南:打造智能AI工具的第一步

MCP(Model Control Protocol)是一个强大的框架,让开发者能够轻松创建、管理和调用AI工具、资源和提示模板。本文将介绍MCP的基础概念,并通过一个简单的价格计算示例,展示如何使用MCP构建自己的AI增强应用。我们将探讨如何定义工具函数、创建资源和设计提示模板,以及如何通过客户端与这些组件进行交互。无论你是AI开发新手还是有经验的工程师,这篇指南都将帮助你快速掌握MCP的核心功能。

MCP简介

MCP是一个专为AI应用设计的协议框架,它提供了一种标准化的方式来定义和调用工具、管理资源以及创建提示模板。通过MCP,开发者可以:

  • 创建结构化的工具函数供AI模型调用
  • 管理和访问各种资源(如文档、配置等)
  • 设计和渲染动态提示模板
  • 在客户端和服务器之间建立标准化的通信

核心组件

MCP框架主要包含三个核心组件:

  1. 工具(Tools):可被AI调用的函数,具有明确的输入参数和返回值
  2. 资源(Resources):可被访问的静态或动态数据
  3. 提示模板(Prompts):用于生成结构化提示的模板函数

实战示例:价格计算器

我们的示例应用是一个简单的价格计算系统,它包含:

  1. 一个计算折扣价格的工具
  2. 一个包含公司定价策略的资源
  3. 一个生成价格计算提示的模板

依赖可通过pip install mcp命令来安装

1. 创建MCP实例

python 复制代码
from mcp.server.fastmcp import FastMCP

# 创建FastMCP实例
mcp = FastMCP(name="MCP基础示例")

2. 定义工具函数

python 复制代码
@mcp.tool()
def calculate_price(base_price: float, discount_percent: float = 0) -> Dict:
    """计算折扣后的价格"""
    discount = base_price * (discount_percent / 100)
    final_price = base_price - discount
    
    return {
        "original_price": base_price,
        "discount_amount": discount,
        "final_price": final_price
    }

3. 添加资源

python 复制代码
@mcp.resource(uri="data://pricing-policy", name="定价策略")
def pricing_policy_resource():
    """返回公司的定价策略信息"""
    return """
# 公司定价策略

## 基本规则
- 标准商品折扣不超过30%
- VIP客户可享受额外5%折扣
- 季节性促销商品最高折扣50%

## 特殊情况
- 清仓商品可享受高达70%的折扣
- 新品上市30天内不参与任何折扣活动
    """

4. 创建提示模板

python 复制代码
@mcp.prompt(name="价格计算器")
def price_calculator_prompt(item_name: str, base_price: float, customer_type: str = "普通客户") -> str:
    """生成价格计算的提示模板"""
    vip_text = ",并考虑VIP额外5%折扣" if customer_type == "VIP客户" else ""
    
    return f"""请为以下商品计算最终价格{vip_text}:
    
商品: {item_name}
基础价格: {base_price}元
客户类型: {customer_type}

请考虑公司定价策略,提供一个合理的折扣建议和最终价格。
"""

客户端调用

MCP框架同时提供了客户端接口,使我们能够轻松地与服务器端定义的工具、资源和提示模板进行交互:

python 复制代码
async def test_basic_examples():
    # 创建服务器参数
    server_params = StdioServerParameters(
        command="python",
        args=["mcp/01_hello_world_tool.py", "--server"],
        env=None
    )
    
    async with stdio_client(server_params) as stream:
        async with ClientSession(*stream) as session:
            # 初始化连接
            await session.initialize()
            
            # 调用工具
            result = await session.call_tool("calculate_price", {
                "base_price": 100, 
                "discount_percent": 20
            })
            
            # 访问资源
            content = await session.read_resource("data://pricing-policy")
            
            # 获取渲染后的提示模板
            prompt_text = await session.get_prompt("价格计算器", {
                "item_name": "高级笔记本电脑",
                "base_price": "5999",
                "customer_type": "VIP客户"
            })

运行方式

MCP应用可以以两种模式运行:

  1. 服务器模式:提供工具、资源和提示模板服务
  2. 客户端模式:连接到服务器并调用其功能
python 复制代码
if __name__ == "__main__":
    import sys
    
    if len(sys.argv) > 1 and sys.argv[1] == "--server":
        # 以服务器模式运行
        mcp.run()
    else:
        # 运行测试客户端
        asyncio.run(test_basic_examples())
  1. 运行python .\mcp\01_hello_world_tool.py 可看到输出的结果
bash 复制代码
 python .\mcp\01_hello_world_tool.py

=== 测试工具 ===
价格计算结果: meta=None content=[TextContent(type='text', text='{\n  "original_price": 100.0,\n  "discount_amount": 20.0,\n  "final_price": 80.0\n}', annotations=None)] isError=False

=== 测试资源 ===
可用资源: [('meta', None), ('nextCursor', None), ('resources', [Resource(uri=AnyUrl('data://pricing-policy'), name='定价策略', description='返回公司的定价策略信息', mimeType='text/plain', size=None, annotations=None)])]
资源内容:
meta=None contents=[TextResourceContents(uri=AnyUrl('data://pricing-policy'), mimeType='text/plain', text='\n# 公司定价策略\n\n## 基本规则\n- 标准商品折扣不超过30%\n- VIP客户可享受额外5%折扣\n- 季节
性促销商品最高折扣50%\n\n## 特殊情况\n- 清仓商品可享受高达70%的折扣\n- 新品上市30天内不参与任何折扣
活动\n    ')]

=== 测试提示模板 ===
可用提示模板: [('meta', None), ('nextCursor', None), ('prompts', [Prompt(name='价格计算器', description='生成价格计算的提示模板\n    \n    Args:\n        item_name: 商品名称\n        base_price: 基 
础价格\n        customer_type: 客户类型 (普通客户/VIP客户)\n    \n    Returns:\n        格式化的提 
示模板\n    ', arguments=[PromptArgument(name='item_name', description=None, required=True), PromptArgument(name='base_price', description=None, required=True), PromptArgument(name='customer_type', 
description=None, required=False)])])]
渲染后的提示模板:
meta=None description=None messages=[PromptMessage(role='user', content=TextContent(type='text', text='请为以下商品计算最终价格,并考虑VIP额外5%折扣:\n    \n商品: 高级笔记本电脑\n基础价格: 5999.0元
\n客户类型: VIP客户\n\n请考虑公司定价策略,提供一个合理的折扣建议和最终价格。\n', annotations=None))]

如果你看到如上的信息,恭喜你以及成功的使用modelcontextprotocol.io/ 的fastmcp运行一个helloworld示例!

相关推荐
coder_pig1 小时前
🙋‍♂️挑战用1天,让AI从0到1搭建纯前端 "塔防游戏"
aigc·mcp·trae
顺丰同城前端技术团队2 小时前
我想蹭一波 Trae 的流量,所以我写了关于 MCP 的这篇文章并起了这个标题...
前端·程序员·mcp
ZackSock5 小时前
FastMCP 快速入门
mcp
bastgia7 小时前
LangGraph + MCP + Ollama 实战教程:打造强大的多智能体聊天机器人
llm·mcp
掘我的金9 小时前
MCP进阶指南:资源管理与动态数据访问
mcp
掘我的金9 小时前
MCP高级应用:构建智能函数工具
mcp
叶 落12 小时前
三种语言写 MCP
java·python·ai·typescript·mcp
小码农叔叔13 小时前
【AI智能体】Spring AI MCP 服务常用开发模式实战详解
mcp·springboot使用mcp·mcp使用详解·mcp使用·spring ai mcp·mcp 详解·mcp开发模式
qife20 小时前
GitHub MCP Server - 无缝集成GitHub API的自动化工具
go·github·自动化编程·mcp·api集成