Skip to main content

FOL Prover MCP Server

An MCP (Model Context Protocol) server for First-Order Logic theorem proving using Vampire, E, and Prover9.

Features

  • Multiple Provers: Support for Vampire, E (eprover), Prover9, and built-in simple prover
  • Built-in Prover: Simple resolution-based prover requires no external installation
  • FOL Parsing: Parse and validate first-order logic formulas with Unicode notation
  • Session Management: Build proofs incrementally with named sessions
  • TPTP Export: Convert problems to standard TPTP format
  • Automatic Fallback: Try multiple provers if one fails

Installation

Prerequisites

The server includes a built-in simple prover that works without any external installation. For more complex proofs, install one of the following theorem provers:

Vampire (recommended):

# Linux (Ubuntu/Debian)
sudo apt-get install vampire

# macOS (with Homebrew)
brew install vampire

# Or download from: https://github.com/vprover/vampire

E Prover:

# Linux (Ubuntu/Debian)
sudo apt-get install eprover

# macOS
brew install eprover

# Or download from: https://wwwlehre.dhbw-stuttgart.de/~sschulz/E/E.html

Prover9:

# Download from: https://www.cs.unm.edu/~mccune/prover9/

Install the MCP Server

pip install folprover-mcp

Or install from source:

git clone https://github.com/folprover-mcp/folprover-mcp
cd folprover-mcp
pip install -e .

Configuration

Add to your MCP client configuration:

Claude Desktop

Add to ~/.config/claude/claude_desktop_config.json (Linux/macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "folprover": {
      "command": "folprover-mcp"
    }
  }
}

VS Code with Continue

Add to your Continue configuration:

{
  "mcpServers": {
    "folprover": {
      "command": "folprover-mcp"
    }
  }
}

Usage

FOL Notation

The server supports standard FOL notation with Unicode operators:

Symbol Meaning Example
Universal quantifier ∀x P(x)
Existential quantifier ∃x P(x)
Conjunction (AND) P(x) ∧ Q(x)
Disjunction (OR) P(x) ∨ Q(x)
Implication P(x) → Q(x)
Biconditional P(x) ↔ Q(x)
¬ Negation ¬P(x)
Exclusive OR P(x) ⊕ Q(x)

You can also use ASCII alternatives:

  • forall or all for
  • exists for
  • & or and for
  • | or or for
  • -> or implies for
  • <-> or iff for
  • ~ or not for ¬

Tools

prove

Execute a FOL proof directly:

{
  "premises": [
    "∀x (Human(x) → Mortal(x))",
    "Human(socrates)"
  ],
  "conclusion": "Mortal(socrates)",
  "prover": "vampire"
}

add_premise

Add a premise to the current session:

{
  "premise": "∀x (Human(x) → Mortal(x))"
}

set_conclusion

Set the conclusion to prove:

{
  "conclusion": "Mortal(socrates)"
}

prove_session

Prove using the current session's premises and conclusion:

{
  "prover": "vampire"
}

parse_formula

Parse and validate a FOL formula:

{
  "formula": "∀x (P(x) → Q(x))"
}

convert_to_tptp

Convert a problem to TPTP format:

{
  "premises": ["∀x (P(x) → Q(x))", "P(a)"],
  "conclusion": "Q(a)"
}

list_provers

List available theorem provers:

{}

Session Management

  • create_session: Create a new named session
  • list_sessions: List all active sessions
  • switch_session: Switch to a different session
  • get_session: Get current session state
  • clear_session: Clear all premises and conclusion
  • remove_premise: Remove a premise by index

Examples

Example 1: Classic Syllogism

Premises:

  1. All humans are mortal: ∀x (Human(x) → Mortal(x))
  2. Socrates is human: Human(socrates)

Conclusion: Socrates is mortal: Mortal(socrates)

Result: Theorem (True)

Example 2: Set Theory

Premises:

  1. If x is a subset of y and y is a subset of z, then x is a subset of z: ∀x ∀y ∀z ((Subset(x,y) ∧ Subset(y,z)) → Subset(x,z))
  2. A is a subset of B: Subset(a, b)
  3. B is a subset of C: Subset(b, c)

Conclusion: A is a subset of C: Subset(a, c)

Result: Theorem (True)

Example 3: With Counter-model

Premises:

  1. Some birds can fly: ∃x (Bird(x) ∧ CanFly(x))

Conclusion: All birds can fly: ∀x (Bird(x) → CanFly(x))

Result: Not a theorem (False - there's a counter-model where some bird can't fly)

Architecture

folprover-mcp/
├── src/folprover_mcp/
│   ├── __init__.py
│   ├── server.py          # MCP server implementation
│   ├── provers.py         # Prover interfaces (Vampire, E, Prover9, Simple)
│   ├── simple_prover.py   # Built-in resolution prover
│   ├── fol_parser.py      # FOL formula parser
│   └── tptp_converter.py  # TPTP format converter
├── tests/                 # Test suite
├── examples/              # Example proof problems
├── pyproject.toml
└── README.md

References

License

MIT License

Download files

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

Source Distribution

folprover_mcp-0.1.0.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

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

folprover_mcp-0.1.0-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: folprover_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for folprover_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f5beb0c3a75559e523ef1b22e7ddb6523c2588f448baa24d1ebe1ebc75129969
MD5 12ea0cfc181cfad020f57abc842293e3
BLAKE2b-256 3bad41fa0175f1b84780b2c0a9bc0601d449b5595cc066e664bf53fad2636d40

See more details on using hashes here.

Provenance

The following attestation bundles were made for folprover_mcp-0.1.0.tar.gz:

Publisher: python-publish.yml on NewJerseyStyle/folprover-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: folprover_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for folprover_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fa2fd8c9c12f504807aa85be13a22c7bb61909072ff6d6f6c798a6a763cb6301
MD5 88b40f4b1ee8aca58650ccab81902a63
BLAKE2b-256 b9367db8fd2155f61d4a6ba4b1f36a66196b288f46671cda531f5fdf2744a5e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for folprover_mcp-0.1.0-py3-none-any.whl:

Publisher: python-publish.yml on NewJerseyStyle/folprover-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Supported by

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