claude-team-mcp 0.9.0__tar.gz → 0.9.1__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.
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.pebbles/events.jsonl +3 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.pebbles/pebbles.db +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/CHANGELOG.md +5 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/PKG-INFO +1 -1
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/pyproject.toml +1 -1
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/adopt_worker.py +4 -1
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/close_workers.py +4 -1
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/discover_workers.py +4 -1
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/list_worktrees.py +4 -1
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/message_workers.py +6 -2
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/poll_worker_changes.py +4 -1
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/read_worker_logs.py +6 -2
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/wait_idle_workers.py +8 -3
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/worker_events.py +10 -4
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/uv.lock +1 -1
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.claude/settings.json +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.claude/settings.local.json +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.claude-plugin/marketplace.json +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.claude-plugin/plugin.json +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.gitattributes +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.gitignore +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.mcp.json +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.pebbles/.gitignore +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/.pebbles/config.json +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/AGENTS.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/CLAUDE.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/HAPPY_INTEGRATION_RESEARCH.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/Makefile +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/NOTES.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/README.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/commands/check-workers.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/commands/cleanup-worktrees.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/commands/merge-worker.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/commands/pr-worker.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/commands/spawn-workers.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/commands/team-summary.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/config/mcporter.json +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/docs/ISSUE_TRACKER_ABSTRACTION.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/docs/design/unified-worker-state.md +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/scripts/install-commands.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/scripts/team-status.sh +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/settings.json +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team/__init__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team/events.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team/idle_detection.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team/poller.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/__init__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/__main__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/cli_backends/__init__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/cli_backends/base.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/cli_backends/claude.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/cli_backends/codex.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/colors.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/config.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/config_cli.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/formatting.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/idle_detection.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/issue_tracker/__init__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/iterm_utils.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/names.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/profile.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/registry.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/schemas/__init__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/schemas/codex.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/server.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/session_state.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/subprocess_cache.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/terminal_backends/__init__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/terminal_backends/base.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/terminal_backends/iterm.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/terminal_backends/tmux.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/__init__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/annotate_worker.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/check_idle_workers.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/examine_worker.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/issue_tracker_help.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/list_workers.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/spawn_workers.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/utils/__init__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/utils/constants.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/utils/errors.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/utils/worktree_detection.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/worker_prompt.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/worktree.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/__init__.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/conftest.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_cli_backends.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_codex_schema.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_colors.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_config.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_config_cli.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_events.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_formatting.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_idle_detection.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_idle_detection_module.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_issue_tracker.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_issue_tracker_integration.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_iterm_utils.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_names.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_poll_worker_changes.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_poller.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_recover_from_events.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_recovered_session.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_registry.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_session_state.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_spawn_workers_defaults.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_startup_recovery.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_terminal_backends.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_tmux_backend.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_worker_events.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_worker_prompt.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_worktree.py +0 -0
- {claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/tests/test_worktree_detection.py +0 -0
|
@@ -228,3 +228,6 @@
|
|
|
228
228
|
{"type":"create","timestamp":"2026-02-02T23:29:52.330658Z","issue_id":"cic-ebd","payload":{"description":"tmux_session_name_for_project() hashes the full project_path. Worktree paths produce unique hashes, creating one tmux session per worker instead of one per project. Fix: resolve worktree paths to main repo before hashing.","priority":"1","title":"tmux: worktree paths create separate sessions instead of sharing per-project session","type":"bug"}}
|
|
229
229
|
{"type":"status_update","timestamp":"2026-02-02T23:30:32.877924Z","issue_id":"cic-ebd","payload":{"status":"in_progress"}}
|
|
230
230
|
{"type":"close","timestamp":"2026-02-02T23:33:33.785116Z","issue_id":"cic-ebd","payload":{}}
|
|
231
|
+
{"type":"create","timestamp":"2026-02-04T22:18:18.544978Z","issue_id":"cic-c29","payload":{"description":"","priority":"2","title":"message_workers: wait_mode validation rejects None from MCP clients","type":"task"}}
|
|
232
|
+
{"type":"comment","timestamp":"2026-02-04T22:18:27.550553Z","issue_id":"cic-c29","payload":{"body":"When message_workers is called via MCP clients (e.g. mcporter) that send explicit null for omitted optional params, pydantic rejects it:\n\nError: Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]\n\nThe type annotation is wait_mode: str = 'none' but needs to accept None.\n\nFix: Change to wait_mode: str | None = 'none' and add wait_mode = wait_mode or 'none' guard at the top of the function. Same for timeout: float = 600.0.\n\nFile: src/claude_team_mcp/tools/message_workers.py\nFunction: message_workers (line ~127)"}}
|
|
233
|
+
{"type":"update","timestamp":"2026-02-04T22:18:30.31878Z","issue_id":"cic-c29","payload":{"type":"bug"}}
|
|
Binary file
|
|
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.9.1] - 2026-02-04
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **MCP tool optional param validation**: All 9 MCP tools now accept `null` for optional parameters with defaults. MCP clients (e.g. mcporter) that send explicit `null` for omitted params no longer trigger pydantic validation errors.
|
|
14
|
+
|
|
10
15
|
## [0.9.0] - 2026-02-03
|
|
11
16
|
|
|
12
17
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-team-mcp
|
|
3
|
-
Version: 0.9.
|
|
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
|
|
@@ -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
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/discover_workers.py
RENAMED
|
@@ -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(
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/message_workers.py
RENAMED
|
@@ -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
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/poll_worker_changes.py
RENAMED
|
@@ -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
|
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/read_worker_logs.py
RENAMED
|
@@ -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
|
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/wait_idle_workers.py
RENAMED
|
@@ -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():
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/cli_backends/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/issue_tracker/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/terminal_backends/__init__.py
RENAMED
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/terminal_backends/base.py
RENAMED
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/terminal_backends/iterm.py
RENAMED
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/terminal_backends/tmux.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/annotate_worker.py
RENAMED
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/check_idle_workers.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/tools/issue_tracker_help.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.9.0 → claude_team_mcp-0.9.1}/src/claude_team_mcp/utils/worktree_detection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|