Skip to content

考虑过工具会话吗,有些mcp在同一个session内才能正常工具,比如浏览器类MCP #9

@shatang123

Description

@shatang123

下面是使用langchain_mcp的一个例子,agent可以和浏览器进行多轮交互,比如打开百度 -> 搜索北京的天气,这种多次调用mcp也不会中断。而将其替换成mcpstore后,浏览器只能执行一个动作后就关闭了,应该是一次调用就是一个session吗?

import asyncio

from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_mcp_adapters.tools import load_mcp_tools
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent

client = MultiServerMCPClient(
    {
        "browser_server": {
            "url": "http://127.0.0.1:8931/sse",
            "transport": "sse",
        }
    }
)

llm = ChatOpenAI(
    model="qwen-plus-2025-09-11",
    temperature=0.6,
    max_tokens=None,
    timeout=None,
    max_retries=2,
    api_key="sk-xxxxxxxxxxxxxxxxx",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

async  def main():
    # 为了整个交互都在一个会话中,这里手动创建一个会话
    async with client.session("browser_server") as session:
        # 获得全部工具
        tools = await load_mcp_tools(session)

        # 创建agent
        agent = create_react_agent(llm, tools,prompt="""你是一位工作在浏览器中的个人助手,帮助用户完成各种任务。 """)
        messages = [
            {"role": "user", "content": "北京的天气怎么样"}
        ]
        response_stream = agent.astream({"messages": messages},stream_mode="values")

        # 打印结果
        async for step in response_stream:
            step["messages"][-1].pretty_print()

if __name__ == '__main__':
    asyncio.run(main())

比如下面的测试中,浏览器不会打开两个百度页面,而是打开一次,关闭一次浏览器

from mcpstore import MCPStore

# 创建 Store 实例
store = MCPStore.setup_store()

# 注册服务
store.for_store().add_service({"name":"browser","url":"http://127.0.0.1:8931/sse"})

# 自动将 MCP 工具转换为 LangChain Tool 对象
tools = store.for_store().for_langchain().list_tools()

s1 = store.for_store().use_tool("browser_navigate", {"url":"https://www.baidu.com"})
s2 = store.for_store().use_tool("browser_navigate", {"url":"https://www.baidu.com"})

while True:
    print(1)

有考虑过这个问题吗,可以默认成运行后是在同一个会话中,或者有更好的实现

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions