Skip to content

Commit 342c14d

Browse files
authored
Unified Client Transport Layer for Streamable HTTP Support (#114)
* add transport layer interface * universal client * impl sse & stdio transport based on the original client * refactor old client to provide compibility * rename * remove old client types * add test for stdio transport * rename 'done' to 'closed', to distinguish with ctx.Done * add cancelSSEStream for better handling of close * fix connection leak when start timeout * avoid multiple starting * use atomic for closed to be more natural compared to started * fix leak of timer * Create sse_test.go * enforce test * add comment * sse: add custom header in start request * update comment * comment * cover #88 * cover #107 * fix demo sse server in race test
1 parent 2e084df commit 342c14d

File tree

13 files changed

+2051
-1253
lines changed

13 files changed

+2051
-1253
lines changed

client/client.go

Lines changed: 381 additions & 107 deletions
Large diffs are not rendered by default.

client/interface.go

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
// Package client provides MCP (Model Control Protocol) client implementations.
2+
package client
3+
4+
import (
5+
"context"
6+
7+
"github.com/mark3labs/mcp-go/mcp"
8+
)
9+
10+
// MCPClient represents an MCP client interface
11+
type MCPClient interface {
12+
// Initialize sends the initial connection request to the server
13+
Initialize(
14+
ctx context.Context,
15+
request mcp.InitializeRequest,
16+
) (*mcp.InitializeResult, error)
17+
18+
// Ping checks if the server is alive
19+
Ping(ctx context.Context) error
20+
21+
// ListResourcesByPage manually list resources by page.
22+
ListResourcesByPage(
23+
ctx context.Context,
24+
request mcp.ListResourcesRequest,
25+
) (*mcp.ListResourcesResult, error)
26+
27+
// ListResources requests a list of available resources from the server
28+
ListResources(
29+
ctx context.Context,
30+
request mcp.ListResourcesRequest,
31+
) (*mcp.ListResourcesResult, error)
32+
33+
// ListResourceTemplatesByPage manually list resource templates by page.
34+
ListResourceTemplatesByPage(
35+
ctx context.Context,
36+
request mcp.ListResourceTemplatesRequest,
37+
) (*mcp.ListResourceTemplatesResult,
38+
error)
39+
40+
// ListResourceTemplates requests a list of available resource templates from the server
41+
ListResourceTemplates(
42+
ctx context.Context,
43+
request mcp.ListResourceTemplatesRequest,
44+
) (*mcp.ListResourceTemplatesResult,
45+
error)
46+
47+
// ReadResource reads a specific resource from the server
48+
ReadResource(
49+
ctx context.Context,
50+
request mcp.ReadResourceRequest,
51+
) (*mcp.ReadResourceResult, error)
52+
53+
// Subscribe requests notifications for changes to a specific resource
54+
Subscribe(ctx context.Context, request mcp.SubscribeRequest) error
55+
56+
// Unsubscribe cancels notifications for a specific resource
57+
Unsubscribe(ctx context.Context, request mcp.UnsubscribeRequest) error
58+
59+
// ListPromptsByPage manually list prompts by page.
60+
ListPromptsByPage(
61+
ctx context.Context,
62+
request mcp.ListPromptsRequest,
63+
) (*mcp.ListPromptsResult, error)
64+
65+
// ListPrompts requests a list of available prompts from the server
66+
ListPrompts(
67+
ctx context.Context,
68+
request mcp.ListPromptsRequest,
69+
) (*mcp.ListPromptsResult, error)
70+
71+
// GetPrompt retrieves a specific prompt from the server
72+
GetPrompt(
73+
ctx context.Context,
74+
request mcp.GetPromptRequest,
75+
) (*mcp.GetPromptResult, error)
76+
77+
// ListToolsByPage manually list tools by page.
78+
ListToolsByPage(
79+
ctx context.Context,
80+
request mcp.ListToolsRequest,
81+
) (*mcp.ListToolsResult, error)
82+
83+
// ListTools requests a list of available tools from the server
84+
ListTools(
85+
ctx context.Context,
86+
request mcp.ListToolsRequest,
87+
) (*mcp.ListToolsResult, error)
88+
89+
// CallTool invokes a specific tool on the server
90+
CallTool(
91+
ctx context.Context,
92+
request mcp.CallToolRequest,
93+
) (*mcp.CallToolResult, error)
94+
95+
// SetLevel sets the logging level for the server
96+
SetLevel(ctx context.Context, request mcp.SetLevelRequest) error
97+
98+
// Complete requests completion options for a given argument
99+
Complete(
100+
ctx context.Context,
101+
request mcp.CompleteRequest,
102+
) (*mcp.CompleteResult, error)
103+
104+
// Close client connection and cleanup resources
105+
Close() error
106+
107+
// OnNotification registers a handler for notifications
108+
OnNotification(handler func(notification mcp.JSONRPCNotification))
109+
}

0 commit comments

Comments
 (0)