npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

hypothesis-tracker-mcp

v1.0.1

Published

MCP server that gives AI agents a persistent scientific method — track hypotheses, accumulate evidence, and update confidence via Bayesian logic across sessions

Readme

Hypothesis Tracker MCP

An MCP server that gives AI agents a persistent scientific method. Track hypotheses, accumulate evidence, and update confidence via Bayesian logic — across sessions.

Instead of agents forming implicit hypotheses in their context window and forgetting them, this server provides structured, persistent investigation with a full audit trail.

Install

npx (recommended)

No install needed — just add to your MCP client config:

{
  "mcpServers": {
    "hypothesis-tracker": {
      "command": "npx",
      "args": ["-y", "hypothesis-tracker-mcp"]
    }
  }
}

Global install

npm install -g hypothesis-tracker-mcp

Then add to your MCP config:

{
  "mcpServers": {
    "hypothesis-tracker": {
      "command": "hypothesis-tracker-mcp"
    }
  }
}

Claude Code

Add globally for all projects:

claude mcp add --scope global hypothesis-tracker -- npx -y hypothesis-tracker-mcp

Or add to ~/.claude/.mcp.json:

{
  "mcpServers": {
    "hypothesis-tracker": {
      "command": "npx",
      "args": ["-y", "hypothesis-tracker-mcp"]
    }
  }
}

Data Storage

All data is stored locally in ~/.hypothesis-tracker/data.db (SQLite with WAL mode). Nothing leaves your machine.

Tools

hypothesis_create

Create a new hypothesis with an initial confidence level.

| Parameter | Type | Required | Description | |---|---|---|---| | title | string | yes | Title of the hypothesis | | description | string | yes | Detailed description | | initial_confidence | number (0-1) | yes | Starting confidence level | | tags | string[] | no | Tags for categorization | | context | string | no | Why this hypothesis was formed |

hypothesis_add_evidence

Add evidence to a hypothesis. Automatically updates confidence using Bayesian logic.

| Parameter | Type | Required | Description | |---|---|---|---| | hypothesis_id | string | yes | ID of the hypothesis | | type | "supporting" | "contradicting" | "neutral" | yes | Evidence type | | description | string | yes | Description of the evidence | | weight | number (0-1) | no | Strength of the evidence (default: 0.5) | | source | string | no | Source of the evidence |

hypothesis_update

Manually update hypothesis fields.

| Parameter | Type | Required | Description | |---|---|---|---| | hypothesis_id | string | yes | ID of the hypothesis | | confidence | number (0-1) | no | New confidence level | | description | string | no | Updated description | | tags | string[] | no | Updated tags |

hypothesis_list

List hypotheses with filtering and sorting.

| Parameter | Type | Required | Description | |---|---|---|---| | status | "active" | "confirmed" | "rejected" | "all" | no | Filter by status (default: "active") | | sort_by | "confidence" | "created" | "updated" | no | Sort field (default: "confidence") | | tags | string[] | no | Filter by tags (matches any) |

hypothesis_resolve

Mark a hypothesis as confirmed or rejected.

| Parameter | Type | Required | Description | |---|---|---|---| | hypothesis_id | string | yes | ID of the hypothesis | | resolution | "confirmed" | "rejected" | yes | Outcome | | final_evidence | string | yes | Final evidence for the resolution | | confidence | number (0-1) | no | Final confidence override |

hypothesis_history

Get full audit trail for a hypothesis — all evidence added, confidence changes, and resolution.

| Parameter | Type | Required | Description | |---|---|---|---| | hypothesis_id | string | yes | ID of the hypothesis |

Example: Debugging a Performance Issue

1. App is slow — create competing hypotheses:

   hypothesis_create("Database queries are slow", ..., confidence=0.5)
   hypothesis_create("Memory leak in WebSocket handler", ..., confidence=0.4)
   hypothesis_create("Network latency to external API", ..., confidence=0.3)

2. Run profiler, add evidence:

   hypothesis_add_evidence(db_id, type="contradicting",
     description="Profiler shows DB queries all under 10ms", weight=0.8)
   → DB hypothesis drops from 0.5 to 0.26

   hypothesis_add_evidence(ws_id, type="supporting",
     description="Heap snapshot shows WS connections growing unbounded", weight=0.7)
   → WS hypothesis rises from 0.4 to 0.65

3. Next session — pick up where you left off:

   hypothesis_list() → shows WS leak at 65% confidence, DB at 26%

4. More evidence, then resolve:

   hypothesis_add_evidence(ws_id, type="supporting",
     description="Fixed WS cleanup, memory stabilized", weight=0.9)

   hypothesis_resolve(ws_id, resolution="confirmed",
     final_evidence="WS connection cleanup fix reduced memory growth to zero")

How the Bayesian Updates Work

  • Supporting evidence increases confidence proportional to weight and remaining room (can't exceed 0.99)
  • Contradicting evidence decreases confidence proportional to weight and current confidence (can't go below 0.01)
  • Neutral evidence nudges slightly toward 0.5
  • Confidence is always clamped to [0.01, 0.99] — the system never reaches absolute certainty

The strength factor is 0.6, meaning a single piece of maximum-weight evidence moves confidence ~60% of the theoretical maximum. This prevents any single piece of evidence from being conclusive — you need to accumulate multiple pieces.

Use Cases

  • Debugging — track competing theories about what's broken
  • Architecture decisions — weigh evidence for/against approaches
  • Root cause analysis — systematic elimination with audit trail
  • Research — track what you've investigated vs. what's still open
  • Code review — hypothesize about potential issues, gather evidence

License

MIT