From 5c707e7629cb7310e626f1cf9881a73131027f90 Mon Sep 17 00:00:00 2001 From: sim Date: Sat, 17 Oct 2026 15:06:23 +0900 Subject: [PATCH] docs(mcp): READMEs say where Fortran unit 6 output goes under the fd isolation The logging FAQ of tr / tot / ti / wr / wrx_mcp (and a new Logs section of eq_mcp's README) now say that the library's WRITE(6,...) lands on stderr because main() redirects fd 1 (#257 / #263), that a merged stdout/stderr (a terminal, 2>&1) discards it with one warning line, and how to keep it (2>server.log). Suggested by the docs review of #263. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01TA2KahTs3qLMZL6yjSsWwT --- python/mcp-servers/eq_mcp/README.md | 14 ++++++++++++++ python/mcp-servers/ti_mcp/README.md | 2 ++ python/mcp-servers/tot_mcp/README.md | 2 ++ python/mcp-servers/tr_mcp/README.md | 2 ++ python/mcp-servers/wr_mcp/README.md | 2 ++ python/mcp-servers/wrx_mcp/README.md | 2 ++ 6 files changed, 24 insertions(+) diff --git a/python/mcp-servers/eq_mcp/README.md b/python/mcp-servers/eq_mcp/README.md index 258fbd0cd..232156ef1 100644 --- a/python/mcp-servers/eq_mcp/README.md +++ b/python/mcp-servers/eq_mcp/README.md @@ -46,6 +46,20 @@ Register in `claude_desktop_config.json` (or `claude mcp add task-eq …`): } ``` +## Logs + +The server's stderr is what the client shows (Claude Desktop's log viewer, +or the terminal under Claude Code). The library's `WRITE(6,...)` (unit 6, +fd 1) goes there too: fd 1 is the JSON-RPC pipe of a stdio server, so +`main()` hands fd 1 to stderr through the shared `python/_fd_isolation.py` +right before the server is built (#227 / #257 / #263). When stdout and +stderr are the same file (a server started by hand in a terminal, or +`2>&1`), unit 6 output is discarded and one warning line says so on +stderr; give the server a stderr of its own to keep it +(`python -m eq_mcp.server 2>server.log`). The same-file test uses the +`fstat` inode, so on Windows, where a pipe or console has none, a merged +stream is not recognised and fd 1 goes to stderr as usual. + ## Tools | Tool | Purpose | diff --git a/python/mcp-servers/ti_mcp/README.md b/python/mcp-servers/ti_mcp/README.md index c58c7bd87..6198a2622 100644 --- a/python/mcp-servers/ti_mcp/README.md +++ b/python/mcp-servers/ti_mcp/README.md @@ -298,6 +298,8 @@ TI の Fortran 側は COMMON-block 単一状態なので、1 プロセス = 1 MCP サーバの標準エラー出力が LLM クライアントに渡ります。Claude Desktop なら「開発者ツール」相当のログビューア、Claude Code なら実行ターミナルで確認できます。 +Fortran 側の `WRITE(6,...)`(unit 6 = fd 1)も同じ標準エラー出力に流れます。stdio サーバでは fd 1 が JSON-RPC の送信パイプなので、`main()` がサーバ構築の直前に共有モジュール `python/_fd_isolation.py` で fd 1 を stderr に付け替えています(#227 / #257 / #263)。端末で手動起動したときや `2>&1` で stdout と stderr が同じファイルになっているときは、unit 6 の出力は捨てられ、その旨の警告が stderr に 1 行出ます(同一ファイルの判定は `fstat` の inode によるので、パイプやコンソールに inode が無い Windows では判定されず、fd 1 は通常どおり stderr に向きます)。ライブラリの出力を残したい場合は stderr を別に渡してください(例: `python -m ti_mcp.server 2>server.log`)。 + ## 9. 参考資料 - MCP spec: diff --git a/python/mcp-servers/tot_mcp/README.md b/python/mcp-servers/tot_mcp/README.md index 28982361a..83919fbaf 100644 --- a/python/mcp-servers/tot_mcp/README.md +++ b/python/mcp-servers/tot_mcp/README.md @@ -394,6 +394,8 @@ TOT のバックエンドは Fortran COMMON-block を使った単一状態なの MCP サーバの標準エラー出力が LLM クライアントに渡ります。Claude Desktop なら「開発者ツール」相当のログビューア、Claude Code なら実行ターミナルで確認できます。 +Fortran 側の `WRITE(6,...)`(unit 6 = fd 1)も同じ標準エラー出力に流れます。stdio サーバでは fd 1 が JSON-RPC の送信パイプなので、`main()` がサーバ構築の直前に共有モジュール `python/_fd_isolation.py` で fd 1 を stderr に付け替えています(#227 / #257 / #263)。端末で手動起動したときや `2>&1` で stdout と stderr が同じファイルになっているときは、unit 6 の出力は捨てられ、その旨の警告が stderr に 1 行出ます(同一ファイルの判定は `fstat` の inode によるので、パイプやコンソールに inode が無い Windows では判定されず、fd 1 は通常どおり stderr に向きます)。ライブラリの出力を残したい場合は stderr を別に渡してください(例: `python -m tot_mcp.server 2>server.log`)。 + ## 10. 参考資料 - MCP spec: diff --git a/python/mcp-servers/tr_mcp/README.md b/python/mcp-servers/tr_mcp/README.md index d264a366d..8f97bd5fd 100644 --- a/python/mcp-servers/tr_mcp/README.md +++ b/python/mcp-servers/tr_mcp/README.md @@ -291,6 +291,8 @@ TR の Fortran 側は COMMON-block 単一状態なので、1 プロセス = 1 MCP サーバの標準エラー出力が LLM クライアントに渡ります。Claude Desktop なら「開発者ツール」相当のログビューア、Claude Code なら実行ターミナルで確認できます。 +Fortran 側の `WRITE(6,...)`(unit 6 = fd 1)も同じ標準エラー出力に流れます。stdio サーバでは fd 1 が JSON-RPC の送信パイプなので、`main()` がサーバ構築の直前に共有モジュール `python/_fd_isolation.py` で fd 1 を stderr に付け替えています(#227 / #257 / #263)。端末で手動起動したときや `2>&1` で stdout と stderr が同じファイルになっているときは、unit 6 の出力は捨てられ、その旨の警告が stderr に 1 行出ます(同一ファイルの判定は `fstat` の inode によるので、パイプやコンソールに inode が無い Windows では判定されず、fd 1 は通常どおり stderr に向きます)。ライブラリの出力を残したい場合は stderr を別に渡してください(例: `python -m tr_mcp.server 2>server.log`)。 + ## 9. 参考資料 - MCP spec: diff --git a/python/mcp-servers/wr_mcp/README.md b/python/mcp-servers/wr_mcp/README.md index d9bbb0f44..5e7a4b203 100644 --- a/python/mcp-servers/wr_mcp/README.md +++ b/python/mcp-servers/wr_mcp/README.md @@ -303,6 +303,8 @@ WR の Fortran 側は COMMON-block 単一状態なので、1 プロセス = 1 MCP サーバの標準エラー出力が LLM クライアントに渡ります。Claude Desktop なら「開発者ツール」相当のログビューア、Claude Code なら実行ターミナルで確認できます。 +Fortran 側の `WRITE(6,...)`(unit 6 = fd 1)も同じ標準エラー出力に流れます。stdio サーバでは fd 1 が JSON-RPC の送信パイプなので、`main()` がサーバ構築の直前に共有モジュール `python/_fd_isolation.py` で fd 1 を stderr に付け替えています(#227 / #257 / #263)。端末で手動起動したときや `2>&1` で stdout と stderr が同じファイルになっているときは、unit 6 の出力は捨てられ、その旨の警告が stderr に 1 行出ます(同一ファイルの判定は `fstat` の inode によるので、パイプやコンソールに inode が無い Windows では判定されず、fd 1 は通常どおり stderr に向きます)。ライブラリの出力を残したい場合は stderr を別に渡してください(例: `python -m wr_mcp.server 2>server.log`)。 + ## 9. 参考資料 - MCP spec: diff --git a/python/mcp-servers/wrx_mcp/README.md b/python/mcp-servers/wrx_mcp/README.md index 03b09ec45..8ef6bffe8 100644 --- a/python/mcp-servers/wrx_mcp/README.md +++ b/python/mcp-servers/wrx_mcp/README.md @@ -354,6 +354,8 @@ WRX の Fortran 側は COMMON-block 単一状態なので、1 プロセス = 1 MCP サーバの標準エラー出力が LLM クライアントに渡ります。Claude Desktop なら「開発者ツール」相当のログビューア、Claude Code なら実行ターミナルで確認できます。 +Fortran 側の `WRITE(6,...)`(unit 6 = fd 1)も同じ標準エラー出力に流れます。stdio サーバでは fd 1 が JSON-RPC の送信パイプなので、`main()` がサーバ構築の直前に共有モジュール `python/_fd_isolation.py` で fd 1 を stderr に付け替えています(#227 / #257 / #263)。端末で手動起動したときや `2>&1` で stdout と stderr が同じファイルになっているときは、unit 6 の出力は捨てられ、その旨の警告が stderr に 1 行出ます(同一ファイルの判定は `fstat` の inode によるので、パイプやコンソールに inode が無い Windows では判定されず、fd 1 は通常どおり stderr に向きます)。ライブラリの出力を残したい場合は stderr を別に渡してください(例: `python -m wrx_mcp.server 2>server.log`)。 + ## 10. 参考資料 - MCP spec: