7个支持MCP的顶级AI框架

AIG代理工具包向开发者展示了各种API,以装备AI解决方案并完成任务,确保用户满意度。然而,将这些工具集成到AI应用中并进行管理可能会很混乱。本文介绍了使用模型上下文协议(MCP)提供上下文给LLMs和代理的行业标准。

0、提供LLM上下文的方法和规范

默认情况下,如果不为LLMs和AIG聊天机器人提供适当的上下文,它们无法获取实时信息、执行代码、调用外部工具和API,甚至无法代表用户使用网络浏览器。开发人员可以利用以下方法来解决LLMs和代理的这一局限性。

  • Composio:Composio有规格和工具包库,用于集成AI代理和LLMs。除了Composio的现成工具包库外,他们最近推出了Composio MCP,允许开发者连接超过100个MCP服务器到IDEs。查看上述链接中的Composio MCP工具类别,可以将多个应用连接到MCP支持的IDEs,如Cursor、Claude和Windsurf。
  • Agents.json:基于OpenAI标准构建的规范,以确保AIG代理与API和外部工具之间无缝且增强的交互。尽管Agents.json是一个很好的规范,但它并未被广泛采用,不像MCP。参考其Github仓库了解更多并开始使用。
  • MCP:MCP为开发者提供了最佳方式,为LLMs和AI助手提供上下文数据以解决问题。例如,您可以构建一个MCP文档服务器,为IDEs和代理框架提供完整的文档访问权限,就像使用llms.txt文件一样。

0.1 什么是MCP?

将MCP视为LLMs的第三次进化。在第一次进化中,我们有了LLMs,如果查询在其训练数据中,它们可以准确回答用户的提示。在这个阶段,它们无法有意义地响应超出其训练数据范围的提示,因为它们没有访问外部工具的能力。在LLMs的第二次进化中,我们赋予它们访问额外上下文(工具)的能力,这些工具不是直观可操作的。然而,这些工具能够帮助LLMs准确预测并回答用户的意图。第三次进化仍然包括LLMs和工具,但我们实施了一个适当的基础设施,使它们能够访问外部应用程序,并确保它们易于维护。

在构建AI服务时,你的数据可能存储在云端,用于企业环境中回答客户支持工单的应用程序。MCP是由Anthropic提供的开源协议,您可以使用它将企业数据连接到AI系统。

它提供了一种标准的方式来沟通和链接内容存储库(GitHub、Notion)、开发环境、Web和业务工具到辅助AI技术。MCP的一个流行且不断增长的用例是AI辅助编码。数百个MCP与开发环境和工具的集成,如CursorWindsurf,允许开发人员连接和与外部应用程序交互进行开发。

注意:本文旨在为使用Python和TypeScript构建的AI助手和代理系统开发者实现MCP,而不是基于IDE的MCP集成。

0.2 MCP的工作原理

在LLMs和代理的上下文中,MCP协助它们为用户提供查询之外有意义的响应。例如,要求ChatGPT发送消息到特定的Slack频道、检查日程表上的可用性并安排与同事今天的会议。您会失望于ChatGPT的回答,因为它没有访问这些应用程序的能力。MCP的实施有助于这些助手输出有用的成果。

开发人员通常问的第一个问题是MCP是如何工作的。在MCP的基本操作中,用户向代理发送查询。代理然后决定调用哪个MCP服务器和工具以获取相关的信息进行操作。代理随后使用特定工具的数据来响应用户。

0.3 为什么要在AIG代理和LLM应用中采用MCP?

MCP正在成为一种标准,帮助开发人员构建AI系统,这些系统可以有效地与其他外部应用程序通信。微软最近宣布在Copilot Studio中集成MCP,简化了AI应用和代理访问工具的方式。此外,OpenAI已经宣布在其产品中支持MCP,例如Agents SDK和ChatGPT的桌面应用程序。直接为工具配备AI助手没有什么问题。然而,对于由多个多代理组成、执行多项任务的AI代理系统来说,比如读取和回复电子邮件、进行网页抓取、金融分析、获取实时天气信息等,这变得非常繁琐。

0.4 带有工具集成的AIG代理

在上面的图表中,三个外部工具连接到了LLM。如果数量增加到例如100+,管理和保护它们将会令人沮丧。一个改进的方法是通过MCP注册表访问相同的工具或超过100+的工具,如下一节所示。

0.5 带有MCP集成的AIG代理

在这张图中,我们将代理系统所需的工具结合起来并通过MCP服务器访问它们,从而提供更连贯的用户体验。MCP方法使得通过中央位置更容易管理和保护这些工具。

0.6 使用MCP而非传统工具包集成的优势

MCP相对于传统工具包集成AI代理有许多关键优势。例如,没有MCP的工具集成可靠性值得怀疑,因为在多个外部应用程序上进行API调用时可能会导致许多错误,因为不兼容的AI基础设施。在MCP之前,每个你想添加到代理中的工具都必须用自定义代码实现,这需要几周的时间。

  • 架构:与为AI代理预建的工具规范不同,MCP有一个干净且灵活的架构,用于与工具和API交互。
  • 改善对外部工具的访问和管理:它通过标准化接口为AI模型提供工具访问,弥合了LLMs与其与第三方系统交互之间的通信差距。
  • 解决了独立工具实现的局限性:MCP工具适合单用户场景和团队。
  • 社区驱动:MCP有许多开源服务器和开发者生态系统。它也在开发人员社区中被广泛采用,用于许多用例。
  • 认证:它有一个强大的内置认证和权限系统,以控制工具访问。例如,当使用Composio提供的MCP工具时,您可以使用Google Sheets或Gmail对用户进行身份验证。
  • 工具搜索:与传统的安装、配置和将工具与AI聊天机器人集成的方法不同,MCP使搜索和找到外部工具更容易。
  • 可扩展性:MCP很容易扩展到许多用户和应用程序。
  • 行业标准:虽然可以直接安装硬编码工具来为AI应用提供上下文,但MCP提供了一个行业标准,为代理和LLMs提供所需的上下文。

0.7 MCP服务器的种类

Anthropic的MCP规范有两种形式的服务器,用于将工具添加到代理和AI项目中。这些MCP服务器连接类型包括以下内容。

  • 服务器发送事件(SSE):通过HTTP连接到远程服务。
  • STDIO:允许执行本地命令指令和通信通过标准输入输出。

您选择用于构建人工智能应用程序的框架提供了必要的类来连接这些服务器。

0.8访问生态系统中的MCP注册表/服务器

有许多开源库托管了MCP工具,以增强大型语言模型(LLMs)和代理的功能,确保它们生成响应的可靠性。这些托管MCP工具的库被称为注册表,提供精心策划的服务集合。您可以使用这些工具将您的AI应用程序连接到以下注册表。此外,您还可以使用不同类型的服务器,例如uvx,它由基于Python的工具组成且无需安装要求。还有Docker选项用于运行MCP工具,以及需要安装Node.js的npx基础服务器。

  • GitHub上的MCP服务器:一个包含社区构建服务器及其附加MCP资源的集合。
  • Glama注册表:为开发者提供的生产就绪型开源MCP服务器。
  • Smithery注册表:借助Smithery,开发人员可以访问2000多个MCP服务器,以增强AI代理和LLMs的能力。
  • OpenToolsOpenTools 提供用于MCP工具的生成API。您可以访问数百个现成的MCP工具来实现与您的AI项目。使用OpenTools API,开发人员可以扩展LLMs的网络搜索能力、获取实时位置数据和网页抓取功能。该API支持Curl、Python和TypeScript。请访问OpenTools的快速入门指南以使用API。
from openai import OpenAI  

client = OpenAI(  
    base_url="https://api.opentools.com",  
    api_key="<OPENTOOLS_API_KEY>"  
)  

completion = client.chat.completions.create(  
    model="anthropic/claude-3.7-sonnet",  
    messages=[  
        { "role": "user", "content": "Compare specs of top 5 EVs on caranddriver.com" }  
    ],  
    tools=[{ "type": "mcp", "ref": "firecrawl" }]  
)
  • PulseMCP注册表:使用PulseMCP,您可以浏览托管的MCP工具及其用例,为您的AI项目服务。查看PulseMCP新闻了解最近流行的MCP服务器和应用。
  • mcp.run:此注册表为开发者提供了数百个MCP应用程序,以服务于他们的业务。
  • Composio注册表:Composio的SSE基础MCP服务器允许轻松集成各种AI框架的工具,以构建应用程序。
  • guMCP:Gumloop的guMCP提供免费、开源且完全托管的MCP服务器,以便无缝集成到任何AI应用程序中。
为LLMs和代理添加MCP的前7大客户端框架

尽管MCP已成为流行语,并且所有开发社区最近都在讨论它,但很难知道哪些MCP客户端框架适合与AI应用程序和代理集成。我们研究并找到了以下领先的MCP客户端平台,适用于基于Python和TypeScript的代理工作流和AI助手。

注意:以下部分展示了在构建AI解决方案的框架中实现MCP的方法,而不是MCP与AI代码编辑器(如Cursor或Windsurf)的集成。

1、使用OpenAI Agents SDK构建Git MCP代理

当使用OpenAI Agents SDK构建代理时,您可以使用SDK的MCPServerStdioMCPServerSse类连接到这些社区构建的MCP服务器。以下MCP代理实现访问本地Git存储库的根目录,并响应用户关于存储库的问题。

import asyncio  
import shutil  
import streamlit as st  
from agents import Agent, Runner, trace  
from agents.mcp import MCPServer, MCPServerStdio  

async def query_git_repo(mcp_server: MCPServer, directory_path: str, query: str):  
    agent = Agent(  
        name="Assistant",  
        instructions=f"Answer questions about the localgit repository at {directory_path}, use that for repo_path",  
        mcp_servers=[mcp_server],  
    )  

    with st.spinner(f"Running query: {query}"):  
        result = await Runner.run(starting_agent=agent, input=query)  
        return result.final_output  

async def run_streamlit_app():  
    st.title("本地Git存储库浏览器")  
    st.write("此应用程序允许您查询有关本地Git存储库的信息。")  

    directory_path = st.text_input("请输入Git存储库的路径:")  

    if directory_path:  
        # 常见查询作为按钮  
        col1, col2 = st.columns(2)  
        with col1:  
            if st.button("最频繁贡献者"):  
                query = "谁是贡献最多的贡献者?"  
                run_query(directory_path, query)  

        with col2:  
            if st.button("上次更改摘要"):  
                query = "总结存储库的最后一次更改。"  
                run_query(directory_path, query)  

        # 自定义查询  
        custom_query = st.text_input("或者输入自己的查询:")  
        if st.button("运行自定义查询") and custom_query:  
            run_query(directory_path, custom_query)  

def run_query(directory_path, query):  
    if not shutil.which("uvx"):  
        st.error("uvx未安装。请使用`pip install uvx`进行安装。")  
        return  

    async def execute_query():  
        async with MCPServerStdio(  
            cache_tools_list=True,  
            params={  
                "command": "python",   
                "args": [  
                    "-m",   
                    "mcp_server_git",   
                    "--repository",   
                    directory_path  
                ]  
            },  
        ) as server:  
            with trace(workflow_name="MCP Git 查询"):  
                result = await query_git_repo(server, directory_path, query)  
                st.markdown("### 结果")  
                st.write(result)  

    asyncio.run(execute_query())  

if __name__ == "__main__":  
    st.set_page_config(  
        page_title="本地Git存储库浏览器",  
        page_icon="📊",  
        layout="centered"  
    )  
    # 将异步实现更改为同步实现  
    # 因为Streamlit在主线程中不很好地支持asyncio  

    # 定义我们的应用程序的同步版本  
    def main_streamlit_app():  
        st.title("本地Git存储库浏览器")  
        st.write("此应用程序允许您查询有关Git存储库的信息。")  

        directory_path = st.text_input("请输入Git存储库的路径:")  

        if directory_path:  
            # 常见查询作为按钮  
            col1, col2 = st.columns(2)  
            with col1:  
                if st.button("最频繁贡献者"):  
                    query = "谁是贡献最多的贡献者?"  
                    run_query(directory_path, query)  

            with col2:  
                if st.button("上次更改摘要"):  
                    query = "总结存储库的最后一次更改。"  
                    run_query(directory_path, query)  

            # 自定义查询  
            custom_query = st.text_input("或者输入自己的查询:")  
            if st.button("运行自定义查询") and custom_query:  
                run_query(directory_path, custom_query)  

    # 运行同步应用程序  
    main_streamlit_app()

上述代码集成了Streamlit与OpenAI MCP代理,允许您使用Git MCP服务器与本地Git存储库聊天。要运行此示例,请安装以下内容:

  • pip install streamlit openai-agents mcp-server-git
  • 然后,导出您的OpenAI API密钥,使用export OPENAI_API_KEY=sk-...。当您运行Python文件时,应该会看到类似以下预览的结果。
使用OpenAI Agents SDK的Git MCP代理

你可以在GitHub上探索其他OpenAI MCP示例。

使用Agents SDK的MCP集成的一个优势是其内置的MCP代理监控系统在OpenAI仪表板上。此功能自动捕获代理的MCP操作,例如工具列表、POST响应和获取函数调用的数据。下图表示运行上面代码后本节Git MCP示例的跟踪。您可以从OpenAI仪表板访问所有记录的信息。

2、使用Praison AI构建MCP AI代理

Praison AI 是一个基于Python的AI框架,用于构建一组代理。它提供了一种最简单的方法,只需一行代码即可将MCP服务器工具添加到代理工作中,就像为代理配备传统工具一样。

以下示例通过Streamlit界面将Airbnb MCP服务器与Praison AI代理集成在一起,帮助在指定地点找到公寓。要创建您的第一个Praison AI MCP代理,请安装以下内容:

  • pip install praisonaiagents mcp streamlit
  • 接下来,导出您的OpenAI API密钥 export OPENAI_API_KEY='sk-proj-qZIGbi...'

创建一个Python文件,例如streamlit_praison_airbnb_mcp_agent.py,并填写其内容。使用MCP进行Chainlit AI应用开发

import streamlit as st
from praisonaiagents import Agent, MCP

st.title("🏠 Airbnb Booking Assistant")

# Create the agent
@st.cache_resource
def get_agent():
    return Agent(
        instructions="""You help book apartments on Airbnb.""",
        llm="gpt-4o-mini",
        tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt")
    )

# Initialize chat history
if "messages" not in st.session_state:
    st.session_state.messages = []

# Display chat history
for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

# User input form
with st.form("booking_form"):
    st.subheader("Enter your booking details")

    destination = st.text_input("Destination:", "Paris")

    col1, col2 = st.columns(2)
    with col1:
        check_in = st.date_input("Check-in date")
    with col2:
        check_out = st.date_input("Check-out date")

    adults = st.number_input("Number of adults:", min_value=1, max_value=10, value=2)

    submitted = st.form_submit_button("Search for accommodations")

    if submitted:
        search_agent = get_agent()

        # Format the query
        query = f"I want to book an apartment in {destination} from {check_in.strftime('%m/%d/%Y')} to {check_out.strftime('%m/%d/%Y')} for {adults} adults"

        # Add user message to chat history
        st.session_state.messages.append({"role": "user", "content": query})

        # Display user message
        with st.chat_message("user"):
            st.markdown(query)

        # Get response from the agent
        with st.chat_message("assistant"):
            with st.spinner("Searching for accommodations..."):
                response = search_agent.start(query)
                st.markdown(response)

        # Add assistant response to chat history
        st.session_state.messages.append({"role": "assistant", "content": response})

# Allow for follow-up questions
if st.session_state.messages:
    prompt = st.chat_input("Ask a follow-up question about the accommodations")
    if prompt:
        search_agent = get_agent()

        # Add user message to chat history
        st.session_state.messages.append({"role": "user", "content": prompt})

        # Display user message
        with st.chat_message("user"):
            st.markdown(prompt)

        # Get response from the agent
        with st.chat_message("assistant"):
            with st.spinner("Thinking..."):
                response = search_agent.start(prompt)
                st.markdown(response)

        # Add assistant response to chat history
        st.session_state.messages.append({"role": "assistant", "content": response}) 

运行示例代码将调用所需的 Airbnb MCP 工具在特定位置为您寻找公寓,如下所示。

你已经注意到,它使用一行代码 tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt") 为代理添加了 MCP 支持,其中 npx 表示要运行以启动 MCP 服务器的命令。-y 是传递给命令的命令行参数。请参阅 OpenAI Agents SDK 文档中的 MCP 服务器以了解更多信息。

3、将 MCP 用于 LangChain AI 应用

LangChain 为 MCP 提供工具调用支持。此支持允许您设置 Python 函数来访问不同的 MCP 服务器并检索工具以在 AI 项目中执行任务。下面的示例代码连接到安全的 MCP 文件系统服务器,使 LLM 能够准确回答有关您提供的任何文件的问题。

# Copyright (C) 2024 Andrew Wason
# SPDX-License-Identifier: MIT

import asyncio
import pathlib
import sys
import typing as t

from langchain_core.messages import AIMessage, BaseMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.tools import BaseTool
from langchain_groq import ChatGroq
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

from langchain_mcp import MCPToolkit

async def run(tools: list[BaseTool], prompt: str) -> str:
    model = ChatGroq(model_name="llama-3.1-8b-instant", stop_sequences=None)  # requires GROQ_API_KEY
    tools_map = {tool.name: tool for tool in tools}
    tools_model = model.bind_tools(tools)
    messages: list[BaseMessage] = [HumanMessage(prompt)]
    ai_message = t.cast(AIMessage, await tools_model.ainvoke(messages))
    messages.append(ai_message)
    for tool_call in ai_message.tool_calls:
        selected_tool = tools_map[tool_call["name"].lower()]
        tool_msg = await selected_tool.ainvoke(tool_call)
        messages.append(tool_msg)
    return await (tools_model | StrOutputParser()).ainvoke(messages)

async def main(prompt: str) -> None:
    server_params = StdioServerParameters(
        command="npx",
        args=["-y", "@modelcontextprotocol/server-filesystem", str(pathlib.Path(__file__).parent.parent)],
    )
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            toolkit = MCPToolkit(session=session)
            await toolkit.initialize()
            response = await run(toolkit.get_tools(), prompt)
            print(response)

if __name__ == "__main__":
    prompt = sys.argv[1] if len(sys.argv) > 1 else "Read and summarize the file ./readme.md"
    asyncio.run(main(prompt))
   

在运行此 Python 脚本之前,您应该安装所需的依赖项,langchain-core、langchain-groq 和 langchain-mcp。

pip install langchain-core langchain-groq langchain-mcp

上面的 MCP 配置使用 npx 服务器类型。因此,您应该安装 server-filesystem 包。

pm install -g @modelcontextprotocol/server-filesystem

安装所有必需的包后,如果您将文件添加到项目并在 Python 脚本中引用它,如上面的示例代码 ./readme.md 所示,您应该会看到类似于此图的输出。

注意:此示例取自 LangChain 的 GitHub repo。

4、使用 MCP 实现 Chainlit AI 应用

Chainlit 是一个用于构建Python AI应用程序的平台。它内置了对MCP服务器的支持,因此您可以配置您的应用程序以发现可用的MCP工具,并将工具调用集成到应用程序流程中以获得更好的结果。您可以通过服务器发送事件(SSE)和命令行(stdio)服务来集成Chainlit应用程序。在以下示例中,我们将连接一个Chainlit应用程序到Linear MCP服务器,以便应用程序可以管理Linear问题、项目和团队。您可以使用此示例中的Linear工具来创建、更新、搜索用户问题或向问题添加评论。

4.1 配置Chainlit应用程序以连接到MCP服务器

将Chainlit应用程序连接到访问MCP服务器上的工具涉及两个主要步骤。

a) 注册MCP连接:在此步骤中,您应该实现Chainlit的on_mcp_connect异步函数以建立成功的连接。您还可以实现on_mcp_disconnect函数以处理清理工作。

# pip install chainlit  

import chainlit as cl  
from mcp import ClientSession  

@cl.on_mcp_connect  
async def on_mcp_connect(connection, session: ClientSession):  
    """当MCP连接建立时调用"""  
    # 在此处编写您的连接初始化代码  
    # 此处理器是MCP工作的必要条件  

@cl.on_mcp_disconnect  
async def on_mcp_disconnect(name: str, session: ClientSession):  
    """当MCP连接终止时调用"""  
    # 可选处理器:在此处清理您的代码

b) 配置MCP客户端(Chainlit、LangChain、Mastra):为了让MCP服务器与Chainlit应用程序一起工作,客户端应通过Chainlit的UI提供连接详细信息。此配置包括以下内容。

  • 一个唯一标识符,代表连接的名称。
  • 客户端类型:您应指定是要使用sse还是stdio。对于sse,您应添加一个URL端点。当使用stdio时,需要完整的命令(例如,npx您的工具包或uvx您的工具包)。完整的命令示例如下。

npx -y linear-mcp-server --tools=all --api-key=lin_api_your_linear_API_Key

在建立MCP服务器连接后,您可以使用MCP会话执行工具。最后,您可以通过工具调用无缝地将MCP工具与Chainlit应用程序的模型/代理集成在一起。您可以从Chainlit的示例应用程序的GitHub上找到此Linear MCP集成的完整源代码。

当您从Chainlit的GitHub存储库获取上述源代码并运行它,并通过Chainlit界面设置npx -y linear-mcp-server --tools=all --api-key=lin_api_your_linear_API_Key时,您将能够创建和更新Linear问题/项目。然而,正如这个示例所示,执行这些操作需要您的Linear团队的ID。

构建一个连接到的Chainlit应用程序MCP服务器

5、将MCP集成到Agno AI代理中

Agno 是一个用于构建复杂代理工作流的Python框架。因其简单性、易用性和与MCP服务器的无缝集成而广受欢迎。本节中的示例MCP实现集成了由四个独立贡献代理组成的多代理团队,例如Airbnb、Google Maps、网络搜索和天气MCP代理。这些Agno多代理协作以提供有关指定地点旅行的信息。

5.1 先决条件

要测试本节中的Agno MCP实现示例,

  1. 安装Agno、DuckDuckGoExapip install -U openai agno duckduckgo-search exa-py
  2. 获取一个GOOGLE_MAPS_API_KEY 并将其添加到项目的.env文件中。
  3. 获取一个APIFY_TOKEN 并将其添加到你的.env文件中。
  4. 验证Google地址API

5.2 配置Agno MCP代理团队

对于这一步,你应该定义你的MCP服务器参数,并使用AsyncExitStack管理多个上下文管理器。然后创建代理并运行它们。

    # 定义服务器参数  
    airbnb_server_params = StdioServerParameters(  
        command="npx",  
        args=["-y", "@openbnb/mcp-server-airbnb", "--ignore-robots-txt"],  
        env=env,  
    )  
  
    maps_server_params = StdioServerParameters(  
        command="npx", args=["-y", "@modelcontextprotocol/server-google-maps"], env=env  
    )  
  
    # 使用 contextlib.AsyncExitStack 管理多个异步上下文管理器  
    async with contextlib.AsyncExitStack() as stack:  
        # 为每个服务器创建stdio客户端  
        airbnb_client, _ = await stack.enter_async_context(stdio_client(airbnb_server_params))  
        maps_client, _ = await stack.enter_async_context(stdio_client(maps_server_params))  
  
        # 创建所有代理  
        airbnb_agent = Agent(  
            name="Airbnb",  
            role="Airbnb Agent",  
            model=OpenAIChat("gpt-4o"),  
            tools=[airbnb_client],  
            instructions=dedent("""\  
                你可以为给定的位置找到Airbnb房源。\  
            """),  
            add_datetime_to_instructions=True,  
        )

从Agno的GitHub存储库获取完整的源代码。安装所需的包、执行上述所有配置并运行完整的GitHub示例代码后,应该会显示类似以下预览的输出。

将MCP集成到Agno AI代理中

6、使用MCP进行Upsonic代理

Upsonic 是一个用于创建AI代理的Python框架。使用Upsonic,你可以构建自己的代理、为代理定义任务,并使用MCP工具处理每个任务定义,如下面的示例代码所示。

import os  
from dotenv import load_dotenv  
from upsonic import Task, Agent, Direct  
from upsonic.client.tools import Search  # 添加Search作为备用工具  
  
# 从.env文件加载环境变量  
load_dotenv()  
  
# 从环境变量中获取OpenAI API密钥  
openai_api_key = os.getenv("OPENAI_API_KEY")  
if not openai_api_key:  
    raise ValueError("OPENAI_API_KEY未在.env文件中找到")  
  
# 为会话设置OpenAI API密钥  
os.environ["OPENAI_API_KEY"] = openai_api_key  
  
# 定义HackerNews MCP工具  
# 根据Upsonic文档正确设置HackerNews的MCP  
class HackerNewsMCP:  
    command = "uvx"  
    args = ["mcp-hn"]  
    # 此MCP不需要任何环境变量  
  
# 创建任务以分析今天的最新HackerNews故事  
# 添加Search作为备用工具以防HackerNews MCP失败  
task = Task(  
    "分析今天的前5个HackerNews故事。为每个故事提供简短摘要,识别任何常见主题或趋势,并突出哪些故事可能对对人工智能和软件开发感兴趣的人最相关。",  
    tools=[HackerNewsMCP, Search]  # 包括HackerNews MCP和Search工具  
)  
  
# 创建专注于技术新闻分析的代理  
agent = Agent(  
    "Tech News Analyst",  
    company_url="https://news.ycombinator.com/",  
    company_objective="提供对技术行业新闻和趋势的深入分析"  
)  
  
# 使用代理执行任务并打印结果  
print("正在分析HackerNews故事...")  
agent.print_do(task)  
  
# 或者,如果任务很简单,可以直接调用LLM  
# print("直接分析HackerNews故事...")  
# Direct.print_do(task)  
  
# 如果你想以编程方式访问响应:  
# agent.do(task)  
# result = task.response  
# print(result)

在上面的示例中,我们在Upsonic中创建了一个AI代理,它检索最新的五个Hackernews故事。如果你pip install upsonic并运行上述Python代码,你应该会看到类似于以下图像的输出。

7、使用MCP进行Mastra代理

Mastra 是一个用于构建原型和生产就绪AI代理的TypeScript框架。与Chainlit类似,Mastra提供了一种标准化的方式连接到MCP服务器,以通过stdiosse基于连接访问各种工具。

要将你的Mastra代理连接到MCP服务器,你应该使用其MCPConfiguration类。此类在任何Mastra代理工作流中处理多个服务器连接,例如生命周期、命名空间和工具。在Master应用程序和MCP服务器之间建立连接涉及以下步骤。

  1. 创建MCPConfiguration类的实例并添加服务器配置。
  2. 使用getTools()getToolsets()方法检索MCP工具。

下面的示例代码代表了使用Mastra代理实现MCP服务器的基本用法。

import { MCPConfiguration } from "@mastra/mcp";  
import { Agent } from "@mastra/core/agent";  
import { openai } from "@ai-sdk/openai";  
  
const mcp = new MCPConfiguration({  
  servers: {  
    stockPrice: {  
      command: "npx",  
      args: ["tsx", "stock-price.ts"],  
      env: {  
        API_KEY: "your-api-key",  
      },  
    },  
    weather: {  
      url: new URL("http://localhost:8080/sse"),  
    },  
  },  
});  
  
// 创建具有访问所有工具权限的代理  
const agent = new Agent({  
  name: "Multi-tool Agent",  
  instructions: "你有访问多个工具服务器的权限。",  
  model: openai("gpt-4"),  
  tools: await mcp.getTools(),  
});

请参阅Mastra的MCPConfiguration 了解更多内容。

8、结束语

本教程向你介绍了MCP并解释了为什么它在开发者社区中变得流行。我们强调了MCP与Cursor和Windsurf等IDE的集成。除了上述内容外,我们在七个不同的Python和TypeScript框架中实现了MCP,用于构建基于LLM的应用程序、AI助手和代理。

MCP的卓越之处也伴随着以下挑战。在为项目寻找MCP工具时,你可能会发现很难检查或验证质量,并确切了解它们在你的AI项目中的具体应用。这是因为其工具搜索和发现尚未标准化。此外,由于MCP服务器提供商的不同架构,其配置无法提供一致的用户体验。

目前,MCP生态系统正在讨论 标准化MCP的各个方面。将来可能会有一种标准的方式来安装基于MCP的应用程序,就像我们在Python中pip install包一样。PulseMCP 也在尝试使浏览和发现MCP更容易。


原文链接:The Top 7 MCP-Supported AI Frameworks

汇智网翻译整理,转载请标明出处