veto
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@veto check my long call reading: RSI 55, catalyst in 20 days, IV rank 25"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
veto
A checklist for a long call. It answers pass, fail, or watchlist, and
it does not recommend a trade.
The rules came out of a week of checking the same names twice and finding that the second check disagreed with the first. The useful part was not the names. It was the refusals: an entry mode that was "near" its number, an analyst target copied from a stale snippet, a spread whose short leg broke a rule the long leg had already satisfied. Those are tests now. The names are examples of a reading, not ideas.
Nothing to install beyond Python 3.9.
Try it
pip install veto-check
veto check examples/se.txt
python3 -m veto check examples/se.txt
python3 -m veto check examples/clear.txt
python3 -m veto check examples/spread.txtA reading is one name: value per line. A missing value fails the rule that
needs it. There is no "close enough": RSI of 30.01 does not pass a rule
written as 30.
examples/se.txt fails both entry modes, so the result is watchlist. Not a
smaller trade. examples/bmy.txt fails the analyst check first, at 8.3%
against a rule that wants 20%. examples/spread.txt passes an entry mode and
then fails because the short leg is too short, too far from the money, and
expires after earnings.
Related MCP server: radar-brief
The rules
Applied in this order. The first one is first because it removes a name before the rest of the numbers are worth collecting.
Rule | Passes when |
analyst upside | target is at least 20% above the price |
mode A | RSI is 30 or below, and the MACD histogram is positive |
mode B | RSI is from 45 to 65, and a catalyst falls inside 30 days |
iv rank | below 30 |
FOMC | the decision is more than 48 hours away, or already past |
gap | the open is not more than 5% |
earnings | a hold-or-exit decision is already written down |
diagonal | only when the reading is a spread: each leg 60 to 120 days, at the money or one strike out, and the short leg expires before earnings |
One of the two modes has to pass. The other rules all have to pass. Both
modes failing is watchlist. A mode passing while another rule fails is
fail.
As an MCP server
python3 -m veto serveThis speaks MCP
over stdin and stdout: one JSON-RPC message per line, logs on stderr, nothing
else on stdout. It implements initialize, tools/list, tools/call, and
ping. The one tool is check, and its arguments are the same fields as the
text file.
A host that already runs other servers adds this beside them. The decision
does not change because it arrived over the protocol: serve calls the same
function check does. A client that would rather not speak MCP can shell out
to python3 -m veto check and read the text.
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"example","version":"0"}}}What it will not do
It does not fetch a price, an analyst target, or an option chain. Those
numbers go stale, and a tool that fetches them starts pretending the fetch
cannot be wrong. You bring the figures. It also does not size a position,
pick a strike, or tell you to buy anything. The output is whether the reading
cleared rules you can read in veto/rules.py.
Tests
python3 -m unittest discover -s testsAvailable Tools
1 toolcheckB
Decide whether a long-call reading passes a fixed set of rules. Returns pass, fail, or watchlist. It does not recommend a trade, and a missing number fails the rule that needs it.
Inputs: rsi, price, spread, iv_rank, +12 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 1 tool
There is only one tool, so there is no possibility of selecting among overlapping or confusing alternatives. Its purpose—returning pass, fail, or watchlist for a long-call reading against fixed rules—is clearly stated.
With a single tool, there is no cross-tool naming inconsistency. The name 'check' is concise and verb-based, though generic and not especially descriptive of the veto/rule-checking domain.
The server appears narrowly scoped to one validation decision, so one tool can be sufficient. However, a single-tool surface is thin for a standalone server and leaves little room for related operations such as rule inspection or explanation.
The core decision operation is covered, including pass/fail/watchlist outcomes and a clear statement that missing numbers fail applicable rules. Minor gaps remain around diagnostics, such as explaining which rule failed or exposing the fixed rule set.
Maintenance
Related MCP Connectors
Read-only checks for proposed orders against evidence and policy; no trading or payment authority.
Deterministic decision guardrail for AI agents and bots. Verifies pre-trade economics (long-only).
Stock research with receipts: valuation verdicts, earnings setups, a public ledger of settled calls.
Check actions against fixed values using supplied numeric facts. Never authorizes or executes.
Related MCP Servers
- FlicenseAqualityBmaintenanceEnables local auditing of trading strategies through MCP checkers for point-in-time data provenance, pre-trade order validation, and regime-fragility testing, while deferring promotion verdicts to a hosted service.14179 PyPI-
- AlicenseNot gradedqualityBmaintenanceEnables users to run deterministic rule checks against their own metrics or HTTP/CSV sources and pull back a short decision brief: only the items that crossed a threshold, each with the number that tripped it and suggested next steps. Users can also record accept/reject/edit feedback so subsequent briefs reflect their own playbook, all without API keys or a live LLM.MIT
- AlicenseAqualityBmaintenanceEnables local, read-only product-data checks for reviewing product records, comparing feed snapshots, and comparing dimensions against source rules, returning match or hold decisions without fetching references or modifying feeds.3MIT
- AlicenseCqualityBmaintenanceEnables assessment of scheduled catalyst readiness and supplied OHLCV bars around a price level, classifying breaks as testing, provisional, rejected, accepted, or confirmed with an explicit confirmation rule. It also checks whether user-supplied options evidence is complete, while always returning trade permission as false and never fetching market data or giving advice.5MIT