Skip to main content
Glama
appwrite

Appwrite MCP Server

Official
by appwrite

tables_db_update_relationship_column

Modify relationship columns in Appwrite databases to update foreign key constraints, column keys, and deletion rules for maintaining data integrity.

Instructions

Update relationship column. Learn more about relationship columns.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
database_idYesDatabase ID.
table_idYesTable ID.
keyYesColumn Key.
on_deleteNoConstraints option
new_keyNoNew Column Key.

Implementation Reference

  • Generic handler that executes all MCP tools, including 'tables_db_update_relationship_column'. Retrieves the bound Appwrite SDK method and calls it with provided arguments, handling results and errors.
    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 tool schemas and definitions for all methods on the Appwrite service instance (TablesDB). Creates the 'tables_db_update_relationship_column' tool definition from TablesDB.update_relationship_column method, including input schema from type hints and docstrings.
    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
  • Registers the TablesDB Appwrite SDK instance as an MCP service named 'tables_db'. This enables dynamic tool creation for all its public methods, prefixed with 'tables_db_', including 'tables_db_update_relationship_column'.
    tools_manager.register_service(Service(TablesDB(client), "tables_db"))
  • ToolManager.register_service: Adds tools from a service (like tables_db) to the global registry by calling service.list_tools().
    def register_service(self, service: Service): """Register a new service and its tools""" self.services.append(service) self.tools_registry.update(service.list_tools())
  • Helper function used to generate JSON schema properties for tool input parameters from Python type hints during tool definition.
    def python_type_to_json_schema(self, py_type: Any) -> dict: """Converts Python type hints to JSON Schema types.""" type_mapping = { str: "string", int: "integer", float: "number", bool: "boolean", list: "array", dict: "object" } # Handle basic types if py_type in type_mapping: return {"type": type_mapping[py_type]} # Handle Optional types (Union[type, None]) if hasattr(py_type, "__origin__") and py_type.__origin__ is Union: args = getattr(py_type, "__args__", ()) if len(args) == 2 and args[1] is type(None): schema = self.python_type_to_json_schema(args[0]) return schema # Handle List, Dict, and other generic types if hasattr(py_type, "__origin__"): origin = py_type.__origin__ args = getattr(py_type, "__args__", ()) # Handle List[T] if origin is list or origin is List: if args: item_schema = self.python_type_to_json_schema(args[0]) return { "type": "array", "items": item_schema } return {"type": "array"} # Handle Dict[K, V] if origin is dict or origin is Dict: if len(args) >= 2: value_schema = self.python_type_to_json_schema(args[1]) return { "type": "object", "additionalProperties": value_schema } return {"type": "object"} # Default to string for unknown types return {"type": "string"}

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