English | 简体中文
MCP management built with Rust
mcpstore is built with Rust for high performance and low overhead. Its architecture mirrors Kubernetes-style control plane / data plane: the control plane handles orchestration, while the data plane focuses on invocation. On resource-constrained hosts you can attach only the data plane and call already-shared MCP services with zero local maintenance. SDKs are available for embedding into applications and Agents.
npm install -g ip2a@mcpstoreor
curl -fsSL https://raw.githubusercontent.com/ip2a/mcpstore/main/install.sh | bashPrefer code integration? → Use via SDK
Manage MCP services and runtime state from the CLI. See Quick Start above for installation.
Add, connect, restart, or remove a service:
mcpstore add wiki https://example.com/mcp
mcpstore list
mcpstore connect wiki
mcpstore remove wikiInspect local config, or open the Web UI:
mcpstore config show
mcpstore webExpose an HTTP API:
mcpstore api --host 127.0.0.1 --port 1820The GUI is the control plane: manage MCP services and tools, inspect parameters, and try invocations. Currently in Beta — download from GitHub Releases.
Integrate mcpstore into your application via the Python SDK or Rust Lib.
Python
pip install mcpstoreInitialize a store:
from mcpstore import MCPStore
store = MCPStore.setup_store()Use store.for_store() to manage MCP services and tools in the global scope.
store.for_store().add_service({
"mcpServers": {
"mcpstore_wiki": {
"url": "https://example.com/mcp"
}
}
})
store.for_store().wait_service("mcpstore_wiki")from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
tools = store.for_store().for_langchain().list_tools()
llm = ChatOpenAI(
temperature=0,
model="your-model",
api_key="sk-*****",
base_url="https://api.xxx.com",
)
agent = create_agent(model=llm, tools=tools, system_prompt="You are an assistant")
events = agent.invoke({
"messages": [{"role": "user", "content": "How do I add a service in mcpstore?"}]
})
print(events)| Framework | Get tools |
|---|---|
| LangChain | tools = store.for_store().for_langchain().list_tools() |
| LangGraph | tools = store.for_store().for_langgraph().list_tools() |
| OpenAI | tools = store.for_store().for_openai().list_tools() |
| AutoGen | tools = store.for_store().for_autogen().list_tools() |
| CrewAI | tools = store.for_store().for_crewai().list_tools() |
| LlamaIndex | tools = store.for_store().for_llamaindex().list_tools() |
Use for_agent(agent_id) to create an independent scope per Agent:
store.for_agent("agent1").add_service({
"name": "mcpstore_wiki",
"url": "https://example.com/mcp",
})
store.for_agent("agent2").add_service({
"name": "github",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
},
})
agent1_tools = store.for_agent("agent1").list_tools()
agent2_tools = store.for_agent("agent2").list_tools()Rust
cargo add mcpstoreuse std::time::Duration;
use mcpstore::{McpConfig, MCPStore, Result, ServiceTarget};
#[tokio::main]
async fn main() -> Result<()> {
let store = MCPStore::setup(None)?;
store
.for_store()
.add_service(McpConfig::from_json_str(
r#"{"name":"mcpstore_wiki","url":"https://example.com/mcp"}"#,
)?)
.await?;
store
.for_store()
.wait_service(
ServiceTarget::ServiceName("mcpstore_wiki"),
Duration::from_secs(30),
)
.await?;
let tools = store.for_store().list_tools().await?;
println!("loaded tools: {}", tools.len());
Ok(())
}Common APIs
| Action | Example |
|---|---|
| Add service | store.for_store().add_service(config) |
| Get service info | store.for_store().find_service("service_name").info() |
| Update service | store.for_store().update_service("service_name", new_config) |
| Restart service | store.for_store().restart_service("service_name") |
| Disconnect service | store.for_store().disconnect_service("service_name") |
| Remove service | store.for_store().remove_service(service_name="service_name") |
| List services | store.for_store().list_services() |
| List tools | store.for_store().list_tools() |
| List prompts in current scope | store.for_store().list_prompts() |
| Show config | store.for_store().show_config() |
| List agents | store.list_agents() |
Issues and suggestions are welcome via GitHub Issues.
