FastMCP server for validating symbolic math YAML files with symbolic-math-verify.
Project description
symbolic_math_mcp
symbolic_math_mcp is a standalone FastMCP server that validates symbolic math proof files in YAML format.
It uses exactly one function from symbolic-math-verify for verification:
symbolic_math_verify.verify_yaml_file()
Features
- exposes one synchronous MCP tool:
check_symbolic_math - exposes one synchronous MCP tool for parallel directory validation:
check_symbolic_math_parallel - supports
stdio://,http://, andhttps://configuration URLs - queues requests above
max_requests - enforces a total per-request timeout
- automatically switches to a free port if the configured HTTP port is already in use
Requirements
- Python 3.11+
fastmcp>=3.4.2symbolic-math-verify>=0.1.4
Install
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/python -m pip install -e .
Configuration
Default configuration file: config.json
{
"mcp_server_name": "My Symbolic Math MCP Server",
"mcp_server_url": "http://localhost:8753",
"max_requests": 10,
"total_timeout": 600
}
Notes
stdio://...runs the server over stdio.http://...runs the server over FastMCP's streamable HTTP transport.https://...is accepted by the config parser and uses the HTTP transport settings. In practice, TLS is typically terminated by a reverse proxy in front of the process.
Run
From the project directory:
../.venv/bin/python run_server.py --config config.json
Or after installation:
symbolic-math-mcp --config config.json
Tool API
check_symbolic_math(filename)
- input: absolute path to a
.yamlsymbolic math file - behavior: blocks until
verify_yaml_file(filename)completes or times out
Successful completion:
{
"status": "Tool call completed!",
"filename": "proof.yaml",
"result": "Math proofs are valid"
}
Timeout:
{
"status": "Tool call has timed out!",
"filename": "proof.yaml",
"result": "TIMEOUT ERROR!"
}
File not found:
{
"status": "Tool call cannot find the file based on the filename!",
"filename": "proof.yaml",
"result": "FILE NOT FOUND!"
}
File read error:
{
"status": "Tool call cannot read the file!",
"filename": "proof.yaml",
"result": "FILE CANNOT BE READ!"
}
Unknown error:
{
"status": "Tool call has unknown error!",
"filename": "proof.yaml",
"result": "UNKNOWN ERROR!"
}
check_symbolic_math_parallel(dir_path)
- input: absolute directory path containing one or more
.yamlsymbolic math files - behavior: starts verification for each
.yamlfile in parallel, bounded bymax_requests, and blocks until all checks finish or the total timeout is exceeded - result keys: absolute file paths for each
.yamlfile found indir_path - failure behavior: if
dir_pathis missing, not absolute, unreadable, or contains no.yamlfiles, the tool returns the same structured error shape used bycheck_symbolic_math
Successful completion:
{
"status": "Parallel Tool call completed!",
"dir_path": "/abs/path/to/proofs",
"result": {
"/abs/path/to/proofs/one.yaml": "Math proofs are valid",
"/abs/path/to/proofs/two.yaml": "Error! Math proofs are invalid"
}
}
Timeout:
{
"status": "Tool call has timed out!",
"filename": "/abs/path/to/proofs",
"result": "TIMEOUT ERROR!"
}
Directory not found or no YAML files:
{
"status": "Tool call cannot find the file based on the filename!",
"filename": "/abs/path/to/proofs",
"result": "FILE NOT FOUND!"
}
Tests
The test suite is intentionally sequential.
Run all tests:
PYTHONPATH=src /home/brosnan/symbolic_math_mcp/.venv/bin/python tests/run_tests_sequentially.py
The integration test starts a real stdio MCP server subprocess and validates:
- 5 valid YAML files in tests_yaml
- 5 invalid YAML files in tests_yaml
Codex Config
[mcp_servers.symbolic_math_mcp]
url = "http://localhost:8753/mcp"
[mcp_servers.symbolic_math_mcp.tools.check_symbolic_math]
approval_mode = "approve"
[mcp_servers.symbolic_math_mcp.tools.check_symbolic_math_parallel]
approval_mode = "approve"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file symbolic_math_mcp-0.1.0.tar.gz.
File metadata
- Download URL: symbolic_math_mcp-0.1.0.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
adb215468675c1495d245db6045e74c2a0779bfcdd24898caafd235f9507e236
|
|
| MD5 |
6c64d2acd02ddafd5e8801c4abebfdf2
|
|
| BLAKE2b-256 |
6554190e0c26bc88d16a12df4c9d6e6887522c3b6c1b2b48551186c934930c2c
|
File details
Details for the file symbolic_math_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: symbolic_math_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57977a7ba42eedfb21df7d6cb648f36bff8351fb5b11a0a7a6b5a15a96cfbe37
|
|
| MD5 |
4b396294aac4ba685e41504c2ac06aa8
|
|
| BLAKE2b-256 |
d5a97c67d1504b50a2a6d315ca4190b74ee06206851db768b23276d2cd86ed53
|