English | 简体中文
mcpstore
MCP management built with Rust
Why mcpstore
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.
Quick Start
npm install -g ip2a@mcpstore
or
curl -fsSL https://raw.githubusercontent.com/ip2a/mcpstore/main/install.sh | bash
Prefer code integration? → Use via SDK
CLI Usage
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 wiki
Inspect local config, or open the Web UI:
mcpstore config show
mcpstore web
Expose an HTTP API:
mcpstore api --host 127.0.0.1 --port 1820
Desktop App (Beta)
The GUI is the control plane: manage MCP services and tools, inspect parameters, and try invocations. Currently in Beta — download from GitHub Releases.
SDK Usage
Integrate mcpstore into your application via the Python SDK or Rust Lib.
Python
### Install
```bash
pip install mcpstore
```
### Quick Start
Initialize a `store`:
```python
from mcpstore import MCPStore
store = MCPStore.setup_store()
```
Use `store.for_store()` to manage MCP services and tools in the global scope.
#### Add your first service
```python
store.for_store().add_service({
"mcpServers": {
"mcpstore_wiki": {
"url": "https://example.com/mcp"
}
}
})
store.for_store().wait_service("mcpstore_wiki")
```
#### Convert to LangChain tools and use them
```python
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()` |
#### Group by Agent
Use `for_agent(agent_id)` to create an independent scope per Agent:
```python
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
### Install
```bash
cargo add mcpstore
```
### Quick Start
```rust
use 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()` |
Star History
[](https://star-history.com/#ip2a/mcpstore&Date)
Issues and suggestions are welcome via GitHub Issues.