Skip to main content

MCP server that builds a world model for codebases to prevent hallucinations, repeated mistakes, and regressions

Project description

World Model MCP

An experimental MCP server that builds a "world model" for your codebase -- a temporal knowledge graph that learns from Claude Code sessions to reduce hallucinations, repeated mistakes, and regressions.

Status: Alpha (v0.1.0) -- Core knowledge graph and MCP tools work. Hooks pipeline and learning loop are functional but early-stage. Contributions welcome.

License: MIT Python 3.11+


๐ŸŽฏ What It Does

World Model MCP creates a temporal knowledge graph of your codebase that learns from every Claude Code session to:

  • Prevent Hallucinations - Validates API/function references against known entities before use
  • Stop Repeated Mistakes - Learns constraints from corrections, applies them in future sessions
  • Reduce Regressions - Tracks bug fixes and warns when changes touch critical regions

Think of it as giving Claude a long-term memory of your project.


โšก Quick Start

Installation (3 commands)

# 1. Install the package
pip install world-model-mcp

# 2. Setup in your project
cd /path/to/your/project
python -m world_model_server.cli setup

# 3. Restart Claude Code
# Done! The world model is now active

What Gets Installed

your-project/
โ”œโ”€โ”€ .mcp.json                    # MCP server configuration
โ”œโ”€โ”€ .claude/
โ”‚   โ”œโ”€โ”€ settings.json           # Hook configuration
โ”‚   โ”œโ”€โ”€ hooks/                  # Compiled TypeScript hooks
โ”‚   โ””โ”€โ”€ world-model/            # SQLite databases (~155 KB)

๐Ÿš€ Features

1. Hallucination Prevention

Before:

// Claude invents an API that doesn't exist
const user = await User.findByEmail(email); // โŒ This method doesn't exist!

After:

// Claude checks the world model first
const user = await User.findOne({ email }); // โœ… Verified to exist

Goal: Reduce non-existent API references by validating against the knowledge graph

2. Learning from Corrections

Session 1: User corrects Claude

// Claude writes:
console.log('debug info');

// User corrects to:
logger.debug('debug info');

// World model learns: "Use logger.debug() not console.log()"

Session 2: Claude uses the learned pattern

// Claude automatically writes:
logger.debug('debug info'); // โœ… No correction needed!

Goal: Learned patterns persist across sessions and prevent repeat violations

3. Regression Prevention

// Week 1: Bug fixed (null check added)
if (user && user.email) { ... }

// Week 2: Refactoring
// World model warns: "โš ๏ธ This line preserves a critical bug fix"
// Claude preserves the null check

// Result: Bug not re-introduced โœ…

Goal: Detect potential regressions before code execution


๐Ÿ“Š How It Works

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Claude Code + Hooks                                      โ”‚
โ”‚ โ†“ Captures: file edits, tool calls, user corrections   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ MCP Server (Python)                                      โ”‚
โ”‚ โ€ข 6 MCP tools for querying/recording facts              โ”‚
โ”‚ โ€ข LLM-powered entity extraction (Claude Haiku)          โ”‚
โ”‚ โ€ข External linter integration (ESLint, Pylint, Ruff)    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Knowledge Graph (SQLite + FTS5)                          โ”‚
โ”‚ โ€ข entities.db - APIs, functions, classes                โ”‚
โ”‚ โ€ข facts.db - Temporal assertions with evidence          โ”‚
โ”‚ โ€ข relationships.db - Entity dependency graph             โ”‚
โ”‚ โ€ข constraints.db - Learned rules from corrections       โ”‚
โ”‚ โ€ข sessions.db - Session history and outcomes            โ”‚
โ”‚ โ€ข events.db - Activity log with reasoning chains        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Key Concepts

  1. Temporal Facts: Every fact has validAt and invalidAt timestamps

    • "Function X existed from 2024-01-15 to 2024-03-20"
    • Query: "What was true on March 1st?"
  2. Evidence Chains: Every assertion traces back to source

    • Fact โ†’ Session โ†’ Event โ†’ Source Code Location
  3. Constraint Learning: Pattern recognition from user corrections

    • Automatic rule type inference (linting, architecture, testing)
    • Severity detection (error, warning, info)
    • Example generation for future reference
  4. Dual Validation: Combines two validation sources

    • World model constraints (learned from user)
    • External linters (ESLint, Pylint, Ruff)

๐Ÿ› ๏ธ MCP Tools

Six MCP tools available to Claude Code:

1. query_fact

Check if APIs/functions exist before using them

result = query_fact(
    query="Does User.findByEmail exist?",
    entity_type="function"
)
# Returns: {exists: bool, confidence: float, facts: [...]}

2. record_event

Capture development activity with reasoning chains

record_event(
    event_type="file_edit",
    file_path="src/api/auth.ts",
    reasoning="Added JWT authentication middleware"
)

3. validate_change

Pre-execution validation against constraints and linters

result = validate_change(
    file_path="src/api/auth.ts",
    proposed_content="..."
)
# Returns: {safe: bool, violations: [...], suggestions: [...]}

4. get_constraints

Retrieve project-specific rules for a file

constraints = get_constraints(
    file_path="src/**/*.ts",
    constraint_types=["linting", "architecture"]
)

5. record_correction

Learn from user edits (HIGH PRIORITY)

record_correction(
    claude_action={...},
    user_correction={...},
    reasoning="Use logger.debug instead of console.log"
)

6. get_related_bugs

Regression risk assessment

result = get_related_bugs(
    file_path="src/api/auth.ts",
    change_description="refactoring authentication logic"
)
# Returns: {bugs: [...], risk_score: float, critical_regions: [...]}

๐Ÿ“š Documentation


Testing

# Run tests
pytest

# With coverage
pytest --cov=world_model_server --cov-report=html

Tests cover knowledge graph CRUD operations, FTS5 search, constraint management, and bug tracking. See tests/ for details.


โš™๏ธ Configuration

Environment Variables

# Database location (default: ./.claude/world-model/)
export WORLD_MODEL_DB_PATH="/custom/path"

# Anthropic API key (optional - enables LLM extraction)
# IMPORTANT: Never commit this! Use .env file (see .env.example)
export ANTHROPIC_API_KEY="your-api-key-here"

# Model selection
export WORLD_MODEL_EXTRACTION_MODEL="claude-3-haiku-20240307"  # Fast
export WORLD_MODEL_REASONING_MODEL="claude-3-5-sonnet-20241022"  # Accurate

# Debug mode
export WORLD_MODEL_DEBUG=1

Note: Create a .env file in your project root (see .env.example) - it's automatically ignored by git.

Customizing Hooks

Edit .claude/settings.json to customize which tools trigger world model hooks:

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Edit|Write|Bash",  // Customize trigger patterns
      "hooks": [...]
    }]
  }
}

๐ŸŒ Language Support

Currently Supported:

  • โœ… TypeScript / JavaScript
  • โœ… Python

Coming Soon:

  • Go, Rust, Java, C++

Extensible Architecture: Easy to add new language parsers (see CONTRIBUTING.md)


๐Ÿ”’ Privacy & Security

  • Local-First: All data stays on your machine
  • No Telemetry: Zero tracking or external data transmission
  • Optional LLM: Works without API key (uses regex patterns as fallback)
  • Encrypted Storage: SQLite databases are local files (encrypt your disk for security)

API Key Usage (only if you provide ANTHROPIC_API_KEY):

  • Entity extraction from code changes
  • Constraint inference from corrections
  • Never sends: Credentials, secrets, PII

Security Best Practices:

  • Never commit .env files
  • Use .env.example as template
  • Store API keys in environment variables or .env files only
  • The .gitignore automatically excludes sensitive files

๐Ÿ—บ๏ธ Roadmap

v0.2.0 (Next)

  • Enhanced entity resolution with fuzzy matching
  • Multi-language support (Go, Rust, Java)
  • Performance optimizations (query caching)
  • Migration tool for database updates

v0.3.0

  • Trajectory learning (co-edit patterns)
  • Structural embeddings
  • Relationship graph visualization

v0.4.0

  • World model simulation ("what if" queries)
  • Test failure prediction
  • Multi-project knowledge transfer

๐Ÿค Contributing

We welcome contributions! See CONTRIBUTING.md for:

  • Development setup
  • Coding standards
  • Adding language support
  • Writing tests
  • Submitting PRs

Areas We Need Help:

  • Language parsers (Go, Rust, Java, C++)
  • Performance optimization
  • Documentation improvements
  • Real-world testing feedback

Stats

Project Size:

  • ~3,500 lines of code
  • 11 Python modules
  • 3 TypeScript hook implementations

Storage Efficiency:

  • Empty database: ~155 KB
  • Per entity: ~500 bytes
  • Per fact: ~800 bytes

๐Ÿ™ Acknowledgments

Built on the shoulders of giants:

Special Thanks:

  • Anthropic team for Claude Code and MCP
  • Foundation Capital for the context graphs vision
  • Open source community for testing and feedback

๐Ÿ“œ License

MIT License - Free for commercial and personal use


๐Ÿ“ž Support


โญ Star History

If you find this project useful, please give it a star! It helps others discover it.


Built with โค๏ธ for the Claude Code community

Making AI coding assistants smarter, one session at a time.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

world_model_mcp-0.1.0.tar.gz (44.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

world_model_mcp-0.1.0-py3-none-any.whl (31.0 kB view details)

Uploaded Python 3

File details

Details for the file world_model_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: world_model_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 44.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.4

File hashes

Hashes for world_model_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e82e8d8cbfe76f470c94da59f543b9528b7e61389a8d4feacb2ad9be484ee287
MD5 f829e5d45b28c8b7854dfd006d76a39f
BLAKE2b-256 45e17068588847c33f4cc004ff89099936b9c43a4fafb57465506f3e39a9b4e3

See more details on using hashes here.

File details

Details for the file world_model_mcp-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for world_model_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fe114ce44f2cc8052725e34ce9b5bf84514555c4bf3c0e3291d47735583bff7d
MD5 d1891881489fd50bc7670faaab8534b6
BLAKE2b-256 a4da0236cae7d1532c5ae436954c1d25e4c4c2b5add4842c06ae907531f7d1d6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page