Skip to main content
Glama
appwrite

Appwrite MCP Server

Official
by appwrite

tables_db_create

Create a new database in Appwrite by specifying a unique ID and name, enabling structured data storage for your application.

Instructions

Create a new Database.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
database_idYesUnique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
nameYesDatabase name. Max length: 128 chars.
enabledNoIs the database enabled? When set to 'disabled', users cannot access the database but Server SDKs with an API key can still read and write to the database. No data is lost when this is toggled.

Implementation Reference

  • The MCP tool call handler that retrieves the tool info for 'tables_db_create' from the registry and invokes the underlying TablesDB.create method with provided arguments, handling errors and formatting results.
    @server.call_tool() async def handle_call_tool( name: str, arguments: dict | None ) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]: try: tool_info = tools_manager.get_tool(name) if not tool_info: raise McpError(f"Tool {name} not found") bound_method = tool_info["function"] result = bound_method(**(arguments or {})) if hasattr(result, 'to_dict'): result_dict = result.to_dict() return [types.TextContent(type="text", text=str(result_dict))] return [types.TextContent(type="text", text=str(result))] except AppwriteException as e: return [types.TextContent(type="text", text=f"Appwrite Error: {str(e)}")] except Exception as e: return [types.TextContent(type="text", text=f"Error: {str(e)}")]
  • Dynamically generates the input schema for 'tables_db_create' by inspecting the TablesDB.create method's signature, type hints, and docstring.
    def list_tools(self) -> Dict[str, Dict]: """Lists all available tools for this service""" tools = {} for name, func in inspect.getmembers(self.service, predicate=inspect.ismethod): if name.startswith('_'): # Skip private methods continue original_func = func.__func__ # Skip if not from the service's module if original_func.__module__ != self.service.__class__.__module__: continue # Get the overridden name if it exists tool_name = self._method_name_overrides.get(name, f"{self.service_name}_{name}") docstring = parse(original_func.__doc__) signature = inspect.signature(original_func) type_hints = get_type_hints(original_func) properties = {} required = [] for param_name, param in signature.parameters.items(): if param_name == 'self': continue param_type = type_hints.get(param_name, str) properties[param_name] = self.python_type_to_json_schema(param_type) properties[param_name]["description"] = f"Parameter '{param_name}'" for doc_param in docstring.params: if doc_param.arg_name == param_name: properties[param_name]["description"] = doc_param.description if param.default is param.empty: required.append(param_name) tool_definition = Tool( name=tool_name, description=f"{docstring.short_description or "No description available"}", inputSchema={ "type": "object", "properties": properties, "required": required } ) tools[tool_name] = { "definition": tool_definition, "function": func } return tools
  • Explicit registration of the TablesDB service as 'tables_db' when --tables-db flag is provided, which scans TablesDB methods to register tools like 'tables_db_create'.
    if args.tables_db: tools_manager.register_service(Service(TablesDB(client), "tables_db")) if args.users:
  • Default registration of the TablesDB service as 'tables_db' if no other services are specified via CLI flags.
    if not any([args.databases, args.tables_db, args.users, args.teams, args.storage, args.functions, args.messaging, args.locale, args.avatars, args.sites]): tools_manager.register_service(Service(TablesDB(client), "tables_db"))
  • Registers the tools from the TablesDB service into the global tools registry, making 'tables_db_create' available.
    def register_service(self, service: Service): """Register a new service and its tools""" self.services.append(service) self.tools_registry.update(service.list_tools())

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/appwrite/mcp-for-api'

If you have feedback or need assistance with the MCP directory API, please join our Discord server