modelcontextprotocol / modelcontextprotocol/python-sdk

tests/client/test_client.py: 14 failures on Windows — AttributeError: '...Result' object has no attribute '_meta'

Aperta
#3,544 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Python
Stelle
24.3k
Fork
4k
Merge medio
1g 1h
PR unite (30g)
31

Descrizione

Initial Checks
Release line

2.x (current stable)

Description

On a clean checkout of main, tests/client/test_client.py fails with 14 errors of the form AttributeError: 'CallToolResult' object has no attribute '_meta'. Did you mean: 'meta'?

The snapshots pass the wire name (snapshot(CallToolResult(_meta={...}))), but inline_snapshot's generic_call_adapter.argument() does a plain getattr(value, '_meta') and the pydantic model exposes the field as meta. The data is there — the repr shows meta={'io.modelcontextprotocol/serverInfo': ...}.

I'd expect the test suite to pass on a fresh clone with locked dependencies.

Ruled out: unlocked dependency resolution (reproduced with --frozen and --no-sync), Python version (3.12.14 and 3.14.2 both fail), and a non-ASCII checkout path (reproduces under a plain ASCII path too).

I only have Windows to test on, so I don't know whether this reproduces on Linux or macOS. If CI is green, the difference is presumably platform-specific and I'm happy to run whatever would help narrow it down.

┃ File ┃ Function ┃ Function Line ┃ Error Line ┃ Error ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
│ tests\client\test_client.py │ test_client_with_simple_server │ 133 │ │ │
│ tests\client\test_client.py │ test_client_list_tools │ 151 │ │ │
│ tests\client\test_client.py │ test_client_call_tool │ 179 │ │ │
│ tests\client\test_client.py │ test_read_resource │ 191 │ │ │
│ tests\client\test_client.py │ test_get_prompt │ 272 │ │ │
│ tests\client\test_client.py │ test_client_list_resources_wi… │ 339 │ │ │
│ tests\client\test_client.py │ test_client_list_resource_tem… │ 358 │ │ │
│ tests\client\test_client.py │ test_list_prompts │ 369 │ │ │
│ tests\client\test_client.py │ test_complete_with_prompt_ref… │ 387 │ │ │
│ tests\client\test_client.py │ test_call_tool_auto_loop_disp… │ 768 │ 797 │ AttributeError │
│ tests\client\test_client.py │ test_call_tool_auto_loop_disp… │ 810 │ 846 │ AttributeError │
│ tests\client\test_client.py │ test_call_tool_auto_loop_disp… │ 857 │ 881 │ AttributeError │
│ tests\client\test_client.py │ test_get_prompt_auto_loop_res… │ 945 │ 968 │ AttributeError │
│ tests\client\test_client.py │ test_read_resource_auto_loop_… │ 976 │ 999 │ AttributeError

Example Code
┃  File                         ┃  Function                        ┃  Function Line  ┃  Error Line  ┃  Error           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
│  tests\client\test_client.py  │  test_client_with_simple_server  │  133            │              │                  │
│  tests\client\test_client.py  │  test_client_list_tools          │  151            │              │                  │
│  tests\client\test_client.py  │  test_client_call_tool           │  179            │              │                  │
│  tests\client\test_client.py  │  test_read_resource              │  191            │              │                  │
│  tests\client\test_client.py  │  test_get_prompt                 │  272            │              │                  │
│  tests\client\test_client.py  │  test_client_list_resources_wi…  │  339            │              │                  │
│  tests\client\test_client.py  │  test_client_list_resource_tem…  │  358            │              │                  │
│  tests\client\test_client.py  │  test_list_prompts               │  369            │              │                  │
│  tests\client\test_client.py  │  test_complete_with_prompt_ref…  │  387            │              │                  │
│  tests\client\test_client.py  │  test_call_tool_auto_loop_disp…  │  768            │  797         │  AttributeError  │
│  tests\client\test_client.py  │  test_call_tool_auto_loop_disp…  │  810            │  846         │  AttributeError  │
│  tests\client\test_client.py  │  test_call_tool_auto_loop_disp…  │  857            │  881         │  AttributeError  │
│  tests\client\test_client.py  │  test_get_prompt_auto_loop_res…  │  945            │  968         │  AttributeError  │
│  tests\client\test_client.py  │  test_read_resource_auto_loop_…  │  976            │  999         │  AttributeError

git clone https://github.com/modelcontextprotocol/python-sdk.git
cd python-sdk
uv sync --frozen --all-extras --dev
uv run --no-sync pytest tests/client/test_client.py -q

# → 14 failed, 33 passed
Python & MCP Python SDK
Python 3.12.14 (also reproduced on 3.14.2)
mcp 2.2.1.dev1+6affe5c0 (source checkout of main, commit 6affe5c0)
inline_snapshot 0.28.0, pydantic 2.12.5 (both from uv.lock)
uv 0.12.16
Windows 11, PowerShell

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia eseguendo uv run --no-sync pytest tests/client/test_client.py -q su Windows con le dipendenze bloccate. Leggi i casi che falliscono in tests/client/test_client.py e confronta i relativi argomenti dello snapshot di CallToolResult con il comportamento segnalato di meta/_meta. Il lavoro è completato quando i 14 fallimenti sono risolti e il file di test del client passa senza indebolire i risultati attesi.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
testing
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Attiva
Chiarezza
Specificata chiaramente
Idoneità per principianti
75/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.