claude-team-mcp 0.9.0__py3-none-any.whl → 0.9.1__py3-none-any.whl

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.
@@ -35,7 +35,7 @@ def register_tools(mcp: FastMCP, ensure_connection) -> None:
35
35
  iterm_session_id: str | None = None,
36
36
  tmux_pane_id: str | None = None,
37
37
  session_name: str | None = None,
38
- max_age: int = 3600,
38
+ max_age: int | None = 3600,
39
39
  ) -> dict:
40
40
  """
41
41
  Adopt an existing terminal Claude Code or Codex session into the MCP registry.
@@ -53,6 +53,9 @@ def register_tools(mcp: FastMCP, ensure_connection) -> None:
53
53
  Returns:
54
54
  Dict with adopted worker info, or error if session not found
55
55
  """
56
+ # Handle None values from MCP clients that send explicit null for omitted params
57
+ max_age = max_age if max_age is not None else 3600
58
+
56
59
  app_ctx = ctx.request_context.lifespan_context
57
60
  registry = app_ctx.registry
58
61
 
@@ -133,7 +133,7 @@ def register_tools(mcp: FastMCP) -> None:
133
133
  async def close_workers(
134
134
  ctx: Context[ServerSession, "AppContext"],
135
135
  session_ids: list[str],
136
- force: bool = False,
136
+ force: bool | None = False,
137
137
  ) -> dict:
138
138
  """
139
139
  Close one or more managed Claude Code sessions.
@@ -163,6 +163,9 @@ def register_tools(mcp: FastMCP) -> None:
163
163
  - success_count: Number of sessions closed successfully
164
164
  - failure_count: Number of sessions that failed to close
165
165
  """
166
+ # Handle None values from MCP clients that send explicit null for omitted params
167
+ force = force if force is not None else False
168
+
166
169
  app_ctx = ctx.request_context.lifespan_context
167
170
  registry = app_ctx.registry
168
171
  backend = app_ctx.terminal_backend
@@ -33,7 +33,7 @@ def register_tools(mcp: FastMCP, ensure_connection) -> None:
33
33
  @mcp.tool()
34
34
  async def discover_workers(
35
35
  ctx: Context[ServerSession, "AppContext"],
36
- max_age: int = 3600,
36
+ max_age: int | None = 3600,
37
37
  ) -> dict:
38
38
  """
39
39
  Discover existing Claude Code and Codex sessions running in the active terminal backend.
@@ -69,6 +69,9 @@ def register_tools(mcp: FastMCP, ensure_connection) -> None:
69
69
  - count: Total number of sessions found
70
70
  - unmanaged_count: Number not yet in registry (available to adopt)
71
71
  """
72
+ # Handle None values from MCP clients that send explicit null for omitted params
73
+ max_age = max_age if max_age is not None else 3600
74
+
72
75
  app_ctx = ctx.request_context.lifespan_context
73
76
  registry = app_ctx.registry
74
77
 
@@ -31,7 +31,7 @@ def register_tools(mcp: FastMCP) -> None:
31
31
  async def list_worktrees(
32
32
  ctx: Context[ServerSession, "AppContext"],
33
33
  repo_path: str,
34
- remove_orphans: bool = False,
34
+ remove_orphans: bool | None = False,
35
35
  ) -> dict:
36
36
  """
37
37
  List worktrees in a repository's .worktrees/ directory.
@@ -58,6 +58,9 @@ def register_tools(mcp: FastMCP) -> None:
58
58
  - orphan_count: Number of orphaned worktrees
59
59
  - removed_count: Number of orphans removed (when remove_orphans=True)
60
60
  """
61
+ # Handle None values from MCP clients that send explicit null for omitted params
62
+ remove_orphans = remove_orphans if remove_orphans is not None else False
63
+
61
64
  resolved_path = Path(repo_path).resolve()
62
65
  if not resolved_path.exists():
63
66
  return error_response(
@@ -131,8 +131,8 @@ def register_tools(mcp: FastMCP) -> None:
131
131
  ctx: Context[ServerSession, "AppContext"],
132
132
  session_ids: list[str],
133
133
  message: str,
134
- wait_mode: str = "none",
135
- timeout: float = 600.0,
134
+ wait_mode: str | None = "none",
135
+ timeout: float | None = 600.0,
136
136
  ) -> dict:
137
137
  """
138
138
  Send a message to one or more Claude Code worker sessions.
@@ -163,6 +163,10 @@ def register_tools(mcp: FastMCP) -> None:
163
163
  - all_idle: Whether all sessions are idle (only if wait_mode != "none")
164
164
  - timed_out: Whether the wait timed out (only if wait_mode != "none")
165
165
  """
166
+ # Handle None values from MCP clients that send explicit null for omitted params
167
+ wait_mode = wait_mode or "none"
168
+ timeout = timeout if timeout is not None else 600.0
169
+
166
170
  app_ctx = ctx.request_context.lifespan_context
167
171
  registry = app_ctx.registry
168
172
  backend = app_ctx.terminal_backend
@@ -122,7 +122,7 @@ def register_tools(mcp: FastMCP) -> None:
122
122
  ctx: Context[ServerSession, "AppContext"],
123
123
  since: str | None = None,
124
124
  stale_threshold_minutes: int | None = None,
125
- include_snapshots: bool = False,
125
+ include_snapshots: bool | None = False,
126
126
  ) -> dict:
127
127
  """
128
128
  Poll worker event changes since a timestamp.
@@ -144,6 +144,9 @@ def register_tools(mcp: FastMCP) -> None:
144
144
  - idle_count: Count of idle workers
145
145
  - poll_ts: Timestamp when poll was generated
146
146
  """
147
+ # Handle None values from MCP clients that send explicit null for omitted params
148
+ include_snapshots = include_snapshots if include_snapshots is not None else False
149
+
147
150
  app_ctx = ctx.request_context.lifespan_context
148
151
  registry = app_ctx.registry
149
152
 
@@ -22,8 +22,8 @@ def register_tools(mcp: FastMCP) -> None:
22
22
  async def read_worker_logs(
23
23
  ctx: Context[ServerSession, "AppContext"],
24
24
  session_id: str,
25
- pages: int = 1,
26
- offset: int = 0,
25
+ pages: int | None = 1,
26
+ offset: int | None = 0,
27
27
  ) -> dict:
28
28
  """
29
29
  Get conversation history from a Claude Code session with reverse pagination.
@@ -51,6 +51,10 @@ def register_tools(mcp: FastMCP) -> None:
51
51
  - page_info: Pagination metadata (total_messages, total_pages, etc.)
52
52
  - session_id: The session ID
53
53
  """
54
+ # Handle None values from MCP clients that send explicit null for omitted params
55
+ pages = pages if pages is not None else 1
56
+ offset = offset if offset is not None else 0
57
+
54
58
  app_ctx = ctx.request_context.lifespan_context
55
59
  registry = app_ctx.registry
56
60
 
@@ -28,9 +28,9 @@ def register_tools(mcp: FastMCP) -> None:
28
28
  async def wait_idle_workers(
29
29
  ctx: Context[ServerSession, "AppContext"],
30
30
  session_ids: list[str],
31
- mode: str = "all",
32
- timeout: float = 600.0,
33
- poll_interval: float = 2.0,
31
+ mode: str | None = "all",
32
+ timeout: float | None = 600.0,
33
+ poll_interval: float | None = 2.0,
34
34
  ) -> dict:
35
35
  """
36
36
  Wait for worker sessions to become idle.
@@ -56,6 +56,11 @@ def register_tools(mcp: FastMCP) -> None:
56
56
  - waited_seconds: How long we waited
57
57
  - timed_out: Whether we hit the timeout
58
58
  """
59
+ # Handle None values from MCP clients that send explicit null for omitted params
60
+ mode = mode or "all"
61
+ timeout = timeout if timeout is not None else 600.0
62
+ poll_interval = poll_interval if poll_interval is not None else 2.0
63
+
59
64
  app_ctx = ctx.request_context.lifespan_context
60
65
  registry = app_ctx.registry
61
66
 
@@ -193,10 +193,10 @@ def register_tools(mcp: FastMCP) -> None:
193
193
  async def worker_events(
194
194
  ctx: Context[ServerSession, "AppContext"],
195
195
  since: str | None = None,
196
- limit: int = 1000,
197
- include_snapshot: bool = False,
198
- include_summary: bool = False,
199
- stale_threshold_minutes: int = 10,
196
+ limit: int | None = 1000,
197
+ include_snapshot: bool | None = False,
198
+ include_summary: bool | None = False,
199
+ stale_threshold_minutes: int | None = 10,
200
200
  project_filter: str | None = None,
201
201
  ) -> dict:
202
202
  """
@@ -230,6 +230,12 @@ def register_tools(mcp: FastMCP) -> None:
230
230
  - last_event_ts: newest event timestamp
231
231
  - snapshot: (if include_snapshot) Latest snapshot {ts, data}
232
232
  """
233
+ # Handle None values from MCP clients that send explicit null for omitted params
234
+ limit = limit if limit is not None else 1000
235
+ include_snapshot = include_snapshot if include_snapshot is not None else False
236
+ include_summary = include_summary if include_summary is not None else False
237
+ stale_threshold_minutes = stale_threshold_minutes if stale_threshold_minutes is not None else 10
238
+
233
239
  # Parse the since timestamp if provided.
234
240
  parsed_since = None
235
241
  if since is not None and since.strip():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-team-mcp
3
- Version: 0.9.0
3
+ Version: 0.9.1
4
4
  Summary: MCP server for managing multiple Claude Code sessions via iTerm2
5
5
  Project-URL: Homepage, https://github.com/Martian-Engineering/claude-team
6
6
  Project-URL: Repository, https://github.com/Martian-Engineering/claude-team
@@ -30,26 +30,26 @@ claude_team_mcp/terminal_backends/base.py,sha256=9GrFDm-Jah8y6DALQrq8dei9UgWeZkW
30
30
  claude_team_mcp/terminal_backends/iterm.py,sha256=A5klhOpzDrZ-636aN1Hlnnfxk4OA-Rz_OuaQi1ABz0Y,9317
31
31
  claude_team_mcp/terminal_backends/tmux.py,sha256=blMb669GlGjxedOLLu35NmuZpsN74Z4bq1EmMGqO7G0,24512
32
32
  claude_team_mcp/tools/__init__.py,sha256=NrtUzCC5Df-0GDqdQKlFqD4yv69pf5qbKIsypRxuxRg,1659
33
- claude_team_mcp/tools/adopt_worker.py,sha256=P4HlUaKqS5piOh-0Or27h935WRtkfEXtznCZ_cQF1j4,6897
33
+ claude_team_mcp/tools/adopt_worker.py,sha256=LuuRv9S6_ecN0vYA2ADANvuKMi64QQAMA6vRiwXaGqc,7053
34
34
  claude_team_mcp/tools/annotate_worker.py,sha256=mBo4YMaaaNQxQBduYK1DPA-Ioift-ZQ9tYlBM6S15t8,1639
35
35
  claude_team_mcp/tools/check_idle_workers.py,sha256=IjDNDeal9M7lTONWjKZrt8bXu7O277ossHz_2oyLRcY,3374
36
- claude_team_mcp/tools/close_workers.py,sha256=MlxyEKkDBJEP3FXY8ESQ1x7cjulzJi-fVNCsC4Z2Aig,7878
37
- claude_team_mcp/tools/discover_workers.py,sha256=wR2wEPRG1jggYuWJhEqC1Sw5ZrOrm9gwgOxEY4HFTD8,11830
36
+ claude_team_mcp/tools/close_workers.py,sha256=A--QqoL5KBUFbsNNe4-SYxsKOn1plY5_IfV6wHT8gvE,8029
37
+ claude_team_mcp/tools/discover_workers.py,sha256=3hjSBx-cuK8YXDAUQY4cRaS4VvZr61wYwpR18nIz_Uo,11986
38
38
  claude_team_mcp/tools/examine_worker.py,sha256=7Nd3EOdsGVDjMJ8ov9NhmcrjN8K9IE4i_noXHOP1uI8,1620
39
39
  claude_team_mcp/tools/issue_tracker_help.py,sha256=KxgjFhXp3NCUDjqTl3UnIiFV-Y5DM80C1EoZXfA82QM,1668
40
40
  claude_team_mcp/tools/list_workers.py,sha256=bD-i1kI_qCgFF1TJc_U5TpEc_Gk6baqkFzAInKLVJgs,4906
41
- claude_team_mcp/tools/list_worktrees.py,sha256=_EIwpwoCMLaQh4dHws-jO53MS-E-L7hC7oPT7xC26lw,3665
42
- claude_team_mcp/tools/message_workers.py,sha256=pWZYcbDyezrNeWrkmFcLHROWtJqKmKaXgvd7aj8-h3Y,13260
43
- claude_team_mcp/tools/poll_worker_changes.py,sha256=Z17X9p6KQjORIpY20GoF9bTTwNeowOgwbZwSI_W3ETM,8142
44
- claude_team_mcp/tools/read_worker_logs.py,sha256=9gccM6MSaoxu97Xjsk7nUalLEU8XHV7r3SKggBRpNww,5913
41
+ claude_team_mcp/tools/list_worktrees.py,sha256=EXPxzvHRX7a1c9CedBjZVn-lckiljdTH7tVDqkChOmM,3843
42
+ claude_team_mcp/tools/message_workers.py,sha256=xa-y88gb2ugi36eRNE0ChAAZ1tJ62HuXwSlGhp7qDlE,13464
43
+ claude_team_mcp/tools/poll_worker_changes.py,sha256=uv2-jhhJCZ4sTkuKqSBLK894GHof3Ue9roplgPwaTu0,8329
44
+ claude_team_mcp/tools/read_worker_logs.py,sha256=Xe1Ch1ZJShI11et_beOwFL9q0WM5yMorhgDpstOd4Dw,6120
45
45
  claude_team_mcp/tools/spawn_workers.py,sha256=Md5EsEq5rhXx1WweabX8lPN-em2_s3h1C1xmYezrqS8,37723
46
- claude_team_mcp/tools/wait_idle_workers.py,sha256=EAPBinBsrRtisADQJZQGPHR8CAIB6lYrXMe5DmeMciM,5279
47
- claude_team_mcp/tools/worker_events.py,sha256=zbsx07sXdDBEFBl74zWS34yAYp5bVPAAWT6XKrWBJu4,9001
46
+ claude_team_mcp/tools/wait_idle_workers.py,sha256=VvHeIK2BM1q6SoY0DODCeKAEkAj3-MsB6g87scu2cyM,5555
47
+ claude_team_mcp/tools/worker_events.py,sha256=s1_pFMFrH-Kppni6RT9yzQbsJ_ChhmF8ujM2lkdEl1s,9448
48
48
  claude_team_mcp/utils/__init__.py,sha256=Jyc-N1RXZnMdXLjSgRBB2ih04v-h0woUzZcVYYfc7wQ,647
49
49
  claude_team_mcp/utils/constants.py,sha256=FGDHeo0reZ89365fuXJGIl2Y5MFQAoKfWtmYr7UQzhQ,5815
50
50
  claude_team_mcp/utils/errors.py,sha256=kP0MPjLIpEOZkbGAzDxonMFERbsjwfID5VVY5qAR2II,2949
51
51
  claude_team_mcp/utils/worktree_detection.py,sha256=oMGcb7p1jvr7qWs06sxUMTAV8jRialcVqziCTCdW7XU,3251
52
- claude_team_mcp-0.9.0.dist-info/METADATA,sha256=xb6w9MILesmZAwv6GYJdNbUdNskxMbfG2OFdDOPIs58,21211
53
- claude_team_mcp-0.9.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
54
- claude_team_mcp-0.9.0.dist-info/entry_points.txt,sha256=cmk5dmK50RVquExT-k_J72akl3qKIerPpVqfit7kQtQ,53
55
- claude_team_mcp-0.9.0.dist-info/RECORD,,
52
+ claude_team_mcp-0.9.1.dist-info/METADATA,sha256=omNaScxSlSY6-VENPCe3u-gxvqcMM5dmF0Vf5MtA6Ug,21211
53
+ claude_team_mcp-0.9.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
54
+ claude_team_mcp-0.9.1.dist-info/entry_points.txt,sha256=cmk5dmK50RVquExT-k_J72akl3qKIerPpVqfit7kQtQ,53
55
+ claude_team_mcp-0.9.1.dist-info/RECORD,,