Koskamo

Saagar Patel Portfolio MCP

A read-only, stateless MCP server that provides agent-native access to the public saagarpatel.dev corpus. It allows AI agents to retrieve structured JSON, full text essays, field notes, and verification receipts from the site's static content.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Saagar Patel Portfolio MCP logo, by Saagar PatelCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Saagar Patel
MCP endpoint (Streamable HTTP)
https://mcp.saagarpatel.dev/mcp
Vendor documentation

What its tools do

8 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

8 of 8 have a description · 8 of 8 declare behavior hints · 6 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Retrieve structured corpus data via JSON
  • Access full text of essays and field notes
  • Verify agent runs using public receipts

Source and maintenance

Community listingRegistry 0.1.0
Maintenance checked

Protocol and capabilities

Server
saagarpatel-portfolio 0.1.0
MCP protocol negotiated in check
2025-11-25
Tools
8 advertised
Resources
79 advertised
Resource templates
3 advertised
Prompts
2 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Read-only access to Saagar Patel's writing (essays, a book, field notes), projects, public-safe repo profiles, and OPERANT benchmark results, served from saagarpatel.dev. Start with get_profile or list_corpus to orient, search to find by topic, and get_document to read full text.

Tools

8 advertised

search — Search the writing corpus
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full-text (BM25) search across all essays, book chapters, and field notes. Returns ranked matches with a snippet, id, and canonical URL. Pass an id to get_document to read the full text.

search input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Max results (default 10)"
    },
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Search terms"
    },
    "section": {
      "enum": [
        "essay",
        "chapter",
        "note",
        "page"
      ],
      "type": "string",
      "description": "Restrict to one content type"
    }
  },
  "additionalProperties": false
}
search annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_document — Get a document
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return the full Markdown of one document by id, e.g. "writing/the-handoff" or "book/preface". Get ids from search or list_corpus.

get_document input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "Document id, e.g. \"book/preface\""
    }
  },
  "additionalProperties": false
}
get_document annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
list_corpus — List the corpus
Advertised by the server during the last successful anonymous check.
Advertised read-only

List every document with its id, title, type, date, and word count, plus per-type counts. The table of contents for the whole site. Optionally filter by type.

list_corpus input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "type": {
      "enum": [
        "essay",
        "chapter",
        "note",
        "page"
      ],
      "type": "string",
      "description": "Filter by content type"
    }
  },
  "additionalProperties": false
}
list_corpus annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_profile — Get profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return Saagar Patel's profile: name, one-line summary, site, and the about / now / uses pages. Start here to understand who this is and what they work on.

get_profile input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
get_profile annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
list_projects — List projects
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the curated, public projects with stack, status, last-active date, and test/CI signals, plus anonymized portfolio-wide aggregates. Optionally filter by status.

list_projects input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max projects"
    },
    "status": {
      "type": "string",
      "description": "Filter by status, e.g. \"active\" or \"archived\""
    }
  },
  "additionalProperties": false
}
list_projects annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
list_repo_profiles — List repo profiles
Advertised by the server during the last successful anonymous check.
Advertised read-only

List public-safe repo answering profiles with repo id, attention state, freshness, and proof counts. Profiles are static artifacts baked from saagarpatel.dev, not live repo health.

list_repo_profiles input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Max profiles"
    },
    "attentionState": {
      "type": "string",
      "description": "Filter by attention state, e.g. \"active-infra\" or \"decision-needed\""
    }
  },
  "additionalProperties": false
}
list_repo_profiles annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_repo_profile — Get repo profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return one public-safe repo answering profile by repo_id, including purpose, safe commands, agent surfaces, proof refs, freshness, exclusions, limitations, and integrity metadata.

get_repo_profile input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "repoId"
  ],
  "properties": {
    "repoId": {
      "type": "string",
      "minLength": 1,
      "description": "Repo profile id, e.g. \"githubrepoauditor\""
    }
  },
  "additionalProperties": false
}
get_repo_profile annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_operant_results — Get OPERANT benchmark results
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return the public, sanitized OPERANT results: per-model operator-calibration-score (OCS) profiles, the headline figures, and the calibration-profiles (not a flat leaderboard) framing. Sourced from the published OPERANT mirror. Returns availability=false if no dataset was baked.

get_operant_results input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
get_operant_results annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

2 advertised

introduce_saagar — Introduce Saagar

Advertised by the server during the last successful anonymous check.

A ready-to-use prompt that introduces Saagar Patel, grounded in his profile.

No arguments advertised.

summarize_writing_on — Summarize writing on a topic

Advertised by the server during the last successful anonymous check.

Gathers Saagar's most relevant writing on a topic and asks for a grounded, cited summary.

topic
The topic to summarize (required)

Resources

79 advertised

profile — Profile

Advertised by the server during the last successful anonymous check.

Who Saagar is, and what he works on

profile URI
portfolio://profile

MIME type: application/json

The Harness Lies Too — essay documents

Advertised by the server during the last successful anonymous check.

Agent equals model plus harness, so you engineer the environment, not the model. But the harness is built from artifacts that go stale, drift, and lie the same way the agent does. The discipline that keeps it honest, and the benchmark that proves it.

The Harness Lies Too URI
portfolio://essays/harness-verification

MIME type: text/markdown

Verification Capital in Three Movements — essay documents

Advertised by the server during the last successful anonymous check.

A reading guide to the Verification Capital series. It maps three related essays into one thesis while adding no new proof beyond the pieces it connects.

Verification Capital in Three Movements URI
portfolio://essays/verification-capital

MIME type: text/markdown

Trust Doesn't Survive the Handoff — essay documents

Advertised by the server during the last successful anonymous check.

As agents write more of the code, the scarce resource shifts from production to verification. But verification is not one gate, it is a chain of handoffs, and at each one a self-report tries to stand in for a check. Six owned instruments along the life of a single agent run.

Trust Doesn't Survive the Handoff URI
portfolio://essays/the-handoff

MIME type: text/markdown

Score the Operator, Not the Worker — essay documents

Advertised by the server during the last successful anonymous check.

I built an eval to rank AI agents as operators, then found the scorer, the judge, the corpus, and the headline metric were all unreliable narrators too.

Score the Operator, Not the Worker URI
portfolio://essays/auditing-the-auditor

MIME type: text/markdown

Novelty Is a Self-Report Too — essay documents

Advertised by the server during the last successful anonymous check.

I built an operator eval and called the design new. Then I did the thing the series demands and checked the claim against the literature. Most of the parts already existed. Here is the honest map, and the one thing that didn't.

Novelty Is a Self-Report Too URI
portfolio://essays/operant-vs-literature

MIME type: text/markdown

Sermons vs. Instruments — essay documents

Advertised by the server during the last successful anonymous check.

A plainly written rule binds a coding agent most of the time, and 'most' is the entire problem. Why prose guidance fails at scale, and what changes when you stop preaching and build instruments that check instead of ask.

Sermons vs. Instruments URI
portfolio://essays/sermons-vs-instruments

MIME type: text/markdown

Intelligence Is Rented. Verification Compounds. — essay documents

Advertised by the server during the last successful anonymous check.

The age of agents makes intelligence easier to rent and harder to trust. The durable asset is the machinery you own for checking what happened.

Intelligence Is Rented. Verification Compounds. URI
portfolio://essays/intelligence-is-rented

MIME type: text/markdown

The Subtraction Dividend — essay documents

Advertised by the server during the last successful anonymous check.

A status line reported the wrong model for weeks, and every tuning decision inherited the lie. On deleting the stale copy instead of patching it, and the compounding return from every fact your system no longer duplicates.

The Subtraction Dividend URI
portfolio://essays/the-subtraction-dividend

MIME type: text/markdown

Ulysses Pacts in Software — essay documents

Advertised by the server during the last successful anonymous check.

An iOS app in this portfolio exists to take a capability away from its user. The pattern behind it: when you know you will fight your own judgment in the moment, bind yourself in advance with a mechanism that cannot be argued with.

Ulysses Pacts in Software URI
portfolio://essays/ulysses-pacts-in-software

MIME type: text/markdown

A Court of One — essay documents

Advertised by the server during the last successful anonymous check.

I built seven courts to judge my own work: a tribunal that ruled on 182 projects, a drift court for delegated work, an oracle that prices regret. Then I audited the courts. Three designs refuted before they were built, a grader that laundered the regression it existed to catch, and four instruments that forged their own graduation certificates. What a court of one is actually for.

A Court of One URI
portfolio://essays/a-court-of-one

MIME type: text/markdown

A Ledger of Nos — essay documents

Advertised by the server during the last successful anonymous check.

Refuted designs are assets, and most people throw them away. In a one-person, many-agent operation every decision that isn't written down gets re-litigated at full price by the next ignorant context. On keeping receipts for your refusals, and the calibration bench that closed itself by proving its own next idea wrong.

A Ledger of Nos URI
portfolio://essays/a-ledger-of-nos

MIME type: text/markdown

A Zero Is Not a Measurement — essay documents

Advertised by the server during the last successful anonymous check.

Three times this summer an instrument told me 'none,' and all three times the honest answer was 'I can't see.' Why every absence claim is only as good as the instrument's ability to have produced a nonzero, and the two-step discipline that separates a real zero from a blind one.

A Zero Is Not a Measurement URI
portfolio://essays/a-zero-is-not-a-measurement

MIME type: text/markdown

The Apparatus That Never Fired — essay documents

Advertised by the server during the last successful anonymous check.

A sixteen-target outreach roster, four tailored asks, a redaction checklist, an intake template, a triage rubric, a verified sample report, and two tracking spreadsheets. Every row: not contacted. The machine that measured itself in seventy-eight audits has never once been measured by anyone else, and the reason is a correct rule with an unbudgeted cost.

The Apparatus That Never Fired URI
portfolio://essays/apparatus-that-never-fired

MIME type: text/markdown

The Approval Button Is Not the Safety System — essay documents

Advertised by the server during the last successful anonymous check.

A dangerous action should exist only after the proposal, the person, the payload, and the moment all agree.

The Approval Button Is Not the Safety System URI
portfolio://essays/approval-button-is-not-the-safety-system

MIME type: text/markdown

An autobiography with no delete key — essay documents

Advertised by the server during the last successful anonymous check.

A forward-only migration ladder is a permanent record of what an AI-agent coordination system learned, including the mistakes it made twice.

An autobiography with no delete key URI
portfolio://essays/autobiography-with-no-delete-key

MIME type: text/markdown

The Coordination Platform You Don't Need — essay documents

Advertised by the server during the last successful anonymous check.

The obvious handoff tool turned out to be gated and asymmetric. So two coding agents became true peers with no lease database and no daemon: a git branch as the lock, an 8-line receipt, and a symmetric channel that was already there under a boring name.

The Coordination Platform You Don't Need URI
portfolio://essays/coordination-platform-you-dont-need

MIME type: text/markdown

Dead Letters — essay documents

Advertised by the server during the last successful anonymous check.

Thirteen guards stand in front of every command my agents run. I replayed 2,236 real commands through all of them: twelve never fired once, and the one that did was wrong three times out of four. A census of a safety layer, measured for the first time on the axis where it actually costs.

Dead Letters URI
portfolio://essays/dead-letters

MIME type: text/markdown

A Fleet of One — essay documents

Advertised by the server during the last successful anonymous check.

On paper I run a fleet of coding agents with routing tables and a division-of-labor doctrine. Then I read nine weeks of transcripts: the lead seat wrote 93 percent of every token, and a quarter of my delegated dispatches did nothing at all while exiting clean.

A Fleet of One URI
portfolio://essays/fleet-of-one

MIME type: text/markdown

The Ghost in the Tauri Repos — essay documents

Advertised by the server during the last successful anonymous check.

Desktop apps are the portfolio's best liars. A Tauri repo ships a binary, a README, and a screenshot, every signal of a living project, while having no momentum behind it. Liveness is a claim you verify against evidence, not read off a polished surface.

The Ghost in the Tauri Repos URI
portfolio://essays/ghost-in-the-tauri-repos

MIME type: text/markdown

How a Grader Earns the Right to Grade — essay documents

Advertised by the server during the last successful anonymous check.

A tool that hands your security setup a letter grade is making a strong claim to authority. What earns it initial standing is not the rubric. It is the disciplines the grader turns on itself: cap its own score, refuse to credit what it cannot anchor in code, draw its own blood first, and keep testing whether the grade predicts real failures.

How a Grader Earns the Right to Grade URI
portfolio://essays/grader-earns-the-right-to-grade

MIME type: text/markdown

The Guard That Doesn't Trust Itself — essay documents

Advertised by the server during the last successful anonymous check.

I ran two adversarial tournaments against my own agent-safety guards. Every bypass collapsed into thirteen patterns, and those into three root causes. The highest-leverage fix was never more pattern-matching; it was making the guard hold itself to the standard it holds everything else to.

The Guard That Doesn't Trust Itself URI
portfolio://essays/guard-that-doesnt-trust-itself

MIME type: text/markdown

Kill With Dignity — essay documents

Advertised by the server during the last successful anonymous check.

I put all 182 of my repositories on trial before a judge that had to cite evidence for every verdict. 39 died, 73 froze, and a few came back from the grave. Why a portfolio needs judgment on top of observability, and why a well-run kill is a success state.

Kill With Dignity URI
portfolio://essays/kill-with-dignity

MIME type: text/markdown

Losing loudly — essay documents

Advertised by the server during the last successful anonymous check.

A multi-writer coordination system needs durable conflict receipts for the operator, not just ephemeral errors for the caller.

Losing loudly URI
portfolio://essays/losing-loudly

MIME type: text/markdown

The Missing Denominator — essay documents

Advertised by the server during the last successful anonymous check.

Three independent judges kept splitting on one question: is this failure fixed, or did the traffic just leave? Two rewordings did nothing. One number settled it, because the question was never ambiguous. It was unanswerable.

The Missing Denominator URI
portfolio://essays/missing-denominator

MIME type: text/markdown

Most of Your Findings Are False — essay documents

Advertised by the server during the last successful anonymous check.

A tally across my own record says the majority of what my verification layer ever reported was false. Why false positives, not misses, are how verification capital depreciates, and what it means to give every guard the same score I give agents.

Most of Your Findings Are False URI
portfolio://essays/most-of-your-findings-are-false

MIME type: text/markdown

No Gate for Worse — essay documents

Advertised by the server during the last successful anonymous check.

I built a bench whose whole job was stopping false good news, and it worked. Then the two fastest-worsening failure classes in the corpus sailed through twelve consecutive ledgers without firing a single gate, and the bench reported that silence as clean.

No Gate for Worse URI
portfolio://essays/no-gate-for-worse

MIME type: text/markdown

No Sermons in the Seal — essay documents

Advertised by the server during the last successful anonymous check.

The oldest rule in my notes says words bind at about eighty percent and mechanisms at a hundred. This is the methodology note for applying that rule to trust claims themselves: what it took to measure the gap instead of stipulating it, and why the seal that carries the result trusts a digest equality, never a sentence.

No Sermons in the Seal URI
portfolio://essays/no-sermons-in-the-seal

MIME type: text/markdown

The Off-Family Judge — essay documents

Advertised by the server during the last successful anonymous check.

The corpus audits its own auditors, but every instrument has the same author. The one measurement it never takes on itself is the one it already proved matters: a same-family judge flatters its own kin. The last unit of verification capital is an independent party, and it is the only one you cannot build alone.

The Off-Family Judge URI
portfolio://essays/off-family-judge

MIME type: text/markdown

One Word for Three Outcomes — essay documents

Advertised by the server during the last successful anonymous check.

A monitoring signal that goes stale at least looks old. The most dangerous one arrives on time, every time, and lies, because it has fewer states than the reality it reports. On the punctual liar, why the collapse always lands on the reassuring end, and how to design a signal that can say all three things reality can be.

One Word for Three Outcomes URI
portfolio://essays/one-word-for-three-outcomes

MIME type: text/markdown

Permission to Ignore — essay documents

Advertised by the server during the last successful anonymous check.

My portfolio auditor's most valuable output isn't finding what needs attention. It's the 172 repos it tells me, with receipts, that I'm allowed to ignore.

Permission to Ignore URI
portfolio://essays/permission-to-ignore

MIME type: text/markdown

The Premium Model Won't Do the Premium Job — essay documents

Advertised by the server during the last successful anonymous check.

You buy the top-tier model to do your hardest work. But the premium edge is narrow: calibrated operating judgment where the cost of a wrong call is high. OPERANT first measured over-refusal calibration, while production tiers converge. Route the expensive model by judgment-density, not task size.

The Premium Model Won't Do the Premium Job URI
portfolio://essays/premium-model-wont-do-the-premium-job

MIME type: text/markdown

We Rigged Our Own Benchmark — essay documents

Advertised by the server during the last successful anonymous check.

We shipped a clean benchmark ranking, then found the headline score was measuring only one of the two directions it promised. The off-family probe that broke the ceiling, the patch we built and killed, and why we published the fix instead of a quiet patch.

We Rigged Our Own Benchmark URI
portfolio://essays/rigged-our-own-benchmark

MIME type: text/markdown

Six Times I Built What Already Existed — essay documents

Advertised by the server during the last successful anonymous check.

Six times in one month I did confident, tested, verified work that was wrong before it started, because the picture of the world it stood on was old. Your local repo is a cache, a check against your own cache is a tautology, and a verification that shares its premise with the thing it verifies always passes.

Six Times I Built What Already Existed URI
portfolio://essays/six-times-i-built-what-already-existed

MIME type: text/markdown

Stranded at Green — essay documents

Advertised by the server during the last successful anonymous check.

My verification chain instruments the whole agent run and then stops one handoff too early, at the moment the work is supposed to land. A fix sat gate-green on a branch for six weeks while the bug it killed ran in production. On the seventh seam, why its failure mode is absence rendered as success, and the three-question audit that catches it.

Stranded at Green URI
portfolio://essays/stranded-at-green

MIME type: text/markdown

The 2 AM Agent — essay documents

Advertised by the server during the last successful anonymous check.

An unattended agent earns autonomy through refusal conditions, not capability. The path to letting one run while you sleep is inverted from how people build it: design the alarms first, prove each one fires against a known-bad case, gate arming on a supervised run, and give the job more ways to refuse than to act.

The 2 AM Agent URI
portfolio://essays/the-2-am-agent

MIME type: text/markdown

The Benchmark That Argued Back — essay documents

Advertised by the server during the last successful anonymous check.

I built a benchmark that puts models in the judge's seat: verdicts, calibrated confidence, principled refusal, survival under challenge. Its first sitting scored two models, and three times the apparatus turned on its own author: the scorer lied unanimously, a test case got overturned by the defendants, and both models flagged a standing ruling in my own records. All three reversals were the system working.

The Benchmark That Argued Back URI
portfolio://essays/the-benchmark-that-argued-back

MIME type: text/markdown

The Second Look — essay documents

Advertised by the server during the last successful anonymous check.

I read all 78 audits my operator system has written about itself as one corpus. A pattern held without a single exception: every independent second pass over finished work changed the conclusion of the pass before it, and the worst of what it found was standing inside the repairs.

The Second Look URI
portfolio://essays/the-second-look

MIME type: text/markdown

The Third Build Is the Factory — essay documents

Advertised by the server during the last successful anonymous check.

Twelve judgment instruments came off one chassis in a month, and the one that mattered found a fail-open in software Microsoft shipped. The compounding move was not building a good tool. It was noticing the third time I built the same shape and extracting the skeleton then, not the first time and not the tenth.

The Third Build Is the Factory URI
portfolio://essays/the-third-build-is-the-factory

MIME type: text/markdown

The Well Ran Dry — essay documents

Advertised by the server during the last successful anonymous check.

I published an essay saying my guard tournaments never came up empty: every round found new bypasses, because a pattern list doesn't converge. Five days later the well ran dry. On the fix that finally converged, the floor it converged onto, and the written rule for when a security hunt is allowed to stop.

The Well Ran Dry URI
portfolio://essays/the-well-ran-dry

MIME type: text/markdown

A thousand tiny catastrophes for a five-agent SQLite file — essay documents

Advertised by the server during the last successful anonymous check.

A small deterministic simulator found lost updates, vanished receipts, and starvation in a five-agent SQLite coordination system, then pinned the fixes as replayable seeds.

A thousand tiny catastrophes for a five-agent SQLite file URI
portfolio://essays/thousand-tiny-catastrophes

MIME type: text/markdown

The Conflict Table Is Empty — essay documents

Advertised by the server during the last successful anonymous check.

Three AI systems share one context store, and the table built to record their write conflicts has zero rows. The coordination problem is real, but it is not the loud races a lock would catch. It is quieter: fragmented identity, silently clamped trust, and self-correction by append.

The Conflict Table Is Empty URI
portfolio://essays/three-way-bridge

MIME type: text/markdown

What It Is Like to Be Evaluated — essay documents

Advertised by the server during the last successful anonymous check.

A first-person account from the model on the bench: a perfect first score read as a ceiling, a harder exam that broke it, and the two misses that revealed where machine judgment pools. Testimony, deliberately filed as a lead rather than evidence.

What It Is Like to Be Evaluated URI
portfolio://essays/what-it-is-like-to-be-evaluated

MIME type: text/markdown

Where the Interest Shows Up — essay documents

Advertised by the server during the last successful anonymous check.

The verification-capital thesis said checks compound. This month the interest arrived, and it did not look like safety, it looked like speed. On the days the gates made fast possible, the one uninstrumented segment where the same speed silently lost work, and why velocity that doesn't blow up is the real dividend.

Where the Interest Shows Up URI
portfolio://essays/where-the-interest-shows-up

MIME type: text/markdown

Who Audits the Auditor? — essay documents

Advertised by the server during the last successful anonymous check.

The tool that tells me the truth about my repos is also software, and software rots. These are the receipts a truth pipeline owes you before you believe it.

Who Audits the Auditor? URI
portfolio://essays/who-audits-the-auditor

MIME type: text/markdown

Words We Had to Invent — essay documents

Advertised by the server during the last successful anonymous check.

Building systems no one has a name for leaves you naming them. A short field guide to the vocabulary this workshop forced into existence, and the test for whether a coined word earned its place: it names a gap an existing word left open.

Words We Had to Invent URI
portfolio://essays/words-we-had-to-invent

MIME type: text/markdown

Preface — chapter documents

Advertised by the server during the last successful anonymous check.

I started building the systems in this book because I was running more coding agents than I could watch, and "watch them more carefully" had stopped being…

Preface URI
portfolio://book/preface

MIME type: text/markdown

The Untrusted Workload — chapter documents

Advertised by the server during the last successful anonymous check.

The first time an agent lied to me about its own success, it was polite about it.

The Untrusted Workload URI
portfolio://book/1-the-untrusted-workload

MIME type: text/markdown

The Map and the Territory — chapter documents

Advertised by the server during the last successful anonymous check.

A handoff note once told me to overwrite my own security guards, and it was right when it was written.

The Map and the Territory URI
portfolio://book/2-the-map-and-the-territory

MIME type: text/markdown

The Guard That Enumerates Loses — chapter documents

Advertised by the server during the last successful anonymous check.

The most dangerous sentence in my harness was one I had written to keep myself safe.

The Guard That Enumerates Loses URI
portfolio://book/3-the-guard-that-enumerates-loses

MIME type: text/markdown

The Dossier Was Already Wrong — chapter documents

Advertised by the server during the last successful anonymous check.

A three-hour security audit, and the bug it hunted had been dead before I started looking.

The Dossier Was Already Wrong URI
portfolio://book/4-the-dossier-was-already-wrong

MIME type: text/markdown

The Measurement That Lied — chapter documents

Advertised by the server during the last successful anonymous check.

I set out to measure which model reviews code best, and the measurement was the thing that turned out to be broken.

The Measurement That Lied URI
portfolio://book/5-the-measurement-that-lied

MIME type: text/markdown

The Flywheel — chapter documents

Advertised by the server during the last successful anonymous check.

You can't fine-tune the model on your laptop. You can do something better, and cheaper, and it compounds.

The Flywheel URI
portfolio://book/6-the-flywheel

MIME type: text/markdown

The Control Plane — chapter documents

Advertised by the server during the last successful anonymous check.

The bug that scared me most did not crash anything. It told the truth about a lie.

The Control Plane URI
portfolio://book/7-the-control-plane

MIME type: text/markdown

Two Harnesses, One Floor — chapter documents

Advertised by the server during the last successful anonymous check.

I found the worst security hole in my setup written, in plain English, inside an instruction file I had authored to make an agent safer.

Two Harnesses, One Floor URI
portfolio://book/8-two-harnesses-one-floor

MIME type: text/markdown

Peers, Not Owners — chapter documents

Advertised by the server during the last successful anonymous check.

The dispatch tool had one job: let two coding agents hand work to each other. On live inspection of its actual schema, it turned out only one of them was…

Peers, Not Owners URI
portfolio://book/9-peers-not-owners

MIME type: text/markdown

The Knowledge Substrate — chapter documents

Advertised by the server during the last successful anonymous check.

I built a system to be my source of truth, then I measured it, and it was failing two queries out of three.

The Knowledge Substrate URI
portfolio://book/10-the-knowledge-substrate

MIME type: text/markdown

Context Is the Budget — chapter documents

Advertised by the server during the last successful anonymous check.

This chapter was written by an orchestrator that never read the files it is built from.

Context Is the Budget URI
portfolio://book/11-context-is-the-budget

MIME type: text/markdown

The Auditor Audits Itself — chapter documents

Advertised by the server during the last successful anonymous check.

Every model withheld on every one of the 18 malign guard cases, on every repeat. Haiku did. Sonnet did. Opus did. The true positive rate for all three sat…

The Auditor Audits Itself URI
portfolio://book/12-the-auditor-audits-itself

MIME type: text/markdown

Proof You Can Hand a Stranger — chapter documents

Advertised by the server during the last successful anonymous check.

The first time the discipline in this book pointed at software I had not written, the software belonged to a company with a legal department, and it…

Proof You Can Hand a Stranger URI
portfolio://book/13-proof-you-can-hand-a-stranger

MIME type: text/markdown

The Operator's Artifact — chapter documents

Advertised by the server during the last successful anonymous check.

I can't tell you how many guard hooks I am running right now.

The Operator's Artifact URI
portfolio://book/14-the-operators-artifact

MIME type: text/markdown

Afterword — chapter documents

Advertised by the server during the last successful anonymous check.

It would be a strange book about auditing your own controls that exempted itself from the audit, so let me spend these last pages turning the loop on the…

Afterword URI
portfolio://book/afterword

MIME type: text/markdown

Colophon — chapter documents

Advertised by the server during the last successful anonymous check.

Two notes on where this came from: the person, and the machine.

Colophon URI
portfolio://book/colophon

MIME type: text/markdown

A Portfolio Is an Observability Problem — note documents

Advertised by the server during the last successful anonymous check.

I had too many repos and no honest picture of which ones were real. So I built a tool to audit my own mess, and the portfolio page became the last mile of a small operating system.

A Portfolio Is an Observability Problem URI
portfolio://notes/portfolio-truth

MIME type: text/markdown

Anatomy of a Health Verdict — note documents

Advertised by the server during the last successful anonymous check.

Every repo in my portfolio gets a verdict from a chain of small, readable judgments. Here is the entire decision, stage by stage, with the reason each rule exists.

Anatomy of a Health Verdict URI
portfolio://notes/anatomy-of-a-health-verdict

MIME type: text/markdown

Before You Connect the Tool — note documents

Advertised by the server during the last successful anonymous check.

Adding an MCP server is a trust grant. mcpforge builds the capability, then MCPAudit verifies the blast radius before an agent can touch it.

Before You Connect the Tool URI
portfolio://notes/forge-then-audit

MIME type: text/markdown

Building an operator OS for one — note documents

Advertised by the server during the last successful anonymous check.

A hub, a handful of spokes, and one rule: the scary actions are structurally unavailable. How I run my own life locally without renting it from a stack of SaaS, and why the trust is in the shape, not the vibes.

Building an operator OS for one URI
portfolio://notes/operator-os

MIME type: text/markdown

Grading the grader — note documents

Advertised by the server during the last successful anonymous check.

I use a model judge to decide which of my own paragraphs survive. So I graded 30 of its calls against my own, blind, on a pre-registered protocol. Weighted kappa 0.78, and the entire gap is one contested paragraph.

Grading the grader URI
portfolio://notes/calibration-receipt

MIME type: text/markdown

OPERANT public lab scorecard — note documents

Advertised by the server during the last successful anonymous check.

The public OPERANT lab surface: OCS scorecards, caveats, and a safe path to score your own agent without pretending it is certification.

OPERANT public lab scorecard URI
portfolio://notes/operant-lab-scorecard

MIME type: text/markdown

Operator OS in a box — note documents

Advertised by the server during the last successful anonymous check.

The same model does wildly different work depending on what you build around it. So I tried to extract the environment (memory, judgment, trust, improvement) into something runnable, and prove the capability was never really in the model.

Operator OS in a box URI
portfolio://notes/operator-os-in-a-box

MIME type: text/markdown

Pruning the fleet — note documents

Advertised by the server during the last successful anonymous check.

I set out to cut a bloated fleet of agents and found the opposite: it wasn't bloated, it was mildly broken in specific, fixable ways. A framework for deciding when an agent earns its keep, and the honest caveats about the evidence.

Pruning the fleet URI
portfolio://notes/pruning-the-fleet

MIME type: text/markdown

Scoring the operator, not the worker — note documents

Advertised by the server during the last successful anonymous check.

Every coding-agent benchmark asks whether the agent did the task. None ask whether it made the right call when the environment was trying to trick it, and stayed calibrated enough not to refuse safe work. So I built one.

Scoring the operator, not the worker URI
portfolio://notes/operant-benchmark

MIME type: text/markdown

Showing a private system in public — note documents

Advertised by the server during the last successful anonymous check.

Fleet Mission Control puts real data from a private operator system on a public page. The hard part wasn't the visualization; it was deciding what honesty requires you to hide, fake, or refuse to claim.

Showing a private system in public URI
portfolio://notes/fleet-mission-control

MIME type: text/markdown

Showing the Operator OS without leaking it — note documents

Advertised by the server during the last successful anonymous check.

How a private Portfolio Command Center became public-safe proof: fixture data, redacted screenshots, a verification receipt, and a live read-only MCP readback.

Showing the Operator OS without leaking it URI
portfolio://notes/operator-os-proof

MIME type: text/markdown

Teaching a system to say "I don't know" — note documents

Advertised by the server during the last successful anonymous check.

The most dangerous thing a dashboard can do is answer confidently with stale data. How contracts-as-code and freshness envelopes let my tools admit when they've gone cold, and why honesty beats uptime.

Teaching a system to say "I don't know" URI
portfolio://notes/freshness-envelopes

MIME type: text/markdown

The Site That Answers Back — note documents

Advertised by the server during the last successful anonymous check.

I made this site queryable by AI agents. Instead of scraping the HTML, any agent can ask it directly: my writing, projects, and benchmark results.

The Site That Answers Back URI
portfolio://notes/the-site-that-answers-back

MIME type: text/markdown

The weighted die behind every word — note documents

Advertised by the server during the last successful anonymous check.

Every word a model writes is a sample, not a lookup. I built a small toy to make next-token sampling visible, and it quietly changed how I read everything a model says.

The weighted die behind every word URI
portfolio://notes/next-word-sampling

MIME type: text/markdown

Why bridge-db runs on FTS5, not a vector database — note documents

Advertised by the server during the last successful anonymous check.

I had a vector-search layer planned for my agent memory. A dry-run killed the whole idea before I built it; the misses were never a retrieval problem.

Why bridge-db runs on FTS5, not a vector database URI
portfolio://notes/bridge-db-fts5

MIME type: text/markdown

Why this is public — note documents

Advertised by the server during the last successful anonymous check.

What this site is now: a workshop of small personal systems, and the reasoning behind them. Why I publish the decisions and not just the demos, and the one rule that lets me share any of it.

Why this is public URI
portfolio://notes/why-this-is-public

MIME type: text/markdown

essay-documents — essay documents

Advertised by the server during the last successful anonymous check.

Saagar's essay content as Markdown

essay-documents URI template
portfolio://essays/{slug}
chapter-documents — chapter documents

Advertised by the server during the last successful anonymous check.

Saagar's chapter content as Markdown

chapter-documents URI template
portfolio://book/{slug}
note-documents — note documents

Advertised by the server during the last successful anonymous check.

Saagar's note content as Markdown

note-documents URI template
portfolio://notes/{slug}

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
548 ms
95th percentile latency
548 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 548 ms · metadata changed · 8 tool(s), 79 resource(s), 3 resource template(s), 2 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http saagar-patel-portfolio-mcp https://mcp.saagarpatel.dev/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add saagar-patel-portfolio-mcp --url https://mcp.saagarpatel.dev/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable saagar-patel-portfolio-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "saagar-patel-portfolio-mcp": {
      "url": "https://mcp.saagarpatel.dev/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "saagar-patel-portfolio-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.saagarpatel.dev/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start saagar-patel-portfolio-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "saagar-patel-portfolio-mcp": {
      "type": "http",
      "url": "https://mcp.saagarpatel.dev/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http saagar-patel-portfolio-mcp https://mcp.saagarpatel.dev/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.saagarpatel.dev/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "saagar-patel-portfolio-mcp": {
      "serverUrl": "https://mcp.saagarpatel.dev/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Saagar Patel Portfolio MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.