Acl2 Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Acl2 Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
⚠️ Early Beta - Development in Progress This is an early beta version that was rapidly developed. While functional and tested, expect rough edges, potential bugs, and breaking changes. Use at your own risk in production environments.
A Model Context Protocol (MCP) server that provides tools for interacting with the ACL2 theorem prover.
This MCP server exposes 15 tools for working with ACL2, including support for persistent sessions that enable incremental development:
All code-based tools support an optional session_id parameter for incremental development.
# Clone the repository
cd acl2-mcp
# Create and activate virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install the package
pip install -e .The server can be run directly:
acl2-mcpOr via Python:
python -m acl2_mcp.serverAdd this to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"acl2": {
"command": "/path/to/acl2-mcp/venv/bin/acl2-mcp"
}
}
}Replace /path/to/acl2-mcp with the actual path to your installation directory.
Recommended: Using the CLI (Simplest method)
Claude Code provides a CLI command to add MCP servers:
claude mcp add acl2 /path/to/acl2-mcp/venv/bin/acl2-mcpReplace /path/to/acl2-mcp with the actual path to your installation directory.
This will automatically configure the server in your Claude Code settings.
Alternative: Manual Configuration
You can also manually edit the Claude Code MCP settings file:
macOS/Linux: ~/.config/claude-code/mcp_settings.json Windows: %APPDATA%\claude-code\mcp_settings.json
Option 1: Using the installed executable (Recommended)
{
"mcpServers": {
"acl2": {
"command": "/path/to/acl2-mcp/venv/bin/acl2-mcp"
}
}
}Option 2: Using Python module
{
"mcpServers": {
"acl2": {
"command": "/path/to/acl2-mcp/venv/bin/python",
"args": [
"-m",
"acl2_mcp.server"
]
}
}
}Replace /path/to/acl2-mcp with the actual path to your installation directory.
#### Persistent Session Workflow (Recommended for Interactive Development)
For incremental development where you build up definitions and theorems step-by-step, use persistent sessions:
1. Start a session:
Tool: start_session
Arguments:
name: "natural-numbers-proof" (optional, for easy identification)
Returns: Session ID (e.g., "a1b2c3d4-...")2. Define functions incrementally:
Tool: evaluate
Arguments:
session_id: "a1b2c3d4-..."
code: "(defun plus (x y) (if (zp x) y (plus (1- x) (1+ y))))"
Tool: evaluate
Arguments:
session_id: "a1b2c3d4-..."
code: "(plus 2 3)" // Test the function3. Build on previous definitions:
Tool: evaluate
Arguments:
session_id: "a1b2c3d4-..."
code: "(defun times (x y) (if (zp y) 0 (plus x (times x (1- y)))))"4. Prove theorems interactively:
Tool: prove
Arguments:
session_id: "a1b2c3d4-..."
code: "(defthm plus-commutative (equal (plus x y) (plus y x)))"5. If proof fails, retry with hints:
Tool: retry_proof
Arguments:
session_id: "a1b2c3d4-..."
code: "(defthm plus-commutative
(equal (plus x y) (plus y x))
:hints ((\"Goal\" :induct (plus x y))))"6. Save checkpoints before risky steps:
Tool: save_checkpoint
Arguments:
session_id: "a1b2c3d4-..."
checkpoint_name: "before-induction"7. Restore if needed:
Tool: restore_checkpoint
Arguments:
session_id: "a1b2c3d4-..."
checkpoint_name: "before-induction"8. Inspect session state:
Tool: get_world_state
Arguments:
session_id: "a1b2c3d4-..."
limit: 20 (show last 20 events)9. Undo mistakes:
Tool: undo
Arguments:
session_id: "a1b2c3d4-..."
count: 1 (undo last event)10. End session when done:
Tool: end_session
Arguments:
session_id: "a1b2c3d4-..."Benefits of persistent sessions:
progn#### Code-based Tools (One-off Execution)
Prove a Theorem:
(defthm append-nil
(implies (true-listp x)
(equal (append x nil) x)))Evaluate Expressions:
(defun factorial (n)
(if (zp n)
1
(* n (factorial (- n 1)))))
(factorial 5)Check Syntax:
(defun my-function (x y)
(+ x y))#### File-based Tools
Certify a Book:
Tool: certify_book
Arguments:
file_path: "path/to/mybook" (without .lisp extension)
timeout: 120 (optional)Include a Book and Run Code:
Tool: include_book
Arguments:
file_path: "path/to/mybook" (without .lisp extension)
code: "(thm (equal (+ 1 1) 2))" (optional)
timeout: 60 (optional)Check a Specific Theorem:
Tool: check_theorem
Arguments:
file_path: "path/to/myfile.lisp"
theorem_name: "my-theorem-name"
timeout: 60 (optional)#### Query and Verification Tools
Admit an Event:
Tool: admit
Arguments:
code: "(defun my-func (x) (+ x 1))"
timeout: 30 (optional)
Returns whether the event would be admitted successfully.Query an Event:
Tool: query_event
Arguments:
name: "append"
file_path: "path/to/file.lisp" (optional, if function is in a file)
timeout: 30 (optional)
Returns the definition and properties of the named event.Verify Guards:
Tool: verify_guards
Arguments:
function_name: "my-function"
file_path: "path/to/file.lisp" (optional, if function is in a file)
timeout: 60 (optional)
Verifies that the function's guards are satisfied.This project uses strict static typing with mypy:
mypy acl2_mcp/pytestThe server supports two execution modes:
When no session_id is provided, each tool call:
.lisp fileWhen using sessions:
start_session creates a long-running ACL2 process with persistent stdin/stdout pipesDefault timeout is 30 seconds per command, configurable per request.
BSD 3-Clause License - See LICENSE for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.