个人计算器MCP
使用模型上下文协议(MCP)的个人计算机代理项目。您可以使用LangChain和LangGraph用自然语言控制计算器。
结构
MCPtest/
├── server.py # MCP 서버 (계산기 도구 제공)
├── client.py # 스크립트 모드 클라이언트
├── client_cli.py # 대화형 CLI 클라이언트
├── pyproject.toml # 프로젝트 설정
└── .env_sample # 환경변수 샘플功能
MCP服务器(server.py)
- 设置/查询用户名
- 四则运算(加法、减法、乘法、除法)
- 查看计算历史记录
- 查询统计信息
- 累计合计计算
- 初始化计算器
客户端
- 客户端.py:按预定义的方案顺序运行
- client_cli.py:通过交互式界面自由查询
安装
需求
- Python 3.13+
- uv(包管理器)
安装方法
# uv 설치 (없는 경우)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 프로젝트 의존성 설치
uv sync环境设置
.env_sample请参阅 .env 请创建文件。
cp .env_sample .env环境变量
| 变量 | 说明 |
|---|---|
MODEL_NAME | 要使用的型号名称(例如: gpt-4o, Qwen/Qwen3-32B) |
OPENAI_API_KEY | OpenAI API密钥(使用GPT模型时) |
CUSTOM_LLM_URL | 自定义LLM服务器URL(使用vLLM等时) |
选择型号:
- 在型号名称中
gpt包括时使用OpenAI API - 其他情况
CUSTOM_LLM_URL使用的自定义LLM服务器
使用方法
交互式模式(推荐)
uv run python client_cli.py命令:
- 自由输入一般问题
help:获取帮助exit或quit:结束
脚本模式
uv run python client.py按顺序运行预定义的方案。
使用示例
💬 You: 내 이름은 철수야
🤖 Bot: 안녕하세요, 철수님! 계산기를 시작합니다.
💬 You: 5 + 3을 계산해줘
🤖 Bot: 철수님, 5 + 3 = 8
💬 You: 10 × 2를 계산해줘
🤖 Bot: 철수님, 10 × 2 = 20
💬 You: 기록 보여줘
🤖 Bot: 📊 철수님의 계산 기록:
1. add: 5 → 3 = 8
2. multiply: 10 → 2 = 20
💬 You: 통계 보여줘
🤖 Bot: 📈 철수님의 통계:
- 총 계산 횟수: 2
- 누적 합계: 28
- 연산별 사용 횟수:
• add: 1회
• multiply: 1회动作原理
体系结构概述
┌─────────────────────────────────────────────────────────────┐
│ Client │
│ ┌─────────────┐ ┌─────────────┐ ┌────────────────┐ │
│ │ User │───▶│ ReAct │───▶│ MCP Tools │ │
│ │ Input │ │ Agent │ │ (LangChain) │ │
│ └─────────────┘ └─────────────┘ └───────┬────────┘ │
└───────────────────────────────────────────────┬┼───────────┘
││
stdio (stdin/stdout)
││
┌───────────────────────────────────────────────┼┼───────────┐
│ MCP Server ▼▼ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ FastMCP (server.py) │ │
│ │ - set_user_name, get_user_name │ │
│ │ - add, subtract, multiply, divide │ │
│ │ - get_history, get_stats, get_total │ │
│ │ - reset_calculator, reset_all │ │
│ └────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘MCP连接过程
客户端运行时服务器 自动一起运行可以。无需单独运行服务器。
1.设置Stdio Server参数
self.server_params = StdioServerParameters(
command="python",
args=["server.py"],
)StdioServerParameters将MCP服务器作为subprocess运行。 stdin/stdout通过进行通信的方式。客户端 python server.py 自动执行命令。
2.连接到stdio_client
self.stdio_ctx = stdio_client(self.server_params)
read, write = await self.stdio_ctx.__aenter__()stdio_client创建服务器进程并返回通信通道(read/write流)。
3.初始化ClientSession
self.session_ctx = ClientSession(read, write)
session = await self.session_ctx.__aenter__()
await session.initialize()ClientSession是处理MCP协议的会话。 initialize()调用将与服务器握手,并获取可用工具列表。
4.将MCP工具转换为LangChain工具
tools = await load_mcp_tools(session)
self.agent = create_react_agent(self.model, tools)load_mcp_tools将MCP服务器提供的工具转换为LangChain兼容格式。将这些工具连接到ReAct代理后,LLM将分析自然语言问题并自动调用相应的工具。
通信方式比较
| 方式 | 说明 | 使用案例 |
|---|---|---|
| 标准 | subprocess+stdin/stdout | 本地运行(当前项目) |
| 上海证券交易所 | HTTP Server-Sent Events | 连接远程服务器 |
| 双向通信 双向实时通信实时流媒体 |
当前项目 标准 因此,客户端和服务器在同一台机器上运行。
依赖性
fastmcp:MCP服务器框架mcp:MCP客户端langchain:LLM框架langchain-mcp-adapters:MCP-LangChain适配器langchain-openai:OpenAI集成langgraph:ReAct代理
