base120-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@base120-mcpRun a pre-mortem on our Q3 launch plan"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Base120
120 named mental models for structured reasoning — a stdlib-only Python library.
Version 2.0.0 · Changelog · PyPI · Documentation · Examples · Contributing
Use them to analyze problems, design systems, and make decisions — whether you are a human, an AI agent, or a fleet of both.
Quick Start
pip install base120from base120 import Engine
engine = Engine()
operator = engine.get("P6")
print(operator.name) # → Point-of-View Anchoring
prompt = engine.prompt("P6", "How should we price the certification tier?")
print(prompt)That's it. Zero dependencies. No network calls. No telemetry. Just 120 reasoning primitives you can call from any Python 3.11+ environment.
Related MCP server: Thinking Patterns MCP Server
Table of Contents
What is Base120?
Base120 is a canonical registry of 120 mental models organized into 6 transformation families, with a stdlib-only Python SDK for programmatic access.
Each model is a named, versioned reasoning primitive — not a vague platitude, but a specific operator you can apply to a problem, generate a prompt from, and persist a governance-readable record of.
Design Principles
Stdlib-only: Zero third-party runtime dependencies. The entire library runs on Python 3.11+ with no installs beyond
pip install base120.Deterministic: Same input, same output. No LLM calls, no network, no randomness. Every operator lookup is reproducible.
Tuple-native: Every operator application produces a JSONL tuple you can persist to an append-only ledger.
Agent-friendly: Works with Claude Code, Codex, Cursor, Copilot, and any MCP-compatible agent via the
base120-mcpentry point.Human-friendly: The CLI and Python API are equally usable by a human in a terminal and an AI agent in a pipeline.
Frozen canon: The 120-model registry is versioned and frozen. Implementations in other languages conform to this registry.
What Base120 is NOT
Not an LLM: Base120 doesn't call models. It provides the reasoning structure; you provide the intelligence (human or AI).
Not a prompt library: Base120 generates operator-specific prompts, but the operators themselves are the value — structured reasoning primitives, not canned text.
Not a framework: No base classes to inherit, no decorators to apply, no middleware to configure. Import, call, done.
Not a SaaS: No API keys, no rate limits, no vendor lock-in. The registry is a YAML file you can read with any language.
The 6 Transformation Families
Base120 organizes mental models into 6 families based on the type of cognitive transformation they perform:
Family | Code | Focus | Question it answers | Example Models |
Perspective | P | Viewpoints, framing, empathy | "How else can I see this?" | P1 First Principles, P5 Empathy Mapping, P10 Context Windowing |
Inversion | IN | Counterfactuals, negation, contradiction | "What if the opposite is true?" | IN1 Reductio ad Absurdum, IN5 Worst-Case Analysis, IN6 Pre-Mortem |
Composition | CO | Building, combining, layering | "How do I assemble this from parts?" | CO1 Modularity, CO5 Interface Design, CO10 Protocol Layering |
Decomposition | DE | Breaking down, isolating, factoring | "What are the pieces?" | DE1 Root Cause Analysis, DE5 Separation of Concerns, DE8 Dimensional Reduction |
Recursion | RE | Self-reference, iteration, meta-reasoning | "How does this feed back on itself?" | RE1 Feedback Loop, RE5 Recursion, RE8 Self-Reference |
Systems | SY | Dynamics, emergence, control | "How does the whole behave?" | SY1 Causal Loop Diagrams, SY13 Reinforcing Feedback, SY18 Resilience Engineering |
Why 6 families?
Most mental-models resources present a flat list of 50-100 models with no structure. Base120's 6-family taxonomy gives you:
A navigation map: Know which family to reach for based on the type of thinking you need.
A completeness check: Each family has 18-20 models, so you can tell when you've exhausted a mode of thinking.
A composition grammar: Families chain naturally — Perspective → Inversion → Decomposition → Composition → Recursion → Systems is a common decision-making arc.
Family deep dives
Perspective (P) — 18 operators for viewpoints, framing, and empathy
Inversion (IN) — 18 operators for counterfactuals, negation, and contradiction
Composition (CO) — 20 operators for building, combining, and layering
Decomposition (DE) — 20 operators for breaking down, isolating, and factoring
Recursion (RE) — 20 operators for self-reference, iteration, and meta-reasoning
Systems (SY) — 20 operators for dynamics, emergence, and control
The 120 Models
Domain P — Perspective (P1–P18)
P1 First Principles Framing
P2 Stakeholder Mapping
P3 Identity Stack
P4 Lens Shifting
P5 Empathy Mapping
P6 Point-of-View Anchoring
P7 Perspective Switching
P8 Narrative Framing
P9 Cultural Lens Shifting
P10 Context Windowing
P11 Role Perspective-Taking
P12 Temporal Framing
P13 Spatial Framing
P14 Reference Class Framing
P15 Assumption Surfacing
P16 Identity-Context Reciprocity
P17 Frame Control & Reframing
P18 Horizon Scanning
Domain IN — Inversion (IN1–IN18)
IN1 Reductio ad Absurdum
IN2 Proof by Contradiction
IN3 Negation Testing
IN4 Counterfactual Reasoning
IN5 Worst-Case Analysis
IN6 Pre-Mortem
IN7 Regret Minimization
IN8 Inversion Principle
IN9 Constraint Relaxation
IN10 Opposite Thinking
IN11 Devil's Advocate
IN12 Second-Order Negation
IN13 Assumption Violation
IN14 Boundary Stressing
IN15 Failure Mode Enumeration
IN16 Adversarial Generation
IN17 Exclusion Analysis
IN18 Complement Thinking
Domain CO — Composition (CO1–CO20)
CO1 Modularity
CO2 Abstraction
CO3 Encapsulation
CO4 Interface Design
CO5 Protocol Layering
CO6 Dependency Injection
CO7 Pipeline Construction
CO8 Orchestration
CO9 Service Composition
CO10 Microservice Decomposition
CO11 Event-Driven Architecture
CO12 API Gateway Pattern
CO13 Federation
CO14 Polyglot Persistence
CO15 CQRS
CO16 Event Sourcing
CO17 Saga Pattern
CO18 Strangler Fig Pattern
CO19 Sidecar Pattern
CO20 Ambassador Pattern
Domain DE — Decomposition (DE1–DE20)
DE1 Root Cause Analysis
DE2 Five Whys
DE3 Fault Tree Analysis
DE4 Fishbone Diagram
DE5 Separation of Concerns
DE6 Dimensional Reduction
DE7 Factor Analysis
DE8 Principal Component Analysis
DE9 Feature Extraction
DE10 Domain-Driven Design
DE11 Bounded Context
DE12 Aggregate Decomposition
DE13 Entity-Relationship Modeling
DE14 Normalization
DE15 Refactoring
DE16 Extract Method
DE17 Decompose Conditional
DE18 Replace Inheritance
DE19 Split Phase
DE20 Replace Algorithm
Domain RE — Recursion (RE1–RE20)
RE1 Feedback Loop
RE2 Recursion
RE3 Iteration
RE4 Self-Reference
RE5 Meta-Reasoning
RE6 Reflection
RE7 Introspection
RE8 Bootstrapping
RE9 Self-Modification
RE10 Auto-Tuning
RE11 Meta-Learning
RE12 Transfer Learning
RE13 Curriculum Learning
RE14 Active Learning
RE15 Reinforcement Learning
RE16 Q-Learning
RE17 Policy Gradient
RE18 Actor-Critic
RE19 Multi-Agent Reinforcement
RE20 Hierarchical Reinforcement
Domain SY — Systems (SY1–SY20)
SY1 Causal Loop Diagrams
SY2 Stock and Flow
SY3 Systems Archetypes
SY4 Leverage Points
SY5 Tragedy of the Commons
SY6 Fixes That Fail
SY7 Shifting the Burden
SY8 Eroding Goals
SY9 Escalation
SY10 Success to the Successful
SY11 Limits to Growth
SY12 Balancing Feedback
SY13 Reinforcing Feedback
SY14 Homeostasis
SY15 Resilience
SY16 Antifragility
SY17 Optionality
SY18 Redundancy
SY19 Diversity
SY20 Modularity
Total: 120 models. Full registry in Base120_Canonical_Model_Registry.yaml.
Installation
From PyPI
pip install base120From source
git clone https://github.com/hummbl-io/base120.git && cd base120
pip install -e ".[test]"Requirements
Python 3.11+
Zero runtime dependencies (stdlib only)
Python SDK
Core API
from base120 import Engine, Ledger
engine = Engine()
# Look up an operator by ID
operator = engine.get("P6")
print(operator.name) # → Point-of-View Anchoring
print(operator.family) # → P (Perspective)
print(operator.description) # → Anchor analysis to a specific viewpoint
# Generate an operator-specific prompt for a problem
prompt = engine.prompt("P6", "How should we price the certification tier?")
print(prompt)
# Apply an operator and persist a governance-readable record
result = engine.record(
"P6",
"How should we price the certification tier?",
"Anchor the offer to the compliance officer's risk budget.",
0.85, # confidence score
)
# Persist to an append-only ledger
ledger = Ledger("base120-ledger.jsonl")
ledger.append(result.to_tuple())Engine methods
Method | Returns | Description |
|
| Look up a single operator by ID (e.g., |
|
| List all 120 operators |
|
| List the 6 transformation families |
|
| Generate an operator-specific prompt for a problem |
|
| Apply an operator and produce a ledger tuple |
Operator attributes
Attribute | Type | Description |
|
| The operator code (e.g., |
|
| Human-readable name (e.g., |
|
| The transformation family (e.g., |
|
| What the operator does |
CLI
# List all 120 operators
base120 list
# Inspect one operator
base120 get P6
# Generate an operator-specific prompt for a problem
base120 prompt P6 "How should we price the certification tier?"
# List the 6 transformation families
base120 familiesCLI examples
$ base120 get IN6
ID: IN6
Name: Pre-Mortem
Family: IN (Inversion)
Description: Imagine the project has failed; work backward to identify causes
$ base120 prompt IN6 "Should we migrate from REST to GraphQL?"
# Generates a pre-mortem prompt: "Assume the migration has shipped and
# failed catastrophically. What went wrong? List the top 5 failure modes
# and their early-warning signals."MCP Server
Base120 ships with an MCP (Model Context Protocol) server entry point, so any MCP-compatible agent can use the 120 operators directly:
# Run the MCP server
base120-mcpLearn more about MCP at the Model Context Protocol specification.
Configuration for Claude Code
Add to your Claude Code MCP config:
{
"mcpServers": {
"base120": {
"command": "base120-mcp"
}
}
}Configuration for Cursor
Add to your Cursor MCP config:
{
"mcpServers": {
"base120": {
"command": "base120-mcp"
}
}
}Once configured, your agent can call base120.get, base120.list, base120.prompt, and base120.families as MCP tools.
Ledger
Every operator application can be persisted as a JSONL tuple to an append-only ledger:
from base120 import Engine, Ledger
engine = Engine()
ledger = Ledger("decisions.jsonl")
# Apply an operator and record the result
result = engine.record(
"DE1", # operator ID
"Reduce release risk.", # problem
"Split blockers by owner.", # response
0.9, # confidence
)
ledger.append(result.to_tuple())
# Query high-drift records (confidence < threshold)
high_drift = ledger.cut(0.5)
for record in high_drift:
print(record)Ledger tuple format
Each ledger entry is a JSONL tuple with:
operator_id: The operator code (e.g.,"DE1")problem: The problem statementresponse: The applied responseconfidence: Float 0.0–1.0timestamp: ISO 8601 timestamp
The ledger is append-only — records are never modified or deleted, making it suitable for audit trails and governance review.
Examples
Example 1: Structured Decision-Making
Problem: "Should we migrate from REST to GraphQL?"
from base120 import Engine
engine = Engine()
# Step 1 — P1 (First Principles): What are the irreducible requirements?
print(engine.prompt("P1", "Should we migrate from REST to GraphQL?"))
# → "What are the irreducible requirements? Latency, cacheability, client flexibility."
# Step 2 — IN5 (Worst-Case Analysis): What if the migration takes 6 months?
print(engine.prompt("IN5", "Should we migrate from REST to GraphQL?"))
# → "What if the migration takes 6 months and breaks mobile clients?"
# Step 3 — DE5 (Separation of Concerns): Which parts need flexibility?
print(engine.prompt("DE5", "Should we migrate from REST to GraphQL?"))
# → "Which parts of the API actually need flexibility? Read paths vs write paths."
# Step 4 — CO1 (Modularity): Can we support both during transition?
print(engine.prompt("CO1", "Should we migrate from REST to GraphQL?"))
# → "Can we support both during transition? BFF pattern, not big-bang."
# Step 5 — SY13 (Feedback Loops): How do we know it's working?
print(engine.prompt("SY13", "Should we migrate from REST to GraphQL?"))
# → "How do we know it's working? Metrics: latency p99, error rate, client adoption."Each step names the model, applies it, and passes output to the next. No vague advice — explicit reasoning with receipts.
Example 2: Pre-Mortem for a Launch
from base120 import Engine, Ledger
engine = Engine()
ledger = Ledger("launch-premortem.jsonl")
# Run a pre-mortem on the launch plan
result = engine.record(
"IN6", # Pre-Mortem
"Launch the new pricing tier next Monday.", # problem
"Top failure mode: existing customers downgrade to the new tier, cannibalizing revenue.",
0.8, # confidence
)
ledger.append(result.to_tuple())
print("Pre-mortem recorded. Review before launch.")Example 3: Multi-Agent Reasoning
from base120 import Engine
engine = Engine()
# An AI agent applies Perspective operators to gather viewpoints
viewpoints = [engine.prompt(f"P{i}", "Design a rate limiter") for i in [1, 5, 6, 10]]
# Then applies Inversion to stress-test
failure_modes = [engine.prompt(f"IN{i}", "Design a rate limiter") for i in [5, 6, 15]]
# Then applies Systems to understand dynamics
dynamics = [engine.prompt(f"SY{i}", "Design a rate limiter") for i in [1, 12, 13]]Example 4: Reading the Registry Directly (Any Language)
The canonical registry is a YAML file — you can read it from any language without installing Base120:
import yaml # any YAML parser
with open("Base120_Canonical_Model_Registry.yaml") as f:
registry = yaml.safe_load(f)
models = {m["id"]: m for m in registry["models"]}
print(models["P1"]["name"]) # → First Principles Framing
print(models["IN6"]["name"]) # → Pre-Mortem
print(models["SY13"]["name"]) # → Reinforcing Feedback// Node.js
import yaml from 'js-yaml';
import { readFileSync } from 'fs';
const registry = yaml.load(readFileSync('Base120_Canonical_Model_Registry.yaml', 'utf8'));
const models = Object.fromEntries(registry.models.map(m => [m.id, m]));
console.log(models.P1.name); // → First Principles Framing// Rust (using serde_yaml)
let registry: serde_yaml::Value = serde_yaml::from_str(&std::fs::read_to_string("Base120_Canonical_Model_Registry.yaml")?)?;
let models = registry["models"].as_sequence().unwrap();Why Base120?
The problem with existing mental-models resources
Most mental-models resources fall into one of three categories:
Content sites (Farnam Street, fs.blog): Great explanations, no programmatic access. You read them, then forget which model applies when.
Awesome-lists (awesome-mental-models, awesome-concepts): Curated links, no executable tooling. You star them, then never use them.
Claude Code skills (cc-thinking-skills, mental-models-os): Platform-specific, not a general library. You install them, then can't use them outside Claude Code.
Base120 fills the structural hole: a general-purpose Python library with a structured taxonomy, stdlib-only design, and multi-surface delivery (Python SDK + CLI + MCP + REST).
What you get
120 operators — the largest catalog among general-purpose mental-models libraries
6-family taxonomy — structured navigation, not a flat list
Zero dependencies — installs in seconds, runs anywhere Python 3.11+ runs
Deterministic — same input, same output, every time
Agent-native — MCP server built in, works with Claude Code, Cursor, Codex, Copilot
Human-native — CLI and Python API equally usable
Ledger-native — every application persists a governance-readable record
Frozen canon — the registry is versioned and frozen; other-language implementations conform to it
Use cases
Decision-making frameworks: Apply structured reasoning to hard decisions, with receipts.
AI agent reasoning: Give agents a vocabulary of 120 reasoning primitives via MCP.
Multi-agent coordination: Different agents apply different families; the ledger records who did what.
Audit trails: Every reasoning step is persisted, queryable, and reviewable.
Education: Learn the 6-family taxonomy and when to reach for each mode of thinking.
Research: Cite the canonical registry in papers; the YAML is the source of truth.
Comparison
Feature | Base120 | cc-thinking-skills | mental-models (cyperx84) | awesome-concepts |
Model count | 120 | 28 | 98 | ~100 (links) |
Taxonomy | 6 transformation families | Flat list | Flat list | Flat list |
Python library | Yes | No (JS skills) | Yes | No |
CLI | Yes | No | Yes | No |
MCP server | Yes | No | Yes | No |
Dependencies | Zero (stdlib only) | N/A | Standard | N/A |
Ledger | Yes (append-only JSONL) | No | No | No |
License | Apache 2.0 | MIT | MIT | CC0 |
Platform | Any Python 3.11+ | Claude Code only | Python + Claude Code | Web (links) |
Deterministic | Yes | No (LLM-based) | No | N/A |
Cross-language registry | Yes (YAML) | No | No | N/A |
Positioning
vs. cc-thinking-skills (946 stars): cc-thinking-skills is a Claude Code skill pack with 28 models. Base120 is a general Python library with 120 models, a CLI, an MCP server, and a structured taxonomy. Use both — cc-thinking-skills for Claude Code workflows, Base120 for any Python or agent pipeline.
vs. mental-models (cyperx84) (13 stars): cyperx84's package is Claude Code-centric with 98 models and a flat list. Base120 has 120 models, a 6-family taxonomy, stdlib-only design, and a ledger.
vs. awesome-concepts (624 stars): awesome-concepts is a curated list of links. Base120 is an executable library. Use awesome-concepts to discover concepts, Base120 to apply them programmatically.
vs. pyreason (344 stars): pyreason is academic logic inference, not decision-making mental models. Different category — use pyreason for neurosymbolic reasoning, Base120 for cognitive frameworks.
vs. llm-reasoners (2,341 stars): llm-reasoners is LLM reasoning research (training/inference), not mental models for decision-making. Different category — use llm-reasoners for LLM reasoning research, Base120 for structured human/agent reasoning.
Consuming the Registry
The canonical registry is Base120_Canonical_Model_Registry.yaml — a single YAML file that is the source of truth for all 120 operators.
Registry structure
version: "1.0.0"
models:
- id: "P1"
name: "First Principles Framing"
family: "P"
description: "Reason from irreducible truths, not analogies"
- id: "P2"
name: "Stakeholder Mapping"
family: "P"
description: "Identify all parties affected by a decision"
# ... 118 moreImplementing in another language
The registry is language-agnostic. To implement Base120 in Rust, Go, TypeScript, etc.:
Parse
Base120_Canonical_Model_Registry.yamlwith any YAML parserImplement the 4
Enginemethods:get,list,families,promptImplement the
Ledgerfor append-only JSONL persistenceValidate against the test corpus in
tests/
See docs/consuming-base120.md for the full consumption contract.
Data files
The registries/ directory contains derived data files (JSON, etc.) generated from the canonical YAML. These are included for convenience but the YAML is the source of truth.
Documentation
Spec v1.0.0 — Base120 specification
Consuming Base120 — How to consume Base120 as infrastructure
Corpus Contract — Golden corpus contract for implementers
Drift Detection — Semantic drift detection
Examples — Contract examples
Contributing
Contributions are welcome. See CONTRIBUTING.md for guidelines.
Areas where we need help
Other-language implementations: Rust, Go, TypeScript ports of the Engine and Ledger
New operators: Propose new operators for the assessment queue (families are capped at 20 each)
Examples: Real-world decision-making examples using Base120
Documentation: Translations, tutorials, blog posts
Development setup
git clone https://github.com/hummbl-io/base120.git && cd base120
pip install -e ".[test]"
python -m pytest tests/ -vHUMMBL Ecosystem
Base120 is part of the HUMMBL cognitive AI architecture:
hummbl-governance — Governance runtime (kill switch, circuit breaker, cost governor)
arbiter — Agent-aware code quality scoring and attribution
hummbl-bibliography — Bibliography for the HUMMBL cognitive framework
License
Apache 2.0 — see LICENSE.
Star History
If Base120 helps you make better decisions, give it a star — it helps others discover it.
Built by HUMMBL LLC. Base120 powers the cognitive layer behind multi-agent coordination at scale.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseCqualityFmaintenanceProvide systematic thinking, mental models, and debugging approaches to enhance problem-solving capabilities. Enable structured reasoning and decision-making support for complex problems. Facilitate integration with MCP-compatible clients for advanced cognitive workflows.115
- AlicenseBqualityDmaintenanceProvides AI systems with structured thinking frameworks and reasoning tools to maintain consistent problem-solving patterns across conversations. Enables multi-step reasoning, decision analysis, and systematic troubleshooting through invocable mental models.152419MIT
- Alicense-qualityBmaintenanceEnables multi-model leader-worker agent orchestration, workflow execution, and deterministic validation via structured MCP tools.16Apache 2.0
- FlicenseCqualityBmaintenanceUnifies structured reasoning (Tree of Thoughts) with reliable task execution, enabling LLM agents to think, commit, execute, and trace cognitive provenance through a single MCP server.46
Related MCP Connectors
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
Shared long-term memory vault for AI agents with 20 MCP tools.
User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hummbl-io/base120'
If you have feedback or need assistance with the MCP directory API, please join our Discord server