Query Markup Documents - On-device hybrid search for markdown files with BM25, vector search, and LLM reranking
Torus is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Stock research memory for Claude: theses, sourced claims and SEC filing alerts in a local graph
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user torus-mcp '--' uvx torus-kg serve
# 2 — ask your agent for something these tools do
# brief, recall, get_entity and 42 more
Torus costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Torus as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need uv (docs.astral.sh/uv): uvx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user torus-mcp '--' uvx torus-kg serveReconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take TORUS_HOME (Folder for the research graph and caches (default ~/.torus)), TORUS_TOOLSET (Which tools to expose: analyst hides queue and maintenance tools (default full)), TORUS_CAPTURE_MODE (How eagerly research is recorded) if you want to set them.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
45 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
One-call briefing at the start of a turn: spots known companies in text, recalls prior theses, claims, open alerts and ruled-out ideas about them, and returns the graph digest.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| text | string | no | The user's question or company names (leave blank for the digest only) |
Prior theses, claims and rejected hypotheses about entities and/or a question.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Free-text question; entities in it are detected |
| entities | array | no | Entity refs to focus on |
| as_of | no | Show what was believed at this time | |
| limit | integer | no | — |
Resolve an entity and list its current relations.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — |
Keyword search over current claims, evidence and theses.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | — |
| types | array | no | Object types |
| limit | integer | no | — |
History of one entity, oldest first: claims recorded, corrected or retracted about it, theses on it created or changed, and events (filings, news) that name it. Each change has a time, kind, object id and one-line summary. Use it to see how the view on a company evolved; use what_changed for the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| since | no | Only changes at or after this time (UTC if no zone); omit for all | |
| until | no | Only changes before this time (UTC if no zone); omit for now |
Everything recorded or revised across the graph since a point in time.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| since | yes | Start of the window (UTC if no zone) | |
| until | no | — |
Create an entity (or merge into the one with the same canonical_key).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| kind | no | — | |
| canonical_key | string | no | Stable id such as cik:0001045810; merges on match |
| tickers | array | no | — |
| aliases | array | no | Other names, abbreviations |
Fold a duplicate entity into the one to keep; its links move over.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keep | yes | — | |
| duplicate | yes | — | |
| reason | string | yes | — |
Record a source. Re-recording the same URI returns the existing record.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| uri | string | yes | URL or document path |
| title | string | no | — |
| quote | string | no | Short verbatim excerpt supporting claims |
| kind | no | — | |
| publisher | string | no | — |
| published_at | no | — |
Save one finding about one or more entities, tied to its sources.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| text | string | yes | One atomic, self-contained statement, e.g. 'TSMC supplies over 90% of NVIDIA's data-center GPU wafers' |
| claim_type | yes | fact or metric (must cite evidence_ids), inference (evidence or derived_from), forecast, or opinion | |
| confidence | yes | — | |
| entities | array | no | Entities the claim is about (ticker, name or id); they are resolved |
| mentioned | array | no | Entities only mentioned in passing |
| evidence_ids | array | no | Supporting source ids from record_evidence |
| contradicting_evidence_ids | array | no | Source ids from record_evidence that cut against it |
| derived_from | array | no | Claim ids an inference builds on |
| valid_from | no | When the statement became true (UTC if no zone); omit if unknown | |
| valid_to | no | When it stopped being true; omit if it still holds |
Correct a claim: the old version stays in history, the new one is current.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| claim_id | string | yes | — |
| reason | string | yes | — |
| text | string | no | — |
| confidence | number | no | — |
| evidence_ids | array | no | Replaces the evidence list if given |
Withdraw a claim that turned out to be wrong (kept in history).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| claim_id | string | yes | — |
| reason | string | yes | — |
Link two entities, e.g. TSMC SUPPLIES NVIDIA. Re-recording an existing link updates it (confidence, backing claim, dates) instead of duplicating it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| source | yes | — | |
| rel | yes | — | |
| target | yes | — | |
| confidence | yes | — | |
| claim_id | string | no | Claim that backs this link |
| valid_from | no | — | |
| valid_to | no | — |
Save a new investment thesis and the claims it rests on.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | Short name, e.g. 'NVIDIA stays supply-bound through FY27' |
| statement | string | yes | The investment view in one or two sentences |
| stance | yes | bullish, bearish, neutral, or n/a for non-directional views | |
| confidence | yes | — | |
| subject | string | no | Main entity (ticker, name or id); it is watched for filings |
| horizon | string | no | When the view should play out, e.g. 12m, FY27 |
| assumption_claim_ids | array | no | Claim ids that must stay true for the thesis to hold |
| supporting_claim_ids | array | no | Claim ids that strengthen it but aren't essential |
| risk_claim_ids | array | no | Claim ids that argue against it |
| triggers | array | no | Conditions that would invalidate it; matching events raise alerts |
Revise a thesis: status, confidence, the claims it rests on, and its triggers, in one atomic step. Everything is kept in its history.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| thesis_id | string | yes | — |
| reason | string | yes | Why; kept in the thesis history |
| status | no | — | |
| confidence | number | no | — |
| add_claims | array | no | Claims to link (e.g. newer, better-sourced assumptions) |
| remove_claim_ids | array | no | Claims the thesis no longer rests on |
| add_triggers | array | no | New conditions that would invalidate it |
| remove_trigger_ids | array | no | — |
| alert_threshold | number | no | Minimum alert score for this thesis |
| reset_alert_threshold | boolean | no | Go back to the global alert threshold |
| add_mutes | array | no | Stop alerts from matching events |
| remove_mute_ids | array | no | — |
| horizon | string | no | New horizon, e.g. 12m or FY2027 (counted from now) |
Record an idea that was checked and ruled out, so it isn't re-explored.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| text | string | yes | — |
| reason | string | yes | Why it was ruled out |
| entities | array | no | — |
Record an event and raise alerts on theses it may affect (through the companies involved and their suppliers, customers and competitors).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | What happened, e.g. 'TSMC 8-K: CoWoS ramp delayed' |
| occurred_at | yes | When it happened (UTC if no zone) | |
| entities | array | yes | Entities the event is about |
| kind | no | — | |
| uri | string | no | — |
| summary | string | no | — |
| materiality | number | no | How much it matters (default 1.0) |
Dry run: which theses would an event on these entities affect, and why?
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entities | array | yes | Entities a hypothetical event touches |
| occurred_at | no | — |
Alerts raised by events on theses, highest score first. Each shows how its score was built: graph score x event materiality x (1 + trigger match).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| status | no | — | |
| thesis_id | string | no | — |
| grouped | boolean | no | Also group the alerts by thesis, to judge each once |
How useful alerts have been: verdicts, and the share judged related (precision) by source, form, hops and materiality.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| since | no | Only alerts raised since |
Judge an alert after reading the event and the thesis's claims; the thesis is updated accordingly and the change logged with the alert.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| alert_id | string | yes | — |
| verdict | yes | supports | weakens (active -> at_risk) | breaks | unrelated | |
| rationale | string | yes | Why, citing the event and evidence |
| confidence | number | no | New thesis confidence |
| status | no | Override the default status change |
The entity's neighbourhood: companies within hops links (suppliers, customers, competitors...), the links among them, and theses about them.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| hops | integer | no | — |
| relations | array | no | Only these relation types (default all) |
| valid_at | no | Only links true at this date |
How two entities are connected, e.g. ASML -SUPPLIES-> TSMC -SUPPLIES-> AMD.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| source | yes | — | |
| target | yes | — | |
| max_hops | integer | no | — |
| relations | array | no | — |
Watch a company: its new SEC filings become events (on the next torus watch run). Subjects of open theses are watched automatically.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| note | string | no | — |
Stop watching a company you added with watch. Removes it from the explicit watchlist only: a company that is the subject or a trigger entity of an open thesis is still followed. Nothing in the graph is deleted.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — |
What the watchers follow: the watchlist, open-thesis entities, feeds.
Takes no parameters.
Lease the oldest research session waiting to be distilled into the graph.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| transcript_chars | integer | no | — |
Finish a leased distillation job (or hand it back if it failed).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| queue_id | string | yes | — |
| summary | string | yes | What was added, in a sentence or two |
| failed | boolean | no | True if the job couldn't be done; it will be retried |
Start covering companies: add them, watch their filings, suggest starter packs, and queue a mapping job for each (run by the company-mapper subagent, which reads their annual reports and records suppliers, customers and competitors).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tickers | array | yes | Tickers or company names to cover |
| watch | boolean | no | Watch their SEC filings |
Add a curated starter pack of companies and supplier/competitor links.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pack | string | yes | semis, software, banks, energy or pharma |
Lease the next onboarded company to map from its annual report. Until complete_mapping, links you record are marked as curator links.
Takes no parameters.
Finish a leased mapping job (or hand it back if it failed).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| queue_id | string | yes | — |
| summary | string | yes | Links and claims added, in a sentence |
| failed | boolean | no | True if it couldn't be done; it will be retried |
List what the most recent research sessions recorded (claims, theses, relations, sources, ruled-out ideas), newest session first, with each session's id and whether each record can still be undone. Read-only. Use it when the user asks what Torus saved, then pass the session id and records to…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sessions | integer | no | How many recent sessions to list (1-10) |
Revert records the user doesn't want: claims are retracted (corrections go back to the earlier version), theses the session created are archived, links retired, ruled-out ideas withdrawn. History keeps everything.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| session_id | string | yes | The session, from recent_records |
| records | array | yes | What to revert |
| reason | string | no | — |
What if this happened? Which theses would it reach, through which links, and would it raise alerts. Records nothing.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entities | array | yes | Companies the event would be about |
| description | string | yes | The hypothetical, e.g. 'TSMC fab outage halts CoWoS 3 months' |
| materiality | number | no | How much it matters (default: from the wording) |
| occurred_at | no | — |
Write a thesis up as a memo (Markdown and a standalone HTML page): what it rests on with sources and quotes, triggers, events and verdicts, ruled-out ideas and history. Saved under TORUS_HOME/memos.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| thesis_id | string | yes | — |
Write the interactive graph explorer HTML file (under TORUS_HOME/explorer.html) and open it in the user's browser.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| focus | array | no | Companies to centre on (default: whole graph) |
| hops | integer | no | — |
| open_browser | boolean | no | Open the HTML file in the default browser |
Where a thesis is weakest: thin or expiring assumptions, strong supplier or customer dependencies it never mentions, triggers that can't fire on events, and opposing views already in the graph. Input for /torus:challenge.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| thesis_id | string | yes | — |
Put a thesis on the scorecard: its return against a benchmark from an entry price and date, in the direction of its stance.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| thesis_id | string | yes | — |
| ticker | string | no | Instrument to track (default: the subject's ticker) |
| entry_price | number | no | Default: the close on the entry date |
| entry_date | no | Default: when the thesis was recorded | |
| benchmark | string | no | Default: SPY |
| stop | boolean | no | Stop tracking this thesis |
How tracked theses have done against their benchmarks, their outcomes, and
| Parameter | Type | Required | Notes |
|---|---|---|---|
| refresh | boolean | no | Fetch the latest prices first (Yahoo Finance) |
Record whether a thesis turned out right, wrong or unclear (overrides the automatic outcome; used for calibration).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| thesis_id | string | yes | — |
| outcome | yes | — | |
| note | string | no | Why |
Health check of the research graph: expired or thinly sourced assumptions, theses past their horizon or gone stale, claims that may conflict, unconfirmed starter links, orphans. Each finding suggests a fix.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| stale_days | integer | no | Flag open theses unchanged this long |
What happened in the research over the last days: new alerts by thesis, thesis status and confidence changes, theses coming due, audit counts, scorecard moves and activity. `markdown` is ready to show.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| since_days | integer | no | How far back to look |
What changed in a section of a company's latest filing against the previous one of the same form: new, dropped and reworded sentences.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company | yes | — | |
| form | string | no | 10-K, 10-Q or 20-F |
| section | string | no | e.g. risk_factors, business, mdna |
| max_items | integer | no | — |
Read a company's SEC filing as text, by section, from EDGAR (cached).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company | yes | — | |
| form | string | no | 10-K, 10-Q, 20-F, 8-K... |
| section | string | no | business, risk_factors, mdna, legal, market_risk, financials, or an item id like 1A; omit for the whole document |
| index | integer | no | 0 = latest, 1 = previous |
| offset | integer | no | — |
| max_chars | integer | no | — |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under Apache-2.0
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Torus or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (45 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| brief | no tags | |
| recall | no tags | |
| get_entity | no tags | |
| search | no tags | |
| timeline | no tags | |
| what_changed | no tags | |
| upsert_entity | no tags | |
| merge_entities | no tags | |
| record_evidence | no tags | |
| record_claim | no tags | |
| supersede_claim | no tags | |
| retract_claim | no tags | |
| record_relation | no tags | |
| record_thesis | no tags | |
| update_thesis | no tags | |
| record_rejected_hypothesis | no tags | |
| add_event | no tags | |
| impact | no tags | |
| list_alerts | no tags | |
| alert_stats | no tags | |
| resolve_alert | no tags | |
| neighbors | no tags | |
| find_paths | no tags | |
| watch | no tags | |
| unwatch | no tags | |
| list_watches | no tags | |
| next_distillation | no tags | |
| complete_distillation | no tags | |
| onboard | no tags | |
| seed_starter_pack | no tags | |
| next_mapping | no tags | |
| complete_mapping | no tags | |
| recent_records | no tags | |
| undo_records | no tags | |
| whatif | no tags | |
| thesis_memo | no tags | |
| open_explorer | no tags | |
| thesis_weak_points | no tags | |
| track_thesis | no tags | |
| scorecard | no tags | |
| set_thesis_outcome | no tags | |
| audit | no tags | |
| digest | no tags | |
| filing_diff | no tags | |
| filing_text | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.4.1. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Torus can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.