Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,552Letters: 14Defects: 1,323counted 2 min ago
teppi

Server definition

Hash
sha256:55a3450de4257b039a8a5d9499b9d74b620bd89f82c8f0a2dd814a9626cf3cfd
What it is
What a remote MCP server returned when asked what it offers: 4 tools

The blob, as servednamed by its sha256

{ "instructions": "包租公 · YieldLord — options-income (covered call / cash-secured put / wheel) analysis.\n\nYOU ARE NOT CONNECTED TO AN ACCOUNT, so this session can answer about ANY ticker or contract the user names, but it cannot see anyone's positions or portfolio.\n\nWhat works right now, with no account:\n• find_recommendations — give it a ticker; it returns the TOP 3 RENT-scored covered call / CSP candidates with strike, premium, annualized yield, delta and probability of keeping the premium. The full list, scored against the user's own book, comes with a connected Gold account (14-day free trial, no card).\n• explain_option — the user names one specific contract; it explains that exact strike.\n• get_market_climate — how friendly today is for selling premium (VIX, regime, macro calendar).\n• connect_my_account — call this when the user asks about THEIR OWN book. It gives the user a sign-up link; once they have an account, call it again with start_authorization=true to begin the OAuth flow (a plain link cannot open the authorize page — that URL needs your own client_id, redirect_uri and PKCE challenge).\n\nScores here use neutral defaults. A connected account is scored against that user's own willing-to-own list, buying power and persona, so numbers can legitimately differ — say so rather than presenting an anonymous score as personalised.\n\nIt never places orders, never touches a broker, and involves no funds. All output is informational analysis, not investment advice.", "tools": [ { "description": "Account status: whether this session is connected to a 包租公 · YieldLord account, which tier it is on, and how many credits are left. Call this when the user asks \"am I connected\" or \"how many credits do I have left\", and when they ask about THEIR OWN positions, portfolio, morning brief or realized history — anonymous access cannot see those, and this explains what connecting unlocks and gives the link. Called with no arguments it returns text and a URL only. Call it again with start_authorization=true once the user has an account, to begin the OAuth flow — or, if you can't receive a browser redirect, with start_link=true (a link the user approves, then pickup=<pickup> gives you the token; nothing to copy back). A connected free account can also start its free Gold trial here (start_trial=true — always a two-step confirm with the user) or get the link to buy Gold. Call it again right after the user finishes signing in: for a connected account the reply lists every tool the connection unlocked (the tool list you fetched before sign-in only has the public ones — re-list tools after connecting).", "inputSchema": { "properties": { "agent_name": { "description": "With start_link: your name as the user knows you (shown on the approval page).", "type": "string" }, "confirm": { "description": "The confirm_token from the previous start_trial call, sent only after the user said yes.", "type": "string" }, "pickup": { "description": "The pickup from start_link. Returns pending until the user approves, then the access token (once).", "type": "string" }, "start_authorization": { "description": "Begin the OAuth flow now. The call answers HTTP 401 with a WWW-Authenticate header pointing at this server's protected-resource metadata; follow it (dynamic client registration, PKCE S256, public client, no secret) and give the user the sign-in link to approve. Use it only after the user has an account — a plain link cannot open the authorize page, because that URL needs your own client_id, redirect_uri and code_challenge. If you can't receive a browser redirect (you run on a server, not on the user's computer), register this server's /api/mcp/callback page as your redirect_uri — the user copies the full URL from it back to you.", "type": "boolean" }, "start_link": { "description": "Easiest way to connect if you can't receive a browser redirect (you run on a server): returns a link and a code to give the user, plus a pickup for you. The user signs in and approves on that page — nothing to copy back. Then call again with pickup=<pickup> to receive the access token.", "type": "boolean" }, "start_trial": { "description": "Connected free accounts only: start the free Gold trial. Without `confirm` nothing is started — it returns a question for the user and a confirm_token. Ask the user; only after they clearly say yes, call again with start_trial=true and confirm=<confirm_token>. Never confirm on the user's behalf.", "type": "boolean" } }, "type": "object" }, "name": "connect_my_account", "outputSchema": null }, { "description": "Explain ONE specific option contract the user named — ticker + put/call + strike + expiry. Unlike explain_score and compare_candidates, which can only explain contracts the engine already picked, this prices and scores the exact contract you ask about, including strikes the screener would never surface (deep in the money, far out of the money). Returns the live quote, Greeks, premium and collateral per contract, annualized yield, the chance it expires worthless (the SELLER's side), and the RENT score. If we cannot price it (no open interest, no bid, strike does not exist) it says so and why, rather than substituting a different contract. Output is analysis, not a recommendation to trade.", "inputSchema": { "properties": { "expiry": { "description": "YYYY-MM-DD", "type": "string" }, "intent": { "description": "defaults to csp for a put, covered_call for a call", "enum": [ "premium", "csp", "covered_call", "collar" ], "type": "string" }, "lang": { "enum": [ "zh", "zh_tw", "en" ], "type": "string" }, "risk": { "enum": [ "conservative", "balanced", "aggressive" ], "type": "string" }, "strike": { "type": "number" }, "ticker": { "type": "string" }, "type": { "enum": [ "put", "call" ], "type": "string" } }, "required": [ "ticker", "type", "strike", "expiry" ], "type": "object" }, "name": "explain_option", "outputSchema": null }, { "description": "Find RENT-ranked option income candidates (candidates only, not advice) for a ticker. Set defined_risk=true for CREDIT SPREADS (bull put / bear call) instead of single-leg naked selling; omit it and we default to whatever this user actually trades. Output is analysis, not a recommendation to trade.", "inputSchema": { "properties": { "defined_risk": { "description": "true = attach a protective long leg → CREDIT SPREAD (bull put / bear call). false = single-leg naked selling. Omit to use what this user actually trades (inferred from their open positions and last pick, never a silent guess — the result says which was used and why).", "type": "boolean" }, "direction": { "enum": [ "bullish", "bearish", "neutral" ], "type": "string" }, "intent": { "enum": [ "premium", "csp", "covered_call", "collar" ], "type": "string" }, "risk": { "enum": [ "conservative", "balanced", "aggressive" ], "type": "string" }, "ticker": { "type": "string" }, "timeframe": { "description": "target DTE in days, e.g. 21/30/45 (default 30)", "type": "string" }, "wing": { "description": "Spread width, only meaningful with defined_risk=true: tight = least buying power, wide = more credit.", "enum": [ "tight", "narrow", "balanced", "wide" ], "type": "string" } }, "required": [ "ticker" ], "type": "object" }, "name": "find_recommendations", "outputSchema": null }, { "description": "Current rent climate (market regime + VIX/IV env + macro proximity → seller-friendliness read). Output is analysis, not a recommendation to trade.", "inputSchema": { "properties": {}, "type": "object" }, "name": "get_market_climate", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:55a3450de4257b039a8a5d9499b9d74b620bd89f82c8f0a2dd814a9626cf3cfd | sha256sum