From c29e7623ace257eb45396cdf8c19e1659e29edb9 Mon Sep 17 00:00:00 2001 From: Devon Hillard Date: Tue, 9 Sep 2025 19:00:43 -0600 Subject: [PATCH 1/4] fix: Remove duplicate OpenAI models from listmodels output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed issue where OpenAI models appeared twice in listmodels output by: - Removing self-referencing aliases from OpenAI model definitions (e.g., "gpt-5" no longer includes "gpt-5" in its aliases) - Adding filter in listmodels.py to skip aliases that match the model name - Cleaned up inconsistent alias naming (o3-pro -> o3pro) This ensures each model appears only once in the listing while preserving all useful aliases. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- providers/openai_provider.py | 10 +++++----- tools/listmodels.py | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/providers/openai_provider.py b/providers/openai_provider.py index 2d3c0cd..e9bbb6e 100644 --- a/providers/openai_provider.py +++ b/providers/openai_provider.py @@ -38,7 +38,7 @@ class OpenAIModelProvider(OpenAICompatibleProvider): supports_temperature=True, # Regular models accept temperature parameter temperature_constraint=create_temperature_constraint("fixed"), description="GPT-5 (400K context, 128K output) - Advanced model with reasoning support", - aliases=["gpt5", "gpt-5"], + aliases=["gpt5"], ), "gpt-5-mini": ModelCapabilities( provider=ProviderType.OPENAI, @@ -110,7 +110,7 @@ class OpenAIModelProvider(OpenAICompatibleProvider): supports_temperature=False, # O3 models don't accept temperature parameter temperature_constraint=create_temperature_constraint("fixed"), description="Fast O3 variant (200K context) - Balanced performance/speed, moderate complexity", - aliases=["o3mini", "o3-mini"], + aliases=["o3mini"], ), "o3-pro": ModelCapabilities( provider=ProviderType.OPENAI, @@ -128,7 +128,7 @@ class OpenAIModelProvider(OpenAICompatibleProvider): supports_temperature=False, # O3 models don't accept temperature parameter temperature_constraint=create_temperature_constraint("fixed"), description="Professional-grade reasoning (200K context) - EXTREMELY EXPENSIVE: Only for the most complex problems requiring universe-scale complexity analysis OR when the user explicitly asks for this model. Use sparingly for critical architectural decisions or exceptionally complex debugging that other models cannot handle.", - aliases=["o3-pro"], + aliases=["o3pro"], ), "o4-mini": ModelCapabilities( provider=ProviderType.OPENAI, @@ -146,7 +146,7 @@ class OpenAIModelProvider(OpenAICompatibleProvider): supports_temperature=False, # O4 models don't accept temperature parameter temperature_constraint=create_temperature_constraint("fixed"), description="Latest reasoning model (200K context) - Optimized for shorter contexts, rapid reasoning", - aliases=["o4mini", "o4-mini"], + aliases=["o4mini"], ), "gpt-4.1": ModelCapabilities( provider=ProviderType.OPENAI, @@ -164,7 +164,7 @@ class OpenAIModelProvider(OpenAICompatibleProvider): supports_temperature=True, # Regular models accept temperature parameter temperature_constraint=create_temperature_constraint("range"), description="GPT-4.1 (1M context) - Advanced reasoning model with large context window", - aliases=["gpt4.1", "gpt-4.1"], + aliases=["gpt4.1"], ), } diff --git a/tools/listmodels.py b/tools/listmodels.py index 7fa0c90..4d17062 100644 --- a/tools/listmodels.py +++ b/tools/listmodels.py @@ -138,7 +138,9 @@ class ListModelsTool(BaseTool): for model_name, capabilities in provider.get_model_configurations().items(): if capabilities.aliases: for alias in capabilities.aliases: - aliases.append(f"- `{alias}` → `{model_name}`") + # Skip aliases that are the same as the model name to avoid duplicates + if alias != model_name: + aliases.append(f"- `{alias}` → `{model_name}`") if aliases: output_lines.append("\n**Aliases**:") From d13700c14c7ee3d092302837cb1726d17bab1ab8 Mon Sep 17 00:00:00 2001 From: Devon Hillard Date: Tue, 9 Sep 2025 19:08:10 -0600 Subject: [PATCH 2/4] test: Update OpenAI provider alias tests to match new format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated test_supported_models_aliases.py to reflect the removal of self-referencing aliases: - Removed assertion for "o4-mini" in its own aliases (no longer self-referencing) - Updated "o3-pro" alias test to use "o3pro" (normalized alias format) - Fixed alias resolution test for o3pro -> o3-pro These changes align with the fix for duplicate model listings in listmodels output. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- tests/test_supported_models_aliases.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_supported_models_aliases.py b/tests/test_supported_models_aliases.py index 256eaaf..336368b 100644 --- a/tests/test_supported_models_aliases.py +++ b/tests/test_supported_models_aliases.py @@ -50,15 +50,15 @@ class TestSupportedModelsAliases: # "mini" is now an alias for gpt-5-mini, not o4-mini assert "mini" in provider.SUPPORTED_MODELS["gpt-5-mini"].aliases assert "o4mini" in provider.SUPPORTED_MODELS["o4-mini"].aliases - assert "o4-mini" in provider.SUPPORTED_MODELS["o4-mini"].aliases + # o4-mini is no longer in its own aliases (removed self-reference) assert "o3mini" in provider.SUPPORTED_MODELS["o3-mini"].aliases - assert "o3-pro" in provider.SUPPORTED_MODELS["o3-pro"].aliases + assert "o3pro" in provider.SUPPORTED_MODELS["o3-pro"].aliases assert "gpt4.1" in provider.SUPPORTED_MODELS["gpt-4.1"].aliases # Test alias resolution assert provider._resolve_model_name("mini") == "gpt-5-mini" # mini -> gpt-5-mini now assert provider._resolve_model_name("o3mini") == "o3-mini" - assert provider._resolve_model_name("o3-pro") == "o3-pro" # o3-pro is already the base model name + assert provider._resolve_model_name("o3pro") == "o3-pro" # o3pro resolves to o3-pro assert provider._resolve_model_name("o4mini") == "o4-mini" assert provider._resolve_model_name("gpt4.1") == "gpt-4.1" # gpt4.1 resolves to gpt-4.1 From d40ef88ca603ac20c0f9b35b5ebb569d9cf61d8e Mon Sep 17 00:00:00 2001 From: semantic-release Date: Wed, 1 Oct 2025 14:18:04 +0000 Subject: [PATCH 3/4] chore(release): 5.11.1 Automatically generated by python-semantic-release --- CHANGELOG.md | 18 ++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f242fad..7e9aaaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,24 @@ +## v5.11.1 (2025-10-01) + +### Bug Fixes + +- Remove duplicate OpenAI models from listmodels output + ([`c29e762`](https://github.com/BeehiveInnovations/zen-mcp-server/commit/c29e7623ace257eb45396cdf8c19e1659e29edb9)) + +### Chores + +- Sync version to config.py [skip ci] + ([`1209064`](https://github.com/BeehiveInnovations/zen-mcp-server/commit/12090646ee83f2368311d595d87ae947e46ddacd)) + +### Testing + +- Update OpenAI provider alias tests to match new format + ([`d13700c`](https://github.com/BeehiveInnovations/zen-mcp-server/commit/d13700c14c7ee3d092302837cb1726d17bab1ab8)) + + ## v5.11.0 (2025-08-26) ### Chores diff --git a/pyproject.toml b/pyproject.toml index 79f3f9d..f4c90aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "zen-mcp-server" -version = "5.11.0" +version = "5.11.1" description = "AI-powered MCP server with multiple model providers" requires-python = ">=3.9" dependencies = [ From 4d6f1b41005dee428c955e33f04f8f9f6259e662 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 1 Oct 2025 14:18:15 +0000 Subject: [PATCH 4/4] chore: sync version to config.py [skip ci] --- config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.py b/config.py index 7278905..797904a 100644 --- a/config.py +++ b/config.py @@ -14,9 +14,9 @@ import os # These values are used in server responses and for tracking releases # IMPORTANT: This is the single source of truth for version and author info # Semantic versioning: MAJOR.MINOR.PATCH -__version__ = "5.11.0" +__version__ = "5.11.1" # Last update date in ISO format -__updated__ = "2025-08-26" +__updated__ = "2025-10-01" # Primary maintainer __author__ = "Fahad Gilani"