Skip to content

Commit ce49de8

Browse files
committed
changes from copilot
1 parent ebf2d84 commit ce49de8

File tree

3 files changed

+31
-14
lines changed

3 files changed

+31
-14
lines changed

cmd/thv/app/proxy_stdio.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var proxyStdioCmd = &cobra.Command{
2323
Long: `Create a stdio-based proxy that connects stdin/stdout to a target MCP server.
2424
2525
Example:
26-
thv proxy stdio --host 127.0.0.1 --port 9000 --workload-name my-server my-server-proxy
26+
thv proxy stdio --workload-name my-server my-server-proxy
2727
2828
Flags:
2929
--workload-name Workload name for the proxy (required)
@@ -58,10 +58,12 @@ func proxyStdioCmdFunc(cmd *cobra.Command, args []string) error {
5858
return fmt.Errorf("only HTTP/SSE workloads are supported for this proxy")
5959
}
6060

61-
logger.Infof("Starting stdio proxy for server=%q on %s:%d -> %s",
62-
serverName, host, port, stdioWorkloadName)
61+
logger.Infof("Starting stdio proxy for server=%q -> %s", serverName, stdioWorkloadName)
6362

64-
bridge := transport.NewStdioBridge(stdioWorkload.URL)
63+
bridge, err := transport.NewStdioBridge(stdioWorkload.URL)
64+
if err != nil {
65+
return fmt.Errorf("failed to create stdio bridge: %w", err)
66+
}
6567
bridge.Start(ctx)
6668

6769
// Consume until interrupt

docs/cli/thv_proxy_stdio.md

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/transport/bridge.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ func (b *StdioBridge) loop(ctx context.Context) {
5858
go b.runStreamableWriter(ctx)
5959
} else { // legacy SSE
6060
b.postURL = b.baseURL // reset
61-
const legacyWorkerCount = 2
62-
b.wg.Add(legacyWorkerCount)
6361
go b.runLegacyReader(ctx)
6462
go b.runLegacyWriter(ctx)
6563
}
@@ -75,8 +73,7 @@ func (b *StdioBridge) loop(ctx context.Context) {
7573

7674
// Header include Mcp-Session-Id if needed
7775
func (b *StdioBridge) detectTransport(ctx context.Context) (string, error) {
78-
initReq := map[string]interface{}{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": map[string]interface{}{}}
79-
body, err := json.Marshal(initReq)
76+
body, err := buildJSONRPCInitializeRequest()
8077
if err != nil {
8178
logger.Errorf("failed to marshal initialization request: %v", err)
8279
return "", err
@@ -126,7 +123,11 @@ func (b *StdioBridge) handleInitializeResponse(resp *http.Response) {
126123
// Streamable HTTP handlers
127124
func (b *StdioBridge) runStreamableReader(ctx context.Context) {
128125
defer b.wg.Done()
129-
req, _ := http.NewRequestWithContext(ctx, "GET", b.baseURL.String(), nil)
126+
req, err := http.NewRequestWithContext(ctx, "GET", b.baseURL.String(), nil)
127+
if err != nil {
128+
logger.Errorf("Failed to create GET request: %v", err)
129+
return
130+
}
130131
req.Header.Set("Accept", "text/event-stream")
131132
copyHeaders(req.Header, b.headers)
132133
resp, err := http.DefaultClient.Do(req)
@@ -159,7 +160,11 @@ func (b *StdioBridge) runStreamableWriter(ctx context.Context) {
159160
logger.Errorf("Invalid JSON input: %v", err)
160161
continue
161162
}
162-
req, _ := http.NewRequestWithContext(ctx, "POST", b.baseURL.String(), strings.NewReader(raw))
163+
req, err := http.NewRequestWithContext(ctx, "POST", b.baseURL.String(), strings.NewReader(raw))
164+
if err != nil {
165+
logger.Errorf("Failed to create HTTP request: %v", err)
166+
continue
167+
}
163168
req.Header.Set("Content-Type", "application/json")
164169
req.Header.Set("Accept", "application/json, text/event-stream")
165170
copyHeaders(req.Header, b.headers)
@@ -275,10 +280,18 @@ func (b *StdioBridge) updatePostURL(path string) {
275280
logger.Infof("POST URL updated to %s", b.postURL)
276281
}
277282

283+
func buildJSONRPCInitializeRequest() ([]byte, error) {
284+
req := map[string]interface{}{
285+
"jsonrpc": "2.0",
286+
"id": 1,
287+
"method": "initialize",
288+
"params": map[string]interface{}{},
289+
}
290+
return json.Marshal(req)
291+
}
292+
278293
func (b *StdioBridge) sendInitialize(ctx context.Context) {
279-
reqBody, err := json.Marshal(map[string]interface{}{
280-
"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": map[string]interface{}{},
281-
})
294+
reqBody, err := buildJSONRPCInitializeRequest()
282295
if err != nil {
283296
logger.Errorf("Failed to marshal initialize request body: %v", err)
284297
return

0 commit comments

Comments
 (0)