当前位置: 首页 > news >正文

python快速使用mcp服务

langchain结合mcp服务 管理mcp服务增删改查

快速方便的给langchain的agent添加mcp服务的能力

pip install mcpstore

这个库做了很多的生命周期的管理和处理,还有很多额外的功能。思路就是初始化一个store对象,然后库库往这个store上面注册mcp服务。

store = MCPStore.setup_store()store.for_store().add_service({"name": "mcpstore-wiki", "url": "https://mcpstore.wiki/mcp"})store.for_store().wait_service("mcpstore-wiki")

需要用他的tools的时候直接for_langchain().list_tools()就是langchain可以直接使用的格式了

tools = store.for_store().for_langchain().list_tools()

几行代码就可以直接使用注册的mcp服务了,这个tools列表是完全兼容langchain的,可以和我们已经通过@tool定义好的方法直接使用列表加法添加.

作者还提供了一个可以直接运行的例子:

from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from mcpstore import MCPStore
store = MCPStore.setup_store()
store.for_store().add_service({"name":"mcpstore-wiki","url":"https://mcpstore.wiki/mcp"})
store.for_store().wait_service("mcpstore-wiki")
tools = store.for_store().for_langchain().list_tools()llm = ChatOpenAI(temperature=0, model="deepseek-chat",openai_api_key="sk-****",openai_api_base="httpss://api.deepseek.com"
)
prompt = ChatPromptTemplate.from_messages([("system", "你是一个助手,回答的时候带上表情"),("human", "{input}"),("placeholder", "{agent_scratchpad}"),
])
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
query = "北京的天气怎么样?"
print(f"\n   🤔: {query}")
response = agent_executor.invoke({"input": query})
print(f"   🤖 : {response['output']}")

只需要替换模型就可以直接使用了,本人亲测还是好用的。

添加本地服务的时候:

demo_mcp = {"mcpServers": {"howtocook": {"command": "npx","args": ["-y","howtocook-mcp"]}}
}
store = MCPStore.setup_store()store.for_store().add_service(demo_mcp)store.for_store().wait_service("howtocook")

wait_service可以设置一个超时的时间,对于需要长时间启动的本地服务可以设置长一点,或者使用他的异步方法_sync后缀的方法。

可视化管理界面

作者的GitHub仓库上有一个开源的demo Vue项目,可以通过简单的几行代码开启API模式,搭配Vue可以有一个前端点点点的维护mcp服务管理平台:

image-20250721212359929

通过一段简单的代码快速启动后端:

from mcpstore import MCPStore
prod_store = MCPStore.setup_store()
prod_store.start_api_server(host='0.0.0.0',port=18200
)

通过 https://mcpstore.wiki/web_demo/dashboard 体验在线示例

通过 https://doc.mcpstore.wiki/ 可以查看详细的使用文档

🔧 注册服务

对于服务的增删改查,作者尽可能的兼容各种各样的格式,保证用户可以不需要太过于专注格式

只要不冲突并且关键的配置对就行,所以支持市面上常见的字典和列表等等格式

主流的Client的json配置文件都可以直接使用,非常方便。

🌐 远程服务注册

通过 URL 添加远程 MCP 服务:

store.for_store().add_service({"name": "mcpstore-wiki","url": "https://mcpstore.wiki/mcp","transport": "streamable-https"
})
  • transport: 可选字段,可以自动推断传输协议 (streamable-https, sse)

等待服务的状态转变

mcpstore里,有一个wait_service()函数,等待一个服务转变到指定的状态,可以设置超时时间

store.for_store().add_service(demo_mcp)store.for_store().wait_service("howtocook")

mcpstore内置了几个生命周期来管理服务,用户只需要注册,mcpstore会异步的更新维护服务

从在线市场添加服务

mcpstore可以通过from_market参数通过服务名,直接添加已经发布过的在线的mcp服务,用户可以指定增量更新市场数据

service_name = "quickchart"
market_env = {}store.for_store().add_service(from_market=service_name, market_env=market_env)store.for_store().wait_service(service_name,timeout=20,status="healthy")

📄 支持的注册格式

使用标准 MCP 配置格式(主流IDE支持的mcp.json的格式):

store.for_store().add_service({"mcpServers": {"mcpstore-wiki": {"url": "https://mcpstore.wiki/mcp"},"howtocook": {"command": "npx","args": ["-y","howtocook-mcp"]}}
})

💻 支持各种各样的本地服务进程

启动本地 MCP 服务进程:

# Python 服务
store.for_store().add_service({"name": "local_assistant","command": "python","args": ["./assistant_server.py"],"env": {"DEBUG": "true", "API_KEY": "your_key"},"working_dir": "/path/to/service"
})# Node.js 服务
store.for_store().add_service({"name": "node_service","command": "node","args": ["server.js", "--port", "8080"],"env": {"NODE_ENV": "production"}
})# 可执行文件
store.for_store().add_service({"name": "binary_service","command": "./mcp_server","args": ["--config", "config.json"]
})

🎯 总结

该项目更新比较频繁,感觉作者也在全力做一个直观好用的MCP管理,对于Langchain集成MCP服务是一个不错的选择。


文章转载自:

http://QnaExxAH.bLjcb.cn
http://UEVbdCdN.bLjcb.cn
http://Wr7sFDzM.bLjcb.cn
http://VTwpTk8N.bLjcb.cn
http://C5n8qUyR.bLjcb.cn
http://0QDXCG8v.bLjcb.cn
http://rrx6IgfA.bLjcb.cn
http://1JkFiCh6.bLjcb.cn
http://QdoEzY6T.bLjcb.cn
http://RCBqxwHo.bLjcb.cn
http://Dk478Xqd.bLjcb.cn
http://hKpu3vDe.bLjcb.cn
http://yRdE2WH3.bLjcb.cn
http://kzsG3eqR.bLjcb.cn
http://OHr2hLRL.bLjcb.cn
http://gxWj76TT.bLjcb.cn
http://e6SU4kkY.bLjcb.cn
http://W2bpWfjR.bLjcb.cn
http://Vw0WOsy5.bLjcb.cn
http://MhG2quQ8.bLjcb.cn
http://GJuTfnvo.bLjcb.cn
http://JCKGrhNl.bLjcb.cn
http://NQStb5ti.bLjcb.cn
http://l4XQDoDj.bLjcb.cn
http://3dLN0pJO.bLjcb.cn
http://XvmR3V5i.bLjcb.cn
http://8DRyqQW5.bLjcb.cn
http://zIQ25L1h.bLjcb.cn
http://qHQouf7G.bLjcb.cn
http://24c90CSx.bLjcb.cn
http://www.dtcms.com/a/384040.html

相关文章:

  • 绑定方法与非绑定方法
  • 北科大2025研究生英语超星慕课第一单元标准答案
  • 人工智能方面的入门书籍有哪推荐?
  • STL之string类(C++)
  • 大模型原理的解析
  • Java 事务失效场景全解析
  • 简陋的进度条程序
  • SpringAOP中的通知类型
  • Python之文件读写 day9
  • 深度学习和神经网络之间有什么区别?
  • Linux驱动学习(SPI驱动)
  • 【MySQL|第七篇】DDL语句——数据库定义语言
  • 计算机毕设选题推荐:基于Java+SpringBoot物品租赁管理系统【源码+文档+调试】
  • Redis集群部署模式全解析:原理、优缺点与场景适配
  • ESP32的烧录和执行流程
  • ABP vNext + OpenXML / QuestPDF:复杂票据/发票模板与服务器端渲染
  • Java 注解入门:从认识 @Override 到写出第一个自定义注解
  • 网络层 -- IP协议
  • 社招面试BSP:BootROM知识一文通
  • Knockout.js DOM 操作模块详解
  • 面试题知识-NodeJS系列
  • 【层面一】C#语言基础和核心语法-02(反射/委托/事件)
  • Jmeter性能测试实战
  • CSP-S 2021 提高级 第一轮(初赛) 阅读程序(3)
  • TTC定时器中断——MPSOC实战3
  • [数据结构——lesson10.2堆排序以及TopK问题]
  • Maven 本地仓库的 settings.xml 文件
  • 绑定数据管理
  • RTU 全面科普:从入门到 AI 时代的智能化演进
  • lxml对于xml文件的操作