Skip to content

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

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)

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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