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

墙裂推荐!McpStore库三行代码为Agent添加MCP能力

🚀 McpStore 三行代码为你的Agent添加MCP能力

McpStore 是一个专为解决 Agent 想要使用 MCP(Model Context Protocol) 的能力,但是疲于管理 MCP 的工具管理库。

MCP快速发展,我们都想为现有的Agent添加MCP的能力,但是为Agent引入新工具通常需要编写大量重复的“胶水代码”,流程繁琐

三行代码实现将 MCP 的工具即拿即用 ⚡

https://github.com/whillhill/mcpstore
无需关注 mcp 层级的协议和配置,只需要简单的使用直观的类和函数,提供 极致简洁 的用户体验。

# 引入MCPStore库
from mcpstore import MCPStore
# 步骤1: 初始化一个Store,这是管理所有MCP服务的核心入口
store = MCPStore.setup_store()
# 步骤2: 注册一个外部MCP服务,MCPStore会自动处理连接和工具加载
store.for_store().add_service({"name":"mcpstore-wiki","url":"http://mcpstore.wiki/mcp"})
# 步骤3: 获取与LangChain完全兼容的工具列表,可直接用于Agent
tools = store.for_store().for_langchain().list_tools()
# 此刻,您的LangChain Agent已成功集成了mcpstore-wiki提供的所有工具

一个完整的可运行示例,直接使你的 langchain 使用 mcp 服务 🔥

下面是一个完整的、可直接运行的示例,展示了如何将 McpStore 获取的工具无缝集成到标准的 langChain Agent 中。

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":"http://mcpstore.wiki/mcp"})
tools = store.for_store().to_langchain_tools()
llm = ChatOpenAI(temperature=0, model="deepseek-chat",openai_api_key="sk-****",openai_api_base="https://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']}")

或者你不想使用 langchain,你打算 自己设计工具的调用 🛠️

from mcpstore import MCPStore
store = MCPStore.setup_store()
store.for_store().add_service({"name":"mcpstore-wiki","url":"http://mcpstore.wiki/mcp"})
tools = store.for_store().list_tools()
print(store.for_store().use_tool(tools[0].name,{"query":'北京'}))

快速上手

安装

pip install mcpstore

链式调用 ⛓️

本人很讨厌复杂和超长的函数名,为了直观的展示代码,McpStore 采用的是 链式。具体来说,store 是一个基石,在这个基础上,如果你有不同的 agent,你希望你的不同的 agent 是不同领域的专家(使用隔离的不同的 MCP 们),那么你可以试一下 for_agent,每个 agent 之间是隔离的,你可以通过自定义一个 agentid 来确定你的 agent 的身份,并保证他只在他的范围内做的更好。

  • store.for_store():进入 全局上下文,在此处管理的服务和工具对所有 Agent 可见。
  • store.for_agent("agent_id"):为指定 ID 的 Agent 创建一个 隔离的私有上下文。每个

多 Agent 隔离的 🏠

以下代码演示了如何利用 上下文隔离,为不同职能的 Agent 分配 专属的工具集

# 初始化Store
store = MCPStore.setup_store()# 为“知识管理Agent”分配专用的Wiki工具
# 该操作在"knowledge" agent的私有上下文中进行
agent_id1 = "my-knowledge-agent"
knowledge_agent_context = store.for_agent(agent_id1).add_service({"name": "mcpstore-wiki", "url": "http://mcpstore.wiki/mcp"}
)# 为“开发支持Agent”分配专用的开发工具
# 该操作在"development" agent的私有上下文中进行
agent_id2 = "my-development-agent"
dev_agent_context = store.for_agent(agent_id2).add_service({"name": "mcpstore-demo", "url": "http://mcpstore.wiki/mcp"}
)# 各Agent的工具集完全隔离,互不影响
knowledge_tools = store.for_agent(agent_id1).list_tools()
dev_tools = store.for_agent(agent_id2).list_tools()

很直观的,你可以通过 store.for_store()store.for_agent("agent_id") 使用几乎所有的函数 ✨

McpStore 的 setup_store() 🔧

📋 概述

MCPStore.setup_store() 是 MCPStore 的 核心初始化方法,用于创建和配置 MCPStore 实例。该方法支持 自定义配置文件路径调试模式,为不同环境和使用场景提供 灵活的配置选项

🔧 方法签名

@staticmethod
def setup_store(mcp_config_file: str = None, debug: bool = False) -> MCPStore

参数说明:

  • mcp_config_file: 自定义 mcp.json 配置文件路径(可选)
  • debug: 是否启用调试日志模式(可选,默认 False)
  • 返回值: 完全初始化的 MCPStore 实例

📋 参数详解

1. mcp_config_file 参数
  • 未指定时: 使用默认路径 src/mcpstore/data/mcp.json
  • 指定时: 使用指定的 mcp.json 配置文件来实例化你的 store,支持 主流 client 的文件格式拿来即用 🎯
2. debug 参数
基本说明
  • 类型: bool
  • 默认值: False
  • 作用: 控制日志输出级别和详细程度
日志配置对比
模式debug=False (默认)debug=True
日志级别ERRORDEBUG
日志格式%(levelname)s - %(message)s%(asctime)s - %(name)s - %(levelname)s - %(message)s
显示内容只显示错误信息显示所有调试信息

📁 支持的 JSON 配置格式

标准 MCP 配置格式

MCPStore 使用 标准的 MCP 配置格式,支持 URL 方式命令方式 的服务配置:

{"mcpServers": {"mcpstore-wiki": {"url": "http://mcpstore.wiki/mcp"},"howtocook": {"command": "npx","args": ["-y","howtocook-mcp"]}}
}
场景:多租户配置 🏢
# 租户 A 的配置
tenant_a_store = MCPStore.setup_store(mcp_config_file="tenant_a_mcp.json",debug=False
)# 租户 B 的配置
tenant_b_store = MCPStore.setup_store(mcp_config_file="tenant_b_mcp.json",debug=False
)# 为不同租户提供隔离的服务
tenant_a_tools = tenant_a_store.for_store().list_tools()
tenant_b_tools = tenant_b_store.for_store().list_tools()

强大的服务注册 add_service 💪

mcpstore 的核心是 store。只需通过 setup_store() 初始化一个的 store,就可以在这个 store 上注册 任意数量、支持所有 MCP 协议 的服务,不必担心各个 mcp 服务的 生命周期和维护,不必担心针对 mcp 服务的 增删改查store全权负责 这些服务的生命周期维护。

当需要将这些服务集成到 langchain Agent 中时,调用 store.for_store().to_langchain_tools() 即可 一键转换 为完全兼容 langchain Tool 结构的工具集,方便您直接使用或与现有工具 无缝结合

或者可以直接使用 store.for_store().use_tool() 方法,自定义你想要的工具调用 🎯。

服务注册方式

所有通过 add_service 添加的服务,其配置都会被 统一管理,并可选择持久化到 setup_store 注册时的 mcp.json 文件中,去重和更新 会由 mcpstore 自动进行 ⚙️。

基本语法

store = MCPStore.setup_store()
store.for_store().add_service(config)

支持的注册方式

1. 🔄 全量注册(无参数)

注册 mcp.json 配置文件中的所有服务。

store.for_store().add_service()

不传递任何参数,add_service自动查找并加载 项目根目录下的 mcp.json 文件,该文件 兼容主流格式

使用场景:

  • 项目初始化时 一次性注册 所有预配置的服务
  • 重新加载 所有服务配置

2. 🌐 URL 方式注册

通过 URL 添加远程 MCP 服务。

store.for_store().add_service({"name": "mcpstore-wiki","url": "http://mcpstore.wiki/mcp","transport": "streamable-http"
})

字段:

  • name: 服务名称
  • url: 服务 URL
  • transport: 可选字段,可以 自动推断 传输协议 (streamable-http, sse)

3. 💻 本地命令方式注册

启动本地 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"]
})

必需字段:

  • name: 服务名称
  • command: 执行命令

可选字段:

  • args: 命令参数列表
  • env: 环境变量字典
  • working_dir: 工作目录

4. 📄 MCPConfig 字典方式注册

使用标准 MCP 配置格式。

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

5. 📝 服务名称列表方式注册

从现有配置中选择特定服务注册。

# 注册指定的服务
store.for_store().add_service(['mcpstore-wiki', 'howtocook'])# 注册单个服务
store.for_store().add_service(['howtocook'])

前提条件: 服务必须已在 mcp.json 配置文件中定义 📋。


6. 📁 JSON 文件方式注册

从外部 JSON 文件读取配置。

# 从文件读取配置
store.for_store().add_service(json_file="./demo_config.json")# 同时指定 config 和 json_file(优先使用 json_file)
store.for_store().add_service(config={"name": "backup"},json_file="./demo_config.json"  # 这个会被使用 ⚡
)

JSON 文件格式示例:

{"mcpServers": {"mcpstore-wiki": {"url": "http://mcpstore.wiki/mcp"},"howtocook": {"command": "npx","args": ["-y","howtocook-mcp"]}}
}

以及 add_service 支持的其他格式 📝

{"name": "mcpstore-wiki","url": "http://mcpstore.wiki/mcp"
}

RESTful API 🌐

除了作为 Python 库 使用,MCPStore 还提供了一套 完备的 RESTful API,让您可以将 MCP 工具管理能力 无缝集成到任何后端服务或管理平台中。

一行命令 即可启动完整的 Web 服务:

pip install mcpstore
mcpstore run api

启动后立即获得 38个 API 接口 🚀

📡 完整的 API 生态

Store 级别 API 🏪
# 服务管理
POST /for_store/add_service          # 添加服务
GET  /for_store/list_services        # 获取服务列表
POST /for_store/delete_service       # 删除服务
POST /for_store/update_service       # 更新服务
POST /for_store/restart_service      # 重启服务# 工具操作
GET  /for_store/list_tools           # 获取工具列表
POST /for_store/use_tool             # 执行工具# 批量操作
POST /for_store/batch_add_services   # 批量添加
POST /for_store/batch_update_services # 批量更新# 监控统计
GET  /for_store/get_stats            # 系统统计
GET  /for_store/health               # 健康检查
Agent 级别 API 🤖
# 完全对应Store级别,支持多租户隔离
POST /for_agent/{agent_id}/add_service
GET  /for_agent/{agent_id}/list_services
# ... 所有Store级别功能都支持
监控系统 API(3个接口)📊
GET  /monitoring/status              # 获取监控状态
POST /monitoring/config              # 更新监控配置
POST /monitoring/restart             # 重启监控任务
通用 API 🔧
GET  /services/{name}                # 跨上下文服务查询

开发者文档与资源 📚

详细的 API 接口文档

我们提供 详尽的 RESTful API 文档,旨在帮助开发者 快速集成与调试。文档为每个 API 端点提供了 全面的信息,包括:

  • 功能描述:接口的用途和业务逻辑。
  • URL与HTTP方法:标准的请求路径和方法。
  • 请求参数:详细的输入参数说明、类型及校验规则。
  • 响应示例:清晰的成功与失败响应结构示例。
  • Curl调用示例:可直接复制运行的命令行调用示例。
  • 源码追溯:关联到实现该接口的后端源码文件、类及关键函数,实现从 API 到代码的透明化,极大地方便了 深度调试和问题定位 🔍。

源码级开发文档 (LLM友好型) 🤖

为了支持 深度定制和二次开发,我们还提供了一份 独特的源码级参考文档。这份文档不仅 系统性地梳理 了项目中所有核心的类、属性及方法,更重要的是,我们额外提供了一份为 大语言模型(LLM)优化llm.txt 版本。
开发者可以直接将这份 纯文本格式 的文档提供给 AI 模型,让 AI 辅助进行 代码理解功能扩展重构,从而实现真正的 AI 驱动开发(AI-Driven Development) ✨。

参与贡献 🤝

MCPStore 是一个 开源项目,我们欢迎社区的 任何形式的贡献

  • ⭐ 如果项目对您有帮助,请在 GitHub 上给我们一个 Star。
  • 🐛 通过 Issues 提交错误报告或功能建议。
  • 🔧 通过 Pull Requests 贡献您的代码。
  • 💬 加入社区,分享您的 使用经验最佳实践

MCPStore:让 MCP 工具管理变得 简单而强大 💪。

http://www.dtcms.com/a/274137.html

相关文章:

  • 业务建模如何让金融数字化转型 “轻” 装上
  • CentOS7环境安装包部署并配置MySQL5.7
  • 什么是proxy
  • 使用浏览器inspect调试wx小程序
  • 构建基于表单配置的 Jenkins 测试项目(接口、UI、APP、Jmeter)
  • 加速市场反馈,助力产品迭代升级​
  • 如何使用 Python 删除 Excel 中的行、列和单元格 – 详解
  • IAR携手矽力杰与普华基础软件,共推RISC-V车规芯片高安全应用落地
  • docker 启动中间件
  • Python 数据建模与分析项目实战预备 Day 2 - 数据构建与字段解析(模拟简历结构化数据)
  • 【Python练习】038. 编写一个函数,检查一个链表是否有环
  • PHY模式,slave master怎么区分
  • 力扣网编程134题:加油站(双指针)
  • Android15 无法接收到应用自身发出的广播分析解决
  • 【牛客刷题】dd爱科学1.0
  • Java 大视界 -- Java 大数据在智能医疗远程手术机器人操作数据记录与分析中的应用(342)
  • 从静到动的创作革命:Midjourney Video V1重塑AI影像叙事
  • 滑动窗口-3.无重复字符的最长子串-力扣(LeetCode)
  • 【Linux】虚拟内存的概念和布局
  • UI自动化神器:Playwright元素定位方法!
  • 新型变种木马正在伪装成Termius入侵系统
  • Kotlin 常用语法糖完整整理
  • 【springboot】IDEA手动创建SpringBoot简单工程(无插件)
  • 【零基础学AI】第37讲:提示词工程(Prompt Engineering)
  • NLP_知识图谱_大模型——个人学习记录
  • 解决MySQL虚拟删除影响唯一索引的问题
  • 《PyWin32:Python与Windows的桥梁,解锁系统自动化新姿势》
  • 从0开始学习R语言--Day44--LR检验
  • 外媒:蚂蚁数科等科技公司在香港数字资产枢纽建设中显身手
  • python 在 Linux CentOS 上安装 playwright 的完整步骤