Skip to content

Commit 529dff1

Browse files
committed
Update example
1 parent 84fecf2 commit 529dff1

File tree

2 files changed

+14
-5
lines changed
  • examples/clients/simple-streamable-private-gateway

2 files changed

+14
-5
lines changed

examples/clients/simple-streamable-private-gateway/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ The client provides several commands:
5353

5454
### Basic tool usage
5555

56-
```
56+
```markdown
5757
🚀 Simple Streamable Private Gateway
5858
Connecting to: https://localhost:8000/mcp
5959
📡 Opening StreamableHTTP transport connection...
@@ -85,6 +85,7 @@ mcp> quit
8585
## Configuration
8686

8787
- `MCP_SERVER_PORT` - Server port (default: 8000)
88+
- `MCP_SERVER_HOSTNAME` - Server hostname (default: 8000)
8889

8990
## Compatible Servers
9091

examples/clients/simple-streamable-private-gateway/mcp_simple_streamable_private_gateway/main.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818
class SimpleStreamablePrivateGateway:
1919
"""Simple MCP streamable private gateway client without authentication."""
2020

21-
def __init__(self, server_url: str, transport_type: str = "streamable-http"):
21+
def __init__(self, server_url: str, server_hostname: str, transport_type: str = "streamable-http"):
2222
self.server_url = server_url
23+
self.server_hostname = server_hostname
2324
self.transport_type = transport_type
2425
self.session: ClientSession | None = None
2526

@@ -29,11 +30,14 @@ async def connect(self):
2930

3031
try:
3132
print("📡 Opening StreamableHTTP transport connection...")
33+
# Note: terminate_on_close=False prevents SSL handshake failures during exit
34+
# Some servers may not handle session termination gracefully over SSL
3235
async with streamablehttp_client(
3336
url=self.server_url,
34-
headers={"Host": "mcp.deepwiki.com"},
35-
extensions={"sni_hostname": "mcp.deepwiki.com"},
37+
headers={"Host": self.server_hostname},
38+
extensions={"sni_hostname": self.server_hostname},
3639
timeout=timedelta(seconds=60),
40+
terminate_on_close=False, # Skip session termination to avoid SSL errors
3741
) as (read_stream, write_stream, get_session_id):
3842
await self._run_session(read_stream, write_stream, get_session_id)
3943

@@ -118,6 +122,7 @@ async def interactive_loop(self):
118122
continue
119123

120124
if command == "quit":
125+
print("👋 Goodbye!")
121126
break
122127

123128
elif command == "list":
@@ -151,6 +156,7 @@ async def interactive_loop(self):
151156
print("\n\n👋 Goodbye!")
152157
break
153158
except EOFError:
159+
print("\n👋 Goodbye!")
154160
break
155161

156162

@@ -159,15 +165,17 @@ async def main():
159165
# Default server URL - can be overridden with environment variable
160166
# Most MCP streamable HTTP servers use /mcp as the endpoint
161167
server_port = os.getenv("MCP_SERVER_PORT", "8000")
168+
server_hostname = os.getenv("MCP_SERVER_HOSTNAME", "localhost")
162169
transport_type = "streamable-http"
163170
server_url = f"https://localhost:{server_port}/mcp"
164171

165172
print("🚀 Simple Streamable Private Gateway")
166173
print(f"Connecting to: {server_url}")
174+
print(f"Server hostname: {server_hostname}")
167175
print(f"Transport type: {transport_type}")
168176

169177
# Start connection flow
170-
client = SimpleStreamablePrivateGateway(server_url, transport_type)
178+
client = SimpleStreamablePrivateGateway(server_url, server_hostname, transport_type)
171179
await client.connect()
172180

173181

0 commit comments

Comments
 (0)