diff --git a/pyproject.toml b/pyproject.toml index 74e1f4a..e1ea53a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ readme = "README.md" requires-python = ">=3.12" dependencies = [ "anyio>=4.0.0", - "appwrite-console>=0.8.1,<0.9", + "appwrite-console>=0.10.0,<0.11", "docstring-parser>=0.16", "mcp[cli]>=2,<3", "python-dotenv>=1.0.1", diff --git a/tests/unit/test_server.py b/tests/unit/test_server.py index e83a360..676be81 100644 --- a/tests/unit/test_server.py +++ b/tests/unit/test_server.py @@ -1028,6 +1028,18 @@ def test_advisor_tools_are_project_scoped(self): {tool["context_scope"] for tool in advisor_tools.values()}, {"project"} ) + def test_waf_rule_tools_take_conditions_as_a_list_of_strings(self): + manager = register_services(object(), profile=OAUTH_PROFILE) + tools = {tool.name: tool for tool in manager.get_all_tools()} + + for action in ("bypass", "challenge", "deny", "rate_limit", "redirect"): + for verb in ("create", "update"): + name = f"waf_{verb}_{action}_rule" + with self.subTest(tool=name): + conditions = tools[name].input_schema["properties"]["conditions"] + self.assertEqual(conditions["type"], "array") + self.assertEqual(conditions["items"], {"type": "string"}) + def test_api_key_profile_only_advertises_server_capabilities(self): manager = register_services(object(), profile=API_KEY_PROFILE) service_names = {service.service_name for service in manager.services} diff --git a/uv.lock b/uv.lock index 47498e6..ab785b8 100644 --- a/uv.lock +++ b/uv.lock @@ -39,15 +39,15 @@ wheels = [ [[package]] name = "appwrite-console" -version = "0.8.1" +version = "0.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/02/b2/76bbf397aca3e8caaf52bd254dac54b85214fffd6d1a1d4dd40d353247dd/appwrite_console-0.8.1.tar.gz", hash = "sha256:1fbb764bb0c9e802f079019e375fe96f5a28e51553a4bce94246e7f18bf8cce5", size = 326599, upload-time = "2026-10-06T10:55:59.571Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/70/2dc934365d5f2962e9cc14939d1d1e3a2b3e53916ad8e16d47481a607d4d/appwrite_console-0.10.0.tar.gz", hash = "sha256:11d4d70651014a99613735060f45aa3e932c53186fba7d19a55491469fccc2cc", size = 326997, upload-time = "2026-10-08T15:03:12.059Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/65/c4/8001bfadd6f5af3fced6421a4b8651fe7b496cafd1fbe01777830d455c36/appwrite_console-0.8.1-py3-none-any.whl", hash = "sha256:c71ad412f932dffe0d244b78ed20368999be3ac6961719e8bd30069b56857768", size = 565106, upload-time = "2026-10-06T10:55:57.918Z" }, + { url = "https://files.pythonhosted.org/packages/7e/6e/b7c152003f1ea4b9332023b60a1045165ee9e50ed025fada194dfc594baa/appwrite_console-0.10.0-py3-none-any.whl", hash = "sha256:21b3ccf8811561827b1b0fd05b82c651dbbf7bff2d91d9b3e9da7d0f5011b86c", size = 565247, upload-time = "2026-10-08T15:03:10.509Z" }, ] [[package]] @@ -694,7 +694,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "anyio", specifier = ">=4.0.0" }, - { name = "appwrite-console", specifier = ">=0.8.1,<0.9" }, + { name = "appwrite-console", specifier = ">=0.10.0,<0.11" }, { name = "argon2-cffi", marker = "extra == 'integration'", specifier = ">=23.1.0" }, { name = "bcrypt", marker = "extra == 'integration'", specifier = ">=4.1.2" }, { name = "docstring-parser", specifier = ">=0.16" },