mirror of
https://github.com/fiatjaf/nak.git
synced 2025-12-08 16:48:51 +00:00
mcp: make search return multiple users and also their name and description.
This commit is contained in:
27
mcp.go
27
mcp.go
@@ -160,14 +160,33 @@ var mcpServer = &cli.Command{
|
|||||||
s.AddTool(mcp.NewTool("search_profile",
|
s.AddTool(mcp.NewTool("search_profile",
|
||||||
mcp.WithDescription("Search for the public key of a Nostr user given their name"),
|
mcp.WithDescription("Search for the public key of a Nostr user given their name"),
|
||||||
mcp.WithString("name", mcp.Description("Name to be searched"), mcp.Required()),
|
mcp.WithString("name", mcp.Description("Name to be searched"), mcp.Required()),
|
||||||
|
mcp.WithNumber("limit", mcp.Description("How many results to return")),
|
||||||
), func(ctx context.Context, r mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
), func(ctx context.Context, r mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||||
name := required[string](r, "name")
|
name := required[string](r, "name")
|
||||||
re := sys.Pool.QuerySingle(ctx, []string{"relay.nostr.band", "nostr.wine"}, nostr.Filter{Search: name, Kinds: []nostr.Kind{0}}, nostr.SubscriptionOptions{})
|
limit, _ := optional[float64](r, "limit")
|
||||||
if re == nil {
|
|
||||||
return mcp.NewToolResultError("couldn't find anyone with that name"), nil
|
filter := nostr.Filter{Search: name, Kinds: []nostr.Kind{0}}
|
||||||
|
if limit > 0 {
|
||||||
|
filter.Limit = int(limit)
|
||||||
}
|
}
|
||||||
|
|
||||||
return mcp.NewToolResultText(re.PubKey.Hex()), nil
|
res := strings.Builder{}
|
||||||
|
res.WriteString("Search results: ")
|
||||||
|
l := 0
|
||||||
|
for result := range sys.Pool.FetchMany(ctx, []string{"relay.nostr.band", "nostr.wine"}, filter, nostr.SubscriptionOptions{}) {
|
||||||
|
l++
|
||||||
|
pm, _ := sdk.ParseMetadata(result.Event)
|
||||||
|
res.WriteString(fmt.Sprintf("\n\nResult %d\nUser name: \"%s\"\nPublic key: \"%s\"\nDescription: \"%s\"\n",
|
||||||
|
l, pm.ShortName, pm.PubKey.Hex(), pm.About))
|
||||||
|
|
||||||
|
if l >= int(limit) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if l == 0 {
|
||||||
|
return mcp.NewToolResultError("Couldn't find anyone with that name."), nil
|
||||||
|
}
|
||||||
|
return mcp.NewToolResultText(res.String()), nil
|
||||||
})
|
})
|
||||||
|
|
||||||
s.AddTool(mcp.NewTool("get_outbox_relay_for_pubkey",
|
s.AddTool(mcp.NewTool("get_outbox_relay_for_pubkey",
|
||||||
|
|||||||
Reference in New Issue
Block a user