mcp.WithDescription("List all reactions on a memo. Returns reaction type and creator for each reaction."),
readOnlyToolOptions("List reactions","List all reactions on a memo. Returns reaction type and creator for each reaction.",
mcp.WithString("name",mcp.Required(),mcp.Description(`Memo resource name, e.g. "memos/abc123"`)),
)...,
),s.handleListReactions)
mcpSrv.AddTool(mcp.NewTool("upsert_reaction",
mcp.WithDescription("Add a reaction (emoji) to a memo. If the same reaction already exists from the same user, this is a no-op. Requires authentication."),
createToolOptions("Upsert reaction","Add a reaction (emoji) to a memo. If the same reaction already exists from the same user, this is a no-op. Requires authentication.",true,
mcp.WithString("name",mcp.Required(),mcp.Description(`Memo resource name, e.g. "memos/abc123"`)),
mcp.WithString("reaction_type",mcp.Required(),mcp.Description(`Reaction emoji, e.g. "👍", "❤️", "🎉"`)),
mcp.WithOutputSchema[reactionJSON](),
)...,
),s.handleUpsertReaction)
mcpSrv.AddTool(mcp.NewTool("delete_reaction",
mcp.WithDescription("Remove a reaction by its ID. Requires authentication and ownership of the reaction."),
updateToolOptions("Delete reaction","Remove a reaction by its ID. Requires authentication and ownership of the reaction.",
mcp.WithNumber("id",mcp.Required(),mcp.Description("Reaction ID to delete")),
mcp.WithDescription("Create a reference relation between two memos. Requires authentication. For comments, use create_memo_comment instead."),
createToolOptions("Create memo relation","Create a reference relation between two memos. Requires authentication. For comments, use create_memo_comment instead.",true,
mcp.WithString("name",mcp.Required(),mcp.Description(`Source memo resource name, e.g. "memos/abc123"`)),
mcp.WithString("related_memo",mcp.Required(),mcp.Description(`Target memo resource name, e.g. "memos/def456"`)),
mcp.WithDescription("List all tags with their memo counts. Authenticated users see tags from their own and visible memos; unauthenticated callers see tags from public memos only. Results are sorted by count descending, then alphabetically."),
readOnlyToolOptions("List tags","List all tags with their memo counts. Authenticated users see tags from their own and visible memos; unauthenticated callers see tags from public memos only. Results are sorted by count descending, then alphabetically.")...,