claude-team-mcp 0.2.1__tar.gz → 0.3.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.3.1/.beads/.local_version +1 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/beads.db +0 -0
- claude_team_mcp-0.3.1/.beads/daemon.lock +7 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/daemon.log +38 -0
- claude_team_mcp-0.3.1/.beads/daemon.pid +1 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/PKG-INFO +14 -1
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/README.md +13 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/pyproject.toml +1 -1
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/__init__.py +2 -2
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/iterm_utils.py +8 -1
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/server.py +76 -14
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/uv.lock +1 -1
- claude_team_mcp-0.2.1/.beads/.local_version +0 -1
- claude_team_mcp-0.2.1/.beads/daemon.lock +0 -7
- claude_team_mcp-0.2.1/.beads/daemon.pid +0 -1
- claude_team_mcp-0.2.1/.beads/sync-state.json +0 -7
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/.gitignore +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/README.md +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/beads.db-shm +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/beads.db-wal +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/config.yaml +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/deletions.jsonl +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/deletions.jsonl.migrated +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/issues.jsonl +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.beads/metadata.json +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.claude/settings.local.json +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.claude-plugin/marketplace.json +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.claude-plugin/plugin.json +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.gitattributes +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.gitignore +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/.mcp.json +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/CLAUDE.md +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/Makefile +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/NOTES.md +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/commands/check-workers.md +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/commands/cleanup-worktrees.md +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/commands/merge-worker.md +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/commands/pr-worker.md +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/commands/spawn-workers.md +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/commands/team-summary.md +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/scripts/install-commands.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/settings.json +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/__main__.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/colors.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/formatting.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/idle_detection.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/names.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/profile.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/registry.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/session_state.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/subprocess_cache.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/__init__.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/adopt_worker.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/annotate_worker.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/bd_help.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/check_idle_workers.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/close_workers.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/discover_workers.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/examine_worker.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/list_workers.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/list_worktrees.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/message_workers.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/read_worker_logs.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/spawn_workers.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/wait_idle_workers.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/utils/__init__.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/utils/constants.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/utils/errors.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/utils/worktree_detection.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/worker_prompt.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/worktree.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/tests/__init__.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/tests/test_colors.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/tests/test_formatting.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/tests/test_idle_detection.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/tests/test_names.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/tests/test_registry.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/tests/test_session_state.py +0 -0
- {claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/tests/test_worker_prompt.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.44.0
|
|
Binary file
|
|
@@ -10602,3 +10602,41 @@ time=2025-12-31T00:42:45.305-08:00 level=INFO msg="Skipping %s: in backoff perio
|
|
|
10602
10602
|
time=2025-12-31T00:42:47.466-08:00 level=INFO msg="File change detected: %s" !BADKEY=/Users/phaedrus/Projects/claude-team/.beads/issues.jsonl
|
|
10603
10603
|
time=2025-12-31T00:42:48.468-08:00 level=INFO msg="Import triggered by file change"
|
|
10604
10604
|
time=2025-12-31T00:42:48.468-08:00 level=INFO msg="Skipping %s: in backoff period" !BADKEY=auto-import
|
|
10605
|
+
time=2026-01-05T08:31:28.190-08:00 level=INFO msg="Git HEAD change detected: %s" !BADKEY=/Users/phaedrus/Projects/claude-team/.git/HEAD
|
|
10606
|
+
time=2026-01-05T08:31:29.193-08:00 level=INFO msg="Import triggered by file change"
|
|
10607
|
+
time=2026-01-05T08:31:29.195-08:00 level=INFO msg="Starting %s..." !BADKEY=auto-import
|
|
10608
|
+
time=2026-01-05T08:31:29.197-08:00 level=INFO msg="Skipping %s: JSONL content unchanged" !BADKEY=auto-import
|
|
10609
|
+
time=2026-01-05T13:59:42.898-08:00 level=INFO msg="Git HEAD change detected: %s" !BADKEY=/Users/phaedrus/Projects/claude-team/.git/HEAD
|
|
10610
|
+
time=2026-01-05T13:59:43.901-08:00 level=INFO msg="Import triggered by file change"
|
|
10611
|
+
time=2026-01-05T13:59:43.901-08:00 level=INFO msg="Starting %s..." !BADKEY=auto-import
|
|
10612
|
+
time=2026-01-05T13:59:43.903-08:00 level=INFO msg="Skipping %s: JSONL content unchanged" !BADKEY=auto-import
|
|
10613
|
+
time=2026-01-05T14:16:19.112-08:00 level=INFO msg="Received signal %v, shutting down..." !BADKEY=terminated
|
|
10614
|
+
time=2026-01-06T16:04:00.127-08:00 level=INFO msg="Daemon started (interval: %v, auto-commit: %v, auto-push: %v)" !BADKEY=5s !BADKEY=false !BADKEY=false
|
|
10615
|
+
time=2026-01-06T16:04:00.128-08:00 level=INFO msg="using database" path=/Users/phaedrus/Projects/claude-team/.beads/beads.db
|
|
10616
|
+
time=2026-01-06T16:04:00.133-08:00 level=INFO msg="database opened" path=/Users/phaedrus/Projects/claude-team/.beads/beads.db freshness_checking=true
|
|
10617
|
+
time=2026-01-06T16:04:00.133-08:00 level=INFO msg="upgrading .beads/.gitignore"
|
|
10618
|
+
time=2026-01-06T16:04:00.133-08:00 level=WARN msg="failed to upgrade .gitignore" error="open .beads/.gitignore: no such file or directory"
|
|
10619
|
+
time=2026-01-06T16:04:00.137-08:00 level=INFO msg="Repository fingerprint validated: %s" !BADKEY=d0d96a12
|
|
10620
|
+
time=2026-01-06T16:04:00.137-08:00 level=WARN msg="database schema version mismatch" db_version=0.41.0 daemon_version=0.44.0
|
|
10621
|
+
time=2026-01-06T16:04:00.137-08:00 level=INFO msg="auto-upgrading database to daemon version"
|
|
10622
|
+
time=2026-01-06T16:04:00.137-08:00 level=INFO msg="database version updated" version=0.44.0
|
|
10623
|
+
time=2026-01-06T16:04:00.138-08:00 level=INFO msg="starting RPC server" socket=/Users/phaedrus/Projects/claude-team/.beads/bd.sock
|
|
10624
|
+
time=2026-01-06T16:04:00.138-08:00 level=INFO msg="RPC server ready (socket listening)"
|
|
10625
|
+
time=2026-01-06T16:04:00.143-08:00 level=INFO msg="registered in global registry"
|
|
10626
|
+
time=2026-01-06T16:04:00.143-08:00 level=INFO msg="Starting %s..." !BADKEY="sync cycle"
|
|
10627
|
+
time=2026-01-06T16:04:00.151-08:00 level=INFO msg="Exported to JSONL"
|
|
10628
|
+
time=2026-01-06T16:04:01.700-08:00 level=INFO msg="Pulled sync branch %s" !BADKEY=beads-sync
|
|
10629
|
+
time=2026-01-06T16:04:01.701-08:00 level=INFO msg="Synced JSONL from sync branch to main repo"
|
|
10630
|
+
time=2026-01-06T16:04:01.731-08:00 level=INFO msg="Imported from JSONL"
|
|
10631
|
+
time=2026-01-06T16:04:01.742-08:00 level=INFO msg="Sync cycle complete"
|
|
10632
|
+
time=2026-01-06T16:04:01.743-08:00 level=INFO msg="monitoring parent process" pid=0
|
|
10633
|
+
time=2026-01-06T16:04:01.743-08:00 level=INFO msg="using event-driven mode"
|
|
10634
|
+
time=2026-01-06T16:04:01.743-08:00 level=INFO msg="Auto-pull disabled: use 'git pull' manually to sync remote changes"
|
|
10635
|
+
time=2026-01-06T16:04:01.812-08:00 level=INFO msg="File change detected: %s" !BADKEY=/Users/phaedrus/Projects/claude-team/.beads/issues.jsonl
|
|
10636
|
+
time=2026-01-06T16:04:02.973-08:00 level=INFO msg="Import triggered by file change"
|
|
10637
|
+
time=2026-01-06T16:04:02.974-08:00 level=INFO msg="Starting %s..." !BADKEY=auto-import
|
|
10638
|
+
time=2026-01-06T16:04:02.974-08:00 level=INFO msg="Skipping %s: JSONL content unchanged" !BADKEY=auto-import
|
|
10639
|
+
time=2026-01-06T16:04:06.349-08:00 level=INFO msg="File change detected: %s" !BADKEY=/Users/phaedrus/Projects/claude-team/.beads/issues.jsonl
|
|
10640
|
+
time=2026-01-06T16:04:07.351-08:00 level=INFO msg="Import triggered by file change"
|
|
10641
|
+
time=2026-01-06T16:04:07.352-08:00 level=INFO msg="Starting %s..." !BADKEY=auto-import
|
|
10642
|
+
time=2026-01-06T16:04:07.352-08:00 level=INFO msg="Skipping %s: JSONL content unchanged" !BADKEY=auto-import
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
48335
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-team-mcp
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.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
|
|
@@ -140,6 +140,19 @@ Add to your Claude Code MCP settings. You can configure this at:
|
|
|
140
140
|
|
|
141
141
|
After adding the configuration, restart Claude Code for it to take effect.
|
|
142
142
|
|
|
143
|
+
## Environment Variables
|
|
144
|
+
|
|
145
|
+
| Variable | Default | Description |
|
|
146
|
+
|----------|---------|-------------|
|
|
147
|
+
| `CLAUDE_TEAM_COMMAND` | `claude` | Override the command used to start Claude Code in worker sessions. Useful for running alternative CLI implementations like `happy`. |
|
|
148
|
+
| `CLAUDE_TEAM_PROJECT_DIR` | (none) | When set, allows using `"project_path": "auto"` in worker configs to automatically use this path. |
|
|
149
|
+
|
|
150
|
+
Example using an alternative CLI:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
export CLAUDE_TEAM_COMMAND=happy
|
|
154
|
+
```
|
|
155
|
+
|
|
143
156
|
## MCP Tools
|
|
144
157
|
|
|
145
158
|
### Worker Management
|
|
@@ -110,6 +110,19 @@ Add to your Claude Code MCP settings. You can configure this at:
|
|
|
110
110
|
|
|
111
111
|
After adding the configuration, restart Claude Code for it to take effect.
|
|
112
112
|
|
|
113
|
+
## Environment Variables
|
|
114
|
+
|
|
115
|
+
| Variable | Default | Description |
|
|
116
|
+
|----------|---------|-------------|
|
|
117
|
+
| `CLAUDE_TEAM_COMMAND` | `claude` | Override the command used to start Claude Code in worker sessions. Useful for running alternative CLI implementations like `happy`. |
|
|
118
|
+
| `CLAUDE_TEAM_PROJECT_DIR` | (none) | When set, allows using `"project_path": "auto"` in worker configs to automatically use this path. |
|
|
119
|
+
|
|
120
|
+
Example using an alternative CLI:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
export CLAUDE_TEAM_COMMAND=happy
|
|
124
|
+
```
|
|
125
|
+
|
|
113
126
|
## MCP Tools
|
|
114
127
|
|
|
115
128
|
### Worker Management
|
|
@@ -12,8 +12,8 @@ from .colors import generate_tab_color, get_hue_for_index, hsl_to_rgb_tuple
|
|
|
12
12
|
|
|
13
13
|
def main():
|
|
14
14
|
"""Entry point for the claude-team command."""
|
|
15
|
-
from .server import
|
|
16
|
-
|
|
15
|
+
from .server import main as server_main
|
|
16
|
+
server_main()
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
__all__ = [
|
|
@@ -6,6 +6,7 @@ from the original primitives.py for use in the MCP server.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import logging
|
|
9
|
+
import os
|
|
9
10
|
import re
|
|
10
11
|
from typing import TYPE_CHECKING, Optional
|
|
11
12
|
|
|
@@ -515,6 +516,11 @@ async def start_claude_in_session(
|
|
|
515
516
|
atomic command (cd && claude). Waits for shell readiness before sending
|
|
516
517
|
the command, then waits for Claude's startup banner to appear.
|
|
517
518
|
|
|
519
|
+
The command used to launch Claude Code can be overridden by setting
|
|
520
|
+
the CLAUDE_TEAM_COMMAND environment variable (defaults to "claude").
|
|
521
|
+
This is useful for running alternative Claude CLI implementations
|
|
522
|
+
like "happy" or for testing purposes.
|
|
523
|
+
|
|
518
524
|
Args:
|
|
519
525
|
session: iTerm2 session to use
|
|
520
526
|
project_path: Directory to run Claude in
|
|
@@ -537,7 +543,8 @@ async def start_claude_in_session(
|
|
|
537
543
|
)
|
|
538
544
|
|
|
539
545
|
# Build claude command with flags
|
|
540
|
-
|
|
546
|
+
# Allow overriding the claude command via environment variable (e.g., "happy")
|
|
547
|
+
claude_cmd = os.environ.get("CLAUDE_TEAM_COMMAND", "claude")
|
|
541
548
|
if dangerously_skip_permissions:
|
|
542
549
|
claude_cmd += " --dangerously-skip-permissions"
|
|
543
550
|
if stop_hook_marker_id:
|
|
@@ -32,6 +32,22 @@ logging.basicConfig(
|
|
|
32
32
|
logger = logging.getLogger("claude-team-mcp")
|
|
33
33
|
|
|
34
34
|
|
|
35
|
+
# =============================================================================
|
|
36
|
+
# Singleton Registry (persists across MCP sessions for HTTP mode)
|
|
37
|
+
# =============================================================================
|
|
38
|
+
|
|
39
|
+
_global_registry: SessionRegistry | None = None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def get_global_registry() -> SessionRegistry:
|
|
43
|
+
"""Get or create the global singleton registry."""
|
|
44
|
+
global _global_registry
|
|
45
|
+
if _global_registry is None:
|
|
46
|
+
_global_registry = SessionRegistry()
|
|
47
|
+
logger.info("Created global singleton registry")
|
|
48
|
+
return _global_registry
|
|
49
|
+
|
|
50
|
+
|
|
35
51
|
# =============================================================================
|
|
36
52
|
# Application Context
|
|
37
53
|
# =============================================================================
|
|
@@ -162,11 +178,11 @@ async def app_lifespan(server: FastMCP) -> AsyncIterator[AppContext]:
|
|
|
162
178
|
logger.error("Make sure iTerm2 is running and Python API is enabled")
|
|
163
179
|
raise RuntimeError("Could not connect to iTerm2") from e
|
|
164
180
|
|
|
165
|
-
# Create application context with
|
|
181
|
+
# Create application context with singleton registry (persists across sessions)
|
|
166
182
|
ctx = AppContext(
|
|
167
183
|
iterm_connection=connection,
|
|
168
184
|
iterm_app=app,
|
|
169
|
-
registry=
|
|
185
|
+
registry=get_global_registry(),
|
|
170
186
|
)
|
|
171
187
|
|
|
172
188
|
try:
|
|
@@ -180,16 +196,25 @@ async def app_lifespan(server: FastMCP) -> AsyncIterator[AppContext]:
|
|
|
180
196
|
|
|
181
197
|
|
|
182
198
|
# =============================================================================
|
|
183
|
-
# FastMCP Server
|
|
199
|
+
# FastMCP Server Factory
|
|
184
200
|
# =============================================================================
|
|
185
201
|
|
|
186
|
-
mcp = FastMCP(
|
|
187
|
-
"Claude Team Manager",
|
|
188
|
-
lifespan=app_lifespan,
|
|
189
|
-
)
|
|
190
202
|
|
|
191
|
-
|
|
192
|
-
|
|
203
|
+
def create_mcp_server(host: str = "127.0.0.1", port: int = 8766) -> FastMCP:
|
|
204
|
+
"""Create and configure the FastMCP server instance."""
|
|
205
|
+
server = FastMCP(
|
|
206
|
+
"Claude Team Manager",
|
|
207
|
+
lifespan=app_lifespan,
|
|
208
|
+
host=host,
|
|
209
|
+
port=port,
|
|
210
|
+
)
|
|
211
|
+
# Register all tools from the tools package
|
|
212
|
+
register_all_tools(server, ensure_connection)
|
|
213
|
+
return server
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
# Default server instance for stdio mode (backwards compatibility)
|
|
217
|
+
mcp = create_mcp_server()
|
|
193
218
|
|
|
194
219
|
|
|
195
220
|
# =============================================================================
|
|
@@ -311,11 +336,48 @@ async def resource_session_screen(
|
|
|
311
336
|
# =============================================================================
|
|
312
337
|
|
|
313
338
|
|
|
314
|
-
def run_server():
|
|
315
|
-
"""
|
|
316
|
-
|
|
317
|
-
|
|
339
|
+
def run_server(transport: str = "stdio", port: int = 8766):
|
|
340
|
+
"""
|
|
341
|
+
Run the MCP server.
|
|
342
|
+
|
|
343
|
+
Args:
|
|
344
|
+
transport: Transport mode - "stdio" or "streamable-http"
|
|
345
|
+
port: Port for HTTP transport (default 8766)
|
|
346
|
+
"""
|
|
347
|
+
if transport == "streamable-http":
|
|
348
|
+
logger.info(f"Starting Claude Team MCP Server (HTTP on port {port})...")
|
|
349
|
+
# Create server with configured port for HTTP mode
|
|
350
|
+
server = create_mcp_server(host="127.0.0.1", port=port)
|
|
351
|
+
server.run(transport="streamable-http")
|
|
352
|
+
else:
|
|
353
|
+
logger.info("Starting Claude Team MCP Server (stdio)...")
|
|
354
|
+
mcp.run(transport="stdio")
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def main():
|
|
358
|
+
"""CLI entry point with argument parsing."""
|
|
359
|
+
import argparse
|
|
360
|
+
|
|
361
|
+
parser = argparse.ArgumentParser(description="Claude Team MCP Server")
|
|
362
|
+
parser.add_argument(
|
|
363
|
+
"--http",
|
|
364
|
+
action="store_true",
|
|
365
|
+
help="Run in HTTP mode (streamable-http) instead of stdio",
|
|
366
|
+
)
|
|
367
|
+
parser.add_argument(
|
|
368
|
+
"--port",
|
|
369
|
+
type=int,
|
|
370
|
+
default=8766,
|
|
371
|
+
help="Port for HTTP mode (default: 8766)",
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
args = parser.parse_args()
|
|
375
|
+
|
|
376
|
+
if args.http:
|
|
377
|
+
run_server(transport="streamable-http", port=args.port)
|
|
378
|
+
else:
|
|
379
|
+
run_server(transport="stdio")
|
|
318
380
|
|
|
319
381
|
|
|
320
382
|
if __name__ == "__main__":
|
|
321
|
-
|
|
383
|
+
main()
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.30.0
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
6716
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"last_failure": "2025-12-31T00:42:36.799176-08:00",
|
|
3
|
-
"failure_count": 1,
|
|
4
|
-
"backoff_until": "2025-12-31T00:43:06.799176-08:00",
|
|
5
|
-
"needs_manual_sync": false,
|
|
6
|
-
"failure_reason": "git pull failed in worktree: exit status 128\nFrom github.com:Martian-Engineering/claude-team\n * branch beads-sync -\u003e FETCH_HEAD\nfatal: Cannot rebase onto multiple branches.\n"
|
|
7
|
-
}
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/annotate_worker.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/check_idle_workers.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/discover_workers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/message_workers.py
RENAMED
|
File without changes
|
{claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/read_worker_logs.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.2.1 → claude_team_mcp-0.3.1}/src/claude_team_mcp/tools/wait_idle_workers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_team_mcp-0.2.1 → claude_team_mcp-0.3.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
|