Add four new example servers demonstrating different SEP-2053 variant patterns: - model-optimized (same tools, different descriptions per LLM family) - trading (API versioning with deprecation lifecycle) - research (context budget management) - Refactor the existing variants-http example into a GitHub-style server with custom ranking. Signed-off-by: Kurt Degiorgio <kdegiorgio@bloomberg.net>
110 lines
3.9 KiB
Go
110 lines
3.9 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/modelcontextprotocol/go-sdk/mcp"
|
|
)
|
|
|
|
type SearchPapersInput struct {
|
|
Query string `json:"query" jsonschema:"search query for academic papers"`
|
|
MaxResults int `json:"maxResults,omitempty" jsonschema:"maximum number of results (1-50, default: 10)"`
|
|
Year int `json:"year,omitempty" jsonschema:"filter by publication year"`
|
|
Field string `json:"field,omitempty" jsonschema:"filter by field: cs, math, physics, biology, medicine"`
|
|
}
|
|
|
|
type Paper struct {
|
|
ID string `json:"id"`
|
|
Title string `json:"title"`
|
|
Authors []string `json:"authors"`
|
|
Year int `json:"year"`
|
|
Abstract string `json:"abstract"`
|
|
Citations int `json:"citations"`
|
|
}
|
|
|
|
type SearchPapersOutput struct {
|
|
Papers []Paper `json:"papers"`
|
|
TotalFound int `json:"totalFound"`
|
|
}
|
|
|
|
func searchPapers(_ context.Context, _ *mcp.CallToolRequest, in SearchPapersInput) (*mcp.CallToolResult, SearchPapersOutput, error) {
|
|
return nil, SearchPapersOutput{
|
|
Papers: []Paper{
|
|
{
|
|
ID: "arxiv:2301.01234",
|
|
Title: "Attention Is All You Need: A Comprehensive Survey",
|
|
Authors: []string{"Smith, J.", "Chen, L.", "Kumar, A."},
|
|
Year: 2024,
|
|
Abstract: "We present a comprehensive survey of transformer architectures and their applications across natural language processing, computer vision, and scientific computing.",
|
|
Citations: 342,
|
|
},
|
|
{
|
|
ID: "arxiv:2302.05678",
|
|
Title: "Scaling Laws for Neural Language Models",
|
|
Authors: []string{"Johnson, R.", "Williams, K."},
|
|
Year: 2024,
|
|
Abstract: "This paper investigates empirical scaling laws governing the performance of language models as a function of model size, dataset size, and compute budget.",
|
|
Citations: 189,
|
|
},
|
|
},
|
|
TotalFound: 1247,
|
|
}, nil
|
|
}
|
|
|
|
type GetPaperInput struct {
|
|
ID string `json:"id" jsonschema:"paper identifier (e.g. arxiv:2301.01234, doi:10.1234/5678)"`
|
|
}
|
|
|
|
type PaperDetail struct {
|
|
ID string `json:"id"`
|
|
Title string `json:"title"`
|
|
Authors []string `json:"authors"`
|
|
Year int `json:"year"`
|
|
Abstract string `json:"abstract"`
|
|
Citations int `json:"citations"`
|
|
References []string `json:"references"`
|
|
Keywords []string `json:"keywords"`
|
|
Venue string `json:"venue"`
|
|
}
|
|
|
|
type GetPaperOutput struct {
|
|
Paper PaperDetail `json:"paper"`
|
|
}
|
|
|
|
func getPaper(_ context.Context, _ *mcp.CallToolRequest, in GetPaperInput) (*mcp.CallToolResult, GetPaperOutput, error) {
|
|
return nil, GetPaperOutput{
|
|
Paper: PaperDetail{
|
|
ID: in.ID,
|
|
Title: "Attention Is All You Need: A Comprehensive Survey",
|
|
Authors: []string{"Smith, J.", "Chen, L.", "Kumar, A."},
|
|
Year: 2024,
|
|
Abstract: "We present a comprehensive survey of transformer architectures and their applications across natural language processing, computer vision, and scientific computing.",
|
|
Citations: 342,
|
|
References: []string{"arxiv:1706.03762", "arxiv:1810.04805", "arxiv:2005.14165"},
|
|
Keywords: []string{"transformers", "attention mechanisms", "deep learning", "survey"},
|
|
Venue: "NeurIPS 2024",
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
type SummarizeInput struct {
|
|
Text string `json:"text" jsonschema:"text to summarize"`
|
|
Style string `json:"style,omitempty" jsonschema:"summary style: abstract, bullet-points, executive (default: abstract)"`
|
|
Length string `json:"length,omitempty" jsonschema:"summary length: short, medium, long (default: medium)"`
|
|
}
|
|
|
|
type SummarizeOutput struct {
|
|
Summary string `json:"summary"`
|
|
Style string `json:"style"`
|
|
}
|
|
|
|
func summarize(_ context.Context, _ *mcp.CallToolRequest, in SummarizeInput) (*mcp.CallToolResult, SummarizeOutput, error) {
|
|
style := in.Style
|
|
if style == "" {
|
|
style = "abstract"
|
|
}
|
|
return nil, SummarizeOutput{
|
|
Summary: "This paper presents key findings in the field, demonstrating significant improvements over prior work through novel methodology and comprehensive evaluation across multiple benchmarks.",
|
|
Style: style,
|
|
}, nil
|
|
}
|