mcp-start-claude
Enables launching Claude Code in a specified project directory by opening a new terminal session with optional initial prompt.
README
mcp-start-claude
Server MCP (trasporto SSE) che espone un tool per avviare Claude Code in una cartella di progetto specifica, aprendo una sessione interattiva in un nuovo terminale.
Pensato principalmente per Linux: rileva automaticamente l'emulatore di terminale disponibile, in ordine di preferenza:
gnome-terminal, ptyxis, konsole, xfce4-terminal, tilix, terminator,
alacritty, kitty, wezterm, foot, x-terminal-emulator (fallback Debian),
xterm.
Su WSL, se non è installato alcun terminale Linux, ricade su Windows
Terminal (wt.exe) entrando nel distro WSL.
Requisiti
- Node.js ≥ 18
claude(Claude Code CLI) nelPATHdell'utente che avvia il server- Un emulatore di terminale tra quelli sopra e una sessione grafica
(
DISPLAYoWAYLAND_DISPLAY). In ambiente headless il tool restituisce un errore esplicito anziché fingere un avvio riuscito.
Installazione
npm install
npm run build
Avvio
La radice di accesso è obbligatoria: si passa come argomento (o via
BASE_DIR). Il tool potrà aprire solo cartelle al suo interno; senza una radice
valida il server non parte.
Il modo più comodo è creare un file .env (copiando .env.example): all'avvio
viene caricato in automatico, così basta npm start senza argomenti.
cp .env.example .env # poi modifica BASE_DIR ecc.
npm start # http://127.0.0.1:3939/sse — legge .env
# In alternativa, passando i parametri a mano (hanno la PRECEDENZA sul .env):
npm start -- /home/ubuntu/projects
BASE_DIR=/home/ubuntu/projects npm start
Variabili d'ambiente (da .env, env reali o argomenti):
| Variabile | Default | Descrizione |
|---|---|---|
PORT |
3939 |
Porta del server SSE |
HOST |
127.0.0.1 |
Host di bind |
BASE_DIR |
obbligatoria | Radice di accesso. Alternativa all'argomento CLI. Il tool apre solo cartelle al suo interno (con protezione anti-traversal e anti-symlink) |
MCP_TERMINAL |
autodetect | Forza il terminale per nome del binario (es. gnome-terminal, konsole, alacritty, kitty, wt.exe) |
CLAUDE_REMOTE_CONTROL |
attivo | Avvia con --remote-control. Imposta 0/false/off/no per disattivarlo |
Endpoint
GET /sse— stream SSE (handshake MCP, trasporto SSE)POST /messages?sessionId=...— messaggi del client (trasporto SSE)POST /mcp— trasporto Streamable HTTP stateless (standard MCP attuale)GET /health— stato e numero di sessioni attive
Il server espone entrambi i trasporti: SSE (come da requisito) e Streamable
HTTP. Per i client moderni (es. mcp-remote, connettori nativi) usa /mcp, che
è la prima scelta ed evita il client SSE di fallback.
Tool esposto
start_claude_code
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
projectPath |
string |
sì | Cartella in cui avviare Claude Code. Deve stare dentro la radice di accesso (relativa ad essa o assoluta al suo interno); fuori radice è rifiutata |
prompt |
string |
no | Prompt iniziale della sessione |
Apre un nuovo terminale, entra nella cartella e lancia claude --remote-control
(Remote Control abilitato all'avvio; disattivabile con CLAUDE_REMOTE_CONTROL).
L'eventuale prompt è passato come messaggio iniziale. Dopo l'uscita di Claude
Code resta una shell interattiva (lo script si autoelimina).
Registrazione in Claude Code
Con il server in esecuzione:
claude mcp add --transport sse start-claude http://127.0.0.1:3939/sse
Poi, da Claude Code, basta chiedere di avviare Claude Code in una cartella e
verrà invocato il tool start_claude_code.
Uso con Claude Desktop (da WSL)
Claude Desktop gira su Windows, il server in WSL. Si usa il bridge mcp-remote
dentro WSL (così parla col server su 127.0.0.1, senza forwarding
Windows↔WSL). Entry in claude_desktop_config.json:
{
"mcpServers": {
"start-claude": {
"command": "wsl.exe",
"args": [
"bash",
"-lc",
"export NVM_DIR=/home/ubuntu/.nvm; . /home/ubuntu/.nvm/nvm.sh; exec npx -y mcp-remote http://127.0.0.1:3939/mcp --allow-http"
]
}
}
}
⚠️ Due trappole, entrambe già gestite nel comando sopra:
- La login shell avviata da
wsl.exenon carica nvm e cadrebbe sul Node di sistema (es. v18), troppo vecchio permcp-remote(ReferenceError: File is not defined). Per questo si fa il source esplicito dinvm.sh.- Le virgolette doppie dentro il comando vengono mangiate passando per
wsl.exe(es."$HOME/.nvm"→ variabile vuota). Usare quindi un path assoluto senza virgolette (/home/<utente>/.nvm).
Procedura:
- In WSL, dal tuo terminale interattivo aperto sul desktop, avvia il server
indicando la radice di accesso:
npm start -- /home/ubuntu/projects(lasciarlo in esecuzione). Vedi sotto perché il terminale conta. - Riavviare completamente Claude Desktop (uscire dalla tray, non solo chiudere la finestra) così ricarica il config e avvia il bridge.
- Il tool
start_claude_codediventa disponibile in chat.
⚠️ Il server va avviato dalla tua sessione desktop interattiva.
wt.exeviene lanciato tramite la WSL interop (WSL_INTEROP) del processo che lo esegue: se il server gira in un'altra sessione WSL (es. avviato da un agente, da un servizio o via SSH),wt.exeesegue ma la finestra compare in una sessione non visibile. Avviandonpm startdal tuo terminale, le finestre si aprono sul tuo schermo. (Verifica veloce della sessione: lanciawt.exedal terminale; se si apre una finestra, è quella giusta pernpm start.)
Accesso da mobile: Cloudflare Tunnel + Access
I connettori di Claude (web e mobile) vengono raggiunti dal cloud di Anthropic, non dal tuo dispositivo: serve quindi un endpoint pubblico con certificato valido (una VPN privata non basta). Si ottiene con un Cloudflare Tunnel, e l'autenticazione la gestisce Cloudflare Access (nessun codice OAuth da scrivere lato server).
[Cloud Anthropic] → https://mcp.pawsolutions.it (TLS valido, Cloudflare)
→ Cloudflare Access (gate OAuth: passa solo chi rispetta la policy)
→ Cloudflare Tunnel (cloudflared, connessione in uscita: nessuna porta aperta)
→ http://localhost:3939/mcp (server MCP locale) → apre il terminale
Setup (una tantum, dashboard Cloudflare Zero Trust)
- Networks → Tunnels → Create a tunnel (tipo Cloudflared). Copia il
token e mettilo in
.envcomeTUNNEL_TOKEN=.... - Nel tunnel, Public Hostname:
mcp.pawsolutions.it→ Servicehttp://localhost:3939. (Il record DNS viene creato da Cloudflare.) - Access → Applications → Add → Self-hosted, dominio
mcp.pawsolutions.it. Aggiungi una policy che consenta solo la tua identità (es. Emails = la tua email; metodo di login Google/GitHub/OTP). Access gestirà l'intero flusso OAuth per il client MCP.
Avvio
npm start # server MCP sull'host (HOST=0.0.0.0)
docker compose up -d # avvia il tunnel cloudflared
Aggiungere il connettore (Claude Desktop / mobile)
Connettori → "Aggiungi connettore personalizzato" → URL
https://mcp.pawsolutions.it/mcp, campi OAuth vuoti. Claude aprirà un login
Cloudflare nel browser: autenticati una volta → Access rilascia i token → solo la
tua identità potrà usare il server.
⚠️ Sicurezza
- Il server MCP non ha autenticazione propria: l'autenticazione è demandata a Cloudflare Access. Senza una policy Access corretta, l'URL pubblico esporrebbe un launcher di terminali a chiunque — la policy è obbligatoria.
- Difesa in profondità (opzionale): il server può validare l'header
Cf-Access-Jwt-Assertioniniettato da Access. HOST=0.0.0.0espone la3939in chiaro sulla LAN (per il bridge Desktop e per cloudflared): se non ti serve l'accesso LAN, limitala con un firewall.
La vecchia variante con Caddy + certificato self-signed (
Caddyfile,install_certificate.sh) non funziona con i connettori remoti (cert non pubblico) ed è superata da questo setup. I file restano nel repo solo come riferimento per un eventuale client che giri sullo stesso host.
Note tecniche
- Ogni connessione SSE crea un'istanza isolata del server MCP, indicizzata per
sessionId. - Il comando viene generato in uno script temporaneo per evitare problemi di
escaping su più livelli (
wt.exe→wsl.exe→bash); il prompt è quotato in POSIX. - Il path assoluto di
claudeviene risolto lato server (ereditando nvm), così il terminale appena aperto non deve ricaricare l'ambiente. - Gli errori di spawn sono gestiti per non far cadere il server.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。