langchain_simple_mcp示例
此存储库包含使用langchain风格工具演示最小MCP风格服务器和客户端的简单示例。这些示例有意设计得较小,易于从终端运行,因此您可以学习类似MCP的工具服务器和客户端是如何交互的。
文件
- math_server.py——一个最小的MCP服务器,它公开了两个工具:
add和square. - clientfor_math_server.py——一个演示如何调用工具的客户端
math_server.py并将结果打印到stdout。 - weather_server.py——一个小型服务器,提供从国家气象局获取天气数据的工具(https://api.weather.gov).服务器添加了所需的User-Agent标头,并包括简单的缓存。
- clientfor_weather_server.py——一个演示在上调用天气工具的客户端
weather_server.py(或直接测试天气端点)并将结果打印到stdout或在示例流中使用它们。 - clientfor_websearch.py——一个小型示例客户端,演示了直接网络搜索或轻量级检索,以检索查询的页面标题/片段。本示例旨在用于学习/演示目的;运行web请求时,请遵守适用的服务条款和robots.txt。
- sqlagent.py-演示了使用langchain包装器SQLDatabase和SQLDatabaseToolkit与SQLdb交互的代理的使用
快速概览
- math_server.py实现了两个基本工具:
- add(a,b):返回a+b - square(x):返回x\*x
- clientfor_math_server.py连接到服务器并演示如何调用这些工具。这两个脚本都可以从终端运行,用于本地测试和学习。
- weather_server.py实现与美国国家气象局API联系的工具(https://api.weather.gov)以检索给定纬度/经度的预测数据。服务器确保发送描述性的User-Agent标头(NWS要求),并执行轻量级的内存缓存,以避免频繁的重复请求。
- clientfor_weather_server.py是一个小型Python客户端,用于测试天气工具并演示如何检索样本坐标的预报。
- clientfor_websearch.py演示了一种基本的直接web搜索/检索方法:它可以调用公共搜索端点或获取一小部分网页并提取标题和简短片段。它旨在作为将检索集成到MCP风格设置中的示例;如果您计划大规模运行自动搜索,请优先使用搜索API,并遵守费率限制和使用策略。
- sqlagent.py从“https://storage.googleapis.com/benchmarks-artifacts/chinook/Chinook.db“,使用langchain包装器SQLDatabaseToolkit设置sql工具。进行简单的查询以从数据库中获取数据。
- embeddings.py演示了vectorstore.similarity_search_with_score的使用;在给定的文本数组中比较每个文本,并给出相似性得分——数字越低,匹配度越高
先决条件
- Python 3.8+(或任何支持的Python 3版本)
- 请求(用几个例子)
- 对于网络搜索示例,可选的依赖关系可能包括用于HTML解析的beautifulsoup4;如果使用搜索API,则需要其客户端或API密钥。
如何跑步(基础)
- 启动数学服务器(示例)
python math_server.py这将在配置的主机/端口上启动简单的MCP服务器(请参阅顶部 math_server.py 用于主机/端口设置)。
- 在另一个终端中,运行数学客户端
python clientfor_math_server.py客户端应调用公开的工具并将结果打印到stdout。
- 启动天气服务器
python weather_server.py这将启动天气MCP风格的服务器,该服务器公开与天气相关的工具。当被要求提供所提供坐标的预测时,服务器将联系api.weather.gov。
- 在另一个终端中,运行天气客户端
python clientfor_weather_server.py此客户端演示了调用天气工具并打印返回的预报数据的可读摘要。
- 运行web搜索示例客户端
python clientfor_websearch.py根据实现的不同,脚本将查询一个搜索API,或者获取一小部分页面并打印标题/片段以获得顶部结果。
预期输出示例(客户端)
Calling add(2, 3) -> 5
Calling square(4) -> 16
# Weather client sample output (actual content will vary based on coordinates and the upstream API):
Fetching forecast for 38.8977, -77.0365
Forecast for Washington, DC area:
- Tonight: Clear, Low 45°F
- Monday: Sunny, High 68°F
# Web search example (sample output):
Query: "python web scraping"
Results:
1) "Web Scraping with Python — Tutorial" — A short snippet or summary...
2) "Beautiful Soup: Documentation" — A short snippet or summary...(确切的输出将取决于客户端文件中的示例实现和实时数据。)
故障排除
- ImportError:如果运行任何脚本会引发包的ImportError,例如
requests或beautifulsoup4,通过pip安装缺少的软件包。例子:
pip install requests beautifulsoup4- NWS API要求:美国国家气象局要求请求包括带有联系信息的描述性User-Agent头。如果您看到上游错误或403响应,请确保
weather_server.py使用有效的联系人电子邮件或URL设置用户代理。 - 网络搜索/抓取礼仪:遵循robots.txt和目标网站的服务条款。如果您被阻止或费率限制,请降低请求频率、增加延迟或切换到官方API。
- 正在使用的端口/地址:如果服务器因端口已被使用而无法绑定,请停止使用该端口的进程或在服务器文件中更改端口。
建议的后续步骤
- 如果您想要可复制的安装,请添加requirements.txt。
- 添加更多示例工具(例如乘法、除法)并扩展客户端以演示错误处理和超时。
- 以天气为例:
- 添加一个小型前端(Flask或静态HTML+JS),在浏览器中显示预测。 - 添加地理编码(城市名称搜索),以便用户可以输入地名而不是坐标。 - 将内存缓存替换为Redis以供生产使用。
- 对于网络搜索示例:
- 添加一个可选的适配器来调用搜索API(Bing、Google或其他)以获得更可靠的结果。 - 添加速率限制和重试/回退逻辑。
许可证 麻省理工学院
