模型上下文协议实验室

一个最小化的模型上下文协议(MCP)实验室,包含基于stdio的MCP服务器、轻量级HTTP桥接器、简单的前端界面和异步Python代理/CLI,适用于本地开发和测试。

  • by haimazulay
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 haimazulay/mcp_lab

使用说明

🧩 MCP实验室

最低限度 模型上下文协议(MCP) 实验室演示:

  • 真正的基于stdio的MCP服务器(mcp_server_demo.py, mcp_server_system.py)
  • 轻量级HTTP网桥(app_http_bridge.py)用于网络访问
  • 一个简单的HTML/JS前端
  • 异步Python代理/CLI

一切都在运转 本地,不需要外部API密钥。


📦 包括什么

🧠 MCP服务器

文件 描述 工具
mcp_server_demo.py 主演示服务器 now (当前UTC时间)• weather(city) (通过Open-Meteo)
mcp_server_system.py “你知道我是谁吗?”练习 system_info (用户名、操作系统、版本)

每个服务器都使用官方 mcp 图书馆和通信通过 标准.


🌉 HTTP网桥

文件 描述
app_http_bridge.py Flask桥暴露 /tools 和 /call 端点,为每个请求在内部生成MCP服务器。使用CORS启用浏览器访问。

终点:

  • GET /tools?server=demo|system → 列出工具
  • POST /call → 执行工具({"name":"now","arguments":{},"server":"demo"})

💻 前端(普通HTML/JS)

文件 描述
index.html 调用网桥端点的Web UI(RTL希伯来语布局)。包括以下按钮 now, weather,以及 system_info.

🐍 CLI/代理

文件 描述
agent_demo.py 异步Python客户端,通过stdio连接到MCP服务器,列出工具,并按照练习中的描述执行实验室流程。

⚙️ 需求

  • python 3.10+
  • pip (最新)
  • 互联网连接(适用于天气API)

🚀 快速开始

1.️⃣ 创建和激活虚拟环境

# Windows (PowerShell)
python -m venv venv
.env\Scripts\Activate.ps1

# Linux/Mac
python -m venv venv
source venv/bin/activate

2.️⃣ 再进行

pip install flask flask-cors mcp httpx

3.️⃣ 运行HTTP网桥

python app_http_bridge.py

桥在 http://127.0.0.1:5000

您应该看到类似以下内容:

[bridge] launch: python -u mcp_server_demo.py ...

4.️⃣ 测试端点(PowerShell)

# Health
irm "http://127.0.0.1:5000/"

# List tools (demo server)
irm "http://127.0.0.1:5000/tools?server=demo" | ConvertTo-Json -Depth 5

# Call tool: now
$body = '{"name":"now","arguments":{},"server":"demo"}'
irm "http://127.0.0.1:5000/call" -Method Post -ContentType 'application/json' -Body $body | ConvertTo-Json -Depth 5

预期产量:

{
  "ok": true,
  "server": "demo",
  "tool": "now",
  "content": [
    { "type": "text", "text": "2025-11-06T21:32:30.548Z" }
  ]
}

5.️⃣ 运行Web UI

# In another terminal
python -m http.server 5500

然后打开 http://127.0.0.1:5500/index.html

确保 app_http_bridge.py 正在后台运行。


6.️⃣ 运行MCP代理(stdio)

python agent_demo.py

预期产量:

--- Tools available ---
- now: Returns the current server time in ISO 8601 (UTC).
- weather: Get current weather for a city using Open-Meteo (no API key).

== Task 1: What time is it right now? Return ISO time.
2025-11-06T21:32:30.548Z

== Task 2: What's the current weather in Tel Aviv?
The current weather in Tel Aviv is 24°C, windspeed 6 km/h.

🧠 备注

  • MCP服务器严格通过 标准不是HTTP。
    Flask桥仅在HTTP(用于浏览器)和stdio(用于MCP)之间进行转换。
  • MCP服务器内的所有日志记录都转到 标准错误 仅限(stdout保留用于协议JSON)。
  • 这 weather 工具使用 开放气象API (不需要API密钥)。
  • 项目结构遵循 “MCP服务器演示——首次实验室” 运动规范。

🧪 可选增强功能

  • 添加Olama动力 ask_llm 用于模型驱动工具调用的工具。
  • 在网桥中实现持久的MCP会话,以获得更快的响应。
  • 扩展Web UI以动态发现工具 /tools.

🖼️ 架构概述

Browser (index.html)
        │
        ▼
HTTP (CORS)
        │
        ▼
Flask Bridge ───▶ MCP Server (stdio)
   /tools, /call        ├── now()
                        ├── weather(city)
                        └── system_info()

©2025-MCP实验室教育项目