seashell
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for the SeaShell MCP server to listen on, passed via the --port argument (e.g. --port 9876 for Claude Desktop, --port 9879 for Claude Code CLI). | |
| SEASHELL_ALLOW_SECRET_READ | No | Set to 1 (e.g. SEASHELL_ALLOW_SECRET_READ=1) in the server environment to allow wave_secret_get to return plaintext secret values; otherwise the plaintext value is withheld. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| suggest_commandC | Suggests a terminal command based on the user's request |
| execute_commandB | Executes a terminal command and captures its output. Runs silently by default (no visible block). Pass show_in_wave=true only when you want the user to watch the command run in a visible Wave Terminal block — e.g. a build, install, or multi-step process. For 5 consecutive commands, leave show_in_wave unset so they all run quietly without cluttering Wave. |
| execute_with_auto_retrieveA | Executes a command and automatically waits for and returns its output. Preferred for quick commands that don't need a visible terminal tab. Use open_terminal_tab only for long-running processes like builds or servers. |
| preview_commandB | Preview a command without executing it |
| get_command_outputC | Retrieve the output of a previously executed command |
| execute_pipelineB | Execute a pipeline of commands with conditional logic (stop/continue/warn on failure) |
| execute_with_streamingB | Execute a command with real-time output streaming - ideal for long-running builds |
| save_templateB | Save a command template with variables for reuse |
| run_templateC | Execute a saved command template with variable substitution |
| list_templatesB | List all saved command templates |
| list_recent_commandsB | List recent commands from history with status, duration, and exit codes |
| self_checkB | Run health check on configuration, database, terminal, and recent error rates |
| copy_to_clipboardA | Copy text to the macOS system clipboard |
| read_from_clipboardA | Read the current contents of the macOS system clipboard |
| set_notification_preferenceC | Toggle macOS notification preferences for command completion alerts |
| get_environment_contextB | Get current terminal environment context including git branch, active venv, node version, docker status, and working directory |
| execute_and_parseB | Execute a command and return structured parsed output (supports git status, git log, docker ps, test results, ls -la, and JSON) |
| capture_environmentB | Capture a snapshot of the current shell environment variables with a named label |
| diff_environmentB | Compare two environment snapshots and show additions, removals, and changes |
| save_workspace_profileB | Save current project context as a named workspace profile (directory, commands, env vars, terminal preference) |
| load_workspace_profileB | Load a saved workspace profile to restore project context |
| list_workspace_profilesB | List all saved workspace profiles |
| delete_workspace_profileC | Delete a saved workspace profile |
| open_terminal_tabA | Open a new named terminal tab. ONLY use for long-running commands that need their own visible tab (builds, installs, servers, cloning repos). For quick commands, prefer execute_command or execute_with_auto_retrieve instead. If a session already exists, use send_to_session to reuse it. |
| send_to_sessionA | Send a command to an existing named terminal session, reusing its tab. Always prefer this over opening a new tab when a relevant session already exists. Use list_sessions first to check for available sessions. |
| list_sessionsA | List all active terminal sessions. Check this before opening new tabs to avoid creating duplicates. Reuse existing sessions with send_to_session whenever possible. |
| close_sessionA | Close a named terminal session and optionally close its tab. Use to clean up sessions that are no longer needed. Pass close_tab: true to also close the terminal tab. |
| cleanup_sessionsA | Remove stale terminal sessions that have been inactive. Use periodically to clean up accumulated tabs. Sessions inactive longer than inactive_minutes (default: 30) are removed. Set close_tabs to true to also close the terminal tabs. |
| add_file_watchC | Set up a file system watcher that triggers a command when files change |
| remove_file_watchB | Remove an active file system watcher |
| list_file_watchesB | List all active file system watchers |
| ssh_executeB | Execute a command on a remote host via SSH (key-based authentication only) |
| save_ssh_profileC | Save an SSH connection profile for quick reuse |
| list_ssh_profilesA | List all saved SSH connection profiles |
| delete_ssh_profileC | Delete a saved SSH connection profile |
| check_interactiveA | Check if a command is interactive (requires TTY/stdin) before executing it. Returns safety level: safe, cautious, interactive, or blocked with suggestions for non-interactive alternatives |
| wave_get_settingsA | Read Wave Terminal settings from ~/.waveterm/settings.json. Optionally filter by namespace prefix (e.g. 'ai', 'term', 'window', 'app'). |
| wave_get_widgetsA | List all custom widgets configured in Wave Terminal (from ~/.waveterm/widgets.json). |
| wave_get_ai_presetsA | List all AI model presets configured in Wave Terminal (from ~/.waveterm/aipresets.json). |
| wave_get_backgroundsA | List all tab background definitions in Wave Terminal (from ~/.waveterm/backgrounds.json). |
| wave_set_settingA | Update a single Wave Terminal setting in settings.json. First call returns a confirmation; pass approved=true to execute. Examples of keys: 'ai:model', 'term:theme', 'term:fontsize', 'app:tabbar'. |
| wave_create_widgetA | Create a new custom widget in Wave Terminal (writes to ~/.waveterm/widgets.json). First call returns a confirmation; pass approved=true to execute. |
| wave_update_widgetA | Update an existing Wave Terminal widget. First call returns a confirmation; pass approved=true to execute. |
| wave_delete_widgetA | Remove a custom widget from Wave Terminal. First call returns a confirmation; pass approved=true to execute. |
| wave_set_ai_presetA | Create or update a Wave Terminal AI model preset in ~/.waveterm/aipresets.json. First call returns a confirmation; pass approved=true to execute. |
| wave_set_themeA | Set the Wave Terminal theme (writes 'term:theme' to settings.json). First call returns a confirmation; pass approved=true to execute. |
| wave_set_appearanceA | Update Wave Terminal window or terminal appearance settings (writes to settings.json). First call returns a confirmation; pass approved=true to execute. Supported: font_size, font_family, transparency, tab_bar, ctrl_v_paste, confirm_quit, mac_option_is_meta, bell_sound, bell_indicator, default_new_block. |
| wave_helper_statusA | Check whether the Seashell Helper block is connected. Shows which tool tier is available. |
| wave_connect_helperB | Connect the MCP server to the Seashell Helper block running inside Wave Terminal. The helper must already be running (open the Seashell Helper widget in Wave first). |
| wave_list_workspacesA | List all Wave Terminal workspaces with their IDs, names, icons, and colours. Requires the Seashell Helper block to be running. |
| wave_list_blocksA | List blocks in Wave Terminal, optionally filtered by workspace, tab, or view type. Requires the Seashell Helper block. |
| wave_create_blockA | Create a new block in Wave Terminal. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper block. |
| wave_delete_blockA | Delete a block from Wave Terminal. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper block. |
| wave_get_scrollbackA | Get terminal scrollback content from a Wave block. Requires the Seashell Helper block. |
| wave_run_in_blockA | Run a command in a new Wave Terminal block. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper block. |
| wave_view_fileB | Open a file in a Wave Terminal preview block. Requires the Seashell Helper block. |
| wave_edit_fileA | Open a file for editing in Wave Terminal. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper block. |
| wave_secret_listA | List all Wave Terminal secret keys (Tier C — requires approved=true and a non-empty reason). Requires the Seashell Helper. |
| wave_secret_setB | Set a Wave Terminal secret (Tier C — requires approved=true and a non-empty reason). Requires the Seashell Helper. |
| wave_secret_getA | Read a Wave Terminal secret (Tier C — requires approved=true and a non-empty reason). The plaintext value is withheld unless SEASHELL_ALLOW_SECRET_READ=1. Requires the Seashell Helper. |
| wave_secret_deleteA | Delete a Wave Terminal secret (Tier C — requires approved=true and a non-empty reason). Requires the Seashell Helper. |
| wave_create_fish_widgetA | Add a Fish shell widget to the Wave widget bar (convenience wrapper around wave_create_widget). First call returns a confirmation; pass approved=true to execute. |
| wave_bootstrap_workspaceA | Bootstrap a Wave tab with a project-specific block layout. Templates: general, python-dev, node-dev, swift-dev. First call returns a confirmation; pass approved=true to execute. Requires the Seashell Helper. |
| read_user_inboxA | Drain unread notes the user left for Claude via the |
| inbox_countA | Cheap peek across the global inbox + every registered project inbox. Returns total unread count, age of the oldest message, and a per-project breakdown. Call before |
| inbox_historyB | Browse archived messages across all inboxes (global + every registered project). Sorted most-recent-first. |
| reply_to_userA | Post a reply to a user inbox message. Use this when a message returned by |
| read_my_repliesA | Browse the OUTBOUND history — replies you've previously sent via |
| read_session_transcriptA | Read the most recent N turns of a Claude Code session's transcript, without resuming it. Use this when the user asks 'what's the status of project X?' or 'what did we last talk about in ?' — you read the actual transcript instead of relying on memory. Resolution: pass |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 69 tools
Several clusters of tools have fuzzy boundaries: execute_command, execute_with_auto_retrieve, execute_with_streaming, execute_pipeline, execute_and_parse, preview_command and suggest_command all occupy 'run a command' space, and wave_set_setting / wave_set_theme / wave_set_appearance overlap heavily. The verbose descriptions do mitigate this, but an agent still faces real misselection risk across the execution and Wave-config families. wave_create_widget vs wave_create_fish_widget vs wave_bootstrap_workspace are another near-duplicate trio.
Predominantly consistent snake_case verb_noun (execute_command, list_templates, save_ssh_profile, wave_list_blocks), with the wave_ family acting as a clean namespace. Minor deviations exist (ssh_execute inverts the verb_noun order, add_file_watch departs from the execute/list pattern), but overall readable and predictable.
69 tools is far beyond a well-scoped surface and includes many convenience wrappers (wave_create_fish_widget wraps wave_create_widget). The count reflects an accumulation of features rather than a deliberately designed set, and the sheer volume contributes directly to the disambiguation problems.
Coverage is genuinely broad and lifecycle-oriented: command execution, sessions, templates, environment snapshots, workspace profiles, SSH profiles, file watches, Wave config/blocks/secrets, and the inbox/reply/transcript flow. Small gaps remain — templates have list/save/run but no delete or update, and environment snapshots can be captured and diffed but not listed or removed.