The guide contains the complete app protocol and all 32 tool descriptions. Your app is an OAuth public client with PKCE, exactly as an agent is.
Starter prompt · copy into your coding agent
Build me a net worth dashboard on Sightline. Read https://www.sightlineapp.com/llms-full.txt first. Use OAuth with PKCE and the public MCP tools at https://my.sightlineapp.com/mcp. Ask for read-only access. Read get_started_with_sightline first. Show net worth history, account balances, and holdings. Preserve decimal strings. Show the scope, dates, missing values, stale data, and estimates. Label a restricted total as a subtotal. Keep browser tokens in memory and out of URLs and logs. Calculate returns in the app.
No SDK. No separate API. No helper endpoint. Use the public MCP tools. Read llms-full.txt before implementation.
The real protocol
A public client. One explicit grant.
Discover the endpoints. Register the app. Use PKCE. The human approves the household and scope on the control page.
Discover & register
Read the protected resource metadata. Then read the authorization server metadata. Use the endpoint URLs from those documents.
Send the registration JSON to POST /oauth/register. Keep the returned client_id and redirect address. A public client has no client secret.
An HTTPS Client ID Metadata Document can also supply the client ID. Its client_id must equal its own URL.
Each result is a real result of the service for a synthetic demo household. One long text field is shortened. No example contains real personal data.
get_net_worth+
Read a current total
The request needs no arguments. The result gives the total with its date, its scope, and its limits: complete, stale_accounts, and missing. Read them before a calculation.
Use from and to together. The maximum is 366 inclusive days. Each row has the totals of that day and the counts of stale, missing, and estimated values.
Each holding has a quantity, a price with its date and source, and a value. The account states its valuation mode, and the result states its scope and completeness.
The shared transfer_key joins the two new transfer rows. One atomic write accepts up to 200 rows. The result returns each stored row. The two transfer rows share a transfer_id.
A recorded quantity is a state, not a trade. Use cash_currency instead of instrument_id for cash. For repeated writes, add a stable external_id and repeat the same content.
Use each refresh token one time. Replace both saved tokens before the next request. Serialize refresh requests. A second use revokes the grant.
A refresh token expires after 90 days without use. If the response is lost, start authorization again.
On HTTP 401
Read WWW-Authenticate. If the access token expired, refresh once. Retry once. If refresh gives invalid_grant or the retry gives 401, start authorization again.
For writes, use a stable external_id when the tool accepts it. Repeat the same ID and content after a timeout. A timeout does not prove that a write failed.
Bounded requests
Build within the limits.
Use Retry-After on HTTP 429. Keep requests small enough to complete within the deadline.
120tool calls / grant / 60 seconds
20 stool request deadline
366inclusive days / history request
200transaction rows / atomic batch
The MCP body limit is 1 MiB. The default body limit is 64 KiB. A body read has a 10-second deadline. Read the complete guide for all limits and the browser TypeScript example.