Add MCP integration with MCPServer for tool-based interactions
- Introduce `MCPServer` to support connecting to MCP servers via stdio, SSE, or HTTP. - Implement tool fetching, management, and invocation through MCP. - Add `WithMCPServer` method to `ToolBox` for seamless tool integration. - Extend schema package to handle raw JSON schemas for MCP tools. - Update documentation with MCP usage guidelines and examples.
This commit is contained in:
41
CLAUDE.md
41
CLAUDE.md
@@ -20,6 +20,7 @@
|
||||
- `llm.go`: Contains core interfaces (`LLM`, `ChatCompletion`) and shared types (`Message`, `Role`, `Image`).
|
||||
- Provider implementations are in `openai.go`, `anthropic.go`, and `google.go`.
|
||||
- Schema definitions for tool calling are in the `schema/` directory.
|
||||
- `mcp.go`: MCP (Model Context Protocol) client integration for connecting to MCP servers.
|
||||
- **Imports**: Organize imports into groups: standard library, then third-party libraries.
|
||||
- **Documentation**: Use standard Go doc comments for exported symbols.
|
||||
- **README.md**: The README.md file should always be kept up to date with any significant changes to the project.
|
||||
@@ -45,3 +46,43 @@
|
||||
- `Ctrl+S` - Settings
|
||||
- `Ctrl+N` - New conversation
|
||||
- `Esc` - Exit/Cancel
|
||||
|
||||
## MCP (Model Context Protocol) Support
|
||||
|
||||
The library supports connecting to MCP servers to use their tools. MCP servers can be connected via:
|
||||
- **stdio**: Run a command as a subprocess
|
||||
- **sse**: Connect to an SSE endpoint
|
||||
- **http**: Connect to a streamable HTTP endpoint
|
||||
|
||||
### Usage Example
|
||||
```go
|
||||
ctx := context.Background()
|
||||
|
||||
// Create and connect to an MCP server
|
||||
server := &llm.MCPServer{
|
||||
Name: "my-server",
|
||||
Command: "my-mcp-server",
|
||||
Args: []string{"--some-flag"},
|
||||
}
|
||||
if err := server.Connect(ctx); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer server.Close()
|
||||
|
||||
// Add the server to a toolbox
|
||||
toolbox := llm.NewToolBox().WithMCPServer(server)
|
||||
|
||||
// Use the toolbox in requests - MCP tools are automatically available
|
||||
req := llm.Request{
|
||||
Messages: []llm.Message{{Role: llm.RoleUser, Text: "Use the MCP tool"}},
|
||||
Toolbox: toolbox,
|
||||
}
|
||||
```
|
||||
|
||||
### MCPServer Options
|
||||
- `Name`: Friendly name for logging
|
||||
- `Command`: Command to run (for stdio transport)
|
||||
- `Args`: Command arguments
|
||||
- `Env`: Additional environment variables
|
||||
- `URL`: Endpoint URL (for sse/http transport)
|
||||
- `Transport`: "stdio" (default), "sse", or "http"
|
||||
|
||||
Reference in New Issue
Block a user