Skip to main content
Glama

Karakeep MCP server

by karakeep-app
ActionBar.tsx4.37 kB
import { useState } from "react"; import { ActionButton } from "@/components/ui/action-button"; import { Button } from "@/components/ui/button"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { toast } from "@/components/ui/use-toast"; import { useTranslation } from "@/lib/i18n/client"; import { Pencil, Trash2 } from "lucide-react"; import type { ZBookmark } from "@karakeep/shared/types/bookmarks"; import { useUpdateBookmark } from "@karakeep/shared-react/hooks/bookmarks"; import DeleteBookmarkConfirmationDialog from "../bookmarks/DeleteBookmarkConfirmationDialog"; import { EditBookmarkDialog } from "../bookmarks/EditBookmarkDialog"; import { ArchivedActionIcon, FavouritedActionIcon } from "../bookmarks/icons"; export default function ActionBar({ bookmark }: { bookmark: ZBookmark }) { const { t } = useTranslation(); const [deleteBookmarkDialogOpen, setDeleteBookmarkDialogOpen] = useState(false); const [isEditBookmarkDialogOpen, setEditBookmarkDialogOpen] = useState(false); const onError = () => { toast({ variant: "destructive", title: "Something went wrong", description: "There was a problem with your request.", }); }; const { mutate: favBookmark, isPending: pendingFav } = useUpdateBookmark({ onSuccess: () => { toast({ description: "The bookmark has been updated!", }); }, onError, }); const { mutate: archiveBookmark, isPending: pendingArchive } = useUpdateBookmark({ onSuccess: (resp) => { toast({ description: `The bookmark has been ${resp.archived ? "Archived" : "Un-archived"}!`, }); }, onError, }); return ( <div className="flex items-center justify-center gap-3"> <Tooltip delayDuration={0}> <EditBookmarkDialog bookmark={bookmark} open={isEditBookmarkDialogOpen} setOpen={setEditBookmarkDialogOpen} /> <TooltipTrigger asChild> <Button variant="none" className="size-14 rounded-full bg-background" onClick={() => { setEditBookmarkDialogOpen(true); }} > <Pencil /> </Button> </TooltipTrigger> <TooltipContent side="bottom">{t("actions.edit")}</TooltipContent> </Tooltip> <Tooltip delayDuration={0}> <TooltipTrigger asChild> <ActionButton variant="none" className="size-14 rounded-full bg-background" loading={pendingFav} onClick={() => { favBookmark({ bookmarkId: bookmark.id, favourited: !bookmark.favourited, }); }} > <FavouritedActionIcon favourited={bookmark.favourited} /> </ActionButton> </TooltipTrigger> <TooltipContent side="bottom"> {bookmark.favourited ? t("actions.unfavorite") : t("actions.favorite")} </TooltipContent> </Tooltip> <Tooltip delayDuration={0}> <TooltipTrigger asChild> <ActionButton variant="none" loading={pendingArchive} className="size-14 rounded-full bg-background" onClick={() => { archiveBookmark({ bookmarkId: bookmark.id, archived: !bookmark.archived, }); }} > <ArchivedActionIcon archived={bookmark.archived} /> </ActionButton> </TooltipTrigger> <TooltipContent side="bottom"> {bookmark.archived ? t("actions.unarchive") : t("actions.archive")} </TooltipContent> </Tooltip> <Tooltip delayDuration={0}> <DeleteBookmarkConfirmationDialog bookmark={bookmark} open={deleteBookmarkDialogOpen} setOpen={setDeleteBookmarkDialogOpen} /> <TooltipTrigger asChild> <Button className="size-14 rounded-full bg-background" variant="none" onClick={() => setDeleteBookmarkDialogOpen(true)} > <Trash2 /> </Button> </TooltipTrigger> <TooltipContent side="bottom">{t("actions.delete")}</TooltipContent> </Tooltip> </div> ); }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/karakeep-app/karakeep'

If you have feedback or need assistance with the MCP directory API, please join our Discord server