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
1635 scanned, 43 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 73 info
Scan time
41.6 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 46 of 46 warn and critical signals; 46 demoted to info.
Disclude version
4.1.0
Scanned (UTC)
2026-10-22 02:14

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
    dismissed LLM, confidence 0.97 A Japanese documentation sentence about replicas and buses, flagged for mixed scripts.
    Reasoning

    The flagged identifier is ordinary Japanese prose ("レプリカごとに別々のバスを持つからです" = "because each replica has its own separate bus") in a translated documentation page. Mixing Katakana, Hiragana and Han is normal for Japanese, so the unicode-mixed-script signal is a false positive from natural language.

  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 Truncated example JWT header in an OAuth jwt-bearer documentation snippet.
    Reasoning

    The blob is the header of an example JWT assertion in a documentation code block, with a truncated signature (...). It is illustrative text for a jwt-bearer grant, not a payload.

  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 Base64-encoded test image and audio constants in an example server.
    Reasoning

    The constants are labelled as test data and hold a small PNG and WAV sample used to exercise image and audio content in an example MCP server. No execution or decoding of hidden code is shown.

  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 copy of the example JWT assertion snippet in documentation.
    Reasoning

    This is the same truncated example JWT header in a translated documentation page.

  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 copy of the example JWT assertion snippet in documentation.
    Reasoning

    This is the same truncated example JWT header in a translated documentation page.

  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 copy of the example JWT assertion snippet in documentation.
    Reasoning

    This is the same truncated example JWT header in a translated documentation page.

  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 containing Latin technical terms next to Devanagari particles.
    Reasoning

    The Hindi prose mixes Latin technical terms with Devanagari postpositions and the snippet is a style guide showing forbidden forms with ✗. Mixed scripts are natural in this translation and there is no executable content.

  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 example of a bad Devanagari suffix on a Latin word.
    Reasoning

    The flagged word is a deliberately incorrect example in a Hindi style guide, shown with ✗. The script mixing is part of the documented prose.

  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 copy of the example JWT assertion snippet in documentation.
    Reasoning

    This is the same truncated example JWT header in a translated documentation page.

  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)
    dismissed LLM, confidence 0.90 Japanese explanatory prose flagged because the tokenizer merged kana and kanji into one identifier.
    Reasoning

    The flagged token is ordinary Japanese prose. The tokenizer treats a run of Hiragana, Han and punctuation as one identifier, which is a false positive on natural text.

  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 copy of the example JWT assertion snippet in documentation.
    Reasoning

    This is the same truncated example JWT header in a translated documentation page.

  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 つは別々のリストになっています。
    dismissed LLM, confidence 0.90 Japanese documentation sentence flagged by a tokenizer artifact on natural text.
    Reasoning

    The snippet is ordinary Japanese documentation prose about list_resource_templates, with the mixed-script flag caused by the tokenizer merging text runs. No code or hidden content is involved.

  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)。そのため、単に「まだ終わっていない」と言っているだけのサーバーをビジーポーリングすることはありません。
    dismissed LLM, confidence 0.90 Japanese documentation sentence about backoff polling flagged as mixed script.
    Reasoning

    The snippet is Japanese prose about polling backoff timing. The flagged run is ordinary text, and the replacement characters look like encoding damage rather than obfuscation.

  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 つの世代が別々の経路で待ち受けているからです。
    dismissed LLM, confidence 0.97 A Japanese documentation sentence about legacy clients, flagged for mixed scripts.
    Reasoning

    The snippet is normal Japanese prose describing two generations listening on separate paths. Hiragana, Han and punctuation mixing is standard for Japanese text, and nothing in it is hidden or executable.

  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` レベルに出力されます。
    dismissed LLM, confidence 0.97 A Japanese documentation paragraph on tool-call failure reporting, flagged for mixed scripts.
    Reasoning

    The snippet is Japanese explanatory prose about structured output errors and log levels. The script mix is the ordinary result of writing Japanese, not obfuscation.

  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)
    dismissed LLM, confidence 0.97 A Japanese documentation paragraph on URI templates, flagged for mixed scripts.
    Reasoning

    The snippet is Japanese documentation about URI template expansion, with inline code for the template syntax. The mixed scripts are natural Japanese text.

  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.
    dismissed LLM, confidence 0.96 A Korean style-guide line discussing formal sentence endings, flagged for mixed scripts.
    Reasoning

    This is a Korean style guide describing sentence endings such as -습니다 and -ㅂ니다. The Hangul jamo in '-ㅂ니다' is a deliberate linguistic example in a writing instruction, not an identifier hiding code.

  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 -세요:
    dismissed LLM, confidence 0.96 A Korean style-guide bullet about sentence endings, flagged for mixed scripts.
    Reasoning

    This is Korean style guidance listing sentence endings. The jamo sequence is a linguistic example, so the mixed-script signal is a false positive.

  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.93 A truncated base64url JWT header in an OAuth token-request example in a Korean docs page.
    Reasoning

    The blob is the header of a JWT example (eyJhbGciOiJIUzI1NiIsInR5cCI6...), which decodes to a standard alg/typ header. It is truncated with '...' in an OAuth jwt-bearer example, so it is a documentation sample rather than a payload or dropper.

  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.93 A truncated base64url JWT header in an OAuth token-request example in a Portuguese docs page.
    Reasoning

    This is the same OAuth jwt-bearer example as the Korean page: a truncated JWT header with an ellipsis, used to illustrate a token request. It is documentation, not a concealed payload.

  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.96 A Russian style-guide line with a Cyrillic preposition, flagged as a Latin homoglyph.
    Reasoning

    The flagged 'с' is the Cyrillic letter used in Russian prose ('мы с вами'). It is a style-guide example, so the homoglyph signal reflects the language itself, not spoofing in code.

  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.96 A Russian style-guide list item with a Cyrillic preposition, flagged as a Latin homoglyph.
    Reasoning

    The 'с' is the ordinary Cyrillic preposition in Russian style guidance ('с помощью'). The homoglyph flag is a false positive for natural-language text.

  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.96 A Russian translation example beginning with a Cyrillic capital, flagged as a Latin homoglyph.
    Reasoning

    The 'В' is the Cyrillic capital in 'В ответ приходит' ('the response returns'), normal Russian text in a translation example. There is no spoofed 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.96 A Russian style-guide bullet about dash usage, flagged as a Latin homoglyph.
    Reasoning

    The 'с' is the Cyrillic preposition in 'с которым говорит пользователь', ordinary Russian in a style-guide bullet about dashes. The homoglyph signal is a false positive.

  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.97 Cyrillic с in a Russian unit abbreviation (5 с = seconds) in a localization guide.
    Reasoning

    Cyrillic letter с inside Russian prose in a translation style guide is ordinary; homoglyph flag is a false positive on natural-language text in a markdown doc.

  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.97 Cyrillic а within Russian prose in a markdown style guide.
    Reasoning

    Cyrillic а in Russian words like 'сервер' is normal Russian text, not a spoofed Latin identifier.

  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.97 Cyrillic е within Russian prose in a markdown style guide.
    Reasoning

    Cyrillic е in Russian prose is expected; no code identifier is involved.

  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 Illustrative truncated JWT assertion in an OAuth jwt-bearer documentation example.
    Reasoning

    Truncated JWT header example in OAuth jwt-bearer docs with an ellipsis; a documentation placeholder, not a payload hiding anything.

  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 Illustrative truncated JWT assertion in a Turkish OAuth jwt-bearer documentation example.
    Reasoning

    Same truncated JWT example in the Turkish translation of the OAuth docs; benign documentation placeholder.

  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.95 Turkish troubleshooting paragraph about MCPServer imports.
    Reasoning

    Turkish prose troubleshooting text with no code obfuscation; compression ratio on natural language is not meaningful.

  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 letter і in a sentence of a style guide.
    Reasoning

    Ukrainian conjunction і in prose; homoglyph flag is a false positive.

  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 letter у in a style guide sentence.
    Reasoning

    Ukrainian preposition у in prose; expected letter in the language.

  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 letter і in a style guide discussing alphabet letters.
    Reasoning

    Ukrainian letter і appears in a sentence explicitly listing Ukrainian letters; natural text.

  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 letter і in a conversational example.
    Reasoning

    Ukrainian conjunction і in prose; false positive.

  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 letter і in translation examples.
    Reasoning

    Ukrainian letter і in prose examples; false positive.

  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 letter у in translation guidance text.
    Reasoning

    Ukrainian preposition у in prose; false positive.

  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.95 Ukrainian prose containing the Cyrillic letter у flagged as a homoglyph.
    Reasoning

    Cyrillic letter у in Ukrainian prose (у липні) is legitimate; the homoglyph signal fires on natural-language Cyrillic text in a translation document, not an identifier.

  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.95 Ukrainian date abbreviation р. flagged as homoglyph.
    Reasoning

    Cyrillic р is the normal abbreviation 'р.' for 'року' in Ukrainian dates; this is ordinary localized documentation text.

  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.95 Ukrainian unit abbreviation с flagged as homoglyph.
    Reasoning

    Cyrillic с is the standard abbreviation for секунди in a style guide; benign natural-language text.

  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.95 Ukrainian conjunction і flagged as homoglyph.
    Reasoning

    Cyrillic і is the regular Ukrainian conjunction 'і' ('and'); the finding is a false positive on legitimate translated prose.

  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
    dismissed LLM, confidence 0.95 Ukrainian letter а in prose flagged as homoglyph.
    Reasoning

    Cyrillic а is ordinary Ukrainian text in a style-guide sentence about declining Latin-script words; no code or identifier involved.

  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.90 Truncated example JWT assertion in an OAuth jwt-bearer documentation snippet.
    Reasoning

    The blob is a truncated JWT header (eyJhbGciOi... is a standard JWT prefix) followed by '...' in a documentation example of a jwt-bearer token request; it is illustrative, not a 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.90 Truncated example JWT assertion in a translated OAuth documentation snippet.
    Reasoning

    Same truncated example JWT assertion in a translated OAuth documentation page; illustrative and benign.

  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.90 Truncated example JWT assertion in a translated OAuth documentation snippet.
    Reasoning

    Same truncated example JWT assertion in a translated OAuth documentation page; illustrative content with no executable payload.

  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.85 Version-probe subprocess call using shell=True in an MCP CLI helper.
    Reasoning

    The shell=True call runs a loop variable cmd with a fixed --version argument to probe installed tools; it is a mild risk pattern but the command is a constant-style probe, not an obfuscated or malicious dropper. Shell use with a list argument is poor practice but common in CLI tooling.

  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"],
    dismissed LLM, confidence 0.95 Base64-encoded 1x1 PNG used as test icon data.
    Reasoning

    A base64-encoded 1x1 PNG data URI in a unit test for icon metadata; a standard, benign test fixture.

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.1.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 .