get a key
steadybase-$ skill pg_people
toolpg_people
groupPeople, in their professional role
endpointhttps://mcp.steadybase.io/mcp

WHO IS AT AN ACCOUNT, AND WHO HOLDS A PERSONA ACROSS YOUR BOOK (Postgres on the box). Answers "who are the finance leaders at UBER", "every controller on my book", "who has treasury in their title at uber.com". TENANT SCOPED: the tenant is the slug your key resolved to and cannot be overridden by an argument. Two shapes, one tool. Give ticker or account_id alone, with or without persona, and you get the classic gtm_signals.v_tenant_people read, unchanged: the upper case columns FULL_NAME, TITLE, LINKEDIN_URL, PERSONA_KEY, PERSONA_LABEL, time in role and SOURCE / SOURCE_REF. Add any of title, seniority, function, q, include_email or cursor and it answers the roster search instead, one row per person: person_id, full_name, title, headline, seniority, function, account_id, account_name, primary_ticker, linkedin_url, persona_key, persona_label, first_seen, last_seen, source, source_ref. THE RECEIPT on a roster row is source plus source_ref, the filing or vendor record the row came from, with linkedin_url as the identity you can check the person against. ticker also accepts a domain or a company name on the roster search. NEW IN ROLE: new_in_role_days answers "which of my accounts got a new CFO or controller in the last 90 days" on the book view; it returns only people whose current role started inside the window and never a person whose start date is unknown. ONE ROW PER PERSON PER PERSONA on the book view, which the box guarantees: a book that carries several tickers for one account (XOMA, XOMAO, XOMAP) does not repeat a person. LIMITS: limit is max rows, default 100, cap 500; paging is by cursor, which is EXCLUSIVE, so keep next_cursor from the reply and pass it back to get the next page without replaying or skipping a row; persona, title, seniority and function narrow, q is free text over name, title and headline. IT NEVER RETURNS a phone, a personal email, or any email at all unless your key carries contact entitlement AND you passed include_email true; when it does, business_email arrives with email_validated_at and email_risk. When it does not, the field is simply absent and `entitlement` in the envelope says why.

arguments
ticker string the account's ticker (a domain, account_id or company name also resolves on the roster search)
account_id string alternative to ticker: the acc_<32 hex> id
persona string optional persona key or label fragment
title string optional: match the job title (roster search)
seniority string optional: seniority band, e.g. c_level, vp, director (roster search)
function string optional: function, e.g. finance, procurement, travel (roster search)
q string optional: free text over name, title and headline (roster search)
include_email boolean ask for business_email; served only to a key with contact entitlement, and the envelope's entitlement says why not when it is not
cursor string the next_cursor you last saw; EXCLUSIVE, so the next page starts after it
new_in_role_days integer only people whose CURRENT role started inside this many days, e.g. 90 for "which accounts got a new CFO this quarter"; a person with no known role start date is not returned, because an unknown date is not evidence of a recent start. Book view only: not available with title, seniority, function, q, include_email or cursor
limit integer max rows (default 100, cap 500)
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":"pg_people"}'
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-$