get a key
steadybase-$ skill search
toolsearch
groupSearch across everything
endpointhttps://mcp.steadybase.io/mcp

ONE SEARCH ACROSS EVERYTHING THE BOX KNOWS (Postgres on AI-Powerhouse, no Snowflake, no model call, no paid API). The same unified search the portal's Search page runs, so the two surfaces cannot disagree: one query, four groups in one envelope. TENANT SCOPED. companies are the public company directory, the same identity for every tenant, with on_book saying whether that account sits on YOUR book; people, transcripts and documents are your book only and nothing else. Groups and their receipts: companies carry account_id, display_name, primary_ticker, domain, sector, exchange, on_book, and receipt.identifiers (each id_type ticker, cik or domain) plus receipt.cik and receipt.edgar_url; people carry FULL_NAME, TITLE, headline, account, persona and time in role, with receipt.linkedin_url, receipt.source and receipt.source_ref; transcripts carry the verbatim call window with TRANSCRIPT_URL plus CHAR_START/CHAR_END (START_SEC when the call is timed), TRANSCRIPT_ID, TICKER, CALL_DATE; documents carry the verbatim chunk with receipt_url or source_url, page number and char offsets. A transcript or document with no receipt URL is not returned at all. Quote the verbatim text as is or not at all. kinds is a list or comma string of companies, people, transcripts, documents (company, person, calls and docs are accepted too) and defaults to all four; limit is PER GROUP, default 10, cap 50; since (YYYY-MM-DD) or since_days bound transcripts and documents only, default 365 days back, and companies and people have no date; tickers narrows transcripts and documents. The envelope carries groups, counts, row_count, receipt_note, scope_note, timings and a per group errors list, so one slow group failing never loses the rest. It does NOT return a tier, a rank, an account score, an email or a phone, and it never returns another tenant's people, transcripts, documents or book membership.

arguments
query* string what to search for, in words (2 to 500 characters)
kinds array optional subset: companies, people, transcripts, documents (default all four)
limit integer max hits PER GROUP (default 10, cap 50)
since string optional YYYY-MM-DD floor on transcripts and documents
since_days integer alternative to since: days back (default 365)
tickers array optional: narrow transcripts and documents to these tickers
mode string transcript ranking: hybrid (default), keyword or vector
install
claude mcp add --transport http steadybase https://mcp.steadybase.io/mcp   --header "Authorization: Bearer $STEADYBASE_KEY"
call
curl -s https://api.steadybase.io/v1/mcp/call   -H "Authorization: Bearer $STEADYBASE_KEY" -H "Content-Type: application/json"   -d '{"tool":"search","arguments":{"query":"..."}}'
contract
A quote comes with its receiptEvery returned statement carries the verbatim sentence and the URL it came from, and where the source is a transcript, the character offsets inside it. A statement with no receipt is not returned.
Empty is an answerWhen there is no sourced statement, the skill returns nothing. It does not summarise, infer, or fill the gap from general knowledge. Handle the empty case rather than retrying until something appears.
No personal contact dataNo email address, phone number, home address or personal social account is returned by any skill, at any tier. A person is a name, a professional role, a LinkedIn profile URL and the public record that puts them in that role.
No customer data crosses a keyA tenant-scoped skill reads only that tenant. Nothing about any customer appears on the public site or in another tenant answer.

/skills/

steadybase-$