yomemoai-mcp 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- yomemoai_mcp-0.1.0/.gitignore +11 -0
- yomemoai_mcp-0.1.0/.python-version +1 -0
- yomemoai_mcp-0.1.0/LICENSE +21 -0
- yomemoai_mcp-0.1.0/PKG-INFO +234 -0
- yomemoai_mcp-0.1.0/PUBLISHING.md +187 -0
- yomemoai_mcp-0.1.0/README.md +211 -0
- yomemoai_mcp-0.1.0/pyproject.toml +36 -0
- yomemoai_mcp-0.1.0/src/yomemoai_mcp/__init__.py +2 -0
- yomemoai_mcp-0.1.0/src/yomemoai_mcp/client.py +131 -0
- yomemoai_mcp-0.1.0/src/yomemoai_mcp/py.typed +0 -0
- yomemoai_mcp-0.1.0/src/yomemoai_mcp/server.py +80 -0
- yomemoai_mcp-0.1.0/uv.lock +1483 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 yomemo.ai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: yomemoai-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Model Context Protocol (MCP) server for YoMemoAI - enables AI assistants to save and retrieve encrypted memories
|
|
5
|
+
Author-email: lvxiangxiang <lvxiangxiang@shopline.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Keywords: ai,claude,cursor,mcp,mcp-server,memory,yomemoai
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
15
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
16
|
+
Requires-Python: >=3.12
|
|
17
|
+
Requires-Dist: cryptography>=46.0.3
|
|
18
|
+
Requires-Dist: fastmcp>=0.1.0
|
|
19
|
+
Requires-Dist: mcp>=1.25.0
|
|
20
|
+
Requires-Dist: python-dotenv>=1.2.1
|
|
21
|
+
Requires-Dist: requests>=2.32.5
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# yomemoai-mcp
|
|
25
|
+
|
|
26
|
+
A Model Context Protocol (MCP) server for YoMemoAI, enabling AI assistants to save and retrieve encrypted memories.
|
|
27
|
+
|
|
28
|
+
## Features
|
|
29
|
+
|
|
30
|
+
- 🔐 **Secure Storage**: Encrypted memory storage using RSA-OAEP and AES-GCM
|
|
31
|
+
- 🏷️ **Categorization**: Organize memories with handles (tags/categories)
|
|
32
|
+
- 🔍 **Retrieval**: Query memories by handle or retrieve all memories
|
|
33
|
+
- 🚀 **MCP Integration**: Seamlessly integrates with MCP-compatible AI assistants
|
|
34
|
+
|
|
35
|
+
## Prerequisites
|
|
36
|
+
|
|
37
|
+
- Python 3.12 or higher
|
|
38
|
+
- [uv](https://github.com/astral-sh/uv) package manager
|
|
39
|
+
- YoMemoAI API key
|
|
40
|
+
- RSA private key (PEM format)
|
|
41
|
+
|
|
42
|
+
## Installation
|
|
43
|
+
|
|
44
|
+
1. Clone the repository:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
git clone <repository-url>
|
|
48
|
+
cd yomemoai-mcp
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
2. Install dependencies using uv:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
uv sync
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Configuration
|
|
58
|
+
|
|
59
|
+
Create a `.env` file in the project root with the following configuration:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# YoMemoAI MCP Server Configuration
|
|
63
|
+
|
|
64
|
+
# Your API key from YoMemoAI (required)
|
|
65
|
+
MEMO_API_KEY=your_api_key_here
|
|
66
|
+
|
|
67
|
+
# Path to your private key file (RSA private key in PEM format)
|
|
68
|
+
# Default: private.pem
|
|
69
|
+
MEMO_PRIVATE_KEY_PATH=private.pem
|
|
70
|
+
|
|
71
|
+
# Base URL of the YoMemoAI API (optional)
|
|
72
|
+
# Default: https://api.yomemo.ai
|
|
73
|
+
MEMO_BASE_URL=https://api.yomemo.ai
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Important Configuration Notes:**
|
|
77
|
+
|
|
78
|
+
1. **MEMO_API_KEY** (required): Your YoMemoAI API key. You must obtain this from your YoMemoAI account.
|
|
79
|
+
|
|
80
|
+
2. **MEMO_PRIVATE_KEY_PATH**: Path to your RSA private key file. The private key should be in PEM format:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
-----BEGIN PRIVATE KEY-----
|
|
84
|
+
...
|
|
85
|
+
-----END PRIVATE KEY-----
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Make sure this file is secure and never commit it to version control.
|
|
89
|
+
|
|
90
|
+
3. **MEMO_BASE_URL** (optional): The API base URL. Defaults to `https://api.yomemo.ai` if not specified.
|
|
91
|
+
|
|
92
|
+
## Usage
|
|
93
|
+
|
|
94
|
+
### Running the MCP Server
|
|
95
|
+
|
|
96
|
+
After configuration, you can run the MCP server using:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
uv run memo-mcp
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Integration with Cursor/Claude Desktop
|
|
103
|
+
|
|
104
|
+
Add the following configuration to your MCP settings file:
|
|
105
|
+
|
|
106
|
+
**For Cursor**: `~/.cursor/mcp.json` (or `%APPDATA%\Cursor\User\mcp.json` on Windows)
|
|
107
|
+
**For Claude Desktop**: `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows)
|
|
108
|
+
|
|
109
|
+
#### Option 1: Using `uvx` (Recommended - after publishing to PyPI)
|
|
110
|
+
|
|
111
|
+
If the package is published to PyPI, you can use `uvx` to run it directly. The package provides multiple entry points:
|
|
112
|
+
|
|
113
|
+
**Using `uvx yomemoai-mcp`** (recommended):
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"mcpServers": {
|
|
118
|
+
"yomemoai": {
|
|
119
|
+
"command": "uvx",
|
|
120
|
+
"args": ["yomemoai-mcp"],
|
|
121
|
+
"env": {
|
|
122
|
+
"MEMO_API_KEY": "your_api_key_here",
|
|
123
|
+
"MEMO_PRIVATE_KEY_PATH": "/absolute/path/to/private.pem",
|
|
124
|
+
"MEMO_BASE_URL": "https://api.yomemo.ai"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**How `uvx` works:**
|
|
132
|
+
|
|
133
|
+
- `uvx` automatically downloads the package from PyPI (if not already installed)
|
|
134
|
+
- It runs the package's entry point script defined in `project.scripts`
|
|
135
|
+
- The package name is `yomemoai-mcp`, so `uvx yomemoai-mcp` will automatically use the `yomemoai-mcp` entry point
|
|
136
|
+
- The package also provides alternative entry points: `yomemo` and `memo-mcp` (all point to the same server)
|
|
137
|
+
|
|
138
|
+
**Note**: The package must be published to PyPI before using `uvx`. If the package is not yet published, use Option 2 for local development.
|
|
139
|
+
|
|
140
|
+
#### Option 2: Using local development setup
|
|
141
|
+
|
|
142
|
+
For local development or if the package is not yet published, use the `uv --directory` approach:
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"mcpServers": {
|
|
147
|
+
"yomemoai": {
|
|
148
|
+
"command": "uv",
|
|
149
|
+
"args": [
|
|
150
|
+
"--directory",
|
|
151
|
+
"/absolute/path/to/yomemoai-mcp",
|
|
152
|
+
"run",
|
|
153
|
+
"yomemoai-mcp"
|
|
154
|
+
],
|
|
155
|
+
"env": {
|
|
156
|
+
"MEMO_API_KEY": "your_api_key_here",
|
|
157
|
+
"MEMO_PRIVATE_KEY_PATH": "/absolute/path/to/private.pem",
|
|
158
|
+
"MEMO_BASE_URL": "https://api.yomemo.ai"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Important Notes:**
|
|
166
|
+
|
|
167
|
+
- **For Option 1 (`uvx`)**: The package must be published to PyPI. `uvx` will automatically handle installation and execution.
|
|
168
|
+
- **For Option 2 (local)**: Replace `/absolute/path/to/yomemoai-mcp` with the **absolute path** to this repository on your system
|
|
169
|
+
- Replace `/absolute/path/to/private.pem` with the **absolute path** to your private key file
|
|
170
|
+
- The `env` section in the MCP config will override any `.env` file in the project directory
|
|
171
|
+
- After updating the MCP config, restart Cursor/Claude Desktop for changes to take effect
|
|
172
|
+
|
|
173
|
+
### Available Tools
|
|
174
|
+
|
|
175
|
+
#### `save_memory`
|
|
176
|
+
|
|
177
|
+
Store important information, user preferences, or conversation context as a permanent memory.
|
|
178
|
+
|
|
179
|
+
**Parameters:**
|
|
180
|
+
|
|
181
|
+
- `content` (required): The actual text/information to be remembered
|
|
182
|
+
- `handle` (optional): A short, unique category or tag (e.g., 'work', 'personal', 'project-x'). Defaults to 'general'
|
|
183
|
+
- `description` (optional): A brief summary of what this memory is about
|
|
184
|
+
|
|
185
|
+
#### `load_memories`
|
|
186
|
+
|
|
187
|
+
Retrieve previously stored memories or context.
|
|
188
|
+
|
|
189
|
+
**Parameters:**
|
|
190
|
+
|
|
191
|
+
- `handle` (optional): Filter memories by category. If not specified, returns all memories
|
|
192
|
+
|
|
193
|
+
## Development
|
|
194
|
+
|
|
195
|
+
### Project Structure
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
yomemoai-mcp/
|
|
199
|
+
├── src/
|
|
200
|
+
│ └── yomemoai_mcp/
|
|
201
|
+
│ ├── __init__.py
|
|
202
|
+
│ ├── server.py # MCP server implementation
|
|
203
|
+
│ ├── client.py # YoMemoAI API client
|
|
204
|
+
│ └── py.typed # Type hints marker
|
|
205
|
+
├── pyproject.toml # Project configuration
|
|
206
|
+
├── uv.lock # Dependency lock file
|
|
207
|
+
└── README.md
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Dependencies
|
|
211
|
+
|
|
212
|
+
- `cryptography`: For encryption/decryption operations
|
|
213
|
+
- `fastmcp`: FastMCP framework for MCP servers
|
|
214
|
+
- `mcp`: Model Context Protocol SDK
|
|
215
|
+
- `python-dotenv`: Environment variable management
|
|
216
|
+
- `requests`: HTTP client for API calls
|
|
217
|
+
|
|
218
|
+
## Security Notes
|
|
219
|
+
|
|
220
|
+
- **Never commit** your `.env` file or private key files to version control
|
|
221
|
+
- Keep your private key secure and never share it
|
|
222
|
+
- The `.env` file is already included in `.gitignore`
|
|
223
|
+
|
|
224
|
+
## License
|
|
225
|
+
|
|
226
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
227
|
+
|
|
228
|
+
## Contributing
|
|
229
|
+
|
|
230
|
+
[Add contribution guidelines here]
|
|
231
|
+
|
|
232
|
+
## Support
|
|
233
|
+
|
|
234
|
+
For issues and questions, please open an issue on the repository.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Publishing Guide
|
|
2
|
+
|
|
3
|
+
This document describes how to publish `yomemoai-mcp` to PyPI so that users can install it using `uvx yomemoai-mcp`.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
1. **PyPI Account**: Create an account at [PyPI](https://pypi.org/) if you don't have one
|
|
8
|
+
2. **TestPyPI Account** (recommended for testing): Create an account at [TestPyPI](https://test.pypi.org/)
|
|
9
|
+
3. **API Token**: You'll need an API token to publish packages
|
|
10
|
+
|
|
11
|
+
## Step 1: Create API Token
|
|
12
|
+
|
|
13
|
+
1. Log in to [PyPI](https://pypi.org/)
|
|
14
|
+
2. Go to **Account settings** → **API tokens**
|
|
15
|
+
3. Click **Add API token**
|
|
16
|
+
4. Choose scope:
|
|
17
|
+
- **Entire account**: Can publish any package (recommended for personal projects)
|
|
18
|
+
- **Project-specific**: Limited to a specific package
|
|
19
|
+
5. **Important**: Copy the token immediately - it's only shown once!
|
|
20
|
+
- Format: `pypi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
|
|
21
|
+
|
|
22
|
+
## Step 2: Configure Authentication
|
|
23
|
+
|
|
24
|
+
### Option A: Using Environment Variable (Recommended)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
export UV_PUBLISH_TOKEN=pypi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Option B: Using uv's Credential Store
|
|
31
|
+
|
|
32
|
+
uv will prompt for credentials when you run `uv publish` for the first time.
|
|
33
|
+
|
|
34
|
+
## Step 3: Build the Package
|
|
35
|
+
|
|
36
|
+
Before publishing, build the package to ensure everything is correct:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
cd python-yomemo-mcp
|
|
40
|
+
uv build
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This will create a `dist/` directory containing:
|
|
44
|
+
- `yomemoai_mcp-0.1.0-py3-none-any.whl` (wheel distribution)
|
|
45
|
+
- `yomemoai-mcp-0.1.0.tar.gz` (source distribution)
|
|
46
|
+
|
|
47
|
+
## Step 4: Test on TestPyPI (Recommended)
|
|
48
|
+
|
|
49
|
+
Before publishing to the real PyPI, test on TestPyPI:
|
|
50
|
+
|
|
51
|
+
### 4.1 Create TestPyPI API Token
|
|
52
|
+
|
|
53
|
+
1. Log in to [TestPyPI](https://test.pypi.org/)
|
|
54
|
+
2. Create an API token (same process as PyPI)
|
|
55
|
+
3. Export the token:
|
|
56
|
+
```bash
|
|
57
|
+
export UV_PUBLISH_TOKEN=pypi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 4.2 Publish to TestPyPI
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
uv publish --publish-url https://test.pypi.org/legacy/
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 4.3 Test Installation
|
|
67
|
+
|
|
68
|
+
Test that the package can be installed and run:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Test installation from TestPyPI
|
|
72
|
+
uvx --index-url https://test.pypi.org/simple/ yomemoai-mcp --help
|
|
73
|
+
|
|
74
|
+
# Or test in a clean environment
|
|
75
|
+
uv venv test-env
|
|
76
|
+
source test-env/bin/activate # On Windows: test-env\Scripts\activate
|
|
77
|
+
pip install --index-url https://test.pypi.org/simple/ yomemoai-mcp
|
|
78
|
+
yomemoai-mcp --help
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Step 5: Publish to PyPI
|
|
82
|
+
|
|
83
|
+
Once testing is successful, publish to the real PyPI:
|
|
84
|
+
|
|
85
|
+
### 5.1 Set Production API Token
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
export UV_PUBLISH_TOKEN=pypi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 5.2 Publish
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
uv publish
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Or explicitly specify the URL:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
uv publish --publish-url https://upload.pypi.org/legacy/
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Step 6: Verify Publication
|
|
104
|
+
|
|
105
|
+
After publishing, verify the package is available:
|
|
106
|
+
|
|
107
|
+
### 6.1 Check Package on PyPI
|
|
108
|
+
|
|
109
|
+
Visit: https://pypi.org/project/yomemoai-mcp/
|
|
110
|
+
|
|
111
|
+
### 6.2 Test Installation
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Test with uvx
|
|
115
|
+
uvx yomemoai-mcp --help
|
|
116
|
+
|
|
117
|
+
# Or install directly
|
|
118
|
+
pip install yomemoai-mcp
|
|
119
|
+
yomemoai-mcp --help
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 6.3 Check Package Metadata
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
curl https://pypi.org/pypi/yomemoai-mcp/json | jq
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Updating the Package
|
|
129
|
+
|
|
130
|
+
When you need to publish a new version:
|
|
131
|
+
|
|
132
|
+
1. **Update version** in `pyproject.toml`:
|
|
133
|
+
```toml
|
|
134
|
+
version = "0.1.1" # or 0.2.0, 1.0.0, etc.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
2. **Update CHANGELOG** (if you maintain one)
|
|
138
|
+
|
|
139
|
+
3. **Build and publish**:
|
|
140
|
+
```bash
|
|
141
|
+
uv build
|
|
142
|
+
uv publish
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Version Numbering
|
|
146
|
+
|
|
147
|
+
Follow [Semantic Versioning](https://semver.org/):
|
|
148
|
+
- **MAJOR** (1.0.0): Breaking changes
|
|
149
|
+
- **MINOR** (0.1.0): New features, backward compatible
|
|
150
|
+
- **PATCH** (0.1.1): Bug fixes, backward compatible
|
|
151
|
+
|
|
152
|
+
## Troubleshooting
|
|
153
|
+
|
|
154
|
+
### Error: "Package already exists"
|
|
155
|
+
|
|
156
|
+
- If you're updating an existing package, make sure to increment the version number
|
|
157
|
+
- If the package name is taken, you'll need to choose a different name
|
|
158
|
+
|
|
159
|
+
### Error: "Invalid credentials"
|
|
160
|
+
|
|
161
|
+
- Check that your API token is correct
|
|
162
|
+
- Make sure you're using the right token (TestPyPI vs PyPI)
|
|
163
|
+
- Tokens expire after a period of inactivity - create a new one if needed
|
|
164
|
+
|
|
165
|
+
### Error: "File already exists"
|
|
166
|
+
|
|
167
|
+
- The version you're trying to publish already exists
|
|
168
|
+
- Increment the version number in `pyproject.toml`
|
|
169
|
+
|
|
170
|
+
### Package not found after publishing
|
|
171
|
+
|
|
172
|
+
- Wait a few minutes - PyPI indexing can take time
|
|
173
|
+
- Check the package name is correct: `yomemoai-mcp`
|
|
174
|
+
- Verify the package is published: https://pypi.org/project/yomemoai-mcp/
|
|
175
|
+
|
|
176
|
+
## Security Notes
|
|
177
|
+
|
|
178
|
+
- **Never commit** API tokens to version control
|
|
179
|
+
- Use environment variables or credential stores
|
|
180
|
+
- Rotate tokens periodically
|
|
181
|
+
- Use project-specific tokens when possible (more secure than account-wide tokens)
|
|
182
|
+
|
|
183
|
+
## Additional Resources
|
|
184
|
+
|
|
185
|
+
- [PyPI Documentation](https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/)
|
|
186
|
+
- [uv Documentation](https://docs.astral.sh/uv/)
|
|
187
|
+
- [Python Packaging User Guide](https://packaging.python.org/)
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# yomemoai-mcp
|
|
2
|
+
|
|
3
|
+
A Model Context Protocol (MCP) server for YoMemoAI, enabling AI assistants to save and retrieve encrypted memories.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🔐 **Secure Storage**: Encrypted memory storage using RSA-OAEP and AES-GCM
|
|
8
|
+
- 🏷️ **Categorization**: Organize memories with handles (tags/categories)
|
|
9
|
+
- 🔍 **Retrieval**: Query memories by handle or retrieve all memories
|
|
10
|
+
- 🚀 **MCP Integration**: Seamlessly integrates with MCP-compatible AI assistants
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
- Python 3.12 or higher
|
|
15
|
+
- [uv](https://github.com/astral-sh/uv) package manager
|
|
16
|
+
- YoMemoAI API key
|
|
17
|
+
- RSA private key (PEM format)
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
1. Clone the repository:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git clone <repository-url>
|
|
25
|
+
cd yomemoai-mcp
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
2. Install dependencies using uv:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
uv sync
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Configuration
|
|
35
|
+
|
|
36
|
+
Create a `.env` file in the project root with the following configuration:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# YoMemoAI MCP Server Configuration
|
|
40
|
+
|
|
41
|
+
# Your API key from YoMemoAI (required)
|
|
42
|
+
MEMO_API_KEY=your_api_key_here
|
|
43
|
+
|
|
44
|
+
# Path to your private key file (RSA private key in PEM format)
|
|
45
|
+
# Default: private.pem
|
|
46
|
+
MEMO_PRIVATE_KEY_PATH=private.pem
|
|
47
|
+
|
|
48
|
+
# Base URL of the YoMemoAI API (optional)
|
|
49
|
+
# Default: https://api.yomemo.ai
|
|
50
|
+
MEMO_BASE_URL=https://api.yomemo.ai
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Important Configuration Notes:**
|
|
54
|
+
|
|
55
|
+
1. **MEMO_API_KEY** (required): Your YoMemoAI API key. You must obtain this from your YoMemoAI account.
|
|
56
|
+
|
|
57
|
+
2. **MEMO_PRIVATE_KEY_PATH**: Path to your RSA private key file. The private key should be in PEM format:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
-----BEGIN PRIVATE KEY-----
|
|
61
|
+
...
|
|
62
|
+
-----END PRIVATE KEY-----
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Make sure this file is secure and never commit it to version control.
|
|
66
|
+
|
|
67
|
+
3. **MEMO_BASE_URL** (optional): The API base URL. Defaults to `https://api.yomemo.ai` if not specified.
|
|
68
|
+
|
|
69
|
+
## Usage
|
|
70
|
+
|
|
71
|
+
### Running the MCP Server
|
|
72
|
+
|
|
73
|
+
After configuration, you can run the MCP server using:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
uv run memo-mcp
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Integration with Cursor/Claude Desktop
|
|
80
|
+
|
|
81
|
+
Add the following configuration to your MCP settings file:
|
|
82
|
+
|
|
83
|
+
**For Cursor**: `~/.cursor/mcp.json` (or `%APPDATA%\Cursor\User\mcp.json` on Windows)
|
|
84
|
+
**For Claude Desktop**: `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows)
|
|
85
|
+
|
|
86
|
+
#### Option 1: Using `uvx` (Recommended - after publishing to PyPI)
|
|
87
|
+
|
|
88
|
+
If the package is published to PyPI, you can use `uvx` to run it directly. The package provides multiple entry points:
|
|
89
|
+
|
|
90
|
+
**Using `uvx yomemoai-mcp`** (recommended):
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"mcpServers": {
|
|
95
|
+
"yomemoai": {
|
|
96
|
+
"command": "uvx",
|
|
97
|
+
"args": ["yomemoai-mcp"],
|
|
98
|
+
"env": {
|
|
99
|
+
"MEMO_API_KEY": "your_api_key_here",
|
|
100
|
+
"MEMO_PRIVATE_KEY_PATH": "/absolute/path/to/private.pem",
|
|
101
|
+
"MEMO_BASE_URL": "https://api.yomemo.ai"
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**How `uvx` works:**
|
|
109
|
+
|
|
110
|
+
- `uvx` automatically downloads the package from PyPI (if not already installed)
|
|
111
|
+
- It runs the package's entry point script defined in `project.scripts`
|
|
112
|
+
- The package name is `yomemoai-mcp`, so `uvx yomemoai-mcp` will automatically use the `yomemoai-mcp` entry point
|
|
113
|
+
- The package also provides alternative entry points: `yomemo` and `memo-mcp` (all point to the same server)
|
|
114
|
+
|
|
115
|
+
**Note**: The package must be published to PyPI before using `uvx`. If the package is not yet published, use Option 2 for local development.
|
|
116
|
+
|
|
117
|
+
#### Option 2: Using local development setup
|
|
118
|
+
|
|
119
|
+
For local development or if the package is not yet published, use the `uv --directory` approach:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"mcpServers": {
|
|
124
|
+
"yomemoai": {
|
|
125
|
+
"command": "uv",
|
|
126
|
+
"args": [
|
|
127
|
+
"--directory",
|
|
128
|
+
"/absolute/path/to/yomemoai-mcp",
|
|
129
|
+
"run",
|
|
130
|
+
"yomemoai-mcp"
|
|
131
|
+
],
|
|
132
|
+
"env": {
|
|
133
|
+
"MEMO_API_KEY": "your_api_key_here",
|
|
134
|
+
"MEMO_PRIVATE_KEY_PATH": "/absolute/path/to/private.pem",
|
|
135
|
+
"MEMO_BASE_URL": "https://api.yomemo.ai"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Important Notes:**
|
|
143
|
+
|
|
144
|
+
- **For Option 1 (`uvx`)**: The package must be published to PyPI. `uvx` will automatically handle installation and execution.
|
|
145
|
+
- **For Option 2 (local)**: Replace `/absolute/path/to/yomemoai-mcp` with the **absolute path** to this repository on your system
|
|
146
|
+
- Replace `/absolute/path/to/private.pem` with the **absolute path** to your private key file
|
|
147
|
+
- The `env` section in the MCP config will override any `.env` file in the project directory
|
|
148
|
+
- After updating the MCP config, restart Cursor/Claude Desktop for changes to take effect
|
|
149
|
+
|
|
150
|
+
### Available Tools
|
|
151
|
+
|
|
152
|
+
#### `save_memory`
|
|
153
|
+
|
|
154
|
+
Store important information, user preferences, or conversation context as a permanent memory.
|
|
155
|
+
|
|
156
|
+
**Parameters:**
|
|
157
|
+
|
|
158
|
+
- `content` (required): The actual text/information to be remembered
|
|
159
|
+
- `handle` (optional): A short, unique category or tag (e.g., 'work', 'personal', 'project-x'). Defaults to 'general'
|
|
160
|
+
- `description` (optional): A brief summary of what this memory is about
|
|
161
|
+
|
|
162
|
+
#### `load_memories`
|
|
163
|
+
|
|
164
|
+
Retrieve previously stored memories or context.
|
|
165
|
+
|
|
166
|
+
**Parameters:**
|
|
167
|
+
|
|
168
|
+
- `handle` (optional): Filter memories by category. If not specified, returns all memories
|
|
169
|
+
|
|
170
|
+
## Development
|
|
171
|
+
|
|
172
|
+
### Project Structure
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
yomemoai-mcp/
|
|
176
|
+
├── src/
|
|
177
|
+
│ └── yomemoai_mcp/
|
|
178
|
+
│ ├── __init__.py
|
|
179
|
+
│ ├── server.py # MCP server implementation
|
|
180
|
+
│ ├── client.py # YoMemoAI API client
|
|
181
|
+
│ └── py.typed # Type hints marker
|
|
182
|
+
├── pyproject.toml # Project configuration
|
|
183
|
+
├── uv.lock # Dependency lock file
|
|
184
|
+
└── README.md
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Dependencies
|
|
188
|
+
|
|
189
|
+
- `cryptography`: For encryption/decryption operations
|
|
190
|
+
- `fastmcp`: FastMCP framework for MCP servers
|
|
191
|
+
- `mcp`: Model Context Protocol SDK
|
|
192
|
+
- `python-dotenv`: Environment variable management
|
|
193
|
+
- `requests`: HTTP client for API calls
|
|
194
|
+
|
|
195
|
+
## Security Notes
|
|
196
|
+
|
|
197
|
+
- **Never commit** your `.env` file or private key files to version control
|
|
198
|
+
- Keep your private key secure and never share it
|
|
199
|
+
- The `.env` file is already included in `.gitignore`
|
|
200
|
+
|
|
201
|
+
## License
|
|
202
|
+
|
|
203
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
204
|
+
|
|
205
|
+
## Contributing
|
|
206
|
+
|
|
207
|
+
[Add contribution guidelines here]
|
|
208
|
+
|
|
209
|
+
## Support
|
|
210
|
+
|
|
211
|
+
For issues and questions, please open an issue on the repository.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "yomemoai-mcp"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Model Context Protocol (MCP) server for YoMemoAI - enables AI assistants to save and retrieve encrypted memories"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = { text = "MIT" }
|
|
7
|
+
authors = [
|
|
8
|
+
{ name = "lvxiangxiang", email = "lvxiangxiang@shopline.com" }
|
|
9
|
+
]
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
keywords = ["mcp", "mcp-server", "yomemoai", "memory", "ai", "claude", "cursor"]
|
|
12
|
+
classifiers = [
|
|
13
|
+
"Development Status :: 4 - Beta",
|
|
14
|
+
"Intended Audience :: Developers",
|
|
15
|
+
"License :: OSI Approved :: MIT License",
|
|
16
|
+
"Programming Language :: Python :: 3",
|
|
17
|
+
"Programming Language :: Python :: 3.12",
|
|
18
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
19
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
20
|
+
]
|
|
21
|
+
dependencies = [
|
|
22
|
+
"cryptography>=46.0.3",
|
|
23
|
+
"fastmcp>=0.1.0",
|
|
24
|
+
"mcp>=1.25.0",
|
|
25
|
+
"python-dotenv>=1.2.1",
|
|
26
|
+
"requests>=2.32.5",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
[project.scripts]
|
|
30
|
+
yomemoai-mcp = "yomemoai_mcp.server:mcp.run"
|
|
31
|
+
yomemo = "yomemoai_mcp.server:mcp.run"
|
|
32
|
+
memo-mcp = "yomemoai_mcp.server:mcp.run"
|
|
33
|
+
|
|
34
|
+
[build-system]
|
|
35
|
+
requires = ["hatchling"]
|
|
36
|
+
build-backend = "hatchling.build"
|