Torus
PYPI · TORUS-KG
Stock research memory for Claude: theses, sourced claims and SEC filing alerts in a local graph
Available components
Last scanned (11 hours ago)
Scores higher than 62% of PyPI servers
Category Memory and Knowledge
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 1 of 28 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to sekhar14/torus). View diagnostics → Pass
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 12 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability77
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 3874 tokens (~84/item across 46 items; 45 tools + 1 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage88
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 57% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 47 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Checks we ran (14)
- Known CVEs
- Install scripts
- Dependency health
- Source repository
- Provenance
- License
- Maintenance
- Security disclosure
- Schema quality
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Checks we could not complete (2)
These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.
- Malware scan in Supply Chain SecurityMalware scan not yet available for this package.
- Stability in Stability & Change Management (scores 0 for this)Stability not yet verified: not enough scan history yet (needs a 30-day window).
Does not apply to this package (2)
- Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
- Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
The score does not measure everything. What the score does not measure →
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- 3 Nov 26 +15
- Malware scan: unverified → pass ▲ security
- 2 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- 1 Nov 26 +15
- Malware scan: unverified → pass ▲ security
- 31 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- 29 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 26 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- 25 Oct 26 +15
- Malware scan: unverified → pass ▲ security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed pypi/torus-kg@0.4.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | sekhar14/torus |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/sekhar14/torus/.github/workflows/release.yml@refs/tags/v0.4.1 |
| Rekor log index | 3420202961 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:2d6066bc05dbbe80295bc4c3cf8684d44897ae86b864ec2714a6e333ed97c0ac |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | Known build tool | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 28 packages
| Packages resolved | 28 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_event ~117
Record an event and raise alerts on theses it may affect (through the companies involved and their suppliers, customers and competitors).
| Name | Type | Req | Description |
|---|---|---|---|
| entities | array | yes | Entities the event is about |
| kind | – | – | – |
| materiality | – | – | How much it matters (default 1.0) |
| occurred_at | string | yes | When it happened (UTC if no zone) |
| summary | – | – | – |
| title | string | yes | What happened, e.g. 'TSMC 8-K: CoWoS ramp delayed' |
| uri | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| alerts | array | yes | – |
| created | boolean | yes | False if this event was already recorded |
| event | – | yes | – |
No examples provided.
alert_stats ~45
How useful alerts have been: verdicts, and the share judged related (precision) by source, form, hops and materiality.
| Name | Type | Req | Description |
|---|---|---|---|
| since | – | – | Only alerts raised since |
| Name | Type | Req | Description |
|---|---|---|---|
| alerts | integer | yes | – |
| by_form | array | yes | – |
| by_hops | array | yes | – |
| by_materiality | array | yes | – |
| by_source | array | yes | – |
| by_verdict | object | yes | – |
| judged | integer | yes | – |
| open | integer | yes | – |
| precision | – | yes | – |
| unrelated | integer | yes | – |
No examples provided.
audit ~63
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.
| Name | Type | Req | Description |
|---|---|---|---|
| stale_days | integer | – | Flag open theses unchanged this long |
| Name | Type | Req | Description |
|---|---|---|---|
| counts | object | yes | – |
| findings | array | yes | – |
| generated_at | string | yes | – |
| markdown | string | – | – |
No examples provided.
brief ~66
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.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | – | The user's question or company names (leave blank for the digest only) |
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Prior theses, claims and open alerts on those companies (markdown) |
| detected_entities | array | yes | Known companies spotted in `text`, as 'Name (id)' |
| digest | string | yes | Graph overview: open alerts, theses at risk, 7-day changes, audit summary |
| recall | – | – | – |
No examples provided.
complete_distillation ~68
Finish a leased distillation job (or hand it back if it failed).
| Name | Type | Req | Description |
|---|---|---|---|
| failed | boolean | – | True if the job couldn't be done; it will be retried |
| queue_id | string | yes | – |
| summary | string | yes | What was added, in a sentence or two |
| Name | Type | Req | Description |
|---|---|---|---|
| queue_id | string | yes | – |
| remaining | integer | yes | – |
| status | – | yes | – |
No examples provided.
complete_mapping ~64
Finish a leased mapping job (or hand it back if it failed).
| Name | Type | Req | Description |
|---|---|---|---|
| failed | boolean | – | True if it couldn't be done; it will be retried |
| queue_id | string | yes | – |
| summary | string | yes | Links and claims added, in a sentence |
| Name | Type | Req | Description |
|---|---|---|---|
| queue_id | string | yes | – |
| remaining | integer | yes | – |
| status | – | yes | – |
No examples provided.
digest ~63
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.
| Name | Type | Req | Description |
|---|---|---|---|
| since_days | integer | – | How far back to look |
| Name | Type | Req | Description |
|---|---|---|---|
| activity | object | yes | – |
| audit_counts | object | yes | – |
| coming_due | array | yes | – |
| markdown | string | – | – |
| moves | array | yes | – |
| new_alerts | array | yes | – |
| older_open_alerts | integer | yes | – |
| since | string | yes | – |
| thesis_changes | array | yes | – |
| top_findings | array | yes | – |
| until | string | yes | – |
No examples provided.
filing_diff ~101
What changed in a section of a company's latest filing against the previous one of the same form: new, dropped and reworded sentences.
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | yes | Ticker, CIK, company name, canonical key or id |
| form | string | – | 10-K, 10-Q or 20-F |
| max_items | integer | – | – |
| section | string | – | e.g. risk_factors, business, mdna |
| Name | Type | Req | Description |
|---|---|---|---|
| added | array | yes | New sentences |
| changed | array | yes | Reworded sentences, most rewritten first |
| company | string | yes | – |
| latest | – | yes | – |
| previous | – | yes | – |
| removed | array | yes | Dropped sentences |
| section | string | yes | – |
| total_added | integer | yes | – |
| total_changed | integer | yes | – |
| total_removed | integer | yes | – |
| unchanged | integer | yes | – |
No examples provided.
filing_text ~151
Read a company's SEC filing as text, by section, from EDGAR (cached). Long sections come in pages: pass `next_offset` back as `offset`.
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | yes | Ticker, CIK, company name, canonical key or id |
| form | string | – | 10-K, 10-Q, 20-F, 8-K... |
| index | integer | – | 0 = latest, 1 = previous |
| max_chars | integer | – | – |
| offset | integer | – | – |
| section | – | – | business, risk_factors, mdna, legal, market_risk, financials, or an item id like 1A; omit for the whole document |
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | – |
| cik | string | yes | – |
| company | string | yes | – |
| filed | string | yes | – |
| form | string | yes | – |
| next_offset | – | yes | Pass as offset to read on; None at the end |
| offset | integer | yes | – |
| section | – | yes | – |
| sections | array | yes | Sections this filing can be read by |
| text | string | yes | – |
| total_chars | integer | yes | – |
| url | string | yes | Cite this as the evidence URI (kind: filing) |
No examples provided.
find_paths ~97
How two entities are connected, e.g. ASML -SUPPLIES-> TSMC -SUPPLIES-> AMD. Shortest and most confident paths first.
| Name | Type | Req | Description |
|---|---|---|---|
| max_hops | integer | – | – |
| relations | array | – | – |
| source | string | yes | Ticker, CIK, company name, canonical key or id |
| target | string | yes | Ticker, CIK, company name, canonical key or id |
| Name | Type | Req | Description |
|---|---|---|---|
| paths | array | yes | – |
| source | string | yes | – |
| target | string | yes | – |
| texts | array | yes | – |
No examples provided.
get_entity ~37
Resolve an entity and list its current relations.
| Name | Type | Req | Description |
|---|---|---|---|
| entity | string | yes | Ticker, CIK, company name, canonical key or id |
| Name | Type | Req | Description |
|---|---|---|---|
| entity | – | yes | – |
| relations | array | yes | – |
| resolved_by | string | yes | – |
No examples provided.
impact ~44
Dry run: which theses would an event on these entities affect, and why? Records nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| entities | array | yes | Entities a hypothetical event touches |
| occurred_at | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| hits | array | yes | – |
No examples provided.
list_alerts ~71
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).
| Name | Type | Req | Description |
|---|---|---|---|
| grouped | boolean | – | Also group the alerts by thesis, to judge each once |
| status | – | – | – |
| thesis_id | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| alerts | array | yes | – |
| groups | array | – | The same alerts grouped by thesis (when grouped=true) |
No examples provided.
list_watches ~25
What the watchers follow: the watchlist, open-thesis entities, feeds.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| entities | array | yes | – |
| feeds | array | yes | – |
No examples provided.
merge_entities ~70
Fold a duplicate entity into the one to keep; its links move over.
| Name | Type | Req | Description |
|---|---|---|---|
| duplicate | string | yes | Ticker, CIK, company name, canonical key or id |
| keep | string | yes | Ticker, CIK, company name, canonical key or id |
| reason | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| aliases | array | yes | – |
| attrs | object | yes | – |
| canonical_key | – | yes | – |
| created_at | string | yes | – |
| id | string | yes | – |
| kind | – | yes | – |
| name | string | yes | – |
| updated_at | string | yes | – |
No examples provided.
neighbors ~90
The entity's neighbourhood: companies within `hops` links (suppliers, customers, competitors...), the links among them, and theses about them.
| Name | Type | Req | Description |
|---|---|---|---|
| entity | string | yes | Ticker, CIK, company name, canonical key or id |
| hops | integer | – | – |
| relations | array | – | Only these relation types (default all) |
| valid_at | – | – | Only links true at this date |
| Name | Type | Req | Description |
|---|---|---|---|
| edges | array | yes | – |
| focus | array | yes | – |
| nodes | array | yes | – |
No examples provided.
next_distillation ~73
Lease the oldest research session waiting to be distilled into the graph. Returns its transcript digest, what was already recorded (don't duplicate it), the sources the agent looked at, and existing theses on its entities. Until `complete_distillation`, new records are attributed to that session.
| Name | Type | Req | Description |
|---|---|---|---|
| transcript_chars | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| job | – | yes | – |
| remaining | integer | yes | Jobs still waiting after this one |
No examples provided.
next_mapping ~36
Lease the next onboarded company to map from its annual report. Until `complete_mapping`, links you record are marked as curator links.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| job | – | yes | – |
| remaining | integer | yes | Jobs still waiting after this one |
No examples provided.
onboard ~81
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).
| Name | Type | Req | Description |
|---|---|---|---|
| tickers | array | yes | Tickers or company names to cover |
| watch | boolean | – | Watch their SEC filings |
| Name | Type | Req | Description |
|---|---|---|---|
| companies | array | yes | – |
| mapping_jobs_queued | integer | yes | – |
| suggested_packs | array | yes | – |
| unresolved | array | yes | – |
No examples provided.
open_explorer ~72
Write the interactive graph explorer HTML file (under TORUS_HOME/explorer.html) and open it in the user's browser.
| Name | Type | Req | Description |
|---|---|---|---|
| focus | array | – | Companies to centre on (default: whole graph) |
| hops | integer | – | – |
| open_browser | boolean | – | Open the HTML file in the default browser |
| Name | Type | Req | Description |
|---|---|---|---|
| companies | integer | yes | – |
| events | integer | yes | – |
| links | integer | yes | – |
| opened | boolean | yes | – |
| path | string | yes | – |
| theses | integer | yes | – |
No examples provided.
recall ~79
Prior theses, claims and rejected hypotheses about entities and/or a question. Call this before starting research so you build on earlier work.
| Name | Type | Req | Description |
|---|---|---|---|
| as_of | – | – | Show what was believed at this time |
| entities | array | – | Entity refs to focus on |
| limit | integer | – | – |
| query | – | – | Free-text question; entities in it are detected |
| Name | Type | Req | Description |
|---|---|---|---|
| alerts | array | – | – |
| as_of | – | yes | – |
| claims | array | yes | – |
| entities | array | yes | – |
| query | – | yes | – |
| rejected_hypotheses | array | yes | – |
| theses | array | yes | – |
| total_claims | integer | yes | – |
No examples provided.
recent_records ~38
What the most recent research sessions recorded, newest first, and which records can still be undone.
| Name | Type | Req | Description |
|---|---|---|---|
| sessions | integer | – | Most recent sessions |
| Name | Type | Req | Description |
|---|---|---|---|
| sessions | array | yes | – |
No examples provided.
record_claim ~123
Record a finding. Facts and metrics need evidence_ids.
| Name | Type | Req | Description |
|---|---|---|---|
| claim_type | – | yes | – |
| confidence | number | yes | 0 = guess, 1 = certain |
| contradicting_evidence_ids | array | – | – |
| derived_from | array | – | Claim ids an inference builds on |
| entities | array | – | Entities the claim is about |
| evidence_ids | array | – | – |
| mentioned | array | – | Entities only mentioned in passing |
| text | string | yes | One atomic, self-contained statement |
| valid_from | – | – | – |
| valid_to | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| change_reason | – | yes | – |
| claim_type | – | yes | – |
| confidence | number | yes | – |
| derived_from | array | yes | – |
| entities | array | yes | – |
| evidence | array | yes | – |
| id | string | yes | – |
| lineage_id | string | yes | – |
| recorded_at | string | yes | – |
| session_id | – | yes | – |
| status | – | yes | – |
| superseded_at | – | yes | – |
| supersedes_id | – | yes | – |
| text | string | yes | – |
| valid_from | – | yes | – |
| valid_to | – | yes | – |
No examples provided.
record_evidence ~67
Record a source. Re-recording the same URI returns the existing record.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | – | – | – |
| published_at | – | – | – |
| publisher | – | – | – |
| quote | – | – | Short verbatim excerpt supporting claims |
| title | – | – | – |
| uri | string | yes | URL or document path |
| Name | Type | Req | Description |
|---|---|---|---|
| content_hash | – | yes | – |
| id | string | yes | – |
| kind | – | yes | – |
| published_at | – | yes | – |
| publisher | – | yes | – |
| quote | – | yes | – |
| recorded_at | string | yes | – |
| retrieved_at | string | yes | – |
| source_path | – | yes | – |
| title | – | yes | – |
| uri | string | yes | – |
No examples provided.
record_rejected_hypothesis ~56
Record an idea that was checked and ruled out, so it isn't re-explored.
| Name | Type | Req | Description |
|---|---|---|---|
| entities | array | – | – |
| reason | string | yes | Why it was ruled out |
| text | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| entity_ids | array | yes | – |
| id | string | yes | – |
| reason | string | yes | – |
| recorded_at | string | yes | – |
| session_id | – | yes | – |
| text | string | yes | – |
| withdrawn_at | – | – | – |
No examples provided.
record_relation ~130
Link two entities, e.g. TSMC SUPPLIES NVIDIA. Re-recording an existing link updates it (confidence, backing claim, dates) instead of duplicating it.
| Name | Type | Req | Description |
|---|---|---|---|
| claim_id | – | – | Claim that backs this link |
| confidence | number | yes | 0 = guess, 1 = certain |
| rel | – | yes | – |
| source | string | yes | Ticker, CIK, company name, canonical key or id |
| target | string | yes | Ticker, CIK, company name, canonical key or id |
| valid_from | – | – | – |
| valid_to | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| claim_id | – | yes | – |
| confidence | number | yes | – |
| dst_id | string | yes | – |
| id | string | yes | – |
| lineage_id | string | yes | – |
| recorded_at | string | yes | – |
| rel | – | yes | – |
| source | string | – | – |
| src_id | string | yes | – |
| superseded_at | – | yes | – |
| supersedes_id | – | yes | – |
| valid_from | – | yes | – |
| valid_to | – | yes | – |
No examples provided.
record_thesis ~122
Record a conclusion and the claims it rests on.
| Name | Type | Req | Description |
|---|---|---|---|
| assumption_claim_ids | array | – | Claims the thesis depends on |
| confidence | number | yes | 0 = guess, 1 = certain |
| horizon | – | – | e.g. 12m, FY27 |
| risk_claim_ids | array | – | – |
| stance | – | yes | – |
| statement | string | yes | – |
| subject | – | – | Main entity of the thesis |
| supporting_claim_ids | array | – | – |
| title | string | yes | – |
| triggers | array | – | Conditions that would invalidate it |
| Name | Type | Req | Description |
|---|---|---|---|
| alert_threshold | – | – | – |
| benchmark | – | – | – |
| claims | array | yes | – |
| confidence | number | yes | – |
| created_at | string | yes | – |
| entry_at | – | – | – |
| entry_price | – | – | – |
| horizon | – | yes | – |
| horizon_date | – | – | – |
| id | string | yes | – |
| instrument | – | – | – |
| session_id | – | yes | – |
| stance | – | yes | – |
| statement | string | yes | – |
| status | – | yes | – |
| subject_entity_id | – | yes | – |
| title | string | yes | – |
| triggers | array | yes | – |
| updated_at | string | yes | – |
No examples provided.
resolve_alert ~96
Judge an alert after reading the event and the thesis's claims; the thesis is updated accordingly and the change logged with the alert.
| Name | Type | Req | Description |
|---|---|---|---|
| alert_id | string | yes | – |
| confidence | – | – | New thesis confidence |
| rationale | string | yes | Why, citing the event and evidence |
| status | – | – | Override the default status change |
| verdict | – | yes | supports | weakens (active -> at_risk) | breaks | unrelated |
| Name | Type | Req | Description |
|---|---|---|---|
| alert | – | yes | – |
| event | – | yes | – |
| thesis_confidence | number | yes | – |
| thesis_status | – | yes | – |
| thesis_title | string | yes | – |
No examples provided.
retract_claim ~38
Withdraw a claim that turned out to be wrong (kept in history).
| Name | Type | Req | Description |
|---|---|---|---|
| claim_id | string | yes | – |
| reason | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| change_reason | – | yes | – |
| claim_type | – | yes | – |
| confidence | number | yes | – |
| derived_from | array | yes | – |
| entities | array | yes | – |
| evidence | array | yes | – |
| id | string | yes | – |
| lineage_id | string | yes | – |
| recorded_at | string | yes | – |
| session_id | – | yes | – |
| status | – | yes | – |
| superseded_at | – | yes | – |
| supersedes_id | – | yes | – |
| text | string | yes | – |
| valid_from | – | yes | – |
| valid_to | – | yes | – |
No examples provided.
scorecard ~51
How tracked theses have done against their benchmarks, their outcomes, and calibration: did the user's confidence match how often they were right?
| Name | Type | Req | Description |
|---|---|---|---|
| refresh | boolean | – | Fetch the latest prices first (Yahoo Finance) |
| Name | Type | Req | Description |
|---|---|---|---|
| calibration | – | yes | – |
| generated_at | string | yes | – |
| markdown | string | – | – |
| theses | array | yes | – |
No examples provided.
search ~40
Keyword search over current claims, evidence and theses.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| query | string | yes | – |
| types | array | – | Object types |
| Name | Type | Req | Description |
|---|---|---|---|
| hits | array | yes | – |
No examples provided.
seed_starter_pack ~47
Add a curated starter pack of companies and supplier/competitor links. Never overrides links research recorded.
| Name | Type | Req | Description |
|---|---|---|---|
| pack | string | yes | semis, software, banks, energy or pharma |
| Name | Type | Req | Description |
|---|---|---|---|
| companies_added | integer | yes | – |
| links_added | integer | yes | – |
| links_already_present | integer | yes | – |
| pack | string | yes | – |
No examples provided.
set_thesis_outcome ~53
Record whether a thesis turned out right, wrong or unclear (overrides the automatic outcome; used for calibration).
| Name | Type | Req | Description |
|---|---|---|---|
| note | – | – | Why |
| outcome | – | yes | – |
| thesis_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| decided_at | string | yes | – |
| method | string | yes | – |
| note | – | yes | – |
| outcome | – | yes | – |
| stance_return | – | yes | – |
| thesis_id | string | yes | – |
No examples provided.
supersede_claim ~64
Correct a claim: the old version stays in history, the new one is current.
| Name | Type | Req | Description |
|---|---|---|---|
| claim_id | string | yes | – |
| confidence | – | – | – |
| evidence_ids | – | – | Replaces the evidence list if given |
| reason | string | yes | – |
| text | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| change_reason | – | yes | – |
| claim_type | – | yes | – |
| confidence | number | yes | – |
| derived_from | array | yes | – |
| entities | array | yes | – |
| evidence | array | yes | – |
| id | string | yes | – |
| lineage_id | string | yes | – |
| recorded_at | string | yes | – |
| session_id | – | yes | – |
| status | – | yes | – |
| superseded_at | – | yes | – |
| supersedes_id | – | yes | – |
| text | string | yes | – |
| valid_from | – | yes | – |
| valid_to | – | yes | – |
No examples provided.
thesis_memo ~64
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.
| Name | Type | Req | Description |
|---|---|---|---|
| thesis_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| html_path | string | yes | – |
| markdown | string | yes | – |
| markdown_path | string | yes | – |
No examples provided.
thesis_weak_points ~63
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.
| Name | Type | Req | Description |
|---|---|---|---|
| thesis_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| assumptions | array | yes | – |
| confidence | number | yes | – |
| opposing_views | array | yes | – |
| retracted_links | integer | yes | – |
| stance | – | yes | – |
| statement | string | yes | – |
| subject | – | yes | – |
| text_only_triggers | array | yes | – |
| thesis_id | string | yes | – |
| title | string | yes | – |
| unwatched_dependencies | array | yes | – |
No examples provided.
timeline ~47
Chronological claims and thesis changes for one entity.
| Name | Type | Req | Description |
|---|---|---|---|
| entity | string | yes | Ticker, CIK, company name, canonical key or id |
| since | – | – | – |
| until | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| changes | array | yes | – |
| entity_id | – | yes | – |
| since | – | yes | – |
| until | – | yes | – |
No examples provided.
track_thesis ~107
Put a thesis on the scorecard: its return against a benchmark from an entry price and date, in the direction of its stance.
| Name | Type | Req | Description |
|---|---|---|---|
| benchmark | – | – | Default: SPY |
| entry_date | – | – | Default: when the thesis was recorded |
| entry_price | – | – | Default: the close on the entry date |
| stop | boolean | – | Stop tracking this thesis |
| thesis_id | string | yes | – |
| ticker | – | – | Instrument to track (default: the subject's ticker) |
| Name | Type | Req | Description |
|---|---|---|---|
| alert_threshold | – | – | – |
| benchmark | – | – | – |
| claims | array | yes | – |
| confidence | number | yes | – |
| created_at | string | yes | – |
| entry_at | – | – | – |
| entry_price | – | – | – |
| horizon | – | yes | – |
| horizon_date | – | – | – |
| id | string | yes | – |
| instrument | – | – | – |
| session_id | – | yes | – |
| stance | – | yes | – |
| statement | string | yes | – |
| status | – | yes | – |
| subject_entity_id | – | yes | – |
| title | string | yes | – |
| triggers | array | yes | – |
| updated_at | string | yes | – |
No examples provided.
undo_records ~84
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.
| Name | Type | Req | Description |
|---|---|---|---|
| reason | string | – | – |
| records | array | yes | What to revert |
| session_id | string | yes | The session, from recent_records |
| Name | Type | Req | Description |
|---|---|---|---|
| outcomes | array | yes | – |
No examples provided.
unwatch ~37
Remove a company from the explicit watchlist.
| Name | Type | Req | Description |
|---|---|---|---|
| entity | string | yes | Ticker, CIK, company name, canonical key or id |
| Name | Type | Req | Description |
|---|---|---|---|
| entities | array | yes | – |
| feeds | array | yes | – |
No examples provided.
update_thesis ~242
Revise a thesis: status, confidence, the claims it rests on, and its triggers, in one atomic step. Everything is kept in its history. Also tunes its alerts: a threshold of its own, and mutes (e.g. no alerts for a supplier's routine 10-Qs).
| Name | Type | Req | Description |
|---|---|---|---|
| add_claims | array | – | Claims to link (e.g. newer, better-sourced assumptions) |
| add_mutes | array | – | Stop alerts from matching events |
| add_triggers | array | – | New conditions that would invalidate it |
| alert_threshold | – | – | Minimum alert score for this thesis |
| confidence | – | – | – |
| horizon | – | – | New horizon, e.g. 12m or FY2027 (counted from now) |
| reason | string | yes | Why; kept in the thesis history |
| remove_claim_ids | array | – | Claims the thesis no longer rests on |
| remove_mute_ids | array | – | – |
| remove_trigger_ids | array | – | – |
| reset_alert_threshold | boolean | – | Go back to the global alert threshold |
| status | – | – | – |
| thesis_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| alert_threshold | – | – | – |
| benchmark | – | – | – |
| claims | array | yes | – |
| confidence | number | yes | – |
| created_at | string | yes | – |
| entry_at | – | – | – |
| entry_price | – | – | – |
| horizon | – | yes | – |
| horizon_date | – | – | – |
| id | string | yes | – |
| instrument | – | – | – |
| session_id | – | yes | – |
| stance | – | yes | – |
| statement | string | yes | – |
| status | – | yes | – |
| subject_entity_id | – | yes | – |
| title | string | yes | – |
| triggers | array | yes | – |
| updated_at | string | yes | – |
No examples provided.
upsert_entity ~76
Create an entity (or merge into the one with the same canonical_key).
| Name | Type | Req | Description |
|---|---|---|---|
| aliases | array | – | Other names, abbreviations |
| canonical_key | – | – | Stable id such as cik:0001045810; merges on match |
| kind | – | – | – |
| name | string | yes | – |
| tickers | array | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| aliases | array | yes | – |
| attrs | object | yes | – |
| canonical_key | – | yes | – |
| created_at | string | yes | – |
| id | string | yes | – |
| kind | – | yes | – |
| name | string | yes | – |
| updated_at | string | yes | – |
No examples provided.
watch ~61
Watch a company: its new SEC filings become events (on the next `torus watch run`). Subjects of open theses are watched automatically.
| Name | Type | Req | Description |
|---|---|---|---|
| entity | string | yes | Ticker, CIK, company name, canonical key or id |
| note | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| entities | array | yes | – |
| feeds | array | yes | – |
No examples provided.
How do I install the Torus MCP server?
Torus runs locally as a PyPI package, launched with uvx torus-kg serve. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · torus-kg
claude mcp add sekhar14-torus -- uvx torus-kg serve
What is the Torus MCP server?
Torus is an MCP server listed in the public MCP registry as io.github.sekhar14/torus. Stock research memory for Claude: theses, sourced claims and SEC filing alerts in a local graph. This page covers its PyPI package (torus-kg).
Is the Torus MCP server safe to use?
Torus scores 65 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Torus MCP server expose?
Torus exposes 45 tools: brief, recall, get_entity, search, timeline, and 40 more. Their descriptions and schemas cost roughly 3,354 tokens of context every time the server is loaded.
Is the Torus MCP server still maintained?
Torus is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Torus MCP server under?
Torus declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.
What did VerifyMCP test on the Torus MCP server?
VerifyMCP ran 14 checks on Torus, covering Known CVEs, Install scripts, Dependency health, Source repository and 10 more. 2 items could not be completed, a gap on our side rather than a finding about Torus: Malware scan and Stability. One category scores 0 for that reason, because we only credit what we can confirm. Endpoint Security and Transport & Reachability do not apply to a PyPI package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.