From f1952dfacaecf8087fc337e2698a619982a84229 Mon Sep 17 00:00:00 2001 From: ignacioc44 <2788936@gmail.com> Date: Wed, 26 Aug 2026 16:08:57 -0400 Subject: [PATCH 1/2] Offer the GPT-5.6 family to BYOK OpenAI keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The BYOK rows in SUPPORTED_MODELS are hand-maintained and had stopped at GPT-5.1, so a user with their own OpenAI key could not select a model the hosted catalog has been serving for a while: `openai/gpt-5.6-luna`, `-sol` and `-terra` are all in `GET /v1/models` with a 1,050,000-token context. Reported in #feedback-is-a-gift — "wild that our latest model for OpenAI key is gpt 5.1 when we're on gpt 5.6". BACK2-714. The three bare ids go at the head of the OpenAI group, so they sort first in the picker the way the Anthropic rows do. `isMCPJamProvidedModel` answers false for a bare id that SUPPORTED_MODELS matches exactly, so they land in the BYOK group rather than shadowing the hosted rows. Token counting maps them to GPT-5, the closest id ai-tokenizer knows; without an entry the request would fall through to the character-based estimate. Temperature needed no new handling — `modelSupportsTemperature` strips it for anything matching `gpt-5`, which covers these. --- .changeset/openai-gpt-5-6-byok.md | 16 ++++++++++++++ .../server/utils/tokenizer-helpers.ts | 5 +++++ .../shared/__tests__/types.test.ts | 14 +++++++++++++ mcpjam-inspector/shared/types.ts | 21 +++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 .changeset/openai-gpt-5-6-byok.md diff --git a/.changeset/openai-gpt-5-6-byok.md b/.changeset/openai-gpt-5-6-byok.md new file mode 100644 index 0000000000..ed92b6c80e --- /dev/null +++ b/.changeset/openai-gpt-5-6-byok.md @@ -0,0 +1,16 @@ +--- +"@mcpjam/inspector": patch +--- + +GPT-5.6 is selectable with your own OpenAI key. + +The BYOK OpenAI rows are hand-maintained and had stopped at GPT-5.1 while the +hosted catalog was already serving `gpt-5.6-luna`, `-sol` and `-terra`, so a +user with a valid key could not pick the models MCPJam already serves for free. +All three now lead the OpenAI group, with the 1,050,000-token context the +catalog reports. + +Token counting maps them to GPT-5, the closest id ai-tokenizer knows; an +approximate count beats dropping to the character-based fallback. Temperature +needed no new handling — the `gpt-5` carve-out in `modelSupportsTemperature` +already matches these ids, so the field is omitted rather than sent. diff --git a/mcpjam-inspector/server/utils/tokenizer-helpers.ts b/mcpjam-inspector/server/utils/tokenizer-helpers.ts index aa5ca74a2c..2dc46f5f7e 100644 --- a/mcpjam-inspector/server/utils/tokenizer-helpers.ts +++ b/mcpjam-inspector/server/utils/tokenizer-helpers.ts @@ -48,6 +48,11 @@ const MODEL_ID_MAPPINGS: Record = { "gpt-5.1-codex-mini": "openai/gpt-5.1-codex-mini", "gpt-5.5": "openai/gpt-5", "openai/gpt-5.5": "openai/gpt-5", + // ai-tokenizer has no 5.6 entry; GPT-5 is the closest id it knows, and an + // approximate count beats dropping to the character-based fallback. + "gpt-5.6-luna": "openai/gpt-5", + "gpt-5.6-sol": "openai/gpt-5", + "gpt-5.6-terra": "openai/gpt-5", // DeepSeek models "deepseek-chat": "deepseek/deepseek-v3.1", diff --git a/mcpjam-inspector/shared/__tests__/types.test.ts b/mcpjam-inspector/shared/__tests__/types.test.ts index 685834aca8..6aee7f1380 100644 --- a/mcpjam-inspector/shared/__tests__/types.test.ts +++ b/mcpjam-inspector/shared/__tests__/types.test.ts @@ -153,6 +153,19 @@ describe("MCPJam-provided model classification", () => { } }); + it("offers the current OpenAI models to BYOK keys", () => { + // The BYOK OpenAI rows are hand-maintained too, and had drifted to 5.1 + // while the hosted catalog was already serving the 5.6 family, so a user + // with their own key could not select the newest model. See BACK2-714. + const openaiIds = SUPPORTED_MODELS.filter( + (m) => m.provider === "openai" + ).map((m) => String(m.id)); + + for (const id of ["gpt-5.6-luna", "gpt-5.6-sol", "gpt-5.6-terra"]) { + expect(openaiIds).toContain(id); + } + }); + it("reports no temperature support for the Anthropic rows that reject it", () => { // Fable 5, Opus 5, Opus 4.8/4.7 and Sonnet 5 answer a temperature with a // 400, so every one of these rows would fail on its first request while @@ -226,6 +239,7 @@ describe("modelSupportsTemperature", () => { it("still strips temperature for own-provider GPT-5 models", () => { expect(modelSupportsTemperature("gpt-5")).toBe(false); expect(modelSupportsTemperature("gpt-5.1-codex")).toBe(false); + expect(modelSupportsTemperature("gpt-5.6-luna")).toBe(false); }); it("strips temperature for a hosted GPT-5 too", () => { diff --git a/mcpjam-inspector/shared/types.ts b/mcpjam-inspector/shared/types.ts index 9e1c47dd1f..f1eb483768 100644 --- a/mcpjam-inspector/shared/types.ts +++ b/mcpjam-inspector/shared/types.ts @@ -359,6 +359,9 @@ export enum Model { GPT_5_1 = "gpt-5.1", GPT_5_1_CODEX = "gpt-5.1-codex", GPT_5_1_CODEX_MINI = "gpt-5.1-codex-mini", + GPT_5_6_LUNA = "gpt-5.6-luna", + GPT_5_6_SOL = "gpt-5.6-sol", + GPT_5_6_TERRA = "gpt-5.6-terra", GPT_3_5_TURBO = "gpt-3.5-turbo", DEEPSEEK_CHAT = "deepseek-chat", DEEPSEEK_REASONER = "deepseek-reasoner", @@ -454,6 +457,24 @@ export const SUPPORTED_MODELS: ModelDefinition[] = [ provider: "anthropic", contextLength: 200000, }, + { + id: Model.GPT_5_6_LUNA, + name: "GPT-5.6 Luna", + provider: "openai", + contextLength: 1050000, + }, + { + id: Model.GPT_5_6_SOL, + name: "GPT-5.6 Sol", + provider: "openai", + contextLength: 1050000, + }, + { + id: Model.GPT_5_6_TERRA, + name: "GPT-5.6 Terra", + provider: "openai", + contextLength: 1050000, + }, { id: Model.GPT_5_1, name: "GPT-5.1", From c879572528a67bd9ceb6bd12af302a0044b23a49 Mon Sep 17 00:00:00 2001 From: nachocossio <2788936@gmail.com> Date: Thu, 27 Aug 2026 21:02:11 -0400 Subject: [PATCH 2/2] style(models): shorten the GPT-5.6 comments, add a missing trailing comma The tokenizer comment took two lines to say what the 5.1 entry above it says with a trailing `// Map to closest available`, so it now uses that form. The test comment restated the ticket across three lines. The BACK2-714 reference already carries that. The filter callback was missing the trailing comma the inspector workspace's prettier requires (`trailingComma: "all"`, prettier 3.9.6). It got through because `npx prettier` at the repo root resolves 2.8.8, which does not flag it, so the earlier check passed against the wrong binary. No behavior change. types.test.ts, tokenizer-helpers.test.ts and the model-helpers suites pass, 120 tests. --- mcpjam-inspector/server/utils/tokenizer-helpers.ts | 4 +--- mcpjam-inspector/shared/__tests__/types.test.ts | 6 ++---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/mcpjam-inspector/server/utils/tokenizer-helpers.ts b/mcpjam-inspector/server/utils/tokenizer-helpers.ts index 2dc46f5f7e..2de3650dc1 100644 --- a/mcpjam-inspector/server/utils/tokenizer-helpers.ts +++ b/mcpjam-inspector/server/utils/tokenizer-helpers.ts @@ -48,9 +48,7 @@ const MODEL_ID_MAPPINGS: Record = { "gpt-5.1-codex-mini": "openai/gpt-5.1-codex-mini", "gpt-5.5": "openai/gpt-5", "openai/gpt-5.5": "openai/gpt-5", - // ai-tokenizer has no 5.6 entry; GPT-5 is the closest id it knows, and an - // approximate count beats dropping to the character-based fallback. - "gpt-5.6-luna": "openai/gpt-5", + "gpt-5.6-luna": "openai/gpt-5", // Map to closest available "gpt-5.6-sol": "openai/gpt-5", "gpt-5.6-terra": "openai/gpt-5", diff --git a/mcpjam-inspector/shared/__tests__/types.test.ts b/mcpjam-inspector/shared/__tests__/types.test.ts index 6aee7f1380..bbdc7891f4 100644 --- a/mcpjam-inspector/shared/__tests__/types.test.ts +++ b/mcpjam-inspector/shared/__tests__/types.test.ts @@ -154,11 +154,9 @@ describe("MCPJam-provided model classification", () => { }); it("offers the current OpenAI models to BYOK keys", () => { - // The BYOK OpenAI rows are hand-maintained too, and had drifted to 5.1 - // while the hosted catalog was already serving the 5.6 family, so a user - // with their own key could not select the newest model. See BACK2-714. + // BYOK rows are hand-maintained and had drifted to 5.1. See BACK2-714. const openaiIds = SUPPORTED_MODELS.filter( - (m) => m.provider === "openai" + (m) => m.provider === "openai", ).map((m) => String(m.id)); for (const id of ["gpt-5.6-luna", "gpt-5.6-sol", "gpt-5.6-terra"]) {