Skip to main content
Glama

Karakeep MCP server

by karakeep-app
workerUtils.ts1.64 kB
import { eq } from "drizzle-orm"; import { db, KarakeepDBTransaction } from "@karakeep/db"; import { assets, AssetTypes, bookmarks } from "@karakeep/db/schema"; type DBAssetType = typeof assets.$inferInsert; export async function updateAsset( oldAssetId: string | undefined, newAsset: DBAssetType, txn: KarakeepDBTransaction, ) { if (oldAssetId) { await txn.delete(assets).where(eq(assets.id, oldAssetId)); } await txn.insert(assets).values(newAsset); } export async function getBookmarkDetails(bookmarkId: string) { const bookmark = await db.query.bookmarks.findFirst({ where: eq(bookmarks.id, bookmarkId), with: { link: true, assets: true, }, }); if (!bookmark || !bookmark.link) { throw new Error("The bookmark either doesn't exist or is not a link"); } return { url: bookmark.link.url, userId: bookmark.userId, screenshotAssetId: bookmark.assets.find( (a) => a.assetType == AssetTypes.LINK_SCREENSHOT, )?.id, imageAssetId: bookmark.assets.find( (a) => a.assetType == AssetTypes.LINK_BANNER_IMAGE, )?.id, fullPageArchiveAssetId: bookmark.assets.find( (a) => a.assetType == AssetTypes.LINK_FULL_PAGE_ARCHIVE, )?.id, videoAssetId: bookmark.assets.find( (a) => a.assetType == AssetTypes.LINK_VIDEO, )?.id, precrawledArchiveAssetId: bookmark.assets .filter((a) => a.assetType == AssetTypes.LINK_PRECRAWLED_ARCHIVE) .at(-1)?.id, contentAssetId: bookmark.assets.find( (a) => a.assetType == AssetTypes.LINK_HTML_CONTENT, )?.id, }; }

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