Khiip
OfficialThe Khiip server lets you capture, store, and semantically recall web content locally using a structured personal vault, with MCP integration for AI agents like Claude.
Capture URLs (
capture_url): Dispatch URLs to typed extractors for X/Twitter, Reddit, web articles, Wikipedia, YouTube, and PDFs (experimental). Stores raw source bytes plus a typed payload; idempotent by default (deduplicates by URL hash), with an option to force a new capture.Semantic Recall (
recall): Search captured content using natural-language queries, ranked by cosine similarity using bundled MiniLM-L6 ONNX embeddings — no LLM cost, works fully offline after initial model download.List Captures (
list_captures): Browse vault contents newest-first, with optional filtering by source platform (x, reddit, web, wikipedia, youtube, pdf) and pagination.Get a Capture (
get_capture): Retrieve a single capture by ID in multiple formats — JSON payload, vault Markdown, YAML frontmatter only, or legacy Markdown.Refetch a Capture (
refetch_capture): Re-process an existing capture along five independent dimensions:extraction— network re-fetch to create a new superseding capturere-extract— offline re-derivation of typed payload from preserved source bytesre-render— offline re-rendering of Markdown body from existing typed payloadmedia— re-walk the media fetcher registry to update download statuseswayback— re-submit the URL to the Wayback Machine (Save Page Now)
Daemon Status (
daemon_status): Check daemon health and metadata — confirms reachability and reports available extractors, embedder model/dimensions, and Wayback liveness.
Khiip
This is the official Khiip repository.
Khiip's self-hosted distribution is paused while we restructure how Khiip ships. Existing installs keep working, and released versions remain AGPL. If you're affected, email jason@khiip.com — more when it's ready.
Website: khiip.com · Docs: docs.khiip.com
Available Tools
6 toolscapture_urlA
Capture a URL into the Khiip substrate.
Dispatches to the appropriate extractor (X, Reddit, web article, Wikipedia, YouTube, PDF). Stores raw source bytes at Source-tier plus a typed payload in the vault. Submits to Wayback Machine unless disabled. Idempotent by default (dedup by URL hash).
Args:
url: The URL to capture.
force_new: If True, skip dedup-by-url and force creation of a
new capture (overrides the existing capture's
superseded_by pointer). Defaults to False.
Returns: Capture record (id, source, vault_path, payload, archive_urls, etc.) on success; structured error dict on failure.
Inputs: url (required), force_new. Returns: object
daemon_statusA
Combined daemon health + metadata.
Aggregates GET /health (extractor + wayback liveness) and GET /api/v1/meta (version, configured extractors, embedder model + dimension). Useful as a first call when an agent connects, to confirm the daemon is reachable and to learn what sources + capabilities are available.
Returns:
On success: {"health": {...}, "meta": {...}, "mcp_server_version": "0.1.1"}. On daemon-unreachable:
structured error dict.
Inputs: no named parameters. Returns: object
get_captureA
Fetch a single capture by id, in the requested format.
Args:
capture_id: The capture ULID.
format: One of json (default; payload as JSON), markdown
(vault markdown), vault-frontmatter (YAML frontmatter
only), or legacy-markdown (pre-typed-payload format).
Returns:
On success: payload in the requested format wrapped in a
{"format": ..., "body": ...} envelope. On failure:
structured error dict.
Inputs: capture_id (required), format. Returns: object
list_capturesA
List captures, newest first.
Args: source: Optional filter by source name (x, reddit, web, wikipedia, youtube, pdf). When None, returns all sources. limit: Page size (1-500; default 50). offset: Pagination offset.
Returns: On success: {"captures": [Capture, ...], "count": int}. On failure: structured error dict.
Inputs: limit, offset, source. Returns: object
recallA
Semantic recall over captured payloads by natural-language query.
Ranks captures by cosine similarity over typed-payload embed-text composition (per ADR-0009 §C7). Returns top-k captures with their scores.
Args: query: Natural-language recall query. limit: Maximum number of results to return (1-100; default 10).
Returns:
Recall response with query, embedder_model,
embedder_dimension, and results (list of {capture, score}).
Inputs: query (required), limit. Returns: object
refetch_captureA
Refetch one dimension of an existing capture.
Dimensions, per ADR-0010 commitment 6 + ADR-0009 §C2 replay (S42):
extraction(default): NETWORK re-fetch → new capture, old marked superseded (can observe a changed/deleted post).re-extract: OFFLINE — re-derive the typed payload from the preserved source bytes with the current extractor (recovers under-extracted fields; survives source deletion). In place; same capture id.re-render: OFFLINE — re-render the markdown body from the existing typed payload (apply an improved renderer / skin). In place.media: re-walk MediaFetcherRegistry on existing payload; updatesMedia[].download_statusin place; same capture id.wayback: re-submit canonical URL to Wayback Save Page Now; updatesarchive_urls['wayback']in place; same capture id.
Args:
capture_id: The capture ULID to refetch.
dimension: Which dimension to refetch (extraction | re-extract |
re-render | media | wayback). Defaults to extraction.
Returns: Updated capture record on success; structured error dict on failure.
Inputs: capture_id (required), dimension. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool has a distinct purpose: capturing a URL, fetching a capture, listing captures, semantic recall, refetching dimensions, and checking daemon status. No overlap in functionality.
Tools follow a verb_noun pattern with snake_case (e.g., capture_url, get_capture). 'daemon_status' is a noun phrase but still clear and consistent in style. Minor deviation from verb-first naming.
6 tools is well-scoped for a URL capture and retrieval server. Each tool addresses a core operation without unnecessary redundancy.
Covers create, read, list, search, and update (via refetch). Missing a delete tool, which is a notable gap for a complete lifecycle, but the core workflows are covered.
Related MCP Connectors
Personal knowledge MCP: capture bookmarks, notes & todos by chat; archive pages; search memory.
Self-hosted AI workspace: semantic RAG document search, long-term memory, and AI chat via MCP.
Keeps your memory: WhatsApp, voice or any AI tool over MCP, Markdown you own, recall with sources
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceLocal MCP server for indexing personal knowledge into SQLite with hybrid search, chunk-level citations, memory tools, and agent orchestration.4MIT
- AlicenseAqualityAmaintenanceProvides local-first web intelligence over MCP with tools for search, fetch, crawl, extract, cache, find-similar, research, and autonomous agent loops, requiring no API keys.101,371 npm5,543AGPL 3.0
- AlicenseAqualityBmaintenancePersistent knowledge-base MCP server. Semantic search with source citations over saved YouTube videos, podcasts, articles and PDFs — one endpoint for every MCP-capable AI client.28Elastic 2.0
- AlicenseNot gradedqualityFmaintenanceMCP server enabling local-first web search, fetch, extract, and caching with citeable excerpts, no API key required. Supports research workflows for agents and apps.96 npm1MIT