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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy