mcp-server-appwrite 0.1.2__py3-none-any.whl → 0.1.4__py3-none-any.whl
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.
- mcp_server_appwrite/server.py +50 -8
- mcp_server_appwrite/service.py +47 -4
- mcp_server_appwrite-0.1.4.dist-info/METADATA +249 -0
- mcp_server_appwrite-0.1.4.dist-info/RECORD +10 -0
- mcp_server_appwrite-0.1.2.dist-info/METADATA +0 -161
- mcp_server_appwrite-0.1.2.dist-info/RECORD +0 -10
- {mcp_server_appwrite-0.1.2.dist-info → mcp_server_appwrite-0.1.4.dist-info}/WHEEL +0 -0
- {mcp_server_appwrite-0.1.2.dist-info → mcp_server_appwrite-0.1.4.dist-info}/entry_points.txt +0 -0
- {mcp_server_appwrite-0.1.2.dist-info → mcp_server_appwrite-0.1.4.dist-info}/licenses/LICENSE +0 -0
mcp_server_appwrite/server.py
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
from typing import List
|
1
3
|
import asyncio
|
2
4
|
import os
|
5
|
+
import argparse
|
3
6
|
import mcp.server.stdio
|
4
7
|
import mcp.types as types
|
5
8
|
from mcp.server import NotificationOptions, Server
|
@@ -19,6 +22,19 @@ from appwrite.exception import AppwriteException
|
|
19
22
|
from .tool_manager import ToolManager
|
20
23
|
from .service import Service
|
21
24
|
|
25
|
+
def parse_args():
|
26
|
+
parser = argparse.ArgumentParser(description='Appwrite MCP Server')
|
27
|
+
parser.add_argument('--databases', action='store_true', help='Enable Databases service')
|
28
|
+
parser.add_argument('--users', action='store_true', help='Enable Users service')
|
29
|
+
parser.add_argument('--teams', action='store_true', help='Enable Teams service')
|
30
|
+
parser.add_argument('--storage', action='store_true', help='Enable Storage service')
|
31
|
+
parser.add_argument('--functions', action='store_true', help='Enable Functions service')
|
32
|
+
parser.add_argument('--messaging', action='store_true', help='Enable Messaging service')
|
33
|
+
parser.add_argument('--locale', action='store_true', help='Enable Locale service')
|
34
|
+
parser.add_argument('--avatars', action='store_true', help='Enable Avatars service')
|
35
|
+
parser.add_argument('--all', action='store_true', help='Enable all services')
|
36
|
+
return parser.parse_args()
|
37
|
+
|
22
38
|
# Load environment variables from .env file
|
23
39
|
load_dotenv()
|
24
40
|
|
@@ -36,14 +52,37 @@ client.set_endpoint(endpoint)
|
|
36
52
|
client.set_project(project_id)
|
37
53
|
client.set_key(api_key)
|
38
54
|
|
39
|
-
# Initialize tools manager
|
55
|
+
# Initialize tools manager
|
40
56
|
tools_manager = ToolManager()
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
57
|
+
|
58
|
+
def register_services(args):
|
59
|
+
# If --all is specified, enable all services
|
60
|
+
if args.all:
|
61
|
+
args.databases = args.users = args.teams = args.storage = True
|
62
|
+
args.functions = args.messaging = args.locale = args.avatars = True
|
63
|
+
|
64
|
+
# Register services based on CLI arguments
|
65
|
+
if args.databases:
|
66
|
+
tools_manager.register_service(Service(Databases(client), "databases"))
|
67
|
+
if args.users:
|
68
|
+
tools_manager.register_service(Service(Users(client), "users"))
|
69
|
+
if args.teams:
|
70
|
+
tools_manager.register_service(Service(Teams(client), "teams"))
|
71
|
+
if args.storage:
|
72
|
+
tools_manager.register_service(Service(Storage(client), "storage"))
|
73
|
+
if args.functions:
|
74
|
+
tools_manager.register_service(Service(Functions(client), "functions"))
|
75
|
+
if args.messaging:
|
76
|
+
tools_manager.register_service(Service(Messaging(client), "messaging"))
|
77
|
+
if args.locale:
|
78
|
+
tools_manager.register_service(Service(Locale(client), "locale"))
|
79
|
+
if args.avatars:
|
80
|
+
tools_manager.register_service(Service(Avatars(client), "avatars"))
|
81
|
+
|
82
|
+
# If no services were specified, enable databases by default
|
83
|
+
if not any([args.databases, args.users, args.teams, args.storage,
|
84
|
+
args.functions, args.messaging, args.locale, args.avatars]):
|
85
|
+
tools_manager.register_service(Service(Databases(client), "databases"))
|
47
86
|
|
48
87
|
async def serve() -> Server:
|
49
88
|
server = Server("Appwrite MCP Server")
|
@@ -76,6 +115,9 @@ async def serve() -> Server:
|
|
76
115
|
return server
|
77
116
|
|
78
117
|
async def _run():
|
118
|
+
args = parse_args()
|
119
|
+
register_services(args)
|
120
|
+
|
79
121
|
async with mcp.server.stdio.stdio_server() as (read_stream, write_stream):
|
80
122
|
server = await serve()
|
81
123
|
await server.run(
|
@@ -83,7 +125,7 @@ async def _run():
|
|
83
125
|
write_stream,
|
84
126
|
InitializationOptions(
|
85
127
|
server_name="appwrite",
|
86
|
-
server_version="0.1.
|
128
|
+
server_version="0.1.4",
|
87
129
|
capabilities=server.get_capabilities(
|
88
130
|
notification_options=NotificationOptions(),
|
89
131
|
experimental_capabilities={},
|
mcp_server_appwrite/service.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
from typing import Any, get_type_hints, Dict
|
1
|
+
from typing import Any, get_type_hints, Dict, List, Optional, Union
|
2
2
|
import inspect
|
3
3
|
from mcp.types import Tool
|
4
|
+
from docstring_parser import parse
|
4
5
|
|
5
6
|
class Service():
|
6
7
|
"""Base class for all Appwrite services"""
|
@@ -29,7 +30,45 @@ class Service():
|
|
29
30
|
list: "array",
|
30
31
|
dict: "object"
|
31
32
|
}
|
32
|
-
|
33
|
+
|
34
|
+
# Handle basic types
|
35
|
+
if py_type in type_mapping:
|
36
|
+
return {"type": type_mapping[py_type]}
|
37
|
+
|
38
|
+
# Handle Optional types (Union[type, None])
|
39
|
+
if hasattr(py_type, "__origin__") and py_type.__origin__ is Union:
|
40
|
+
args = getattr(py_type, "__args__", ())
|
41
|
+
if len(args) == 2 and args[1] is type(None):
|
42
|
+
schema = self.python_type_to_json_schema(args[0])
|
43
|
+
return schema
|
44
|
+
|
45
|
+
# Handle List, Dict, and other generic types
|
46
|
+
if hasattr(py_type, "__origin__"):
|
47
|
+
origin = py_type.__origin__
|
48
|
+
args = getattr(py_type, "__args__", ())
|
49
|
+
|
50
|
+
# Handle List[T]
|
51
|
+
if origin is list or origin is List:
|
52
|
+
if args:
|
53
|
+
item_schema = self.python_type_to_json_schema(args[0])
|
54
|
+
return {
|
55
|
+
"type": "array",
|
56
|
+
"items": item_schema
|
57
|
+
}
|
58
|
+
return {"type": "array"}
|
59
|
+
|
60
|
+
# Handle Dict[K, V]
|
61
|
+
if origin is dict or origin is Dict:
|
62
|
+
if len(args) >= 2:
|
63
|
+
value_schema = self.python_type_to_json_schema(args[1])
|
64
|
+
return {
|
65
|
+
"type": "object",
|
66
|
+
"additionalProperties": value_schema
|
67
|
+
}
|
68
|
+
return {"type": "object"}
|
69
|
+
|
70
|
+
# Default to string for unknown types
|
71
|
+
return {"type": "string"}
|
33
72
|
|
34
73
|
def list_tools(self) -> Dict[str, Dict]:
|
35
74
|
"""Lists all available tools for this service"""
|
@@ -48,7 +87,7 @@ class Service():
|
|
48
87
|
# Get the overridden name if it exists
|
49
88
|
tool_name = self._method_name_overrides.get(name, f"{self.service_name}_{name}")
|
50
89
|
|
51
|
-
docstring = (original_func.__doc__
|
90
|
+
docstring = parse(original_func.__doc__)
|
52
91
|
signature = inspect.signature(original_func)
|
53
92
|
type_hints = get_type_hints(original_func)
|
54
93
|
|
@@ -62,13 +101,17 @@ class Service():
|
|
62
101
|
param_type = type_hints.get(param_name, str)
|
63
102
|
properties[param_name] = self.python_type_to_json_schema(param_type)
|
64
103
|
properties[param_name]["description"] = f"Parameter '{param_name}'"
|
104
|
+
|
105
|
+
for doc_param in docstring.params:
|
106
|
+
if doc_param.arg_name == param_name:
|
107
|
+
properties[param_name]["description"] = doc_param.description
|
65
108
|
|
66
109
|
if param.default is param.empty:
|
67
110
|
required.append(param_name)
|
68
111
|
|
69
112
|
tool_definition = Tool(
|
70
113
|
name=tool_name,
|
71
|
-
description=f"{docstring}",
|
114
|
+
description=f"{docstring.short_description or "No description available"}",
|
72
115
|
inputSchema={
|
73
116
|
"type": "object",
|
74
117
|
"properties": properties,
|
@@ -0,0 +1,249 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: mcp-server-appwrite
|
3
|
+
Version: 0.1.4
|
4
|
+
Summary: MCP (Model Context Protocol) server for Appwrite
|
5
|
+
License-File: LICENSE
|
6
|
+
Requires-Python: >=3.12
|
7
|
+
Requires-Dist: appwrite>=9.0.3
|
8
|
+
Requires-Dist: docstring-parser>=0.16
|
9
|
+
Requires-Dist: mcp[cli]>=1.3.0
|
10
|
+
Description-Content-Type: text/markdown
|
11
|
+
|
12
|
+
# Appwrite MCP server
|
13
|
+
|
14
|
+
<!-- Cover image will go here once available -->
|
15
|
+
|
16
|
+
<a href="https://glama.ai/mcp/servers/xkj2px7r0v">
|
17
|
+
<img width="380" height="200" src="https://glama.ai/mcp/servers/xkj2px7r0v/badge" alt="Appwrite MCP server" />
|
18
|
+
</a>
|
19
|
+
|
20
|
+
## Overview
|
21
|
+
|
22
|
+
A Model Context Protocol server for interacting with Appwrite's API. This server provides tools to manage databases, users, functions, teams, and more within your Appwrite project.
|
23
|
+
|
24
|
+
## Quick Links
|
25
|
+
- [Configuration](#configuration)
|
26
|
+
- [Installation](#installation)
|
27
|
+
- IDE Integration:
|
28
|
+
- [Claude Desktop](#usage-with-claude-desktop)
|
29
|
+
- [Cursor](#usage-with-cursor)
|
30
|
+
- [Windsurf Editor](#usage-with-windsurf-editor)
|
31
|
+
- [Local Development](#local-development)
|
32
|
+
- [Debugging](#debugging)
|
33
|
+
|
34
|
+
## Configuration
|
35
|
+
|
36
|
+
> Before launching the MCP server, you must setup an [Appwrite project](https://cloud.appwrite.io/) and create an API key with the necessary scopes enabled.
|
37
|
+
|
38
|
+
Create a `.env` file in your working directory and add the following:
|
39
|
+
|
40
|
+
```env
|
41
|
+
APPWRITE_PROJECT_ID=your-project-id
|
42
|
+
APPWRITE_API_KEY=your-api-key
|
43
|
+
APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
|
44
|
+
```
|
45
|
+
|
46
|
+
Then, open your terminal and run the following command
|
47
|
+
|
48
|
+
### Linux and MacOS
|
49
|
+
|
50
|
+
```sh
|
51
|
+
source .env
|
52
|
+
```
|
53
|
+
|
54
|
+
### Windows
|
55
|
+
|
56
|
+
#### Command Prompt
|
57
|
+
|
58
|
+
```cmd
|
59
|
+
for /f "tokens=1,2 delims==" %A in (.env) do set %A=%B
|
60
|
+
```
|
61
|
+
|
62
|
+
#### PowerShell
|
63
|
+
|
64
|
+
```powershell
|
65
|
+
Get-Content .\.env | ForEach-Object {
|
66
|
+
if ($_ -match '^(.*?)=(.*)$') {
|
67
|
+
[System.Environment]::SetEnvironmentVariable($matches[1], $matches[2], "Process")
|
68
|
+
}
|
69
|
+
}
|
70
|
+
```
|
71
|
+
|
72
|
+
## Installation
|
73
|
+
|
74
|
+
### Using uv (recommended)
|
75
|
+
When using [`uv`](https://docs.astral.sh/uv/) no specific installation is needed. We will
|
76
|
+
use [`uvx`](https://docs.astral.sh/uv/guides/tools/) to directly run *mcp-server-appwrite*.
|
77
|
+
|
78
|
+
```bash
|
79
|
+
uvx mcp-server-appwrite [args]
|
80
|
+
```
|
81
|
+
|
82
|
+
### Using pip
|
83
|
+
|
84
|
+
```bash
|
85
|
+
pip install mcp-server-appwrite
|
86
|
+
```
|
87
|
+
Then run the server using
|
88
|
+
|
89
|
+
```bash
|
90
|
+
python -m mcp_server_appwrite [args]
|
91
|
+
```
|
92
|
+
|
93
|
+
### Command-line arguments
|
94
|
+
|
95
|
+
Both the `uv` and `pip` setup processes require certain arguments to enable MCP tools for various Appwrite APIs.
|
96
|
+
|
97
|
+
> When an MCP tool is enabled, the tool's definition is passed to the LLM, using up tokens from the model's available context window. As a result, the effective context window is reduced.
|
98
|
+
>
|
99
|
+
> The default Appwrite MCP server ships with only the Databases tools (our most commonly used API) enabled to stay within these limits. Additional tools can be enabled by using the flags below.
|
100
|
+
|
101
|
+
| Argument | Description |
|
102
|
+
| --- | --- |
|
103
|
+
| `--databases` | Enables the Databases API |
|
104
|
+
| `--users` | Enables the Users API |
|
105
|
+
| `--teams` | Enables the Teams API |
|
106
|
+
| `--storage` | Enables the Storage API |
|
107
|
+
| `--functions` | Enables the Functions API |
|
108
|
+
| `--messaging` | Enables the Messaging API |
|
109
|
+
| `--locale` | Enables the Locale API |
|
110
|
+
| `--avatars` | Enables the Avatars API |
|
111
|
+
| `--all` | Enables all Appwrite APIs |
|
112
|
+
|
113
|
+
## Usage with Claude Desktop
|
114
|
+
|
115
|
+
In the Claude Desktop app, open the app's **Settings** page (press `CTRL + ,` on Windows or `CMD + ,` on MacOS) and head to the **Developer** tab. Clicking on the **Edit Config** button will take you to the `claude_desktop_config.json` file, where you must add the following:
|
116
|
+
|
117
|
+
```json
|
118
|
+
{
|
119
|
+
"mcpServers": {
|
120
|
+
"appwrite": {
|
121
|
+
"command": "uvx",
|
122
|
+
"args": [
|
123
|
+
"mcp-server-appwrite"
|
124
|
+
],
|
125
|
+
"env": {
|
126
|
+
"APPWRITE_PROJECT_ID": "your-project-id",
|
127
|
+
"APPWRITE_API_KEY": "your-api-key",
|
128
|
+
"APPWRITE_ENDPOINT": "https://cloud.appwrite.io/v1" // Optional
|
129
|
+
}
|
130
|
+
}
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
134
|
+
```
|
135
|
+
|
136
|
+
> Note: In case you see a `uvx ENOENT` error, ensure that you either add `uvx` to the `PATH` environment variable on your system or use the full path to your `uvx` installation in the config file.
|
137
|
+
|
138
|
+
Upon successful configuration, you should be able to see the server in the list of available servers in Claude Desktop.
|
139
|
+
|
140
|
+

|
141
|
+
|
142
|
+
## Usage with [Cursor](https://www.cursor.com/)
|
143
|
+
|
144
|
+
Head to Cursor `Settings > MCP` and click on **Add new MCP server**. Choose the type as `Command` and add the command below to the **Command** field.
|
145
|
+
|
146
|
+
- **MacOS**
|
147
|
+
|
148
|
+
```bash
|
149
|
+
env APPWRITE_API_KEY=your-api-key env APPWRITE_PROJECT_ID=your-project-id uvx mcp-server-appwrite
|
150
|
+
```
|
151
|
+
|
152
|
+
- **Windows**
|
153
|
+
|
154
|
+
```cmd
|
155
|
+
cmd /c SET APPWRITE_PROJECT_ID=your-project-id && SET APPWRITE_API_KEY=your-api-key && uvx mcp-server-appwrite
|
156
|
+
```
|
157
|
+
|
158
|
+

|
159
|
+
|
160
|
+
## Usage with [Windsurf Editor](https://codeium.com/windsurf)
|
161
|
+
|
162
|
+
Head to Windsurf `Settings > Cascade > Model Context Protocol (MCP) Servers` and click on **View raw config**. Update the `mcp_config.json` file to include the following:
|
163
|
+
|
164
|
+
```json
|
165
|
+
{
|
166
|
+
"mcpServers": {
|
167
|
+
"appwrite": {
|
168
|
+
"command": "uvx",
|
169
|
+
"args": [
|
170
|
+
"mcp-server-appwrite"
|
171
|
+
],
|
172
|
+
"env": {
|
173
|
+
"APPWRITE_PROJECT_ID": "your-project-id",
|
174
|
+
"APPWRITE_API_KEY": "your-api-key",
|
175
|
+
"APPWRITE_ENDPOINT": "https://cloud.appwrite.io/v1" // Optional
|
176
|
+
}
|
177
|
+
}
|
178
|
+
}
|
179
|
+
}
|
180
|
+
```
|
181
|
+
|
182
|
+

|
183
|
+
|
184
|
+
## Local Development
|
185
|
+
|
186
|
+
### Clone the repository
|
187
|
+
|
188
|
+
```bash
|
189
|
+
git clone https://github.com/appwrite/mcp.git
|
190
|
+
```
|
191
|
+
|
192
|
+
### Install `uv`
|
193
|
+
|
194
|
+
- Linux or MacOS
|
195
|
+
|
196
|
+
```bash
|
197
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
198
|
+
```
|
199
|
+
|
200
|
+
- Windows (PowerShell)
|
201
|
+
|
202
|
+
```powershell
|
203
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
204
|
+
```
|
205
|
+
|
206
|
+
### Prepare virtual environment
|
207
|
+
|
208
|
+
First, create a virtual environment.
|
209
|
+
|
210
|
+
```bash
|
211
|
+
uv venv
|
212
|
+
```
|
213
|
+
|
214
|
+
Next, activate the virtual environment.
|
215
|
+
|
216
|
+
- Linux or MacOS
|
217
|
+
|
218
|
+
```bash
|
219
|
+
source .venv/bin/activate
|
220
|
+
```
|
221
|
+
|
222
|
+
- Windows
|
223
|
+
|
224
|
+
```powershell
|
225
|
+
.venv\Scripts\activate
|
226
|
+
```
|
227
|
+
|
228
|
+
### Run the server
|
229
|
+
|
230
|
+
```bash
|
231
|
+
uv run -v --directory ./ mcp-server-appwrite
|
232
|
+
```
|
233
|
+
|
234
|
+
## Debugging
|
235
|
+
|
236
|
+
You can use the MCP inspector to debug the server.
|
237
|
+
|
238
|
+
```bash
|
239
|
+
npx @modelcontextprotocol/inspector \
|
240
|
+
uv \
|
241
|
+
--directory . \
|
242
|
+
run mcp-server-appwrite
|
243
|
+
```
|
244
|
+
|
245
|
+
Make sure your `.env` file is properly configured before running the inspector. You can then access the inspector at `http://localhost:5173`.
|
246
|
+
|
247
|
+
## License
|
248
|
+
|
249
|
+
This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
|
@@ -0,0 +1,10 @@
|
|
1
|
+
mcp_server_appwrite/__init__.py,sha256=Od9oaUg_ckgJ4jIGa2HijocyauWDPjIC7cBRiV0P4s8,214
|
2
|
+
mcp_server_appwrite/__main__.py,sha256=bdaX6xMmFugzSR2QMdXJqanRx_Jh25jACJDqjE9cKEc,75
|
3
|
+
mcp_server_appwrite/server.py,sha256=JxNLY1O5lMUXUkBd2_kvN5mrh6dWsRPzX1VHi-XwCFs,5498
|
4
|
+
mcp_server_appwrite/service.py,sha256=H_Qr8bYFyXuJVwsPsWFi1xx12-aPM75yblKj11L4V2c,4640
|
5
|
+
mcp_server_appwrite/tool_manager.py,sha256=AfRjLyMpplYjF2VJna7frXDiDUZKRN8WQu9R8j3dxPc,718
|
6
|
+
mcp_server_appwrite-0.1.4.dist-info/METADATA,sha256=Kxq2jAAuvpUz1P1rBRNuauSf3Ipg0TIJx01NFt2JMpY,6565
|
7
|
+
mcp_server_appwrite-0.1.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
8
|
+
mcp_server_appwrite-0.1.4.dist-info/entry_points.txt,sha256=-FBKUOp-Qmo9FldmiT3JUyF7djSeo8lLhxljOosuHkQ,74
|
9
|
+
mcp_server_appwrite-0.1.4.dist-info/licenses/LICENSE,sha256=PXzk1HbuQMAkLdHzwnBLTBIHFmgDZM0Ez2lw2gX2UQs,1096
|
10
|
+
mcp_server_appwrite-0.1.4.dist-info/RECORD,,
|
@@ -1,161 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.4
|
2
|
-
Name: mcp-server-appwrite
|
3
|
-
Version: 0.1.2
|
4
|
-
Summary: MCP (Model Context Protocol) server for Appwrite
|
5
|
-
License-File: LICENSE
|
6
|
-
Requires-Python: >=3.12
|
7
|
-
Requires-Dist: appwrite>=7.1.0
|
8
|
-
Requires-Dist: mcp[cli]>=1.3.0
|
9
|
-
Description-Content-Type: text/markdown
|
10
|
-
|
11
|
-
# Appwrite MCP server
|
12
|
-
|
13
|
-
## Overview
|
14
|
-
|
15
|
-
A Model Context Protocol server for interacting with Appwrite's API. This server provides tools to manage databases, users, functions, teams, and more within your Appwrite project.
|
16
|
-
|
17
|
-
Currently the server supports the following tools:
|
18
|
-
|
19
|
-
- [x] Databases
|
20
|
-
- [x] Users
|
21
|
-
|
22
|
-
> Please note that adding a lot of tools exceeds the context window of the LLM. As a result, we will make available a curated list of tools that are most commonly used.
|
23
|
-
|
24
|
-
## Configuration
|
25
|
-
|
26
|
-
Create a `.env` file in the directory you're runing the server from:
|
27
|
-
|
28
|
-
```env
|
29
|
-
APPWRITE_API_KEY=your-api-key
|
30
|
-
APPWRITE_PROJECT_ID=your-project-id
|
31
|
-
APPWRITE_ENDPOINT=your-endpoint # Optional, defaults to https://cloud.appwrite.io/v1
|
32
|
-
```
|
33
|
-
> Note: Ensure that your API Key has the necessary scopes to access the resources you want to use.
|
34
|
-
|
35
|
-
## Installation
|
36
|
-
|
37
|
-
### Using uv (recommended)
|
38
|
-
When using [`uv`](https://docs.astral.sh/uv/) no specific installation is needed. We will
|
39
|
-
use [`uvx`](https://docs.astral.sh/uv/guides/tools/) to directly run *mcp-server-sentry*.
|
40
|
-
|
41
|
-
```bash
|
42
|
-
uvx run mcp-server-appwrite
|
43
|
-
```
|
44
|
-
|
45
|
-
### Using pip
|
46
|
-
|
47
|
-
```bash
|
48
|
-
pip install mcp-server-appwrite
|
49
|
-
```
|
50
|
-
Then run the server using
|
51
|
-
|
52
|
-
```bash
|
53
|
-
python -m mcp_server_appwrite
|
54
|
-
```
|
55
|
-
|
56
|
-
## Usage with Claude Desktop
|
57
|
-
|
58
|
-
Add this to your `claude_desktop_config.json`:
|
59
|
-
|
60
|
-
```json
|
61
|
-
"mcpServers": {
|
62
|
-
"appwrite": {
|
63
|
-
"command": "uvx",
|
64
|
-
"args": [
|
65
|
-
"mcp-server-appwrite"
|
66
|
-
],
|
67
|
-
"env": {
|
68
|
-
"APPWRITE_PROJECT_ID": "your-project-id",
|
69
|
-
"APPWRITE_API_KEY": "your-api-key",
|
70
|
-
"APPWRITE_ENDPOINT": "your-endpoint" // Optional
|
71
|
-
}
|
72
|
-
}
|
73
|
-
}
|
74
|
-
```
|
75
|
-
Upon successful configuration, you should be able to see the server in the list of available servers in Claude Desktop.
|
76
|
-
|
77
|
-

|
78
|
-
|
79
|
-
## Usage with [Zed](https://github.com/zed-industries/zed)
|
80
|
-
|
81
|
-
Add to your Zed settings.json:
|
82
|
-
|
83
|
-
```json
|
84
|
-
"context_servers": {
|
85
|
-
"appwrite": {
|
86
|
-
"command": "uvx",
|
87
|
-
"args": [
|
88
|
-
"mcp-server-appwrite"
|
89
|
-
],
|
90
|
-
"env": {
|
91
|
-
"APPWRITE_PROJECT_ID": "your-project-id",
|
92
|
-
"APPWRITE_API_KEY": "your-api-key",
|
93
|
-
"APPWRITE_ENDPOINT": "your-endpoint" // Optional
|
94
|
-
}
|
95
|
-
}
|
96
|
-
}
|
97
|
-
```
|
98
|
-
|
99
|
-
## Usage with [Cursor](https://www.cursor.com/)
|
100
|
-
|
101
|
-
Head to Cursor `Settings > Features > MCP Servers` and click on **Add New MCP Server**. Choose the type as `Command` and add the command below to the **Command** field.
|
102
|
-
|
103
|
-
```bash
|
104
|
-
APPWRITE_PROJECT_ID=your-project-id APPWRITE_API_KEY=your-api-key uvx mcp-server-appwrite
|
105
|
-
```
|
106
|
-
|
107
|
-

|
108
|
-
|
109
|
-
## Local Development
|
110
|
-
|
111
|
-
Clone the repository
|
112
|
-
|
113
|
-
```bash
|
114
|
-
git clone https://github.com/appwrite/mcp.git
|
115
|
-
```
|
116
|
-
|
117
|
-
Install `uv`
|
118
|
-
|
119
|
-
```bash
|
120
|
-
curl -LsSf https://astral.sh/uv/install.sh | sh
|
121
|
-
```
|
122
|
-
|
123
|
-
Create virtual environment
|
124
|
-
|
125
|
-
```bash
|
126
|
-
uv venv
|
127
|
-
source .venv/bin/activate
|
128
|
-
```
|
129
|
-
|
130
|
-
Run the server
|
131
|
-
|
132
|
-
```bash
|
133
|
-
uv run -v --directory ./ mcp-server-appwrite
|
134
|
-
```
|
135
|
-
|
136
|
-
## Debugging
|
137
|
-
|
138
|
-
You can use the MCP inspector to debug the server.
|
139
|
-
|
140
|
-
```bash
|
141
|
-
npx @modelcontextprotocol/inspector \
|
142
|
-
uv \
|
143
|
-
--directory . \
|
144
|
-
run mcp-server-appwrite
|
145
|
-
```
|
146
|
-
|
147
|
-
Make sure your `.env` file is properly configured before running the inspector. You can then access the inspector at `http://localhost:5173`.
|
148
|
-
|
149
|
-
## License
|
150
|
-
|
151
|
-
This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
|
152
|
-
|
153
|
-
## Todos
|
154
|
-
- Add MCP server to registries
|
155
|
-
- Glama
|
156
|
-
- https://github.com/chatmcp/mcp-directory
|
157
|
-
- https://mcp.so/
|
158
|
-
- https://github.com/punkpeye/awesome-mcp-servers
|
159
|
-
- https://portkey.ai/mcp-servers
|
160
|
-
- https://www.claudemcp.com/servers
|
161
|
-
- Add support for SSE server
|
@@ -1,10 +0,0 @@
|
|
1
|
-
mcp_server_appwrite/__init__.py,sha256=Od9oaUg_ckgJ4jIGa2HijocyauWDPjIC7cBRiV0P4s8,214
|
2
|
-
mcp_server_appwrite/__main__.py,sha256=bdaX6xMmFugzSR2QMdXJqanRx_Jh25jACJDqjE9cKEc,75
|
3
|
-
mcp_server_appwrite/server.py,sha256=a6y26aJXQ-NbaUwq3Yud2XT3xlxD6QTBgALDAkz2Cfo,3527
|
4
|
-
mcp_server_appwrite/service.py,sha256=WwKoh9o7W7ZOmhY0yg6k4R2cghQRe-yMTNbFtB6TFT8,2895
|
5
|
-
mcp_server_appwrite/tool_manager.py,sha256=AfRjLyMpplYjF2VJna7frXDiDUZKRN8WQu9R8j3dxPc,718
|
6
|
-
mcp_server_appwrite-0.1.2.dist-info/METADATA,sha256=VA_JFBLw_fdqFghwgqX3YvHmTWksvQlV4H-ycsFcLtA,3964
|
7
|
-
mcp_server_appwrite-0.1.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
8
|
-
mcp_server_appwrite-0.1.2.dist-info/entry_points.txt,sha256=-FBKUOp-Qmo9FldmiT3JUyF7djSeo8lLhxljOosuHkQ,74
|
9
|
-
mcp_server_appwrite-0.1.2.dist-info/licenses/LICENSE,sha256=PXzk1HbuQMAkLdHzwnBLTBIHFmgDZM0Ez2lw2gX2UQs,1096
|
10
|
-
mcp_server_appwrite-0.1.2.dist-info/RECORD,,
|
File without changes
|
{mcp_server_appwrite-0.1.2.dist-info → mcp_server_appwrite-0.1.4.dist-info}/entry_points.txt
RENAMED
File without changes
|
{mcp_server_appwrite-0.1.2.dist-info → mcp_server_appwrite-0.1.4.dist-info}/licenses/LICENSE
RENAMED
File without changes
|