Skip to content

Build with Trove

Trove is built around a symmetric pair of authoring patterns. Both are “user code Trove runs on your behalf” — pointed in opposite directions:

  • Toolkits serve tools out. A toolkit answers live questions against a system of record (an internal API, a SaaS, a public data feed) by exposing tools Claude can call. Every toolkit runs as a full MCP server on Trove’s cloud (that’s the one bit of protocol trivia worth knowing — after this page we’ll say MCP server freely in the developer docs). Toolkits run server-side (on Trove’s Cloudflare Workers infrastructure) and are written against @ontrove/mcp with defineMcpServer({ tools }). This is the path that ships today — see the catalog of toolkits already running.
  • Sources collect data in. A source adapter pulls content from an upstream system (an API, an RSS feed, your bookmarks) and feeds it into your knowledge base, where it becomes semantically searchable next to everything else. Source adapters run client-side (the Mac app runs them on a schedule) and are written against @ontrove/sdk with a sync(ctx) function that returns documents.

A source feeds your knowledge base; a toolkit answers live questions. A developer who has written one can write the other in minutes — the SDKs are deliberately symmetric.

  • “I want my saved articles / podcasts / bookmarks / notes to be searchable in Trove.” → Source. It ingests documents that the trove_search core tool then finds.
  • “I want Claude to call a live tool that hits my API / database / a public feed and returns a fresh answer.” → Toolkit. It exposes a tool that runs on demand.
  • “I want a scheduled job that writes into my knowledge base from a sanctioned API.” → Either: a source (client-side, the established path) or a toolkit with the trove:ingest scope and onSchedule (cloud-side, planned).
  • “I want a live tool that touches my own machine — scans my home network, edits my todo list in Things / Reminders, reads files on my Mac.” → Neither. A toolkit runs in Trove’s cloud and cannot reach your laptop (no localhost, LAN, local files, or Mac apps), and a source only collects data in. Run a local stdio MCP server yourself (desktop-only). Trove deliberately doesn’t host this, because the cloud has no network path back to your Mac.
SourcesToolkits
DirectionCollect data in (batch)Serve tools out (live)
SDK@ontrove/sdk@ontrove/mcp
Entry pointexport default { sync(ctx) } → documentsdefineMcpServer({ tools }) → results
Artifactmanifest.json + index.tsmanifest.json + server.ts
Where it runsClient-side (Mac app)Server-side (Trove cloud)
CredentialsmacOS KeychainTrove Secrets Vault (ctx.secret)
Egress controlmanifest.egress + ctx.fetchmanifest.egress + ctx.fetch
Can reachLocal + private data on your Mac (it runs there) and the public internetThe public internet only (egress allowlist) — never localhost, your LAN, local files, or Mac apps
OutputStored & indexed documentsLive tool results read by Claude
DeployAdd in the Mac apptrove mcp deploy
Output reachIndexed content reachable everywhereLive tools reachable on every Claude surface
Build itSources seriesToolkit quickstart

Both SDKs hand your code a small ctx capability object — no ambient authority. The members line up:

  • ctx.fetch(url, init?) — the only egress path, enforced against the manifest allowlist, in both worlds.
  • ctx.log(...) — structured logs, redacted against known secret values.
  • A toolkit also gets ctx.secret(name) (vault access), ctx.userId (the caller), and ctx.trove (a scoped client over the caller’s knowledge base) when the manifest grants the scope.

If you’ve internalized one ctx, the other is familiar immediately.

Toolkits — serve tools out (available today)

Section titled “Toolkits — serve tools out (available today)”

Both paths share the trove command-line tool — it scaffolds, runs, and deploys sources and toolkits from one place. See the CLI docs for installing and authenticating.