c65f1698ae
El .mcp.json generado ahora apunta al wrapper jupyter_mcp_serve.sh con env overrides (JUPYTER_MCP_VENV/ROOT/PORT/TOKEN) en vez del console-script jupyter-mcp-server directo. Antes: el .mcp.json solo CONECTABA a un Jupyter ya existente y, si se abria Claude desde la raiz del repo, el MCP usaba el venv canonico python/.venv (sin las deps del analisis). Ahora el wrapper arranca (o reusa) un Jupyter con el venv del propio analisis, asi que abrir Claude desde el directorio del analisis basta y cada analisis ejecuta con sus dependencias sin contaminar python/.venv. Bump v1.2.0. Declara dependencia jupyter_mcp_serve_bash_infra. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.4 KiB
4.4 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| write_mcp_jupyter_config | function | bash | infra | 1.2.0 | impure | write_mcp_jupyter_config([project_dir: string], [port: int]) -> string | Genera o actualiza .mcp.json para un analisis Jupyter. La entrada jupyter usa el wrapper jupyter_mcp_serve.sh con env overrides (venv, root y puerto del analisis), de modo que el MCP arranca su propio Jupyter con el venv del analisis. Merge con jq reemplazando la entrada jupyter entera. |
|
|
false | error_go_core |
|
ruta del archivo .mcp.json generado o actualizado | false | bash/functions/infra/write_mcp_jupyter_config.sh |
Ejemplo
source write_mcp_jupyter_config.sh
path=$(write_mcp_jupyter_config $HOME/fn_registry/analysis/finanzas 8890)
echo "Config MCP en: $path"
# Genera .mcp.json con:
# "command": "bash"
# "args": [".../bash/functions/infra/jupyter_mcp_serve.sh"]
# "env": {
# "JUPYTER_MCP_VENV": ".../analysis/finanzas/.venv",
# "JUPYTER_MCP_ROOT": ".../analysis/finanzas",
# "JUPYTER_MCP_PORT": "8890",
# "JUPYTER_MCP_TOKEN": ""
# }
Cuando usarla
- Al crear un analysis Jupyter nuevo (la usa el pipeline
init_jupyter_analysis). - Tras mover/recrear un venv y necesitar regenerar el
.mcp.jsondel analysis. - Para reparar un
.mcp.jsoncon el comando viejo (console-script directo que no arranca Jupyter, opython -m jupyter_mcp_server.server).
Gotchas
- Usa el wrapper, no el console-script directo: el
.mcp.jsonapunta ajupyter_mcp_serve.sh(verjupyter_mcp_serve_bash_infra), que arranca (o reusa) el Jupyter del analisis con su venv antes de exec del MCP. Con el console-script directo (jupyter-mcp-server --jupyter-url ...) el MCP solo se CONECTA: si el server no esta levantado no hay kernel y las operaciones sobre notebooks fallan. Con el wrapper basta abrir Claude desde el analisis — no hace falta lanzarrun-jupyter-lab.shaparte. - El venv del kernel es el del analisis (
JUPYTER_MCP_VENV), nopython/.venvdel repo. Asi cada analisis ejecuta con sus propias dependencias sin contaminar el venv canonico. Este fix nacio de un caso real (analisisnats): trabajar desde la raiz defn_registrycargaba el MCP global (8899, venvpython/.venv) que no tenianats-py. - Reuso por puerto: si ya hay un Jupyter escuchando en
JUPYTER_MCP_PORT(p.ej. lanzado porrun-jupyter-lab.sh, que es colaborativo), el wrapper lo reusa en vez de arrancar otro. Si no hay ninguno, el wrapper levanta uno propio (sin--collaborative, suficiente para el MCP). Para colaboracion humana en tiempo real, lanzarrun-jupyter-lab.shantes. - NUNCA
python -m jupyter_mcp_server.server—server.pyno tiene bloque__main__; importa y sale 0, el MCP nunca arranca. El entrypoint real es el console-scriptjupyter-mcp-server, que el wrapper localiza dentro del venv del analisis. - Requiere
jupyter-mcp-serverinstalado en el venv del analisis:uv pip install jupyter-mcp-server. La funcion aborta si el console-script no existe. - Localiza el wrapper subiendo directorios desde
project_dir(hasta 8 niveles) buscandobash/functions/infra/jupyter_mcp_serve.sh; si no lo encuentra, usaFN_REGISTRY_ROOT. Aborta si no aparece por ninguna via. - Merge con jq usa
+(shallow) en el mapa de servidores para reemplazar la entradajupyterentera;*(deep) dejaba keys huerfanas de configs viejas (p.ej. el bloqueargsdel console-script directo).
Capability growth log
- v1.2.0 (2026-06-03) — el
.mcp.jsongenerado usa el wrapperjupyter_mcp_serve.shcon env overrides (JUPYTER_MCP_VENV/ROOT/PORT/TOKEN) en vez del console-script directo. Garantiza que el MCP arranca su propio Jupyter con el venv del analisis (antes solo conectaba y usaba el venv equivocado si se abria Claude desde la raiz del repo). Declara dependenciajupyter_mcp_serve_bash_infra. - v1.1.0 (2026-05-28) — fix comando roto: console-script
jupyter-mcp-server+ flags stdio en vez depython -m ...server+ env vars. Merge+para reemplazar entrada entera. Tagnotebook.