ip2a
mcpstore
Rust

开盒即用的优雅管理mcp服务 | 结合Agent框架 | 作者听劝 | 已发布pypi | Vue页面demo

Last updated Jul 7, 2026
420
Stars
29
Forks
7
Issues
+1
Stars/day
Attention Score
57
Language breakdown
No language data available.
Files click to expand
README

███    ███  ██████  ███████  ██████  ████████  ██████  ██████  ███████
████  ████ ██      ██    ██ ██          ██    ██    ██ ██   ██ ██
██ ████ ██ ██      ███████  ██████      ██    ██    ██ ██████  █████
██  ██  ██ ██      ██           ██      ██    ██    ██ ██  ██  ██
██      ██  ██████ ██      ██████       ██     ██████  ██   ██ ███████

GitHub stars GitHub forks GitHub license Python versions

English | 简体中文

在线体验 | 详细文档 | 快速使用

mcpstore 是什么?

开发者最佳的mcp管理包 快速维护mcp服务并应用

快速开始

pip install mcpstore

Rust-first 架构

当前 mcpstore 以 Rust 作为唯一真实运行时:

  • mcpstore api 由 Rust 二进制直接启动完整 HTTP API 服务
  • mcpstore mcp-server 由 Rust 二进制直接暴露 MCP Server,支持 stdiostreamable-http
  • Python 包主要提供 PyO3 store facade、稳定的 Python SDK 入口,以及 Python 生态 adapter
如果你只想把 mcpstore 当成独立服务使用,优先直接调用 Rust CLI:
mcpstore api --config-path ./mcp.json --port 18200
mcpstore mcp-server --config-path ./mcp.json
mcpstore mcp-server --config-path ./mcp.json --transport streamable-http --port 18300 --path /mcp

简单示例

一切的开始:初始化一个store

from mcpstore import MCPStore
store = MCPStore.setup_store()

现在你获得了一个 store,利用store去使用你的MCP服务,store 会维护和管理这些 MCP 服务。

给store添加第一个服务

#在上面的代码下面加入
store.forstore().addservice({"mcpServers": {"mcpstore_wiki": {"url": "https://www.mcpstore.wiki/mcp"}}})
store.forstore().waitservice("mcpstore_wiki")

addservice方法支持多种mcp服务配置格式,。waitservice用来等待服务就绪。

将mcp适配转为langchain需要的对象

#在上面的代码下面加入
tools = store.forstore().forlangchain().list_tools()
print("loaded langchain tools:", len(tools))

轻松将mcp服务转为langchain可以直接使用的tools列表

框架适配

积极支持更多的框架

| 已支持框架 | 获取工具 | | --- | --- | | LangChain | tools = store.forstore().forlangchain().list_tools() | | LangGraph | tools = store.forstore().forlanggraph().list_tools() | | AutoGen | tools = store.forstore().forautogen().list_tools() | | CrewAI | tools = store.forstore().forcrewai().list_tools() | | LlamaIndex | tools = store.forstore().forllamaindex().list_tools() |

代码中使用 以langchain为例

#添加上面的代码
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
    temperature=0, 
    model="your-model",
    api_key="sk-*",
    base_url="https://api.xxx.com"
)
agent = createagent(model=llm, tools=tools, systemprompt="你是一个助手,回答的时候带上表情")
events = agent.invoke({"messages": [{"role": "user", "content": "mcpstore怎么添加服务?"}]})
print(events)
如你所见。这里的langchain的agent可以正常的调用你通过sotre管理的mcp服务了。

为 Agent 分组

使用 foragent(agentid) 实现分组

#不同的agent需要不同的mcp的集合

agent_id1 = "agent1" store.foragent(agentid1).addservice({"name": "mcpstorewiki", "url": "https://www.mcpstore.wiki/mcp"})

agent_id2 = "agent2" store.foragent(agentid2).add_service({"name": "gitodo", "command": "uvx", "args": ["gitodo"]})

agent1tools = store.foragent(agentid1).listtools()

agent2tools = store.foragent(agentid2).listtools()

store.foragent(agentid)store.for_store() 镜像大部分函数接口, agent 的分组是 store 的逻辑子集。

通过为不同 agent 隔离mcp服务,避免上下文过长,并由 sotre 统一维护。

Rust API 与 MCP Server

当前推荐直接使用 Rust CLI 暴露服务,而不是再依赖历史 Python hub 接口:

# 启动 Rust HTTP API
mcpstore api --config-path ./mcp.json --host 127.0.0.1 --port 18200

以 stdio 启动 Rust MCP Server

mcpstore mcp-server --config-path ./mcp.json

以 streamable-http 启动 Rust MCP Server

mcpstore mcp-server --config-path ./mcp.json --transport streamable-http --host 127.0.0.1 --port 18300 --path /mcp

Python 侧已不再提供嵌入式 API server;请直接使用 Rust CLI 启动服务。

常用接口

| 动作 | 命令示例 | |-------------|----------------------------------------------------------------------------------------| | 定位服务 | store.forstore().findservice("service_name") | | 更新服务 | store.forstore().updateservice("servicename", newconfig) | | 增量更新 | store.forstore().patchservice("service_name", {"headers": {"X-API-Key": "..."}}) | | 删除服务 | store.forstore().deleteservice("service_name") | | 重启服务 | store.forstore().restartservice("service_name") | | 断开服务 | store.forstore().disconnectservice("service_name") | | 健康检查 | store.forstore().checkservices() | | 查看配置 | store.forstore().showconfig() | | 服务详情 | store.forstore().serviceinfo("service_name") | | 等待就绪 | store.forstore().waitservice("service_name", timeout=30) | | 列出agent | store.forstore().listagents() | | 列出服务 | store.forstore().listservices() | | 列出工具 | store.forstore().listtools() | | 列出资源 | store.forstore().listresources() | | 读取资源 | store.forstore().readresource("resource://uri") | | 列出 Prompts | store.forstore().listprompts() | | 获取 Prompt | store.forstore().getprompt("prompt_name", {"k": "v"}) | | 执行工具 | store.forstore().calltool("tool_name", {"k": "v"}) |

数据源热拔插和共享

支持使用 KV 数据库作为共享缓存后端(如redis),用于跨进程/多实例共享服务与工具

pip install mcpstore[redis]
#或直接 单独 pip install redis
#或者其他 pyvk 支持的数据库
快速使用
from mcpstore import MCPStore
from mcpstore.config import RedisConfig
redis_config = RedisConfig(
    host="127.0.0.1",
    port=6379,
    password=None,
    namespace="demo_namespace"  # 隔离前缀,防冲突
)
store = MCPStore.setupstore(cache=redisconfig)
cache 定义好数据库配置的情况下,所有的数据将由数据保存,也就意味着不同实例的 store 只要可以访问到该数据库,就可以共享mcp服务数据以及协同.

也就意味着,你可以通过分布式的方式管理你的mcp服务,在资源受限的环境下可以共享使用由 store 维护好的mcp服务。

你可以在资源充足的环境启动 RedisConfig 配置过的 store

然后在若干个资源首先的环境下,可以通过 only_db 的方式,放弃管理和维护mcp服务,所有的对mcp服务的操作会以事件的形式通知被共享的环境去维护 store 和进程。

from mcpstore import MCPStore
from mcpstore.config import RedisConfig

redis_config = RedisConfig( host="127.0.0.1", port=6379, password=None, namespace="demo_namespace" #使用相同的命名空间来隔离同一个数据库里的不同键 ) store = MCPStore.setupstore(cache=redisconfig, onlydb=True) #这里配置onlydb store.forstore().listservices()

更多细节参考 setup_store 配置见文档

API 与 MCP 服务

当前版本已经内置 Rust API 与 Rust MCP Server:

  • mcpstore api:启动完整 HTTP API 服务
  • mcpstore mcp-server:启动 MCP Server
因此,对外服务能力应优先理解为 Rust-first;Python 不再承载独立的 API / MCP 核心实现。

docker部署

提供了一些 docker 的配置方便大家尝试,本项目的初衷是做一个更方便好用的 mcp 管理的包,并不偏向于完成一个项目的构建,所以项目设计的可能不太完善和成熟,欢迎大家提出意见谢谢

Star History

Star History Chart


McpStore 仍在高频更新中,欢迎反馈与建议。

© 2026 GitRepoTrend · ip2a/mcpstore · Updated daily from GitHub