孔某人的低维认知 03月16日
我对MCP的理解
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了MCP(Model Context Protocol)作为Agent应用插件协议的特性和作用。MCP主要用于为Agent应用新增工具,而非完全替代原有功能。文章通过分析官方demo代码,阐述了MCP如何将工具调用转化为LLM的tool调用。MCP协议本身不依赖LLM,但结合LLM的语义理解能力可以实现工具的自动适配,类似于传统软件开发中的依赖注入。MCP Server是工具提供方,MCP client是Agent应用。最初为Claude的App端与用户本地PC资源交互设计,现逐步扩展到跨机器通讯。

🧩MCP是一种Agent应用的插件协议,侧重于为Agent应用新增工具,而非替代原有功能。它本质上并非LLM tool use协议的替代方案,而是将MCP的调用转换为LLM的tool调用。

⚙️MCP体系中,MCP Server是工具提供方,MCP client是Agent应用。该协议最初设计用于Claude的App端与用户本地PC资源和Context进行交互,目前正逐步扩展到跨机器通讯。

🧠MCP协议本身与LLM并非强制绑定,即使通过硬编码匹配工具函数名进行调用,无需LLM参与也可实现。然而,为了避免硬编码并实现工具的自动适配,通常需要结合LLM的语义理解、推理能力和知识。

🔗MCP类似于传统软件开发中的依赖注入(Dependency Injection)实例。为了实现工具注入的自动适配,需要借助LLM的能力才能有效使用。

原创 孔某人 2025-03-16 16:42 北京

MCP是一种Agent应用的插件协议

我个人之前对MCP并不是很关心,最近与人讨论稍微研究了一下这方面。但并不算深入,也没有翻太多源码,所以本文的观点将来可能会被推翻。但只要这篇文章还在,就表示我的观点没有被推翻。


MCP是一种Agent应用的插件协议,而且这个插件更偏工具性质,不能大幅的覆盖原有Agent的功能和设定,更多是给它新增一些tools。


它本质上并不是LLM tool use协议的替代,官方demo的例子就是把MCP的调用转换为了LLM的tool调用给LLM模型,以下代码来自 https://modelcontextprotocol.io/quickstart/client

async def process_query(self, query: str) -> str:    """Process a query using Claude and available tools"""    messages = [        {            "role""user",            "content": query        }    ]    response = await self.session.list_tools()    available_tools = [{        "name": tool.name,        "description": tool.description,        "input_schema": tool.inputSchema    } for tool in response.tools]    # Initial Claude API call    response = self.anthropic.messages.create(        model="claude-3-5-sonnet-20241022",        max_tokens=1000,        messages=messages,        tools=available_tools    )    # Process response and handle tool calls    final_text = []    assistant_message_content = []    for content in response.content:        if content.type == 'text':            final_text.append(content.text)            assistant_message_content.append(content)        elif content.type == 'tool_use':            tool_name = content.name            tool_args = content.input            # Execute tool call            result = await self.session.call_tool(tool_name, tool_args)            final_text.append(f"[Calling tool {tool_name} with args {tool_args}]")            assistant_message_content.append(content)            messages.append({                "role""assistant",                "content": assistant_message_content            })            messages.append({                "role""user",                "content": [                    {                        "type""tool_result",                        "tool_use_id": content.id,                        "content": result.content                    }                ]            })            # Get next response from Claude            response = self.anthropic.messages.create(                model="claude-3-5-sonnet-20241022",                max_tokens=1000,                messages=messages,                tools=available_tools            )            final_text.append(response.content[0].text)    return "\n".join(final_text)

这段代码就已经很清楚了,再结合该文档前面的链接建立,感觉就是个很典型的插件模式。


MCP体系的命名是挺糟糕的:MCP Server是工具提供方,MCP client是Agent应用。


MCP本来是为Claude的App端与用户本地PC资源和Context进行交互而设计的,后来协议也在逐步往跨机器通讯来扩展。


MCP协议其实与LLM并不绑定,获取了tool之后如果是硬编码匹配tool函数名进行调用其实也没问题,这样就完全没有LLM参与了。只是实际使用中,肯定是希望避免对于具体插件的硬编码,这样就需要结合tool的描述来进行使用,所以就需要LLM的语义理解、推理能力、知识等


这可以看成是传统软件开发中依赖注入(Dependency Injection)的一个实例,只不过真的想要实现注入工具的自动适配,需要有LLM的能力才能有效的使用。


交流与合作

如果希望和我交流讨论,或参与相关的讨论群,或者建立合作,请加微信,联系方式请点击 -> 联系方式

本文于2025.3.16 首发于微信公众号

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP Agent应用 插件协议 LLM 依赖注入
相关文章