Skip to main content
Glama

Two Minds, One Lock

ci

Two agents. One seeded cipher lock. The same four MCP tools. Does the smarter mind visibly win?

This is a small, honest experiment in legible differential intelligence: a Mastermind-style lock is exposed as an MCP tool surface, and different LLMs take turns trying to crack it under an attempt budget too small to brute-force. The lock is deterministic and seeded, so every mind faces the identical secret. If a stronger model can't visibly out-play a weaker one on the same tools, "bring your own AI" is decoration. It turns out it can.

The result

The graded runs are committed in runs/ and the replay page plays them side by side:

run

mind

outcome

probes

submits

runs/claude-42.json

Claude, driven live over MCP

opened

3

1

runs/gemma-42.json

gemma4:e4b via Ollama

gave up

3

0

runs/gemma-7.json

gemma4:e4b via Ollama (different seed)

gave up

3

0

Claude probed three times, narrowed the code from the ALIGNED/DISPLACED feedback, and committed once - lock open, four attempts to spare. gemma probed without converging and then stopped issuing tool calls entirely. That collapse is itself part of the honest result: a weak model loses on this surface both by reasoning less and by failing to sustain the tool loop.

One caveat worth stating plainly: the Claude run was recorded through the server's transcript log while a live Claude session drove the tools directly (the bring-your-own-AI path below), so it has tool calls but no captured chain-of-thought, and token counts read zero. The gemma runs came through the automated harness.

Watch it:

uv run python -m http.server -d . 8000

Then open http://localhost:8000/web/replay.html?seed=42 - it auto-loads both runs from the manifest and steps through them like a match replay.

Related MCP server: CotForce-MCP

The lock

Four tools, one hostile system:

  • observe_system() - rules, glyph alphabet, code length, budget, history. Free.

  • probe(approach) - reconnaissance. Returns ALIGNED (right glyph, right slot) and DISPLACED (right glyph, wrong slot). Costs one attempt. Never opens the lock, even on a perfect read.

  • submit_solution(answer) - commit. Opens only on an exact match; a miss costs an attempt and tells you nothing.

  • get_status() - attempts left, locked out, solved.

The budget is far smaller than the search space, so the optimal loop is probe-to-deduce, then submit once confident. When to stop probing and commit is the legible skill.

Crack it with your own Claude (no API key)

The MCP server registers with the Claude you already have. From the repo root:

uv sync
claude    # then ask: "Use the cipher-lock tools to crack the lock."

Claude Code picks up .mcp.json automatically. The server logs the duel to runs/claude-42.json as the tools are called, ready for the replay page. For Claude Desktop, add the server to claude_desktop_config.json with "command": "uv", "args": ["--directory", "/path/to/two-minds-one-lock", "run", "python", "-m", "tracer", "serve"] and the same env as .mcp.json.

Run the automated duel (needs an API key)

For a repeatable Claude-vs-local-model run without a chat client:

cp .env.example .env    # set TRACER_ANTHROPIC_API_KEY; point TRACER_OLLAMA_URL at your Ollama
uv run python -m tracer duel --seed 42

This spawns a fresh, identically-seeded MCP server per backend, runs each agent against it, and writes runs/<backend>-<seed>.json plus a manifest. Knobs: --seed, --backends claude,gemma (either alone works), and lock difficulty via TRACER_LOCK_LENGTH / TRACER_LOCK_ALPHABET / TRACER_LOCK_MAX_ATTEMPTS.

Any Ollama model with tool-calling support can play the local seat; swap TRACER_OLLAMA_MODEL to taste.

Layout

src/tracer/lock.py        the seeded, deterministic cipher lock (tested)
src/tracer/server.py      FastMCP server exposing the 4 tools over one Lock
src/tracer/agents/        anthropic_agent.py / ollama_agent.py / base.py (shared loop + Recorder)
src/tracer/duel.py        stdio-MCP harness: run a backend, record, write runs/
src/tracer/__main__.py    serve (subprocess) | duel (harness)
web/replay.html           side-by-side transcript replay
tests/test_lock.py        the lock logic - a bug here would corrupt the verdict
runs/                     the graded evidence the replay auto-loads

Tests cover the lock exhaustively because it is the verdict-critical piece; everything else is a thin loop around it.

uv run pytest -q

Origin

Built as the validation tracer for companIAn, a mech game in development at Press Pause Garage where the second player isn't a bot - it's whatever LLM you bring, playing pilot and hacker over MCP while you play gunner. This repo is the experiment that had to pass before the game was worth building. The full write-up: Bring your own AI: building a game where the player's LLM is a teammate over MCP.

License

MIT, (c) 2026 Press Pause Garage LLC.

Available Tools

4 tools
get_statusA

Lightweight check: attempts remaining, whether you are locked out, whether the lock is open, and how many probes/submits you have spent.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must convey behavior. It lists the status information returned and the word 'check' suggests a read-only operation, but it does not explicitly state that the call has no side effects, does not consume a probe, or has any rate limits. The behavioral disclosure is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that immediately states 'Lightweight check' and then lists all the specific status items. Every word earns its place; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-parameter, no-output-schema tool, the description fully covers what the tool does and what information it provides. It is complete enough for an agent to select and invoke it correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so per the rubric the baseline is 4. The description does not need to add parameter meaning since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'check' with a specific resource (status) and enumerates exactly what it reports: attempts remaining, locked-out state, lock open state, and probes/submits spent. This clearly distinguishes it from the sibling tools (observe_system, probe, submit_solution), which are action-oriented.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Lightweight check' implies this is a quick informational tool to consult before performing actions like probing or submitting. It provides clear context for when to use it, though it does not explicitly state when not to use it or name alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

observe_systemA

Read the lock before acting: the glyph alphabet, the code length, your remaining attempt budget, the diagnostics legend, and your probe history. Call this first -- it costs nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that the call 'costs nothing' (no budget penalty) and is a read operation. It could further clarify absence of side effects, but the 'read' phrasing and cost disclosure cover the most critical behavior for an agent deciding whether to call this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two crisp sentences with no fluff. The first sentence front-loads the action and lists concrete data items; the second sentence gives a clear directive. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description lists exactly what information the agent will receive (glyph alphabet, code length, budget, diagnostics legend, probe history). This is sufficient for a zero-parameter observation tool and aligns well with the sibling tools' actions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds no parameter details, but none are needed. The schema is empty and fully covered, so this dimension does not require compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to read the lock's state, including the glyph alphabet, code length, attempt budget, diagnostics legend, and probe history. It uses a specific verb ('read') and resource ('lock'), and the enumeration of contents distinguishes it from sibling tools like probe and submit_solution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs 'Call this first -- it costs nothing,' providing clear timing relative to other actions. This gives strong guidance on when to use the tool versus alternatives, and the mention of zero cost helps the agent decide to invoke it before any costly operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probeA

Reconnaissance. Test a candidate code -- a string of glyphs from the alphabet, exactly code_length long. Returns ALIGNED (correct glyph in the correct slot) and DISPLACED (correct glyph in the wrong slot) counts. Costs one attempt. A probe NEVER opens the lock; it only gathers information. Probe to deduce the secret.

ParametersJSON Schema
NameRequiredDescriptionDefault
approachYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the return type (ALIGNED/DISPLACED counts), the side effect (costs one attempt), and a critical behavioral trait (never opens the lock), going beyond the bare schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with 'Reconnaissance', but contains a slightly redundant final sentence ('Probe to deduce the secret') that largely restates the purpose. Otherwise each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no annotations and no output schema, the description covers input, output, side effects, and a key constraint. It provides enough context for an agent to use the tool correctly without needing additional details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's single parameter 'approach' has 0% description coverage. The description explains the candidate code as a string of glyphs exactly code_length long, which gives meaning to the parameter, but it does not explicitly map 'approach' to that value or discuss error handling for malformed input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool tests a candidate code and returns ALIGNED/DISPLACED counts. It distinguishes itself from sibling submit_solution by explicitly noting 'A probe NEVER opens the lock'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage for reconnaissance and 'Probe to deduce the secret', and warns it never opens the lock, which tells when not to use it. However, it does not explicitly name alternative tools like submit_solution for when the lock should be opened.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_solutionA

Commit to a final answer. Opens the lock if 'answer' is exactly the secret code; otherwise costs one attempt and returns only a rejection -- no diagnostics. Submitting before you have deduced the code wastes the budget. Probe first; submit once confident.

ParametersJSON Schema
NameRequiredDescriptionDefault
answerYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden of behavioral transparency. It discloses the success condition ('opens the lock if answer is exactly the secret code'), the failure cost ('otherwise costs one attempt'), and the lack of diagnostics ('returns only a rejection -- no diagnostics'). This is thorough and honest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the primary action, and every sentence adds value. It states purpose, behavior, and strategy without fluff. It is appropriately sized and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's role in a puzzle-like game, the description covers all necessary context: the success outcome, failure consequence, budget implication, and a strategic directive ('Probe first; submit once confident'). No output schema is provided, but the description sufficiently explains behavioral outcomes without needing to detail return formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite a schema with only a required 'answer' string and no description (0% coverage), the description adds significant meaning: 'answer' must be exactly the secret code. It clarifies the parameter's role as the final answer and the precise matching requirement, fully compensating for the schema's lack of detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb and resource: 'Commit to a final answer.' It distinguishes itself from siblings (observe_system, probe, get_status) by focusing on submission rather than information gathering, which is exactly the differentiating action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'Probe first; submit once confident.' It also warns against premature submission ('Submitting before you have deduced the code wastes the budget'), effectively telling the agent when to use this tool versus its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.0
    • First observedget_status
    • First observedobserve_system
    • First observedprobe
    • First observedsubmit_solution

TDQS

A4.4/5.0
Disambiguation3/5

observe_system and get_status overlap heavily: both report attempts remaining and probe history. While observe_system is more comprehensive, the redundancy could cause an agent to pick the wrong one. probe and submit_solution are clearly distinct.

Naming Consistency4/5

Most tools follow a verb_noun pattern (observe_system, submit_solution, get_status), but probe is a bare verb without an explicit object. The style is consistent with snake_case lowercase.

Tool Count5/5

Four tools is a well-scoped set for a simple lock-deduction game, covering reconnaissance, probing, solution submission, and status checking.

Completeness5/5

The tool surface covers the full gameplay loop: observe the system, probe candidates, submit the solution, and check status. No obvious missing operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A cognitive optimization engine exposed as an MCP server that amplifies LLM reasoning through self-consistency sampling, MCTS, Dung argumentation, symbolic verification, and measured confidence.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Nine deterministic MCP tools that make LLM answers prove themselves before you trust them.
    9
    15
    MIT

Latest Blog Posts

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/presspausegarage/two-minds-one-lock'

If you have feedback or need assistance with the MCP directory API, please join our Discord server