@standardbeagle/mcp-tui 0.5.0 โ†’ 0.7.0

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.
package/README.md CHANGED
@@ -111,7 +111,7 @@ mcp-tui # Connects automatically!
111
111
 
112
112
  **๐Ÿค– Building Automation? Use CLI Mode:**
113
113
  ```bash
114
- # List all available tools via STDIO (combined command input)
114
+ # List all available tools via STDIO (combined command input)
115
115
  mcp-tui "npx -y @modelcontextprotocol/server-everything stdio" tool list
116
116
 
117
117
  # Or via SSE
@@ -121,10 +121,21 @@ mcp-tui --url http://localhost:8000/sse tool list
121
121
  mcp-tui --url http://localhost:8000/sse tool call echo message="Hello World"
122
122
 
123
123
  # Get JSON output for your scripts
124
- mcp-tui --json --url http://localhost:8000/sse tool list
124
+ mcp-tui --url http://localhost:8000/sse tool list -f json
125
125
  ```
126
126
  *Why this works: Combined command input, perfect for CI/CD, scripts, and automated testing workflows*
127
127
 
128
+ **๐Ÿงช Writing Tests? Use Porcelain Mode:**
129
+ ```bash
130
+ # Porcelain mode gives clean output for test assertions
131
+ mcp-tui --porcelain "npx -y @modelcontextprotocol/server-everything stdio" tool call echo message="test"
132
+
133
+ # Combine with JSON for predictable parsing
134
+ result=$(mcp-tui --porcelain -f json tool call weather location="NYC")
135
+ temp=$(echo "$result" | jq -r '.temp')
136
+ ```
137
+ *Why this works: No progress messages, only result data on stdout, detailed errors on stderr*
138
+
128
139
  **๐ŸŒ Have a Web Service? Connect via HTTP:**
129
140
  ```bash
130
141
  # Visual interface for web-based MCP servers
@@ -312,6 +323,47 @@ make test-servers
312
323
  ./mcp-tui --cmd node --args "test-servers/crash-server.js" tool list
313
324
  ```
314
325
 
326
+ ### Testing with Porcelain Mode
327
+
328
+ For automated testing and CI/CD pipelines, use `--porcelain` mode to get clean, parseable output:
329
+
330
+ ```bash
331
+ # Test that a tool returns expected result
332
+ result=$(mcp-tui --porcelain "npx -y @modelcontextprotocol/server-everything stdio" tool call echo message="test")
333
+ if [[ "$result" == *"test"* ]]; then
334
+ echo "PASS: echo tool returned expected message"
335
+ else
336
+ echo "FAIL: unexpected result: $result"
337
+ exit 1
338
+ fi
339
+
340
+ # Parse JSON output for assertions
341
+ result=$(mcp-tui --porcelain -f json "npx -y @modelcontextprotocol/server-everything stdio" tool call weather location="NYC")
342
+ temp=$(echo "$result" | jq -r '.temp')
343
+ if [[ "$temp" =~ ^[0-9]+ ]]; then
344
+ echo "PASS: temperature is numeric: $temp"
345
+ else
346
+ echo "FAIL: invalid temperature: $temp"
347
+ exit 1
348
+ fi
349
+
350
+ # Count tools in CI/CD
351
+ tool_count=$(mcp-tui --porcelain -f json tool list | jq '.count')
352
+ if [ "$tool_count" -gt 0 ]; then
353
+ echo "PASS: server exposes $tool_count tools"
354
+ else
355
+ echo "FAIL: no tools available"
356
+ exit 1
357
+ fi
358
+ ```
359
+
360
+ **Porcelain Mode Benefits:**
361
+ - โœ… No progress messages or timestamps
362
+ - โœ… Predictable output for assertions
363
+ - โœ… Clean stdout with only result data
364
+ - โœ… Detailed errors on stderr for debugging
365
+ - โœ… Perfect for CI/CD pipelines and automated tests
366
+
315
367
  ## ๐Ÿ“‹ Commands Reference
316
368
 
317
369
  ### Command Line Arguments
@@ -352,16 +404,15 @@ mcp-tui prompt get <name> [args...] # Get a prompt with arguments
352
404
 
353
405
  ### Global Options
354
406
  ```bash
355
- --url string # URL for SSE servers (primary method)
356
- --type string # Transport type (currently: sse)
357
- --timeout duration # Connection timeout (default 30s)
407
+ --url string # URL for SSE/HTTP servers
408
+ --cmd string # Command to run MCP server (STDIO mode)
409
+ --args strings # Arguments for server command
410
+ --transport string # Transport type (stdio, sse, http, streamable-http)
411
+ --timeout duration # Connection timeout (default 10s)
412
+ --format string # Output format: text or json (short: -f) (default "text")
413
+ --porcelain # Machine-readable output (no progress messages)
358
414
  --debug # Enable debug mode with detailed logging
359
415
  --log-level string # Log level (debug, info, warn, error)
360
- --json # Output results in JSON format
361
-
362
- # Legacy options (STDIO support coming back soon):
363
- --cmd string # Command to run MCP server (not yet implemented)
364
- --args strings # Arguments for server command (not yet implemented)
365
416
  ```
366
417
 
367
418
  ## ๐Ÿ” Error Handling & Debugging
package/bin/mcp-tui CHANGED
Binary file
Binary file
@@ -0,0 +1,363 @@
1
+ # MCP Configuration Reference
2
+
3
+ This document provides a comprehensive reference for MCP configuration patterns, including examples from various MCP clients and servers.
4
+
5
+ ## Table of Contents
6
+ - [Configuration Formats](#configuration-formats)
7
+ - [MCP-TUI Configuration](#mcp-tui-configuration)
8
+ - [Claude Desktop Configuration](#claude-desktop-configuration)
9
+ - [Transport Types](#transport-types)
10
+ - [Common Patterns](#common-patterns)
11
+
12
+ ## Configuration Formats
13
+
14
+ MCP configurations can be written in JSON or YAML format. The examples in this directory demonstrate both.
15
+
16
+ ### File Locations
17
+
18
+ MCP-TUI searches for configuration files in this order:
19
+
20
+ 1. **Command-line specified**: `--config path/to/config.json`
21
+ 2. **Project-local**: `.mcp.json`, `.claude.json` in current directory
22
+ 3. **User config**: `~/.config/mcp-tui/connections.json` (saved connections format)
23
+ 4. **Claude Desktop**:
24
+ - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
25
+ - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
26
+ - Linux: `~/.config/Claude/claude_desktop_config.json`
27
+ 5. **VS Code workspace**: `.vscode/mcp.json`
28
+
29
+ ## MCP-TUI Configuration
30
+
31
+ MCP-TUI supports two configuration approaches:
32
+
33
+ 1. **Unified Configuration**: Comprehensive structure for advanced features
34
+ 2. **Saved Connections**: Simplified format for managing multiple servers
35
+
36
+ ### Saved Connections Format (Recommended)
37
+
38
+ The saved connections format provides an intuitive way to manage multiple MCP servers with features like auto-connect, recent connections, and visual organization:
39
+
40
+ ```json
41
+ {
42
+ "version": "1.0",
43
+ "defaultServer": "filesystem",
44
+ "servers": {
45
+ "filesystem": {
46
+ "id": "filesystem",
47
+ "name": "Local Filesystem",
48
+ "description": "Access local files and directories",
49
+ "icon": "๐Ÿ“",
50
+ "transport": "stdio",
51
+ "command": "npx",
52
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user"],
53
+ "success": false,
54
+ "tags": ["local", "files"],
55
+ "lastUsed": "2025-01-12T10:30:00Z"
56
+ }
57
+ },
58
+ "recentConnections": [
59
+ {
60
+ "serverId": "filesystem",
61
+ "lastUsed": "2025-01-12T10:30:00Z",
62
+ "success": true
63
+ }
64
+ ]
65
+ }
66
+ ```
67
+
68
+ Key features:
69
+ - **Auto-connect**: Set `defaultServer` or configure single server for automatic connection
70
+ - **Visual organization**: Icons, names, descriptions, and tags for easy identification
71
+ - **Recent connections**: Tracks usage history and success status
72
+ - **Environment variables**: Supports `${env:VAR_NAME}` substitution
73
+
74
+ ### Unified Configuration
75
+
76
+ MCP-TUI uses a comprehensive configuration structure that supports multiple aspects of MCP client behavior.
77
+
78
+ ### Basic Structure
79
+
80
+ ```json
81
+ {
82
+ "connection": {
83
+ "type": "stdio|sse|http|streamable-http",
84
+ "command": "command-to-execute",
85
+ "args": ["arg1", "arg2"],
86
+ "url": "http://server-url",
87
+ "headers": {"Header": "Value"}
88
+ },
89
+ "transport": {
90
+ "http": { /* HTTP-specific settings */ },
91
+ "stdio": { /* STDIO-specific settings */ },
92
+ "sse": { /* SSE-specific settings */ }
93
+ },
94
+ "session": { /* Session management settings */ },
95
+ "error_handling": { /* Error handling configuration */ },
96
+ "debug": { /* Debug and logging settings */ },
97
+ "cli": { /* CLI-specific settings */ }
98
+ }
99
+ ```
100
+
101
+ ### Complete Example
102
+
103
+ See `mcp-config.json` and `mcp-config.yaml` for complete configuration examples.
104
+
105
+ ## Claude Desktop Configuration
106
+
107
+ Claude Desktop uses a simpler configuration format focused on server definitions.
108
+
109
+ ### Structure
110
+
111
+ ```json
112
+ {
113
+ "mcpServers": {
114
+ "server-name": {
115
+ "command": "executable",
116
+ "args": ["arg1", "arg2"],
117
+ "env": {
118
+ "ENV_VAR": "value"
119
+ }
120
+ }
121
+ }
122
+ }
123
+ ```
124
+
125
+ ### Multiple Servers Example
126
+
127
+ See `claude-desktop-config.json` for an example with multiple server configurations.
128
+
129
+ ## Transport Types
130
+
131
+ ### STDIO Transport
132
+
133
+ Most common for local MCP servers. The server communicates via standard input/output.
134
+
135
+ ```json
136
+ {
137
+ "type": "stdio",
138
+ "command": "npx",
139
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
140
+ }
141
+ ```
142
+
143
+ ### HTTP Transport
144
+
145
+ For REST API-style MCP servers with request/response pattern.
146
+
147
+ ```json
148
+ {
149
+ "type": "http",
150
+ "url": "http://localhost:8080/mcp",
151
+ "headers": {
152
+ "Authorization": "Bearer token"
153
+ }
154
+ }
155
+ ```
156
+
157
+ ### SSE Transport
158
+
159
+ For servers using Server-Sent Events for real-time communication.
160
+
161
+ ```json
162
+ {
163
+ "type": "sse",
164
+ "url": "http://localhost:3000/sse",
165
+ "headers": {
166
+ "X-API-Key": "api-key"
167
+ }
168
+ }
169
+ ```
170
+
171
+ ### Streamable HTTP Transport
172
+
173
+ For servers supporting streaming HTTP responses.
174
+
175
+ ```json
176
+ {
177
+ "type": "streamable-http",
178
+ "url": "http://localhost:8080/mcp/stream"
179
+ }
180
+ ```
181
+
182
+ ## Common Patterns
183
+
184
+ ### Environment Variable Substitution
185
+
186
+ Many configurations support environment variable substitution using `${VAR_NAME}` syntax:
187
+
188
+ ```json
189
+ {
190
+ "headers": {
191
+ "Authorization": "Bearer ${API_TOKEN}",
192
+ "X-API-Key": "${API_KEY}"
193
+ }
194
+ }
195
+ ```
196
+
197
+ ### Timeout Configuration
198
+
199
+ Standard timeout values in Go duration format:
200
+ - `30s` - 30 seconds
201
+ - `5m` - 5 minutes
202
+ - `1h30m` - 1 hour 30 minutes
203
+
204
+ ### Security Settings
205
+
206
+ ```json
207
+ {
208
+ "connection": {
209
+ "deny_unsafe_commands": true,
210
+ "allowed_commands": ["npx", "node", "python"]
211
+ },
212
+ "transport": {
213
+ "http": {
214
+ "tls_min_version": "1.2",
215
+ "tls_insecure_skip_verify": false
216
+ }
217
+ }
218
+ }
219
+ ```
220
+
221
+ ### Debug Configuration
222
+
223
+ ```json
224
+ {
225
+ "debug": {
226
+ "enabled": true,
227
+ "log_level": "debug",
228
+ "http_debugging": true,
229
+ "event_tracing": true
230
+ }
231
+ }
232
+ ```
233
+
234
+ ## Server-Specific Examples
235
+
236
+ ### Official MCP Servers
237
+
238
+ 1. **Everything Server** (test server with all capabilities):
239
+ ```json
240
+ {
241
+ "command": "npx",
242
+ "args": ["-y", "@modelcontextprotocol/server-everything", "stdio"]
243
+ }
244
+ ```
245
+
246
+ 2. **Filesystem Server**:
247
+ ```json
248
+ {
249
+ "command": "npx",
250
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path1", "/path2"]
251
+ }
252
+ ```
253
+
254
+ 3. **SQLite Server**:
255
+ ```json
256
+ {
257
+ "command": "npx",
258
+ "args": ["mcp-server-sqlite", "--db-path", "/path/to/database.db"]
259
+ }
260
+ ```
261
+
262
+ ### Custom Servers
263
+
264
+ 1. **Python Server**:
265
+ ```json
266
+ {
267
+ "command": "python",
268
+ "args": ["server.py", "--port", "3000"],
269
+ "env": {
270
+ "PYTHONPATH": "/path/to/modules"
271
+ }
272
+ }
273
+ ```
274
+
275
+ 2. **Node.js Server**:
276
+ ```json
277
+ {
278
+ "command": "node",
279
+ "args": ["dist/index.js"],
280
+ "env": {
281
+ "NODE_ENV": "production"
282
+ }
283
+ }
284
+ ```
285
+
286
+ 3. **Docker Container**:
287
+ ```json
288
+ {
289
+ "command": "docker",
290
+ "args": ["run", "-i", "--rm", "my-mcp-server:latest"]
291
+ }
292
+ ```
293
+
294
+ ## Best Practices
295
+
296
+ 1. **Use absolute paths** for file references and commands when possible
297
+ 2. **Set appropriate timeouts** based on your server's response times
298
+ 3. **Enable debug logging** during development
299
+ 4. **Use environment variables** for sensitive data like API keys
300
+ 5. **Validate commands** with `deny_unsafe_commands: true` for security
301
+ 6. **Configure health checks** for production deployments
302
+ 7. **Set up proper error handling** with retry logic for network transports
303
+
304
+ ## Validation
305
+
306
+ MCP-TUI includes configuration validation. Common validation rules:
307
+
308
+ - Transport type must be one of: `stdio`, `sse`, `http`, `streamable-http`
309
+ - Timeouts must be positive durations
310
+ - Buffer sizes must be at least 1024 bytes
311
+ - Log levels must be one of: `debug`, `info`, `warn`, `error`
312
+ - Backoff strategies must be one of: `none`, `linear`, `exponential`
313
+
314
+ ## Migration from Other Clients
315
+
316
+ ### From Claude Desktop to MCP-TUI
317
+
318
+ Claude Desktop configuration:
319
+ ```json
320
+ {
321
+ "mcpServers": {
322
+ "myserver": {
323
+ "command": "node",
324
+ "args": ["server.js"]
325
+ }
326
+ }
327
+ }
328
+ ```
329
+
330
+ Equivalent MCP-TUI configuration:
331
+ ```json
332
+ {
333
+ "connection": {
334
+ "type": "stdio",
335
+ "command": "node",
336
+ "args": ["server.js"]
337
+ }
338
+ }
339
+ ```
340
+
341
+ ## Example Files in This Directory
342
+
343
+ ### Saved Connections Format
344
+ - `single-server-config.json` - Simple auto-connect setup
345
+ - `development-preset.json` - Common development tools
346
+ - `multi-transport-config.json` - All transport types with saved connections
347
+ - `production-setup.json` - Production environment configuration
348
+
349
+ ### Unified Configuration Format
350
+ - `mcp-config.json` - Basic MCP-TUI configuration
351
+ - `mcp-config.yaml` - Same configuration in YAML format
352
+ - `multi-server-config.json` - Multiple servers with different transports
353
+ - `transport-examples.json` - Examples for each transport type
354
+
355
+ ### Compatibility Formats
356
+ - `claude-desktop-config.json` - Claude Desktop multi-server example
357
+
358
+ ### Quick Start
359
+
360
+ 1. **Copy a preset**: Use `development-preset.json` as a starting point
361
+ 2. **Auto-connect setup**: Copy `single-server-config.json` for immediate connection
362
+ 3. **Multi-environment**: Use `production-setup.json` for complex setups
363
+ 4. **All features**: Check `multi-transport-config.json` for comprehensive example
@@ -0,0 +1,66 @@
1
+ {
2
+ "mcpServers": {
3
+ "filesystem": {
4
+ "command": "npx",
5
+ "args": [
6
+ "-y",
7
+ "@modelcontextprotocol/server-filesystem",
8
+ "/Users/username/Desktop",
9
+ "/Users/username/Downloads"
10
+ ]
11
+ },
12
+ "weather": {
13
+ "command": "uv",
14
+ "args": [
15
+ "--directory",
16
+ "/path/to/weather",
17
+ "run",
18
+ "weather.py"
19
+ ]
20
+ },
21
+ "github": {
22
+ "command": "node",
23
+ "args": [
24
+ "/path/to/github/dist/index.js"
25
+ ],
26
+ "env": {
27
+ "GITHUB_PERSONAL_ACCESS_TOKEN": "your_github_pat_here"
28
+ }
29
+ },
30
+ "sqlite": {
31
+ "command": "npx",
32
+ "args": [
33
+ "mcp-server-sqlite",
34
+ "--db-path",
35
+ "/path/to/database.db"
36
+ ]
37
+ },
38
+ "puppeteer": {
39
+ "command": "npx",
40
+ "args": [
41
+ "-y",
42
+ "@modelcontextprotocol/server-puppeteer"
43
+ ]
44
+ },
45
+ "postgres": {
46
+ "command": "npx",
47
+ "args": [
48
+ "-y",
49
+ "@modelcontextprotocol/server-postgres",
50
+ "postgresql://localhost/mydb"
51
+ ]
52
+ },
53
+ "custom-local": {
54
+ "command": "python",
55
+ "args": [
56
+ "/path/to/custom/server.py",
57
+ "--port",
58
+ "3000"
59
+ ],
60
+ "env": {
61
+ "API_KEY": "your-api-key",
62
+ "DEBUG": "true"
63
+ }
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "version": "1.0",
3
+ "defaultServer": "everything",
4
+ "servers": {
5
+ "everything": {
6
+ "id": "everything",
7
+ "name": "Everything Server",
8
+ "description": "Official MCP server with all features for testing",
9
+ "icon": "๐ŸŒŸ",
10
+ "transport": "stdio",
11
+ "command": "npx",
12
+ "args": ["-y", "@modelcontextprotocol/server-everything", "stdio"],
13
+ "success": false,
14
+ "tags": ["testing", "development"]
15
+ },
16
+ "filesystem-home": {
17
+ "id": "filesystem-home",
18
+ "name": "Home Directory",
19
+ "description": "Access your home directory files",
20
+ "icon": "๐Ÿ ",
21
+ "transport": "stdio",
22
+ "command": "npx",
23
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "~"],
24
+ "success": false,
25
+ "tags": ["filesystem", "home"]
26
+ },
27
+ "filesystem-workspace": {
28
+ "id": "filesystem-workspace",
29
+ "name": "Workspace Files",
30
+ "description": "Access current workspace directory",
31
+ "icon": "๐Ÿ’ผ",
32
+ "transport": "stdio",
33
+ "command": "npx",
34
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "."],
35
+ "success": false,
36
+ "tags": ["filesystem", "workspace"]
37
+ },
38
+ "sqlite-local": {
39
+ "id": "sqlite-local",
40
+ "name": "Local SQLite DB",
41
+ "description": "Local SQLite database access",
42
+ "icon": "๐Ÿ—„๏ธ",
43
+ "transport": "stdio",
44
+ "command": "npx",
45
+ "args": ["-y", "@modelcontextprotocol/server-sqlite", "./database.db"],
46
+ "success": false,
47
+ "tags": ["database", "sqlite"]
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "connection": {
3
+ "type": "stdio",
4
+ "command": "npx",
5
+ "args": [
6
+ "-y",
7
+ "@modelcontextprotocol/server-everything",
8
+ "stdio"
9
+ ],
10
+ "connection_timeout": "30s",
11
+ "request_timeout": "30s",
12
+ "health_check_timeout": "5s",
13
+ "deny_unsafe_commands": true
14
+ },
15
+ "transport": {
16
+ "http": {
17
+ "timeout": "30s",
18
+ "max_idle_conns": 100,
19
+ "max_idle_conns_per_host": 10,
20
+ "idle_conn_timeout": "90s",
21
+ "tls_min_version": "1.2",
22
+ "user_agent": "mcp-tui/0.1.0"
23
+ },
24
+ "stdio": {
25
+ "command_validation": true,
26
+ "max_processes": 10,
27
+ "process_timeout": "300s",
28
+ "kill_timeout": "10s"
29
+ },
30
+ "sse": {
31
+ "reconnect_interval": "5s",
32
+ "max_reconnect_attempts": 5,
33
+ "buffer_size": 8192,
34
+ "read_timeout": "30s",
35
+ "write_timeout": "10s"
36
+ }
37
+ },
38
+ "session": {
39
+ "health_check_interval": "30s",
40
+ "health_check_timeout": "5s",
41
+ "max_reconnect_attempts": 3,
42
+ "reconnect_delay": "2s",
43
+ "reconnect_backoff": "exponential",
44
+ "max_reconnect_delay": "60s",
45
+ "enable_persistence": false,
46
+ "persistence_interval": "60s"
47
+ },
48
+ "error_handling": {
49
+ "enable_classification": true,
50
+ "user_friendly_messages": true,
51
+ "max_error_history": 1000,
52
+ "error_reporting": false,
53
+ "enable_retry": true,
54
+ "max_retry_attempts": 3,
55
+ "retry_delay": "1s",
56
+ "retry_backoff": "exponential"
57
+ },
58
+ "debug": {
59
+ "enabled": false,
60
+ "log_level": "info",
61
+ "event_tracing": false,
62
+ "max_traced_events": 1000,
63
+ "http_debugging": false,
64
+ "http_trace_body": false,
65
+ "http_trace_headers": false,
66
+ "pretty_print": true,
67
+ "colored_output": true,
68
+ "timestamp_format": "2006-01-02T15:04:05Z07:00",
69
+ "export_events": false,
70
+ "export_format": "json"
71
+ },
72
+ "cli": {
73
+ "output_format": "table",
74
+ "quiet_mode": false,
75
+ "verbose_mode": false,
76
+ "no_color": false,
77
+ "show_progress": true,
78
+ "progress_style": "bar",
79
+ "enable_clipboard": true,
80
+ "enable_paging": true,
81
+ "page_size": 25
82
+ }
83
+ }