tables_db_create_table
Create a new table in an Appwrite database to organize and store structured data with configurable permissions and row-level security.
Instructions
Create a new Table. Before using this route, you should create a new database resource using either a server integration API or directly from your database console.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| database_id | Yes | Database ID. | |
| table_id | Yes | Unique 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. | |
| name | Yes | Table name. Max length: 128 chars. | |
| permissions | No | An array of permissions strings. By default, no user is granted with any permissions. [Learn more about permissions](https://appwrite.io/docs/permissions). | |
| row_security | No | Enables configuring permissions for individual rows. A user needs one of row or table level permissions to access a row. [Learn more about permissions](https://appwrite.io/docs/permissions). | |
| enabled | No | Is table enabled? When set to 'disabled', users cannot access the table but Server SDKs with and API key can still read and write to the table. No data is lost when this is toggled. |
Implementation Reference
- src/mcp_server_appwrite/server.py:71-71 (registration)Registers the TablesDB Appwrite service instance with service_name='tables_db'. This triggers dynamic tool generation for all public methods of TablesDB, naming them 'tables_db_<method_name>', including 'tables_db_create_table'.tools_manager.register_service(Service(TablesDB(client), "tables_db"))
- src/mcp_server_appwrite/server.py:94-94 (registration)Default registration of TablesDB service if no other services specified, same as above.tools_manager.register_service(Service(TablesDB(client), "tables_db"))
- Dynamically generates the tool definition and input schema for each method of the service (e.g., TablesDB.create_table becomes 'tables_db_create_table' tool with schema from type hints and docstrings).# 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 } )
- MCP tool call handler that retrieves the bound method (TablesDB.create_table) from the registry and executes it with provided arguments, returning the result as TextContent.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)}")]
- ToolManager registers services and aggregates their tools into a registry, used by list_tools and call_tool.def register_service(self, service: Service): """Register a new service and its tools""" self.services.append(service) self.tools_registry.update(service.list_tools())