diff --git a/python/mcp-servers/eq_mcp/README.md b/python/mcp-servers/eq_mcp/README.md index 258fbd0c..232156ef 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 c58c7bd8..6198a262 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 28982361..83919fba 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 d264a366..8f97bd5f 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 d9bbb0f4..5e7a4b20 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 03b09ec4..8ef6bffe 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: