support logging to stderr in Jupyter Notebook Environments.
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 58/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- jupyter-notebook, python
- Ambito
- backend, cli, developer-experience
Direzione di ricerca
Inizia da stdio_client e dalla sua chiamata a anyio.open_process, quindi confronta il funzionamento della gestione esistente di stdout e stdin con process.stderr. L'attività è completata quando gli errori del server sono visibili nei notebook Jupyter o IPython, mentre stderr mantiene il suo comportamento normale altrove, anche quando il processo fallisce o il comando non è valido.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Is your feature request related to a problem? Please describe.
I want to make mcp python-sdk jupyter notebook compatible. When running in a notebook environment, MCP work but do not output stderr as it does normally.
For instance in jupyter notebook:
import mcp
import os
from mcp.client.stdio import stdio_client
serverparams = mcp.StdioServerParameters(
command="uv",
args=["--quiet", "run", "../src/echo.py"],
env={"UV_PYTHON": "3.12", **os.environ},
)
async with stdio_client(serverparams) as (read, write):
async with mcp.ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
print(tools)
Outputs:
meta=None nextCursor=None tools=[Tool(name='echo_tool', description='Echo the input text\n\n Args:\n text (str): The text to echo\n\n Returns:\n str: The echoed text\n ', inputSchema={'properties': {'text': {'title': 'Text', 'type': 'string'}}, 'required': ['text'], 'title': 'echo_toolArguments', 'type': 'object'})]
while running the server without jupyter notebook:
❯ uv run --quiet src/echo.py
starting echo server
stderr is correctly displayed.
This is a big problem mostly because if the server is crashing or the command is wrong you have no way to know what's wrong: nothing is logged and the jupyter notebook cell just hangs.
Describe the solution you'd like
I found the culprit being the use of:
process = await anyio.open_process(
[server.command, *server.args],
env=server.env if server.env is not None else get_default_environment(),
stderr=sys.stderr,
)
In particular sys.stderr here is not working in the jupyter / ipython context. Instead I would suggest a working change as follow:
- remove the stderr params from the process and handle process.stderr in an async function as stdout / stdin is handled.
- to that effect, use a
stderr_readerasync function like the following:
async def stderr_reader():
assert process.stderr, "Opened process is missing stderr"
try:
async for line in process.stderr:
if is_jupyter_notebook():
print(f"\033[91m {line.decode().strip()}")
else:
# redirect to stderr as before
print(line.decode().strip(), file=sys.stderr)
except anyio.ClosedResourceError:
await anyio.lowlevel.checkpoint()
This would result in the same behavior as before while allowing the stderr to be logged in the jupyter notebook context.
Additional context
Jupyter notebook support support is also requested for mcpadapt which bring MCP server tools in any agentic framework, as many agentic framework demonstrate usage in jupyter notebooks.
https://github.com/grll/mcpadapt
- Lingua principale
- Python
- Stelle
- 24.3k
- Fork
- 4k
- Merge medio
- 1g 1h
- PR unite (30g)
- 31
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di modelcontextprotocol/python-sdk
-
v1 v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
modelcontextprotocol/python-sdk#3546 · 4 commenti ·
-
v1 v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
modelcontextprotocol/python-sdk#3545 · 1 commento ·
-
v1 v2
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 91/100
modelcontextprotocol/python-sdk#3508 · 2 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
modelcontextprotocol/python-sdk#3504 ·
-
v1 v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
modelcontextprotocol/python-sdk#3492 · 1 commento ·
Tutte le issue di modelcontextprotocol/python-sdk
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
zostera/django-bootstrap4#894 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
use-agent-os/agent-os#3276 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
NousResearch/hermes-agent#117848 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
zilliztech/memsearch#759 ·