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"
Metadata
Release files for symbolic-math-mcp 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| symbolic_math_mcp-0.1.5.tar.gz | 22.3 kB | Without provenance | Details for symbolic_math_mcp-0.1.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| symbolic_math_mcp-0.1.5-py3-none-any.whl | Python 3 | none | any | Details for symbolic_math_mcp-0.1.5-py3-none-any.whl |
Total release size: 42.4 kB
Release files / symbolic_math_mcp-0.1.5.tar.gz
| Download URL | symbolic_math_mcp-0.1.5.tar.gz |
|---|---|
| Size | 22.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cd6329e4e511213735c9c3eadbd37560d9b19ff411175285d3b9647d162d4083
|
|
BLAKE2b-256 checksum How to use checksums |
3555c7a41ebbfe8425701b04cadfc361fd8881d0e63120a314d1c3ced48fe900
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / symbolic_math_mcp-0.1.5-py3-none-any.whl
| Download URL | symbolic_math_mcp-0.1.5-py3-none-any.whl |
|---|---|
| Size | 20.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d8234ad66a7252192082eded2c56251f253a57a0687a404e565931b66ab73738
|
|
BLAKE2b-256 checksum How to use checksums |
c8ad2a4a46882181f37a969a5c814fe926ef04928801e5387fd7c9ab7e883439
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Security for symbolic-math-mcp 0.1.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.