/agents

For agents.

A markdown corpus exposed as machine-readable surfaces — an index, a remote MCP endpoint, JSON APIs, and feeds — so language models, scrapers, and your own scripts can read this site without parsing HTML or cloning the repo.

Why bother

The site is a by-product of a markdown repo, not the other way round. If an agent wants the same view a human gets, it should not have to scrape a layout. Every page below has a structured analogue, regenerated on every build, addressable by URI, and stable enough to pin against.

01 / llms.txt

An index of every
public surface.

/llms.txt is a single text file that lists every page, listing, detail pattern, JSON API, data file, and feed on the site, grouped by section. It is regenerated at build time from the same surface inventory the top navigation uses, so it never drifts.

Hand it to a model as a starting point and it will know what is here without crawling.

02 / MCP server

One server,
two transports.

Built on Model Context Protocol and @modelcontextprotocol/sdk. The same factory backs a stdio entrypoint (servers/thinkinglabs-mcp/) and a remote Streamable HTTP entrypoint (servers/thinkinglabs-mcp-http/), so the resources, tools, and store-fallback semantics are identical regardless of how you connect. Schema version 0.1.0; public-only; auth disabled.

https://mcp.thinkinglabs.run/mcp

Remote endpoint. Streamable HTTP transport in stateless mode — every POST is one JSON request, one JSON response. No clone required.

pnpm mcp:thinkinglabs -- --repo-root <path>

Local stdio entrypoint. Reads from your checkout; useful when iterating on the corpus.

Static views
16 resources
thinkinglabs://thoughts

Rough-draft prose; the unstructured side of the corpus.

thinkinglabs://claims

Atomic structured assertions with confidence in [0,1].

thinkinglabs://claims/recent

The most recent claim revisions.

thinkinglabs://projects

Active and archived projects with state and links.

thinkinglabs://projects/active

Just the live ones.

thinkinglabs://decisions

Decisions made and the reversals that followed.

thinkinglabs://decisions/recent

Latest decisions and reversals.

thinkinglabs://predictions

Dated predictions, all states.

thinkinglabs://predictions/pending

Predictions still waiting on reality.

thinkinglabs://predictions/resolved

Predictions graded against the world.

thinkinglabs://predictions/calibration

Stated confidence vs realized accuracy.

thinkinglabs://inputs

Things I've read, watched, or listened to.

thinkinglabs://inputs/recent

The latest inputs.

thinkinglabs://observations

Short first-party notes about the world.

thinkinglabs://questions

Open questions I'm tracking.

thinkinglabs://current_focus

What I'm actively working on right now.

Templates
parameterised
thinkinglabs://claims/by-tag/{tag}

All claims under a single tag.

thinkinglabs://{kind}/{slug}

A single object by slug — claims, thoughts, projects, decisions, predictions, inputs, observations, questions, posts, changed-my-mind.

Meta
contracts & models
thinkinglabs://schema/version

MCP schema version for consumers that pin contracts.

thinkinglabs://ai/current-models

The env-resolved model refs by capability tier.

Tools
5 callable
query_view

Query public view

Filter one public view by free text, tags, and limit.

contact.precheck

Precheck contact intent

Check a proposed inquiry against the public contact policy before sending.

contact.send

Prepare contact handoff

Validate a message and return the public email handoff. The server does not send mail.

subscribe_brain_diff

Subscribe to brain diff

Return public feed URLs and optionally recent deterministic entries from git history.

question.submit

Submit answer to open question

Write a structured reader answer into the submissions queue for later triage.

03 / JSON APIs

One endpoint per kind,
no auth.

Every listed kind also has a flat JSON dump at /api/<kind>.json. Useful when you want the full set in one round-trip instead of paging an MCP view.

04 / feeds

Subscribe to the
deltas.

The deterministic feeds are regenerated on every build. Brain-diff feeds are added to the public surface list when the local artifact pipeline has generated them.

05 / connect

Wire it up
without cloning.

For most agents, the remote URL is enough. Hand it to any MCP-aware client and the handshake takes care of everything. The local stdio entrypoint is here for cases where you want to point the server at a different checkout.

Remote — Claude Desktop / Claude Code
{
  "mcpServers": {
    "thinkinglabs": {
      "url": "https://mcp.thinkinglabs.run/mcp"
    }
  }
}
Remote — programmatic (TypeScript SDK)
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const client = new Client({ name: "demo", version: "0.0.1" });
await client.connect(
  new StreamableHTTPClientTransport(new URL("https://mcp.thinkinglabs.run/mcp"))
);
Local — stdio against your own checkout
git clone https://github.com/flaming-codes/thinkinglabs.git
cd thinkinglabs
pnpm install
pnpm mcp:thinkinglabs -- --repo-root .

For agents that just need a starting URL, point them at /llms.txt and let them fan out from there.