Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

MCP ask_codebase rejects explicit languageModel: getLanguageModelKey includes displayName which the MCP schema doesn't expose

Ouverte Adaptée aux débutants
#1,137 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@pranav718 y travaille déjà.

Depuis le 31/8/2026.

  • #1408 par @salarkhannn — fermée sans fusion
  • #1414 par @Harsh23Kashyap — fermée sans fusion
  • #1622 par @pranav718 — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
76/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Calme
Stack technique
typescript
Domaine
api

Piste de recherche

Commencez dans packages/web/src/features/mcp/askCodebase.ts et examinez comment le languageModel demandé est mis en correspondance avec les modèles configurés ; comparez ce chemin avec getLanguageModelKey dans packages/web/src/features/chat/utils.ts. Le travail est terminé lorsque ask_codebase accepte la forme {provider, model} du schéma pour les modèles configurés, tout en préservant le comportement par défaut existant et toute autre utilisation de getLanguageModelKey.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

ask_sb bug

Summary

When calling the MCP tool ask_codebase with an explicit languageModel parameter, the request is rejected with 400 Language model '<provider>/<model>' is not configured. — even when list_language_models clearly shows that exact model configured.

Version

  • Sourcebot v4.16.11 (Helm chart 0.1.76)
  • MCP client @sourcebot/[email protected] (via npx -y @sourcebot/mcp@latest)

Reproduction

Config in sourcebot.json / helm values sourcebot.config:

models:
  - provider: anthropic
    model: claude-sonnet-4-6
    displayName: Claude Sonnet 4.6
    token:
      env: ANTHROPIC_API_KEY
  - provider: anthropic
    model: claude-opus-4-7
    displayName: Claude Opus 4.7 (slow, highest quality)
    token:
      env: ANTHROPIC_API_KEY
  1. Call list_language_models via MCP — returns both models as expected:
[
  {"provider":"anthropic","model":"claude-sonnet-4-6","displayName":"Claude Sonnet 4.6"},
  {"provider":"anthropic","model":"claude-opus-4-7","displayName":"Claude Opus 4.7 (slow, highest quality)"}
]
  1. Call ask_codebase with an explicit language model of the exact shape the tool's JSON schema requires ({provider, model}):
{
  "query": "...",
  "languageModel": {"provider": "anthropic", "model": "claude-opus-4-7"}
}

Result:

{"statusCode":400,"errorCode":"INVALID_REQUEST_BODY","message":"Language model 'anthropic/claude-opus-4-7' is not configured."}

Same happens for claude-sonnet-4-6 — every explicit model is rejected, regardless of which one.

ask_codebase without languageModel works fine — the implicit default (first model in config) is used correctly. So the failure is specifically in the explicit-selection path.

Root cause

getLanguageModelKey in packages/web/src/features/chat/utils.ts builds the match key from provider + model + displayName:

export const getLanguageModelKey = (model: LanguageModelInfo) => {
    return `${model.provider}-${model.model}-${model.displayName}`;
}

askCodebase uses this function to match the requested model against configured models in packages/web/src/features/mcp/askCodebase.ts:

const matchingModel = configuredModels.find(
    (m) => getLanguageModelKey(m) === getLanguageModelKey(requestedLanguageModel)
);

The MCP JSON schema for ask_codebase.languageModel only requires {provider, model} — displayName is not part of the schema and clients cannot provide it:

languageModel: {
  provider: (required),
  model: (required)
}

So at match time:

  • Configured entry key: anthropic-claude-opus-4-7-Claude Opus 4.7 (slow, highest quality)
  • Requested entry key: anthropic-claude-opus-4-7-undefined

Keys never match → 400 for any explicit selection.

Suggested fix

Either:

  1. Match on provider+model only in askCodebase.ts (simplest — displayName is a cosmetic label, not an identity key):
    const matchingModel = configuredModels.find(
        (m) => m.provider === requestedLanguageModel.provider &&
               m.model    === requestedLanguageModel.model
    );
    
  2. Or drop displayName from getLanguageModelKey so the match is consistent with the externally-visible identity.

Option 1 is the minimal change that keeps getLanguageModelKey untouched if it is used elsewhere where displayName matters.

Impact

  • MCP clients cannot route a specific question to a non-default model — the dropdown selection in the Web UI works because the UI presumably submits the full LanguageModelInfo (including displayName), but the MCP tool schema intentionally does not expose displayName, so there is no workaround.
  • Defaulting to the first model in config still works, so this is not a total outage, but it removes a documented MCP capability.

Happy to open a PR if helpful.

Langage dominant
TypeScript
Étoiles
3.9k
Forks
374
Merge moyen
2 j 13 h
PR mergées (30 j)
48

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de sourcebot-dev/sourcebot

Toutes les issues de sourcebot-dev/sourcebot

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.