fc-client-docker 0.9.2__tar.gz → 0.9.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/PKG-INFO +1 -1
  2. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client_docker.egg-info/PKG-INFO +1 -1
  3. fc_client_docker-0.9.3/fc_common/VERSION +1 -0
  4. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/README.md +25 -0
  5. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/mcp_server.py +29 -1
  6. fc_client_docker-0.9.2/fc_common/VERSION +0 -1
  7. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/.QualityGate +0 -0
  8. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/.github/workflows/main.yml +0 -0
  9. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/.gitignore +0 -0
  10. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/.pylintrc +0 -0
  11. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/.python-version +0 -0
  12. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/.readthedocs.yaml +0 -0
  13. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/LICENSE +0 -0
  14. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/README.rst +0 -0
  15. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/SCR-fc.txt +0 -0
  16. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/ci/black.sh +0 -0
  17. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/ci/docker.sh +0 -0
  18. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/ci/package.sh +0 -0
  19. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/ci/publish_docker.sh +0 -0
  20. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/ci/pylint.sh +0 -0
  21. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/ci/pytest.sh +0 -0
  22. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/ci/setup.sh +0 -0
  23. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/Makefile +0 -0
  24. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/conf.py +0 -0
  25. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/configuration.rst +0 -0
  26. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/css/css-style.css +0 -0
  27. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/images/architecture.svg +0 -0
  28. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/images/era.svg +0 -0
  29. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/images/fc.png +0 -0
  30. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/images/flowchart.svg +0 -0
  31. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/images/principle.svg +0 -0
  32. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/index.rst +0 -0
  33. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/make.bat +0 -0
  34. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/overview.rst +0 -0
  35. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/quickstart.rst +0 -0
  36. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/support.rst +0 -0
  37. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/doc/usage.rst +0 -0
  38. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_client/Dockerfile +0 -0
  39. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_client/fc-agent +0 -0
  40. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_client/fc-client +0 -0
  41. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_guarder/Dockerfile +0 -0
  42. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_guarder/docker-compose.yaml +0 -0
  43. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_guarder/entrypoint.sh +0 -0
  44. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_guarder/sample.env +0 -0
  45. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_server/Dockerfile +0 -0
  46. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_server/docker-compose.yaml +0 -0
  47. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/docker/fc_server/entrypoint.sh +0 -0
  48. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_agent/agent.py +0 -0
  49. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client/client.py +0 -0
  50. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client/sample_client.env +0 -0
  51. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client_daemon/client_daemon.py +0 -0
  52. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client_docker/__init__.py +0 -0
  53. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client_docker/fc_client_docker +0 -0
  54. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client_docker.egg-info/SOURCES.txt +0 -0
  55. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client_docker.egg-info/dependency_links.txt +0 -0
  56. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client_docker.egg-info/entry_points.txt +0 -0
  57. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_client_docker.egg-info/top_level.txt +0 -0
  58. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_common/__init__.py +0 -0
  59. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_common/config.py +0 -0
  60. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_common/etcd.py +0 -0
  61. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_common/logger.py +0 -0
  62. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_common/version.py +0 -0
  63. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_guarder/guarder.py +0 -0
  64. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/__init__.py +0 -0
  65. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/mcp_base.py +0 -0
  66. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/mcp_plugins/__init__.py +0 -0
  67. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/mcp_plugins/external/__init__.py +0 -0
  68. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/mcp_plugins/external/uboot_mcp.py +0 -0
  69. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/mcp_plugins/external/uuu_bcu_mcp.py +0 -0
  70. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/mcp_plugins/internal/__init__.py +0 -0
  71. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_mcp/mcp_plugins/internal/fc_mcp.py +0 -0
  72. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/__init__.py +0 -0
  73. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/config/sample_cfg.yaml +0 -0
  74. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/config/sample_lavacli.yaml +0 -0
  75. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/config/sample_resource.yaml +0 -0
  76. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/core/__init__.py +0 -0
  77. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/core/api_svr.py +0 -0
  78. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/core/config.py +0 -0
  79. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/core/coordinator.py +0 -0
  80. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/core/decorators.py +0 -0
  81. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/core/plugin.py +0 -0
  82. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/management/__init__.py +0 -0
  83. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/management/cmd_online_lava_devices.py +0 -0
  84. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/management/common.py +0 -0
  85. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/plugins/__init__.py +0 -0
  86. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/plugins/labgrid.py +0 -0
  87. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/plugins/lava.py +0 -0
  88. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/plugins/utils/__init__.py +0 -0
  89. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/plugins/utils/labgrid.py +0 -0
  90. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/plugins/utils/lava.py +0 -0
  91. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/server.py +0 -0
  92. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server/tools/cache_helper.py +0 -0
  93. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server_daemon/__init__.py +0 -0
  94. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/fc_server_daemon/server_daemon.py +0 -0
  95. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/requirements/agent-requirements.txt +0 -0
  96. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/requirements/ci-requirements.txt +0 -0
  97. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/requirements/client-requirements.txt +0 -0
  98. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/requirements/doc-requirements.txt +0 -0
  99. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/requirements/server-requirements.txt +0 -0
  100. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/requirements.txt +0 -0
  101. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/setup.cfg +0 -0
  102. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/setup.py +0 -0
  103. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/conftest.py +0 -0
  104. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_client/test_client.py +0 -0
  105. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_guarder/conftest.py +0 -0
  106. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_guarder/test_guarder.py +0 -0
  107. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_server/config/cfg.yaml +0 -0
  108. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_server/conftest.py +0 -0
  109. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_server/test_config.py +0 -0
  110. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_server/test_coordinator.py +0 -0
  111. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_server/test_misc.py +0 -0
  112. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_server/test_plugin_labgrid.py +0 -0
  113. {fc_client_docker-0.9.2 → fc_client_docker-0.9.3}/tests/fc_server/test_plugin_lava.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fc_client_docker
3
- Version: 0.9.2
3
+ Version: 0.9.3
4
4
  Summary: Dockerized wrapper for the FC client
5
5
  Home-page: https://github.com/NXP/fc
6
6
  Author: Larry Shen
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fc_client_docker
3
- Version: 0.9.2
3
+ Version: 0.9.3
4
4
  Summary: Dockerized wrapper for the FC client
5
5
  Home-page: https://github.com/NXP/fc
6
6
  Author: Larry Shen
@@ -0,0 +1 @@
1
+ 0.9.3
@@ -77,6 +77,7 @@ in containers/services without CLI arguments. CLI flags take precedence.
77
77
  | `--host` | `FC_MCP_HOST` | `127.0.0.1` | Bind host (HTTP transport only). |
78
78
  | `--port` | `FC_MCP_PORT` | `8000` | Bind port (HTTP transport only). |
79
79
  | `--path` | `FC_MCP_PATH` | `/mcp` | URL path the MCP endpoint is served on (HTTP only).|
80
+ | `--workdir` | `FC_MCP_WORKDIR` | _(unset)_ | Working directory for the server. Created automatically if missing. Supports `~`/`$VAR`. |
80
81
  | _(none)_ | `FC_MCP_AUTH_TOKEN` | _(unset)_ | Static Bearer token for HTTP transport (env only). |
81
82
 
82
83
  Example using environment variables:
@@ -89,6 +90,30 @@ fc-mcp
89
90
  # -> http://0.0.0.0:9000/mcp
90
91
  ```
91
92
 
93
+ ### Working directory
94
+
95
+ By default the server runs in whatever directory the launching process is in
96
+ (for stdio this is the MCP client's working directory). Set `FC_MCP_WORKDIR`
97
+ to force a specific working directory. This is where generated artifacts (for
98
+ example flash/U-Boot helper scripts) are written.
99
+
100
+ - The directory is created automatically (including parent directories) if it
101
+ does not exist.
102
+ - `~` and `$VAR` are expanded, so a shared config works per user. For shell
103
+ configs prefer `$HOME/...` (the shell expands it at assignment); the server
104
+ also expands `~`/`$VAR` itself as a fallback, so both resolve to the running
105
+ user's home directory.
106
+ - If the directory cannot be created or entered (permissions, path is a file),
107
+ a warning is printed and the current directory is kept, so startup is never
108
+ blocked.
109
+
110
+ ```bash
111
+ # Any of these resolve to the running user's home-based directory:
112
+ export FC_MCP_WORKDIR="$HOME/fc_mcp_work" # recommended (shell expands $HOME)
113
+ export FC_MCP_WORKDIR="~/fc_mcp_work" # expanded by the server
114
+ fc-mcp
115
+ ```
116
+
92
117
  ## Authentication (HTTP transport)
93
118
 
94
119
  By default the HTTP endpoint is **unauthenticated** — anyone who can reach
@@ -144,17 +144,42 @@ def _default_idle_timeout():
144
144
  return 3600
145
145
 
146
146
 
147
+ def _apply_workdir(workdir):
148
+ """Change cwd to FC_MCP_WORKDIR/--workdir, creating it if needed."""
149
+ if not workdir:
150
+ return
151
+
152
+ path = os.path.abspath(os.path.expanduser(os.path.expandvars(workdir)))
153
+ try:
154
+ os.makedirs(path, exist_ok=True)
155
+ os.chdir(path)
156
+ print(f"FC MCP working directory set to: {path}", file=sys.stderr)
157
+ except OSError as exce:
158
+ print(f"Warning: cannot use workdir '{path}': {exce}", file=sys.stderr)
159
+
160
+
147
161
  def parse_args():
148
162
  """Parse command line arguments for transport selection.
149
163
 
150
164
  Environment variables provide the defaults so the server can be
151
165
  configured in containerized/service deployments without CLI flags:
152
- FC_MCP_TRANSPORT, FC_MCP_HOST, FC_MCP_PORT, FC_MCP_PATH, FC_MCP_IDLE_TIMEOUT
166
+ FC_MCP_TRANSPORT, FC_MCP_HOST, FC_MCP_PORT, FC_MCP_PATH,
167
+ FC_MCP_IDLE_TIMEOUT, FC_MCP_WORKDIR
153
168
  """
154
169
  parser = argparse.ArgumentParser(
155
170
  prog="fc-mcp",
156
171
  description="FC MCP Server (supports stdio and streamable HTTP transports).",
157
172
  )
173
+ parser.add_argument(
174
+ "--workdir",
175
+ default=os.environ.get("FC_MCP_WORKDIR"),
176
+ help=(
177
+ "Working directory for the server. Created automatically if it "
178
+ "does not exist. Supports '~' and '$VAR' expansion. "
179
+ "Env: FC_MCP_WORKDIR."
180
+ ),
181
+ )
182
+
158
183
  parser.add_argument(
159
184
  "--transport",
160
185
  choices=["stdio", "http"],
@@ -231,10 +256,13 @@ def _configure_http_auth():
231
256
  def main():
232
257
  args = parse_args()
233
258
 
259
+ _apply_workdir(args.workdir)
260
+
234
261
  if args.transport == "http":
235
262
  # Streamable HTTP transport for remote/third-party MCP clients.
236
263
  # Clients connect to http://<host>:<port><path>, e.g. http://127.0.0.1:8000/mcp
237
264
  Logger.init("fc_mcp", log_name="mcp_server.log")
265
+
238
266
  _configure_http_auth()
239
267
 
240
268
  idle_monitor = None
@@ -1 +0,0 @@
1
- 0.9.2