Everything you need to consume MARS v2 as a read-only client: how to connect, the 65+ tables and views grouped by purpose, and the three consumer-contract filter rules you must honor. Fresh as of 2026-07-15.
Every downstream consumer connects as argos_readonly. This user has
SELECT on every mars.* table and view — no writes, no schema
changes. All queries hit the same primary on proc2; there is no separate replica today.
host=172.31.91.195 # proc2 VPC IP (SSH alias 'proc2') port=5432 dbname=mars user=argos_readonly password=trust # auth mode: trust (VPC-locked in pg_hba.conf) sslmode=disable # inside the VPC — no TLS needed
psycopg2 shorthand:
psycopg2.connect("host=172.31.91.195 dbname=mars user=argos_readonly")
Command-line:
psql -h 172.31.91.195 -U argos_readonly -d mars
From proc2 itself (if you're on the same box, which most argos code is):
use host=localhost. Same user + password.
Access is VPC-scoped. pg_hba.conf allows argos_readonly only from
172.31.0.0/16. If you get no pg_hba.conf entry for host, you're
outside the VPC — SSH-tunnel through proc2 or run your code on a VPC-resident host.
What NOT to use: the kee superuser is read+write and admin-only.
Never bake user=kee into a downstream consumer — you'll silently accumulate
the ability to write.
Every MCP tool and consumer view in production filters on these. Skip any of them and your query surfaces the ~2–5% of extraction garbage the substrate tolerates (in a quarantined column) but never expects to reach a user.
| Rule | What to write | Why |
|---|---|---|
| 1. integrity_tier | WHERE integrity_tier IN ('verified','vouched') |
Consumer-facing rows only. 'warn' is quarantined extraction garbage —
valuation-misread-as-raise, self-mergers, sentinel-name leaks, sub-$10K
unit-drop bugs. Applies to funding_deals_v2, merger_deals_v2,
real_estate_deals_v2, private_credit_deals_v2,
form_d_filings_v2. |
| 2. amount_usd_converted | SELECT amount_usd_converted — never bare amount_usd |
The Grok extractor is inconsistent about FX on non-USD rows. amount_usd
is provenance (what the article said, in the currency the article used).
amount_usd_converted is USD-normalized via fx_rates_v2.
Cross-currency comparability requires the converted column. Same applies to
deal_value_usd_converted on the merger side. |
| 3. is_placeholder | WHERE NOT is_placeholder on investors_v2 |
Some rows are extracted generic nouns from article prose ("Family offices",
"Endowments and foundations", "Insurance companies") that clustered in the investors
table as if they were real firms. They're flagged, not deleted, so provenance
queries still work — but consumer rankings must filter them out. Also filter
persons_v2 on primary_name IS NOT NULL AND TRIM(primary_name) <> ''
(36,744 EDGAR firm-name pollution rows had names NULL'd 2026-07-14). |
When in doubt, look at how mars_funding_search / mars_funding_history
/ mars_investor_portfolio (in argos-mcp-server) build their SQL. They honor
all three rules by default and expose opt-out flags.
The five canonical entity types plus the layer-2 deal canonicals across four verticals. Everything joins through the two hubs: companies_v2 and persons_v2.
Row counts are live planner estimates (2026-07-15). Vertical-owned tags
(reit credit bios
insider prospects) mark tables/rows that
another team writes to under their own methodology_version prefix. Consumers still read
everything through argos_readonly.