docs: improve documentation clarity and client integration steps (#567)
- Fix typo in "TroubleShooting" heading, changing it to "Troubleshooting" - Improve CLI usage instructions by formatting commands as code blocks and marking them with "bash" - Change "Start the Server" to a third-level heading for clarity - Add additional code examples for real-world client testing and interaction steps - Clarify and condense instructions for adding the tool to a popular MCP client --------- Signed-off-by: appleboy <appleboy.tw@gmail.com> Co-authored-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
7a89c31c7a
commit
920e5a39ba
1 changed files with 40 additions and 36 deletions
|
|
@ -154,12 +154,12 @@ server := mcp.NewServer(&mcp.Implementation{Name: "authenticated-mcp-server"}, n
|
|||
|
||||
// Create authentication middleware
|
||||
authMiddleware := auth.RequireBearerToken(verifier, &auth.RequireBearerTokenOptions{
|
||||
Scopes: []string{"read", "write"},
|
||||
Scopes: []string{"read", "write"},
|
||||
})
|
||||
|
||||
// Create MCP handler
|
||||
handler := mcp.NewStreamableHTTPHandler(func(r *http.Request) *mcp.Server {
|
||||
return server
|
||||
return server
|
||||
}, nil)
|
||||
|
||||
// Apply authentication middleware to MCP handler
|
||||
|
|
@ -185,9 +185,9 @@ authenticatedHandler := authMiddleware(customMiddleware(handler))
|
|||
|
||||
```go
|
||||
func jwtVerifier(ctx context.Context, tokenString string) (*auth.TokenInfo, error) {
|
||||
// JWT token verification logic
|
||||
// On success: Return TokenInfo
|
||||
// On failure: Return auth.ErrInvalidToken
|
||||
// JWT token verification logic
|
||||
// On success: Return TokenInfo
|
||||
// On failure: Return auth.ErrInvalidToken
|
||||
}
|
||||
```
|
||||
|
||||
|
|
@ -196,20 +196,20 @@ func jwtVerifier(ctx context.Context, tokenString string) (*auth.TokenInfo, erro
|
|||
```go
|
||||
// Get authentication information in MCP tool
|
||||
func MyTool(ctx context.Context, req *mcp.CallToolRequest, args MyArgs) (*mcp.CallToolResult, any, error) {
|
||||
// Extract authentication info from request
|
||||
userInfo := req.Extra.TokenInfo
|
||||
|
||||
// Check scopes
|
||||
if !slices.Contains(userInfo.Scopes, "read") {
|
||||
return nil, nil, fmt.Errorf("insufficient permissions: read scope required")
|
||||
}
|
||||
|
||||
// Execute tool logic
|
||||
return &mcp.CallToolResult{
|
||||
Content: []mcp.Content{
|
||||
&mcp.TextContent{Text: "Tool executed successfully"},
|
||||
},
|
||||
}, nil, nil
|
||||
// Extract authentication info from request
|
||||
userInfo := req.Extra.TokenInfo
|
||||
|
||||
// Check scopes
|
||||
if !slices.Contains(userInfo.Scopes, "read") {
|
||||
return nil, nil, fmt.Errorf("insufficient permissions: read scope required")
|
||||
}
|
||||
|
||||
// Execute tool logic
|
||||
return &mcp.CallToolResult{
|
||||
Content: []mcp.Content{
|
||||
&mcp.TextContent{Text: "Tool executed successfully"},
|
||||
},
|
||||
}, nil, nil
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue