# Unstorage MCP Server [中文 README](/README_ZH.md) A Key-Value storage MCP server based on [unjs/unstorage](https://github.com/unjs/unstorage). Support drivers: 1. memory 2. filesystem 3. redis 4. unstorage http server 5. mongodb Support transports: - [x] stdio - [x] Streamable HTTP - [x] SSE Tools: - **`showMounts()`** - **`getItem(key)`** - **`getItems(items)`** - **`getItemRaw(key)`** - **`getMeta(key, nativeOnly)`** - **`getKeys(base, maxDepth)`** - **`setItem(key, value)`** - **`setItems(items)`** - **`setItemRaw(key, value)`** - **`setMeta(key, meta)`** - **`removeItem(key, removeMeta)`** - **`removeMeta(key)`**

- [Unstorage MCP Server](#unstorage-mcp-server) - [Running with stdio](#running-with-stdio) - [minimal configuration](#minimal-configuration) - [maximum configuration](#maximum-configuration) - [_for Cline+Windows:_](#for-clinewindows) - [Running with HTTP (SSE + Streamable)](#running-with-http-sse--streamable) - [related arguments](#related-arguments) - [Example **prompt** for use](#example-prompt-for-use) - [args](#args) - [environment variables](#environment-variables) - [redis](#redis) - [mongodb](#mongodb) - [filesystem](#filesystem) - [http server](#http-server) - [memory](#memory) - [extend guide](#extend-guide) - [prompts for cursor/cline assisted programming](#prompts-for-cursorcline-assisted-programming) - [debug approaches](#debug-approaches) - [mcp-inspector](#mcp-inspector) - [tsx mcpServer Config for local dev](#tsx-mcpserver-config-for-local-dev) ## Running with stdio ### minimal configuration ```json { "mcpServers": { "unstorage": { "command": "npx", "args": ["-y", "@slow-groovin/unstorage-mcp"] } } } ``` ### maximum configuration ```json { "mcpServers": { "unstorage": { "command": "npx", "env": { "REDIS_URL": "redis://default:123456@localhost:6379", "REDIS_BASE": "visits:date:api:", "REDIS_MOUNT_POINT": "redis_storage", "FS_BASE": "D:/tmp", "FS_MOUNT_POINT": "fs_storage", "HTTP_BASE": "http://localhost:3001", "HTTP_MOUNT_POINT": "http_storage", "HTTP_HEADERS": "Authorization=Bear 123;A=3;B=4;C=5", "MONGODB_URL": "mongodb://root:123456@localhost:27017/", "MONGODB_DB_NAME": "test", "MONGODB_COLLECTION_NAME": "unstorage", "MONGODB_MOUNT_POINT": "mongo_storage" }, "args": ["-y", "@slow-groovin/unstorage-mcp", "--disable-modify"] } } } ``` ### _for Cline+Windows:_ ```json { "mcpServers": { "unstorage": { "command": "cmd", "args": ["/c", "npx", "-y", "@slow-groovin/unstorage-mcp"] } } } ``` If you have problem of installation on Windows, you can refrer to this [article](https://www.api2o.com/en/blog/windows-client-install-mcp-tutorial) ## Running with HTTP (SSE + Streamable) ```sh npx @slow-groovin/unstorage-mcp --http ``` ## related arguments | arg | | default | | ---------- | -------------------------------------- | --------- | | --http | enable http transport instead of stdio | `false` | | -p, --port | listening port | 3000 | | -h, --host | listening host | localhost | ## Example **prompt** for use ```text The process has produced a key-value result: "fs_base:recommend_site"="www.api2o.com", store it. ``` ## args **`--disable-modify`** _Default: false_ Disable tools with modify functionality like setItem, setItems ... ## environment variables > for the concept of base and mountpoint, please refer to the [doc of unstorage](https://unstorage.unjs.io/guide) > Set environment variables in the terminal or in the `.env` file ### redis _if **`REDIS_URL`** is set, a redis storage will be mounted_ | Syntax | Description | Default Value | Optional | | ----------------------- | -------------------------------------------------------------- | ------------- | -------- | | **`REDIS_URL`** | redis connect url, eg: `redis://default:123456@localhost:6379` | | | | **`REDIS_BASE`** | base of redisDriver | | ✅ | | **`REDIS_MOUNT_POINT`** | mountpoint of this storage | "/" | ✅ | ### mongodb _if **`MONGODB_URL`** is set, a mongodb storage will be mounted_ | Syntax | Description | Default Value | Optional | | ----------------------------- | -------------------------------------------------------- | ------------- | -------- | | **`MONGODB_URL`** | mongodb connect url, eg: `mongodb://user:pass@host:port` | | | | **`MONGODB_DB_NAME`** | mongodb database name, eg: `test` | | | | **`MONGODB_COLLECTION_NAME`** | mongodb collection name, eg: `mycollection` | | | | **`MONGODB_MOUNT_POINT`** | mountpoint of this storage | "/" | ✅ | ### filesystem _if **`FS_BASE`** is set, a redis storage will be mounted_ | Syntax | Description | Default Value | Optional | | -------------------- | ------------------------------------ | ------------- | -------- | | **`FS_BASE`** | base of fsDriver, path of filesystem | | | | **`FS_MOUNT_POINT`** | mountpoint of this storage | "/" | ✅ | ### http server _if **`HTTP_BASE`** is set, a http storage will be mounted_ | Syntax | Description | Default Value | Optional | | ---------------------- | --------------------------------------------------------------- | ------------- | -------- | | **`HTTP_BASE`** | base of httpDriver, endpoint of http server | | | | **`HTTP_MOUNT_POINT`** | mountpoint of this storage | "/" | ✅ | | **`HTTP_HEADERS`** | headers for http requests, eg: `Authorization=Bear 123;A=1;B=2` | | ✅ | ### memory If there is no mount on root("/"), a memory driver will be mounted automatically on "/" (same behaviour of unstorage). ## extend guide 1. clone this repo 2. copy src/storage/redis.ts to a new file and modify it to your desired driver(`unjs/unstorage` is super easy to learn) 3. test and verify that it is effective 4. (optional) pull a merge request If you are not a typescript developer, please submit a issue to ask for other drivers support. ### prompts for cursor/cline assisted programming ```text @/src/storage/mongodb.ts , please implement this file: 1. you need to fetch information using the storage type's corresponding Doc URL (https://unstorage.unjs.io/drivers/). 2. you can refer to examples in @/src/adapter/redis.ts and @/src/storage/http.ts. 3. You are only responsible for generating the code and do not need to perform testing. ``` > If you have not installed fetch MCP server, delete the first sentence ## debug approaches ### mcp-inspector ```sh mcp-inspector -e HTTP_BASE=http://localhost:3001 -e HTTP_MOUNT_POINT=http_storage -e FS_BASE=D:/temp -e FS_MOUNT_POINT=fs_storage -e HTTP_HEADERS="Authorization=Bear 123;" tsx ./src/index.ts ``` ### tsx mcpServer Config for local dev ```json { "mcpServers": { "command": "cmd", "env": { "REDIS_URL": "redis://default:123456@localhost:6379", "REDIS_BASE": "my:mcp:values:", "REDIS_MOUNT_POINT": "redis_storage" }, "args": ["/c", "tsx", "D:/xxx/projects/unstorage-mcp/src/index.ts"] } } ``` restarting server is needed to make changes take effect