MCP
基本概念
Model Context Protocol (MCP) 是一种协议,用来 在多个模型或服务之间传递和管理上下文信息。
简单来说,当你调用大模型或多个模型协作完成任务时,每个模型可能需要知道之前的对话、输入或者其他环境信息。MCP 就像一个“上下文管道”,确保每次调用模型时,模型能够理解完整的上下文,而不是每次都从零开始。
一句话概括: MCP 是给大模型“记忆”和“理解上下文”的标准化协议。
用途场景
1)多轮对话管理
在聊天机器人或客服系统中,需要让模型记住上下文,提供连贯回答。
2)模型协作任务
不同模型处理不同子任务,MCP 负责传递上下文数据,使它们协同完成复杂任务。
3)状态跟踪与优化
在数据分析、自动化决策等场景,模型需要根据前一次的结果继续操作,MCP 帮助管理状态信息。
4)多模型集成
不同厂商或类型的模型可以通过 MCP 统一协议交互,提高兼容性。
为什么要使用MCP
- 保持多轮连贯性:模型不会丢失之前的对话或任务状态。
- 支持模型协作:不同模型可以共享上下文,协同完成复杂任务。
- 统一上下文管理:不需要每个开发者自己设计上下文存储和传递机制。
- 提升开发效率:模型调用变得标准化和可扩展。
和直接调用API的区别
| 区别点 | 普通 API 调用 | MCP 调用 |
|---|---|---|
| 上下文处理 | 每次调用通常是独立的,需要自己维护状态 | MCP 自动管理上下文,模型可以连续理解信息 |
| 多模型协作 | 不便于不同模型共享状态 | MCP 提供标准上下文协议,多模型协作顺畅 |
| 状态持久化 | 开发者自己实现 | MCP 内置上下文记录和更新机制 |
| 开发复杂度 | 高,需要手动管理历史数据和调用顺序 | 低,MCP 统一标准化上下文交互 |
| 可扩展性 | 难,添加新模型可能需要重写逻辑 | 高,只需遵循 MCP 协议即可接入新模型 |
MCP 让模型调用像“有记忆的助手”,而普通 API 调用更像“每次都是全新指令”。
实践案例
使用Cursor,基于一个常见的安全脚本,封装成一个MCP服务。
Cursor支持AI写代码、支持作为MCP客户端和人进行“人机交互”;
MCP支持上下文记忆、支持扩展和别的工具(如:其他安全功能、IM工具、数据分析工具等)进行协同。
核心文件
github地址:https://github.com/cherriewzx/Sec-farming/tree/main/Sec_tool
1)MCP转换程序:mcp_server.py ,把 dir_serch.py 的检测能力以 MCP(JSON-RPC over stdio)工具的形式对外提供。
- 入口服务。
- 接收外部请求(可能是 HTTP 请求、CLI 调用或者模型请求)。
- 读取 mcp_config.json,提取上下文信息(上一次检测状态、用户偏好、配置等)。
- 调用核心功能 dir_search.py。
- 将结果和更新后的上下文返回给调用者,并写回 mcp_config.json。
2)核心检测功能:dir_serch.py ,主要实现一个敏感目录扫描。
- 执行实际的安全检测逻辑(比如目录扫描、敏感信息检测)。
- 接收从 mcp_server.py 传来的参数和上下文信息。
- 输出检测结果。
3)Cursor配置文件:mcp_config.json,告诉支持 MCP 的客户端如何启动这个服务器。
- 存储配置参数、检测历史、状态信息。
- MCP 通过它来实现“记忆”,保证多轮调用的连续性。
执行流程
外部请求
│
▼
mcp_server.py 接收请求
│
▼
读取上下文 → mcp_config.json
│
▼
调用 dir_search.py 执行检测
│
▼
返回检测结果 → 更新上下文
│
▼
mcp_server.py 返回结果给调用者
使用方式
1)传统命令行方式直接调用 dir_search.py
python3 dir_serch.py -t http://127.0.0.1:8888[+] Scanning target: http://127.0.0.1:8888 ...-> findings: 2
[+] Scan finished. 2 records saved to results.json

2)使用Cursor交互
chat 框对Cursor 输入指令:

结果:

让Cursor生成的可视化页面:
