PyPI / mcp / 2.3.0

mcp 2.3.0

Source
https://github.com/modelcontextprotocol/python-sdk
Tag scanned
v2.3.0
Compared with
v2.2.0 (1 signals introduced since)
Files
1634 scanned, 44 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 73 info
Scan time
36.5 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 46 of 46 warn and critical signals; 46 demoted to info.
Disclude version
4.0.0
Scanned (UTC)
2026-10-14 18:29

Signals

Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.

  1. info warn → info by review unicode-mixed-script i18n/ja/pages/handlers/subscriptions.md:82:49 new in this release

    identifier `レプリカごとに別々のバスを持つからです` mixes scripts: Katakana + Hiragana + Han + Other (raw pass, confidence 0.80)

    
    デフォルトのバスでは届きません。レプリカごとに別々のバスを持つからです。
    
    ```mermaid
    likely benign LLM, confidence 0.95 Japanese prose about per-replica buses flagged for mixed scripts.
    Reasoning

    Ordinary Japanese explanatory sentence in documentation; script mixing is inherent to Japanese orthography.

  2. info warn → info by review encoding-base64 docs/client/identity-assertion.md:120:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.95 Markdown docs example showing a truncated JWT assertion in an OAuth token request.
    Reasoning

    The flagged string is a truncated JWT header example in an OAuth jwt-bearer documentation snippet, followed by an ellipsis. It is illustrative documentation, not an encoded payload, and the raw base64 signal is a false positive.

  3. info long-line docs/migration.md:1287:1

    line length 551 characters (raw pass, confidence 0.50)

    - `server.create_initialization_options(notification_options=..., experimental_capabilities=...)`, `server.get_capabilities(...)` (its arguments are now optional), and `NotificationOptions(prompts_changed=, resources_changed=, tools_changed=)`. Both methods gained an optional `extensions=` argument. `create_initializat
  4. info long-line docs/migration.md:1291:1

    line length 626 characters (raw pass, confidence 0.50)

    - Import paths: `from mcp.server import Server` (preferred), `from mcp.server.lowlevel import Server`, and `from mcp.server.lowlevel.server import Server` all resolve; only the `request_ctx` contextvar left `mcp.server.lowlevel.server` (see [`request_context` property removed](#lowlevel-server-request_context-property-
  5. info long-line docs/migration.md:2061:1

    line length 653 characters (raw pass, confidence 0.50)

    Server-side transport entry points (`stdio_server()`, `SseServerTransport`, `StreamableHTTPSessionManager`) keep their v1 import paths and signatures (see [Lowlevel `Server`: what did not change]#lowlevel-server-what-did-not-change), so the sections below are client-side apart from [`stdio_server` keeps the protocol 
  6. base64-like blob (96 bytes, compression ratio 0.99) (raw pass, confidence 0.60)

    # Test data
    TEST_IMAGE_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg=="
    TEST_AUDIO_BASE64 = "UklGRiYAAABXQVZFZm10IBAAAAABAAEAQB8AAAB9AAACABAAZGF0YQIAAAA="
    likely benign LLM, confidence 0.95 Test fixture constants holding base64-encoded sample image and audio data in an example server.
    Reasoning

    The blobs are labelled test data: a tiny PNG and a tiny WAV header used as fixtures in an example MCP test server. This is ordinary sample content, and the raw signal fires on any base64 string.

  7. info warn → info by review encoding-base64 i18n/de/pages/client/identity-assertion.md:128:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.95 Translated docs example of a truncated JWT assertion in an OAuth jwt-bearer request.
    Reasoning

    This is the same truncated JWT documentation example repeated in the German translation. It is a documentation snippet, not an obfuscated payload.

  8. info warn → info by review encoding-base64 i18n/es/pages/client/identity-assertion.md:127:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.95 Translated docs example of a truncated JWT assertion in an OAuth jwt-bearer request.
    Reasoning

    This is the same truncated JWT documentation example repeated in the Spanish translation. It is documentation text, not a hidden or encoded payload.

  9. info warn → info by review encoding-base64 i18n/fr/pages/client/identity-assertion.md:128:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.95 Translated docs example of a truncated JWT assertion in an OAuth jwt-bearer request.
    Reasoning

    This is the same truncated JWT documentation example repeated in the French translation. It is documentation text, not a hidden or encoded payload.

  10. info warn → info by review unicode-mixed-script i18n/hi/instructions.md:119:54

    identifier `Pythonमें` mixes scripts: Latin + Other (raw pass, confidence 0.80)

      ordinary space before it — Python में, MCP का, `ctx` को, `add` से, server
      पर, tools की सूची — never glued (Pythonमें ✗), never hyphenated (Python-में
      ✗), and never a Devanagari ending grafted onto a Latin word (serverों ✗).
    likely benign LLM, confidence 0.90 Hindi style-guide prose showing a Latin word next to a Devanagari particle, presented as a negative example.
    Reasoning

    The flagged token is Hindi prose where a Devanagari postposition ('में') is written directly after the Latin word 'Python'. The text is an explicit style guide that uses the glued form as a counterexample to show what not to write. Mixed scripts in natural-language prose are normal, and this is not an identifier-level obfuscation.

  11. info warn → info by review unicode-mixed-script i18n/hi/instructions.md:120:66

    identifier `serverों` mixes scripts: Latin + Other (raw pass, confidence 0.80)

      पर, tools की सूची — never glued (Pythonमें ✗), never hyphenated (Python-में
      ✗), and never a Devanagari ending grafted onto a Latin word (serverों ✗).
      Compound labels keep their space too: MCP server, tool call. Line breaks
    likely benign LLM, confidence 0.90 Hindi style-guide prose with a Latin word and a Devanagari suffix, shown as a counterexample.
    Reasoning

    This is the same kind of Hindi prose from a style guide, where 'serverों' appears as a marked-wrong example of grafting a Devanagari ending onto a Latin word. Its context is documentation, not code, so the mixed-script hit is a tokenization artifact.

  12. info warn → info by review encoding-base64 i18n/hi/pages/client/identity-assertion.md:125:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.95 Translated docs example of a truncated JWT assertion in an OAuth jwt-bearer request.
    Reasoning

    This is the same truncated JWT documentation example in the Hindi translation. It is documentation text, not a hidden payload.

  13. line length 619 characters (raw pass, confidence 0.50)

    * `on_call_tool`、`on_get_prompt`、`on_read_resource` は、通常の結果の代わりに `InputRequiredResult` を返して呼び出しを一時停止し、クライアントに入力を求めることができます。**[マルチラウンドトリップ(multi-round-trip)リクエスト](../handlers/multi-roun
  14. info warn → info by review unicode-mixed-script i18n/ja/pages/client/identity-assertion.md:16:16

    identifier `つの別々の権限主体が関わっています` mixes scripts: Hiragana + Han + Other (raw pass, confidence 0.80)

    ここには 2 つの別々の権限主体が関わっています。両者を区別して呼び分けられれば、このページの大半は理解できたも同然です。**エンタープライズ IdP** は組織の ID プロバイダーです。従業員が誰であるかを知っており、ポリシーが置… (340 bytes total)
    likely benign LLM, confidence 0.90 Japanese documentation prose that mixes scripts and digits in a normal sentence.
    Reasoning

    The flagged 'identifier' is ordinary Japanese prose mixing Hiragana, Han characters, and a few ASCII or digit characters, as in '2 つの'. This is standard Japanese typography in a documentation paragraph, not an identifier obfuscation attempt.

  15. line length 795 characters (raw pass, confidence 0.50)

        SDK がアサーションをデコードすることは決してありません。どの IdP を信頼し、その IdP がどの鍵を公開しているかを知っているのはデプロイメントだけなので、`exchange_identity_assertion` の中身はすべてが安全性を支える要です。[RFC 7523](
  16. info warn → info by review encoding-base64 i18n/ja/pages/client/identity-assertion.md:106:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.95 Translated docs example of a truncated JWT assertion in an OAuth jwt-bearer request.
    Reasoning

    This is the same truncated JWT documentation example in the Japanese translation. It is documentation text, not an encoded or hidden payload.

  17. info warn → info by review unicode-mixed-script i18n/ja/pages/client/index.md:151:216

    identifier `つは別々のリストになっています` mixes scripts: Hiragana + Han + Other + Katakana (raw pass, confidence 0.80)

    * `list_resource_templates()` は**パラメーター化された**ものを返します。ここでは `['catalog://genres/{genre}']` です。テンプレートは値を埋めるまで読み取れないため、2 つは別々のリストになっています。
    likely benign LLM, confidence 0.95 Japanese documentation sentence about list_resource_templates flagged for mixed scripts.
    Reasoning

    Japanese prose mixing hiragana, kanji and punctuation is normal; the 'mixed script' signal fires on ordinary Japanese sentences in a markdown doc.

  18. line length 883 characters (raw pass, confidence 0.50)

        フレームワークは、ネゴシエートされたプロトコルバージョンから質問のトランスポートを選びます。上のコードはどちらでも同じです。**2026-07-28** 以降では、質問はマルチラウンドトリップ(multi-round-trip)の `tools/call` の中で運ばれ… (340 bytes total)
  19. line length 532 characters (raw pass, confidence 0.50)

    `@mcp.tool()` では、これを手で組み立てることはめったにありません。ユーザーに尋ねる依存関係(`Elicit`)、クライアントの LLM をサンプリングする依存関係(`Sample`)、クライアントのルート(roots)を一覧する依存関係(`ListRoots`)のい… (339 bytes total)
  20. info warn → info by review unicode-mixed-script i18n/ja/pages/handlers/multi-round-trip.md:70:412

    identifier `から倍々に増えて上限` mixes scripts: Hiragana + Han + Other (raw pass, confidence 0.80)

    ��に短くスリープします(50ms から倍々に増えて上限 250ms)。そのため、単に「まだ終わっていない」と言っているだけのサーバーをビジーポーリングすることはありません。
    likely benign LLM, confidence 0.95 Japanese doc text about polling backoff timing flagged for mixed scripts.
    Reasoning

    Normal Japanese prose describing polling backoff; mixed Hiragana/Han is standard Japanese text.

  21. line length 519 characters (raw pass, confidence 0.50)

    * **認証されたプリンシパル。** SDK が検証した OAuth アクセストークンをリクエストが載せている場合、状態はトークンのクライアント、発行者、サブジェクトに束縛されます。あるユーザー向けに発行された状態は、両者が 1 つの OAuth ク… (340 bytes total)
  22. info warn → info by review unicode-mixed-script i18n/ja/pages/run/legacy-clients.md:131:61

    identifier `つの世代が別々の経路で待ち受けているからです` mixes scripts: Hiragana + Han + Other (raw pass, confidence 0.80)

    
    残るのはちょうど 1 つ、**変更通知**です。2 つの世代が別々の経路で待ち受けているからです。
    likely benign LLM, confidence 0.95 Japanese prose about two protocol generations flagged for mixed scripts.
    Reasoning

    Standard Japanese sentence in a translated docs page; no obfuscation present.

  23. info warn → info by review unicode-mixed-script i18n/ja/pages/servers/structured-output.md:190:312

    identifier `ありもしない天気を自信満々に読み上げる代わりに` mixes scripts: Hiragana + Han + Other (raw pass, confidence 0.80)

     を受け取るので、モデルは、ありもしない天気を自信満々に読み上げる代わりに、呼び出しが失敗したと分かります。フィールド名は開発者向けに、サーバーログの `ERROR` レベルに出力されます。
    likely benign LLM, confidence 0.95 Japanese prose about structured output error handling flagged for mixed scripts.
    Reasoning

    Normal Japanese documentation prose; mixed scripts are expected in Japanese text.

  24. info warn → info by review unicode-mixed-script i18n/ja/pages/servers/uri-templates.md:49:58

    identifier `パスの各セグメントを別々のリスト要素として受け取りたい場合は` mixes scripts: Katakana + Hiragana + Han + Other (raw pass, confidence 0.80)

    �りの 1 つの文字列ではなく、パスの各セグメントを別々のリスト要素として受け取りたい場合は `{/name*}` を使います。`shelves://browse{/path*}` なら、クライアントが `shelves://browse/fiction/sci-fi` を読むと `browse_shelf(["fiction", "sci-fi"])` が呼び出さ… (341 bytes total)
    likely benign LLM, confidence 0.95 Japanese doc on URI template path segments flagged for mixed scripts.
    Reasoning

    Japanese documentation explaining URI template explode syntax; the mixed-script detection is a false positive on natural language.

  25. line length 523 characters (raw pass, confidence 0.50)

    同じ質問、クライアント側も同じ `elicitation_callback` です。違いは内部にあります。リゾルバーを使うと、サーバーは質問を押し込むのではなく呼び出しから「返す」ことができるので、サーバーからクライアントへ流れるものは何もなく… (339 bytes total)
  26. line length 789 characters (raw pass, confidence 0.50)

    `Client` が受け取るのは、URL(Streamable HTTP)、`StdioServerParameters`(stdio のサブプロセス)、`sse_client(...)` のようなそれ以外の任意のトランスポートのコンテキストマネージャー、またはテストで使うサーバーオブジェクトそのもの(インメモ
  27. info warn → info by review unicode-mixed-script i18n/ko/instructions.md:11:67

    identifier `ㅂ니다` mixes scripts: Other + Hangul (raw pass, confidence 0.80)

    
    Write 합쇼체 (formal-polite, sentence endings in -습니다 / -ㅂ니다) as the one
    register for the whole page.
    likely benign LLM, confidence 0.95 Korean style instructions mentioning sentence endings flagged for mixed scripts.
    Reasoning

    Korean style guide text; the Hangul jamo ㅂ in the -ㅂ니다 ending is a legitimate writing convention, not obfuscation.

  28. info warn → info by review unicode-mixed-script i18n/ko/instructions.md:15:4

    identifier `ㅂ니다` mixes scripts: Other + Hangul (raw pass, confidence 0.80)

    - Body prose, list items, table cells and admonition bodies end in -습니다 /
      -ㅂ니다: "The SDK does the rest." → SDK가 나머지를 처리합니다.
    - Short imperatives (steps, instructions, calls to action) use -세요:
    likely benign LLM, confidence 0.95 Korean style bullet describing -습니다/-ㅂ니다 endings flagged for mixed scripts.
    Reasoning

    Same benign Korean style guidance using the jamo ㅂ in an ending pattern description.

  29. info warn → info by review encoding-base64 i18n/ko/pages/client/identity-assertion.md:126:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.90 Truncated JWT assertion example in an OAuth jwt-bearer docs snippet.
    Reasoning

    The blob is a truncated JWT header (eyJhbGciOi... decodes to JSON with alg/typ) in an OAuth example with an ellipsis; it is a documentation sample, not a payload.

  30. info warn → info by review encoding-base64 i18n/pt/pages/client/identity-assertion.md:126:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.90 Truncated JWT assertion example in a Portuguese OAuth docs snippet.
    Reasoning

    Identical truncated JWT example in the Portuguese translation of the same OAuth docs page; benign illustrative content.

  31. info warn → info by review unicode-homoglyph i18n/ru/instructions.md:33:8

    identifier `с` contains homoglyph candidates: с (0441)→c (raw pass, confidence 0.70)

    - The authorial "we" is fine where the English has it (Рекомендуем …), but no
      мы с вами or давайте. One page, one register: a page that drifts between
      imperatives and officialese, or between вы and Вы, is wrong even when each
      sentence is acceptable on its own.
    dismissed LLM, confidence 0.95 Russian style-guide prose containing the Cyrillic letter 'с' (as in 'с вами').
    Reasoning

    The flagged character is Cyrillic 'с' inside ordinary Russian prose in a markdown style guide, not an identifier. Russian text naturally uses Cyrillic letters that look like Latin ones, so the homoglyph signal is a false positive from a raw-pass check.

  32. info warn → info by review unicode-homoglyph i18n/ru/instructions.md:54:3

    identifier `с` contains homoglyph candidates: с (0441)→c (raw pass, confidence 0.70)

      с помощью, через; в случае если → если; функционал → возможности; and no
      chains of verbal nouns (для обеспечения возможности выполнения запуска →
      чтобы запустить).
    dismissed LLM, confidence 0.95 Russian documentation text using the Cyrillic word 'с' (with).
    Reasoning

    The match is the Cyrillic preposition 'с' in Russian prose about wording choices. This is normal Russian text in a documentation file, with no code or identifier context.

  33. info warn → info by review unicode-homoglyph i18n/ru/instructions.md:80:70

    identifier `В` contains homoglyph candidates: В (0412)→B (raw pass, confidence 0.70)

      весь API. / Вот и весь протокол.; "That's it. It's just Python." → Вот и
      всё. Это обычный Python.; "You get `3` back. ✨" → В ответ приходит `3`. ✨
    - Idioms take the plain meaning, not the picture: "Out of the box the app
    dismissed LLM, confidence 0.95 Russian translation example with the capital Cyrillic 'В' beginning a sentence.
    Reasoning

    The flagged 'В' is the capitalized Cyrillic word 'Вот'/'В' starting a Russian sentence in a translation example. It is ordinary language, not an obfuscated identifier.

  34. info warn → info by review unicode-homoglyph i18n/ru/instructions.md:102:32

    identifier `с` contains homoglyph candidates: с (0441)→c (raw pass, confidence 0.70)

    - Dashes: the grammatical dash is an em dash with a space on each side (Хост —
      это приложение, с которым говорит пользователь); a hyphen only joins
      compounds (MCP-сервер, HTTP-запрос); numeric ranges use an en dash without
    dismissed LLM, confidence 0.95 Russian guidance on dashes containing the Cyrillic word 'с'.
    Reasoning

    The character is the Cyrillic 'с' in Russian punctuation guidance prose ('Хост — это приложение, с которым…'). It is a legitimate use of Cyrillic in a Russian document.

  35. info warn → info by review unicode-homoglyph i18n/ru/instructions.md:117:83

    identifier `с` contains homoglyph candidates: с (0441)→c (raw pass, confidence 0.70)

      changes (2.5 seconds → 2,5 секунды); when in doubt keep the number as
      written. A space separates a number from its unit (100 МБ, 30 секунд, 5 с);
      % attaches with no space (100%). Numerals govern the noun the Russian way:
    dismissed LLM, confidence 0.95 Russian style text using the Cyrillic unit abbreviation 'с' (seconds).
    Reasoning

    The match is the Cyrillic abbreviation 'с' (seconds) in Russian units guidance, e.g. '5 с'. This is correct Russian typography in a documentation file and not an identifier.

  36. info warn → info by review unicode-homoglyph i18n/ru/instructions.md:139:20

    identifier `а` contains homoglyph candidates: а (0430)→a (raw pass, confidence 0.70)

    - Never decline a Latin-script word with an apostrophe or a glued ending
      (API'шка, SDK-а, в `Client`'е). Let a Russian word carry the case instead: a
      hyphenated head noun (MCP-сервер, MCP-клиент, HTTP-запрос, JSON-объект,
    dismissed LLM, confidence 0.93 Russian style text with a Cyrillic vowel in case endings.
    Reasoning

    The flagged 'а' is the Cyrillic case ending in Russian words such as 'SDK-а' and 'API'шка'. The surrounding text is Russian prose, so the Cyrillic vowel is expected and the homoglyph warning is a false positive.

  37. info warn → info by review unicode-homoglyph i18n/ru/instructions.md:139:36

    identifier `е` contains homoglyph candidates: е (0435)→e (raw pass, confidence 0.70)

    - Never decline a Latin-script word with an apostrophe or a glued ending
      (API'шка, SDK-а, в `Client`'е). Let a Russian word carry the case instead: a
      hyphenated head noun (MCP-сервер, MCP-клиент, HTTP-запрос, JSON-объект,
    dismissed LLM, confidence 0.93 Russian style text with a Cyrillic 'е' in a case ending.
    Reasoning

    The flagged 'е' is a Cyrillic letter in a Russian grammar sentence about declining Latin-script words. This is legitimate Russian prose in a documentation file.

  38. info warn → info by review encoding-base64 i18n/ru/pages/client/identity-assertion.md:130:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.90 Truncated example JWT assertion in an OAuth jwt-bearer documentation snippet.
    Reasoning

    The blob is the header of a JWT (eyJhbGciOi... is base64 for a JSON header), shown in an OAuth jwt-bearer example and cut off with '...'. It is a placeholder in documentation, not a payload or dropper.

  39. info warn → info by review encoding-base64 i18n/tr/pages/client/identity-assertion.md:129:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.90 Truncated example JWT assertion in a Turkish OAuth jwt-bearer documentation snippet.
    Reasoning

    This is the same truncated example JWT assertion as the Russian copy, shown in a documentation code block with a '...' placeholder. It is benign documentation content.

  40. info warn → info by review high-complexity i18n/tr/pages/troubleshooting.md:159:17

    string literal compression ratio 0.953 (128 bytes) (raw pass, confidence 0.60)

    * **Araç, host'un çalıştırdığı `mcp` üzerinde mi?** Başka bir modüldeki ikinci bir `MCPServer(...)` farklı, boş bir sunucudur. Host'un komutunun gerçekte hangi nesneyi içe aktardığını kontrol edin.
    dismissed LLM, confidence 0.90 Turkish troubleshooting prose sentence about checking the MCP server object.
    Reasoning

    The flagged item is a long Turkish prose sentence in a troubleshooting bullet, which naturally has a high compression ratio. The text is an ordinary explanation and contains no executable or obfuscated code.

  41. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:24:58

    identifier `і` contains homoglyph candidates: і (0456)→i (raw pass, confidence 0.70)

    - Steps and instructions are plain imperatives in the ви form: "Install the
      SDK, then run the server" → Встановіть SDK і запустіть сервер. A purpose
      clause is the other natural shape: "To run it: …" → Щоб запустити: …. Not
    dismissed LLM, confidence 0.97 Ukrainian prose in a translation style guide containing the legitimate letter і.
    Reasoning

    Markdown style guide for Ukrainian translation; the Cyrillic і is the legitimate Ukrainian letter used in the sample text, not an identifier. Raw-pass homoglyph flag is a false positive on natural-language prose.

  42. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:48:98

    identifier `у` contains homoglyph candidates: у (0443)→y (raw pass, confidence 0.70)

      itself (здійснює надсилання → надсилає); з метою → щоб; у випадку якщо →
      якщо; no chains of verbal nouns (для забезпечення можливості запуску → щоб
    dismissed LLM, confidence 0.97 Ukrainian example text in a localization style guide using the letter у.
    Reasoning

    Cyrillic у is a normal Ukrainian word/letter in the documentation's example translations; prose in a markdown guide, not code or an identifier.

  43. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:54:79

    identifier `і` contains homoglyph candidates: і (0456)→i (raw pass, confidence 0.70)

    - Avoid russianisms and суржик of every kind — vocabulary, calqued phrases,
      and Russian letters (ы, э, ъ, ё never appear in Ukrainian text; ґ, є, і, ї
      do where the orthography requires). §5 pins the common traps.
    dismissed LLM, confidence 0.97 Ukrainian guidance text mentioning the orthographic letters ґ, є, і, ї.
    Reasoning

    The file is a Ukrainian localization guide; the і here is genuine Ukrainian orthography, explicitly discussed in the text. Homoglyph warning is a false positive.

  44. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:65:67

    identifier `і` contains homoglyph candidates: і (0456)→i (raw pass, confidence 0.70)

      та конфігурування. Необхідно лише виконати відповідний запит.
    - Not this either (familiar): Ти його не створюєш і не налаштовуєш. Просто
      просиш.
    dismissed LLM, confidence 0.97 Ukrainian example sentence in a translation guide with the conjunction і.
    Reasoning

    Ordinary Ukrainian sentence in a markdown style guide; і is the conjunction 'and'. No code context and no obfuscation.

  45. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:77:101

    identifier `і` contains homoglyph candidates: і (0456)→i (raw pass, confidence 0.70)

      **[X](…)**.; "That's the whole API." / "That's the whole protocol." → Оце й
      увесь API. / Оце й увесь протокол.; "That's it. It's just Python." → От і
      все. Це звичайний Python.; "You get `3` back. ✨" → У відповідь приходить
      `3`. ✨
    dismissed LLM, confidence 0.97 Ukrainian translation examples in a style guide.
    Reasoning

    Plain Ukrainian translation examples in a markdown document; the flagged letters are native Ukrainian characters, not spoofed identifiers.

  46. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:83:105

    identifier `у` contains homoglyph candidates: у (0443)→y (raw pass, confidence 0.70)

      застосунок відповідає **лише** на запити, адресовані localhost. — not з
      коробки; "under the hood" → усередині, not під капотом; "on the wire" → у
      переданих даних / мережею, never по дроту.
    dismissed LLM, confidence 0.97 Ukrainian documentation text using the letter у.
    Reasoning

    Ukrainian prose with the native letter у in a documentation file. The homoglyph heuristic misfires on legitimate non-Latin text.

  47. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:110:61

    identifier `у` contains homoglyph candidates: у (0443)→y (raw pass, confidence 0.70)

      headers capitalise the first word and proper nouns only. No capital after a
      colon. Language names, weekdays and months are lowercase (у липні).
    - Digits stay ASCII. Protocol revision strings such as `2026-07-28` and
      `2025-11-25` are identifiers, copied byte for byte — never 28.07.2026, never
    dismissed LLM, confidence 0.97 Ukrainian guidance on date formatting containing у.
    Reasoning

    Ukrainian month/weekday guidance (у липні) in a markdown style guide; legitimate language content, no code or spoofing.

  48. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:113:22

    identifier `р` contains homoglyph candidates: р (0440)→p (raw pass, confidence 0.70)

      `2025-11-25` are identifiers, copied byte for byte — never 28.07.2026, never
      28 липня 2026 р. Version numbers, ports, HTTP status codes, error codes, RFC
      and SEP numbers are copied exactly.
    - Prose quantities take the decimal comma only when nothing but the separator
    dismissed LLM, confidence 0.97 Ukrainian date example in a style guide with the abbreviation р.
    Reasoning

    Ukrainian date example '28 липня 2026 р.' in documentation; р is the native Cyrillic letter used in the abbreviation р. (рік). Benign prose.

  49. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:117:83

    identifier `с` contains homoglyph candidates: с (0441)→c (raw pass, confidence 0.70)

      changes (2.5 seconds → 2,5 секунди); when in doubt keep the number as
      written. A space separates a number from its unit (100 МБ, 30 секунд, 5 с);
      % attaches with no space (100%). Numerals govern the noun the Ukrainian way:
    dismissed LLM, confidence 0.97 Ukrainian unit example '5 с' in a style guide.
    Reasoning

    Ukrainian unit abbreviation 'с' (секунди) in a localization style guide; standard Cyrillic text, not an obfuscated identifier.

  50. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:120:80

    identifier `і` contains homoglyph candidates: і (0456)→i (raw pass, confidence 0.70)

      1 інструмент, 3 інструменти, 5 інструментів.
    - e.g. → наприклад; i.e. → тобто; etc. → тощо; "&" → і / та. Emphasis lands on
      the same words the source emphasises, and a bolded negation ("**not**" →
    dismissed LLM, confidence 0.97 Ukrainian translation list containing the conjunction і.
    Reasoning

    Ukrainian conjunction і in the 'e.g./i.e.' translation list of a markdown guide. Native orthography; homoglyph flag is a false positive.

  51. info warn → info by review unicode-homoglyph i18n/uk/instructions.md:138:20

    identifier `а` contains homoglyph candidates: а (0430)→a (raw pass, confidence 0.70)

    - Never decline a Latin-script word with an apostrophe or a glued ending
      (API'шка, SDK-а). Let a Ukrainian word carry the case instead: a hyphenated
      head noun (MCP-сервер, HTTP-запит, JSON-об'єкт, ASGI-застосунок) or the kind
    likely benign LLM, confidence 0.90 Ukrainian documentation text using a Cyrillic letter in a hyphenated grammatical suffix.
    Reasoning

    The flagged character is Cyrillic 'а' used inside Ukrainian prose, such as 'SDK-а', which is the correct grammatical ending. Homoglyph checks fire on ordinary Ukrainian text, and nothing here deceives a reader or hides code.

  52. info warn → info by review encoding-base64 i18n/uk/pages/client/identity-assertion.md:126:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.93 Truncated example JWT assertion in an OAuth jwt-bearer documentation snippet.
    Reasoning

    The blob is a truncated JWT header (eyJhbGciOiJIUzI1NiIsInR5cCI6...) followed by '...' in an OAuth jwt-bearer grant example. It is documentation placeholder text, not a live credential or payload.

  53. line length 532 characters (raw pass, confidence 0.50)

    * `on_call_tool`、`on_get_prompt` 和 `on_read_resource` 可以回傳 `InputRequiredResult` 取代正常結果,暫停呼叫並向用戶端要求輸入;請見 **[多輪往返(multi-round-trip)請求]../handlers/multi-round-trip.md**。忠於這一層的風格,沒有任何東西會替你裝好:`MCPServer` 
  54. line length 544 characters (raw pass, confidence 0.50)

    上面的 `idp_issue_id_jag` **不是你的程式碼**。它代替身分提供者,在處理程序內簽署斷言,讓這個檔案能完整執行,你也能讀到 ID-JAG 帶有的每一個 claim。真正的 `fetch_id_jag` 會改發上一節的第一個權杖請求:對你的 IdP 做一次 [RFC 8693](https://datatra
  55. line length 635 characters (raw pass, confidence 0.50)

        SDK 從不解碼斷言:只有你的部署知道它信任哪一個 IdP、那個 IdP 發布哪些金鑰,所以 `exchange_identity_assertion` 裡的每一行都至關重要。依 [RFC 7523](https://datatracker.ietf.org/doc/html/rfc7523) §3,用 IdP 發布的金鑰(它的 JWKS;這裡的共享密鑰只是示… (339 bytes total)
  56. info warn → info by review encoding-base64 i18n/zh-hant/pages/client/identity-assertion.md:106:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.93 Truncated example JWT assertion in a traditional Chinese OAuth documentation page.
    Reasoning

    This is the same truncated example JWT assertion in another translation of the OAuth documentation, with the same '...' placeholder.

  57. line length 617 characters (raw pass, confidence 0.50)

        框架依協商出的協定版本決定問題走哪種傳輸;上面的程式碼在兩種情況下完全相同。在 **2026-07-28** 及之後,問題搭在一個多輪往返(multi-round-trip)的 `tools/call` 裡:伺服器回傳問題,用戶端的 `elicitation_callback` 回答它,`Client` 替你重試這
  58. line length 621 characters (raw pass, confidence 0.50)

    `Client` 接受一個 URL(Streamable HTTP)、一個 `StdioServerParameters`(stdio 子處理程序)、任何其他傳輸 context manager(例如 `sse_client(...)`),或者在測試裡直接接受伺服器物件本身(記憶體內、沒有傳輸)。進入 `async with` 就會連線並協商協定版本,… (340 bytes total)
  59. line length 532 characters (raw pass, confidence 0.50)

    * `on_call_tool`、`on_get_prompt` 和 `on_read_resource` 可以返回 `InputRequiredResult` 而不是正常结果,来暂停调用并向客户端索要输入;见 **[多轮往返(multi-round-trip)请求]../handlers/multi-round-trip.md**。符合这一层的风格,没有任何东西替你装好:`MCPServer` 
  60. line length 536 characters (raw pass, confidence 0.50)

    它上面的 `idp_issue_id_jag` **不是你的代码**。它替身份提供方出场,在进程内签发断言,这样文件是完整的,你也能读到 ID-JAG 携带的每一个声明。真正的 `fetch_id_jag` 发的是上一节里的第一个令牌请求:对你的 IdP 做一次 [RFC 8693](https://datatracker.i
  61. line length 614 characters (raw pass, confidence 0.50)

        SDK 从不解码断言:只有你的部署知道它信任哪个 IdP、那个 IdP 发布哪些密钥,所以 `exchange_identity_assertion` 里的每一步都是承重的。按 [RFC 7523](https://datatracker.ietf.org/doc/html/rfc7523) §3,用 IdP 发布的密钥(它的 JWKS;这里的共享密钥只是演示… (339 bytes total)
  62. info warn → info by review encoding-base64 i18n/zh/pages/client/identity-assertion.md:106:5

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

        grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
        assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6Im9hdXRoLWlkLWphZytqd3QifQ...
        client_id=finance-agent
        resource=http://localhost:8001/mcp
    likely benign LLM, confidence 0.93 Truncated example JWT assertion in a translated OAuth documentation page.
    Reasoning

    This is the same truncated example JWT assertion in a translated copy of the same OAuth documentation. The '...' marks it as a placeholder.

  63. line length 627 characters (raw pass, confidence 0.50)

        框架根据协商出的协议版本选择问题走哪种传输方式;上面的代码在两种情况下完全相同。在 **2026-07-28** 及之后,问题搭载在一次多轮往返(multi-round-trip)的 `tools/call` 里——服务器返回问题,客户端的 `elicitation_callback` 回答它,`Client` 替
  64. line length 619 characters (raw pass, confidence 0.50)

    `Client` 接受一个 URL(Streamable HTTP)、一个 `StdioServerParameters`(stdio 子进程)、其他任意传输上下文管理器(比如 `sse_client(...)`),或者在测试里直接接受服务器对象本身(内存直连,没有传输)。进入 `async with` 就会建立连接并协商协议版本… (339 bytes total)
  65. info warn → info by review dynamic-execution src/mcp/cli/cli.py:48:17

    `subprocess.run` called with `shell=True` and a literal command (ast pass, confidence 0.70)

                try:
                    subprocess.run([cmd, "--version"], check=True, capture_output=True, shell=True)
                    return cmd
                except subprocess.CalledProcessError:
    likely benign LLM, confidence 0.70 A version probe that runs a candidate CLI command with shell=True inside a try block.
    Reasoning

    shell=True is risky, but the command is a loop variable over candidate executable names and is probed with a fixed '--version' argument. This is a standard tool-availability check, not an injected or downloaded payload. The list-plus-shell combination is sloppy but does not show malicious intent.

  66. identifier `κόσμε` contains homoglyph candidates: κ (03BA)→k (in string/comment) (raw pass, confidence 0.35)

        "hebrew": "שלום עולם - זה מבחן",
        "greek": "Γεια σου κόσμε - αυτό είναι δοκιμή",
        "emoji": "Hello 👋 World 🌍 - Testing 🧪 Unicode ✨",
        "math": "∑ ∫ √ ∞ ≠ ≤ ≥ ∈ ∉ ⊆ ⊇",
  67. info unicode-mixed-script tests/client/test_http_unicode.py:35:31

    identifier `κόσμε` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

        "hebrew": "שלום עולם - זה מבחן",
        "greek": "Γεια σου κόσμε - αυτό είναι δοκιμή",
        "emoji": "Hello 👋 World 🌍 - Testing 🧪 Unicode ✨",
        "math": "∑ ∫ √ ∞ ≠ ≤ ≥ ∈ ∉ ⊆ ⊇",
  68. identifier `δοκιμή` contains homoglyph candidates: ο (03BF)→o, κ (03BA)→k (in string/comment) (raw pass, confidence 0.35)

        "hebrew": "שלום עולם - זה מבחן",
        "greek": "Γεια σου κόσμε - αυτό είναι δοκιμή",
        "emoji": "Hello 👋 World 🌍 - Testing 🧪 Unicode ✨",
        "math": "∑ ∫ √ ∞ ≠ ≤ ≥ ∈ ∉ ⊆ ⊇",
  69. info unicode-mixed-script tests/client/test_http_unicode.py:35:64

    identifier `δοκιμή` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

        "hebrew": "שלום עולם - זה מבחן",
        "greek": "Γεια σου κόσμε - αυτό είναι δοκιμή",
        "emoji": "Hello 👋 World 🌍 - Testing 🧪 Unicode ✨",
        "math": "∑ ∫ √ ∞ ≠ ≤ ≥ ∈ ∉ ⊆ ⊇",
  70. info unicode-mixed-script tests/client/test_http_unicode.py:39:30

    identifier `Привет안녕مرحباשלום` mixes scripts: Cyrillic + Hangul + Arabic + Hebrew (in string/comment) (raw pass, confidence 0.40)

        "accented": "Café, naïve, résumé, piñata, Zürich",
        "mixed": "Hello世界🌍Привет안녕مرحباשלום",
        "special": "Line\nbreak\ttab\r\nCRLF",
        "quotes": '«French» „German" "English" 「Japanese」',
  71. info unicode-mixed-script tests/client/test_http_unicode.py:92:77

    identifier `Привет안녕مرحباשלום` mixes scripts: Cyrillic + Hangul + Arabic + Hebrew (in string/comment) (raw pass, confidence 0.40)

                    role="user",
                    content=types.TextContent(type="text", text="Hello世界🌍Привет안녕مرحباשלום"),
                )
            ]
  72. info unicode-mixed-script tests/client/test_http_unicode.py:171:56

    identifier `Привет안녕مرحباשלום` mixes scripts: Cyrillic + Hangul + Arabic + Hebrew (in string/comment) (raw pass, confidence 0.40)

            assert message.content.type == "text"
            assert message.content.text == "Hello世界🌍Привет안녕مرحباשלום"
  73. info warn → info by review encoding-base64 tests/issues/test_1338_icons_and_metadata.py:16:36

    base64-like blob (96 bytes, compression ratio 0.97) (raw pass, confidence 0.60)

        test_icon = Icon(
            src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
            mime_type="image/png",
            sizes=["1x1"],
    likely benign LLM, confidence 0.95 Test fixture with an inline base64-encoded 1x1 PNG data URI for an icon.
    Reasoning

    The base64 is a standard 1x1 PNG data URI used as a test fixture for icon metadata. It is a normal image encoding with no execution or hidden payload.

Reproduce This Scan

Run disclude locally to verify. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.

cargo install disclude --version 4.0.0
git clone https://github.com/modelcontextprotocol/python-sdk python-sdk && cd python-sdk
git checkout v2.3.0
disclude scan --severity info --diff v2.2.0 .