!-logging !+resources
()
| 148 | |
| 149 | // !+resources |
| 150 | func Example_resources() { |
| 151 | ctx := context.Background() |
| 152 | |
| 153 | resources := map[string]string{ |
| 154 | "file:///a": "a", |
| 155 | "file:///dir/x": "x", |
| 156 | "file:///dir/y": "y", |
| 157 | } |
| 158 | |
| 159 | handler := func(_ context.Context, req *mcp.ReadResourceRequest) (*mcp.ReadResourceResult, error) { |
| 160 | uri := req.Params.URI |
| 161 | c, ok := resources[uri] |
| 162 | if !ok { |
| 163 | return nil, mcp.ResourceNotFoundError(uri) |
| 164 | } |
| 165 | return &mcp.ReadResourceResult{ |
| 166 | Contents: []*mcp.ResourceContents{{URI: uri, Text: c}}, |
| 167 | }, nil |
| 168 | } |
| 169 | |
| 170 | // Create a server with a single resource. |
| 171 | s := mcp.NewServer(&mcp.Implementation{Name: "server", Version: "v0.0.1"}, nil) |
| 172 | s.AddResource(&mcp.Resource{URI: "file:///a"}, handler) |
| 173 | s.AddResourceTemplate(&mcp.ResourceTemplate{URITemplate: "file:///dir/{f}"}, handler) |
| 174 | |
| 175 | // Create a client. |
| 176 | c := mcp.NewClient(&mcp.Implementation{Name: "client", Version: "v0.0.1"}, nil) |
| 177 | |
| 178 | // Connect the server and client. |
| 179 | t1, t2 := mcp.NewInMemoryTransports() |
| 180 | if _, err := s.Connect(ctx, t1, nil); err != nil { |
| 181 | log.Fatal(err) |
| 182 | } |
| 183 | cs, err := c.Connect(ctx, t2, nil) |
| 184 | if err != nil { |
| 185 | log.Fatal(err) |
| 186 | } |
| 187 | defer cs.Close() |
| 188 | |
| 189 | // List resources and resource templates. |
| 190 | for r, err := range cs.Resources(ctx, nil) { |
| 191 | if err != nil { |
| 192 | log.Fatal(err) |
| 193 | } |
| 194 | fmt.Println(r.URI) |
| 195 | } |
| 196 | for r, err := range cs.ResourceTemplates(ctx, nil) { |
| 197 | if err != nil { |
| 198 | log.Fatal(err) |
| 199 | } |
| 200 | fmt.Println(r.URITemplate) |
| 201 | } |
| 202 | |
| 203 | // Read resources. |
| 204 | for _, path := range []string{"a", "dir/x", "b"} { |
| 205 | res, err := cs.ReadResource(ctx, &mcp.ReadResourceParams{URI: "file:///" + path}) |
| 206 | if err != nil { |
| 207 | fmt.Println(err) |
nothing calls this directly
no test coverage detected
searching dependent graphs…