Skip to main content
Glama

Karakeep MCP server

by karakeep-app
ReaderView.tsx2.88 kB
import { FullPageSpinner } from "@/components/ui/full-page-spinner"; import { toast } from "@/components/ui/use-toast"; import { api } from "@/lib/trpc"; import { useCreateHighlight, useDeleteHighlight, useUpdateHighlight, } from "@karakeep/shared-react/hooks/highlights"; import { BookmarkTypes } from "@karakeep/shared/types/bookmarks"; import BookmarkHTMLHighlighter from "./BookmarkHtmlHighlighter"; export default function ReaderView({ bookmarkId, className, style, }: { bookmarkId: string; className?: string; style?: React.CSSProperties; }) { const { data: highlights } = api.highlights.getForBookmark.useQuery({ bookmarkId, }); const { data: cachedContent, isPending: isCachedContentLoading } = api.bookmarks.getBookmark.useQuery( { bookmarkId, includeContent: true, }, { select: (data) => data.content.type == BookmarkTypes.LINK ? data.content.htmlContent : null, }, ); const { mutate: createHighlight } = useCreateHighlight({ onSuccess: () => { toast({ description: "Highlight has been created!", }); }, onError: () => { toast({ variant: "destructive", description: "Something went wrong", }); }, }); const { mutate: updateHighlight } = useUpdateHighlight({ onSuccess: () => { toast({ description: "Highlight has been updated!", }); }, onError: () => { toast({ variant: "destructive", description: "Something went wrong", }); }, }); const { mutate: deleteHighlight } = useDeleteHighlight({ onSuccess: () => { toast({ description: "Highlight has been deleted!", }); }, onError: () => { toast({ variant: "destructive", description: "Something went wrong", }); }, }); let content; if (isCachedContentLoading) { content = <FullPageSpinner />; } else if (!cachedContent) { content = ( <div className="text-destructive">Failed to fetch link content ...</div> ); } else { content = ( <BookmarkHTMLHighlighter className={className} style={style} htmlContent={cachedContent || ""} highlights={highlights?.highlights ?? []} onDeleteHighlight={(h) => deleteHighlight({ highlightId: h.id, }) } onUpdateHighlight={(h) => updateHighlight({ highlightId: h.id, color: h.color, }) } onHighlight={(h) => createHighlight({ startOffset: h.startOffset, endOffset: h.endOffset, color: h.color, bookmarkId, text: h.text, note: null, }) } /> ); } return content; }

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