Using the Collection

Everything saved here is queryable from outside the site, and none of it needs a key.

The Insights collection is 491 links I decided were worth keeping, and 2,794 passages of the text inside them. Every page has been read and split up, and the passages are embedded, so search matches what a page says rather than what it is called.

This is the retrieval behind the Ask panel on the Insights page, exposed without the chat layer. No model runs, so the same query returns the same ranked list every time, and nothing can be invented.

Read the collection

The same list the Insights page renders, as JSON.

GET/api/v1/links?channel=tools&limit=50&cursor=…

A page of links, newest first. Pass ?url= for an exact lookup instead, and read the next page from meta.next_cursor.

Bash
curl "https://www.souravinsights.com/api/v1/links?channel=tools&limit=1"
JSON
{
"data": [
{
"id": "celld.dev",
"like_key": "1391867904382734507",
"url": "https://celld.dev/",
"title": "celld: Durable Objects, self-hosted",
"description": "Durable Objects without the cloud bill.",
"channel": "tools",
"added_at": "2026-03-08T09:12:44.120Z"
}
],
"meta": { "next_cursor": "eyJhIjoiMjAyNi0wMy0wOC…" }
}
GET/api/v1/channels

Every channel, with its visible link count.

Every parameter, and a playground to try them in, live at /api/docs. It is generated from the same schemas that validate requests, so it cannot drift from behaviour.

Connect an assistant

An MCP server, so Cursor or Claude can search the collection mid-conversation.

Point any MCP client at https://www.souravinsights.com/api/mcp. It exposes one tool, search_knowledge, backed by the same retrieval as the search endpoint. A question asked in your editor and one asked on the site find the same links.

Config
{
"mcpServers": {
"insights": {
"url": "https://www.souravinsights.com/api/mcp"
}
}
}