Skip to main content

MCP server for First-Order Logic provers (Vampire, E)

Project description

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

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

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.

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