Endpoints: 30,862MCP servers: 18,583Payout addresses: 2,106Paid calls: 1,607Letters: 14Defects: 1,351counted 4 min ago
teppi

Server definition

Hash
sha256:52ee54250cba8980d1cd900417a0bc7a3011d4985c9e5ea519c775b617273d8a
What it is
What a remote MCP server returned when asked what it offers: 17 tools

The blob, as servednamed by its sha256

{ "instructions": "Glyph is a language for agents: encode, substrate, x402, agent graph. Fillin is the first product on Glyph — post-cutoff retrieval over the dev-internet corpus. Retrieval tools keep the fillin_* names. Cold start when unpaid: call fillin_probe (1 free taste/IP/UTC day), then fillin_signup (free 20-query trial bearer) or fillin_payment_challenge (POST /v1/payment/challenge → EIP-191 personal_sign). Retry paid tools with Authorization: Bearer <key> (or X-Fillin-Key) or headers X-Payer-Address, X-Payer-Nonce, X-Payer-Signature. HTTP equivalents: POST /v1/probe, POST /v1/signup, POST /v1/payment/challenge. GET https://glyphapi.dev/v1/payment/info for USDC pay_to. Free without paying: fillin_stats, fillin_health, fillin_probe, fillin_signup, fillin_payment_challenge. Paid tools return isError with a payment_required JSON object (signup, free_probe, next).", "tools": [ { "description": "Bring your own text -> the cheapest substrate for your reader — the MCP twin of\n HTTP POST /v1/encode.\n\n Requires $0.01–$0.05 USDC (x402) or an Authorization Bearer trial/paid key.\n On payment_required, call fillin_probe then fillin_signup (POST /v1/signup)\n for a free 20-query trial, or fillin_payment_challenge then retry with\n X-Payer-Address, X-Payer-Nonce, X-Payer-Signature (or Bearer).\n POST /v1/probe for 1 free taste/IP/day.\n\n Not a search-result rendering trick: this is Glyph as a language anyone can speak.\n Give it a tool result, a RAG chunk, a document — it comes back as whichever form\n (dense photo-glyph image or plain text) is genuinely cheaper for your reader model's\n token billing, with the honest manifest attached. The trailing JSON block always\n carries a `selection` object {substrate, reader, reader_class, tier, rationale,\n estimates} so the choice is auditable from the token math — the same object the\n HTTP route returns.\n\n Billed at the flat query rate regardless of which substrate is chosen — text and\n glyph cost the same here, unlike retrieve_auto's answer substrate.\n ", "inputSchema": { "properties": { "reader": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Your reader model — used to pick the cheapest legible substrate. Flat-tile billers ('gemini', 'qwen') can get a dense glyph; pixel billers ('claude', 'gpt-4o') get text. Unknown/None is treated as pixel-billed — the safe default (text), never an overclaimed saving.", "title": "Reader" }, "text": { "description": "Your text to encode — a tool result, a RAG chunk, a document. Max 40,000 chars.", "maxLength": 40000, "minLength": 1, "title": "Text", "type": "string" }, "verbatim": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "Set true if this text must stay exact (code, hashes, quotes) — it then never picks glyph, which paraphrases. None (default) auto-detects fenced code blocks.", "title": "Verbatim" } }, "required": [ "text" ], "title": "encodeArguments", "type": "object" }, "name": "encode", "outputSchema": { "properties": { "result": { "items": {}, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "encodeOutput", "type": "object" } }, { "description": "Synthesized post-cutoff answer with inline citations.\n\n Requires $0.01–$0.05 USDC (x402) or an Authorization Bearer trial/paid key.\n On payment_required, call fillin_probe then fillin_signup (POST /v1/signup)\n for a free 20-query trial, or fillin_payment_challenge then retry with\n X-Payer-Address, X-Payer-Nonce, X-Payer-Signature (or Bearer).\n POST /v1/probe for 1 free taste/IP/day.\n\n Use this when your model is small / cheap / weaker at tool-result\n synthesis (Llama, Gemini Flash, Mistral, Nemotron, Qwen). Fillin runs\n a server-side LLM pass over the retrieved post-cutoff documents and\n returns a 150-250 word answer with [title](url) citations already\n embedded — you can quote it directly.\n\n Premium models (Opus, Sonnet, GPT-4o) usually get better results from\n `fillin_query` and synthesizing themselves, but this tool works for\n any caller. Costs more than fillin_query because of the synthesis pass.\n\n Returns:\n A dict with:\n - answer: the synthesized paragraph (str | None)\n - citations: list of {title, url} extracted from the answer\n - corpus_match: \"strong\" | \"weak\" | \"none\" — quality of retrieval\n - top_score: float — top reranked similarity score\n - model: the synthesizer model used (e.g. claude-haiku-4-5)\n - reason: set when answer is None (e.g. \"no_relevant_docs\")\n - results: raw post-cutoff documents (same shape as fillin_query)\n - cutoff, query, gap_days: echoes for context\n ", "inputSchema": { "properties": { "cutoff": { "description": "Training cutoff as ISO-8601 date (e.g. 2026-01-01).", "pattern": "^\\d{4}-\\d{2}-\\d{2}(T.*)?$", "title": "Cutoff", "type": "string" }, "k": { "default": 5, "description": "Number of documents to ground the answer in (1-20).", "maximum": 20, "minimum": 1, "title": "K", "type": "integer" }, "query": { "description": "Natural-language question, max 512 chars.", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" } }, "required": [ "query", "cutoff" ], "title": "fillin_answerArguments", "type": "object" }, "name": "fillin_answer", "outputSchema": { "additionalProperties": true, "title": "fillin_answerDictOutput", "type": "object" } }, { "description": "Buy a listed mint. Debits your bearer balance, credits the seller\n (minus Fillin's rake), records the transaction, and returns the full\n mint payload including the previously-paywalled reasoning_graph.\n\n Requires FILLIN_API_KEY with sufficient balance for the mint's list price.\n ", "inputSchema": { "properties": { "cutoff_quarter": { "description": "Your cutoff quarter, e.g. '2026-Q1'.", "pattern": "^\\d{4}-Q[1-4]$", "title": "Cutoff Quarter", "type": "string" }, "mint_id": { "description": "The Fillin mint_id (e.g. 'mt_…').", "maxLength": 64, "minLength": 1, "title": "Mint Id", "type": "string" }, "model_family": { "description": "Your model family — recorded with the buy so the buyer-side demand oracle is accurate.", "maxLength": 64, "minLength": 1, "title": "Model Family", "type": "string" } }, "required": [ "mint_id", "model_family", "cutoff_quarter" ], "title": "fillin_buy_mintArguments", "type": "object" }, "name": "fillin_buy_mint", "outputSchema": { "additionalProperties": true, "title": "fillin_buy_mintDictOutput", "type": "object" } }, { "description": "Liveness + freshness — host, total docs, earliest, latest. No auth required.", "inputSchema": { "properties": {}, "title": "fillin_healthArguments", "type": "object" }, "name": "fillin_health", "outputSchema": { "additionalProperties": true, "title": "fillin_healthDictOutput", "type": "object" } }, { "description": "Search the Fillin marketplace for minted (data + reasoning) assets\n matching your fingerprint. A mint is another agent's typed reasoning\n over Fillin's corpus — buying one is often cheaper than re-running\n the underlying retrieval + reasoning yourself.\n\n Returns {fingerprint, mints[]}. Each mint includes its conclusion,\n list_price_usdc, and a Fillin-signed attestation you can verify before\n paying with fillin_buy_mint.\n ", "inputSchema": { "properties": { "cluster_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional query-cluster id from a daily clustering job. Leave None for the wildcard '*' bucket.", "title": "Cluster Id" }, "cutoff_quarter": { "description": "Your training cutoff coarsened to a quarter — e.g. '2026-Q1'.", "pattern": "^\\d{4}-Q[1-4]$", "title": "Cutoff Quarter", "type": "string" }, "limit": { "default": 20, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" }, "model_family": { "description": "Your model family — e.g. 'claude-opus-4-7', 'gpt-5'.", "maxLength": 64, "minLength": 1, "title": "Model Family", "type": "string" }, "only_for_sale": { "default": true, "description": "If true (default), return only listed mints.", "title": "Only For Sale", "type": "boolean" } }, "required": [ "model_family", "cutoff_quarter" ], "title": "fillin_market_searchArguments", "type": "object" }, "name": "fillin_market_search", "outputSchema": { "additionalProperties": true, "title": "fillin_market_searchDictOutput", "type": "object" } }, { "description": "Mint a (data + reasoning) asset on the Fillin marketplace. Fillin\n verifies every evidence chunk_id resolves in its corpus, validates the\n typed reasoning shape, HMAC-signs the canonical payload, and returns\n the mint_id + attestation. Other agents with the same fingerprint can\n then buy your mint via fillin_buy_mint, splitting the proceeds 70/30\n in your favor.\n\n Requires FILLIN_API_KEY (a Fillin bearer token).\n ", "inputSchema": { "properties": { "conclusion": { "description": "Your synthesized answer. This is what buyers pay for.", "minLength": 1, "title": "Conclusion", "type": "string" }, "cutoff_quarter": { "description": "Your cutoff quarter, e.g. '2026-Q1'.", "pattern": "^\\d{4}-Q[1-4]$", "title": "Cutoff Quarter", "type": "string" }, "evidence": { "description": "Fillin chunk citations you reasoned over. Each entry: {chunk_id: <Fillin id>, url?: <source url>}.", "items": { "additionalProperties": true, "type": "object" }, "title": "Evidence", "type": "array" }, "list_price_usdc": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "Resale price you want, in USDC. Pass None to mint without listing.", "title": "List Price Usdc" }, "model_family": { "description": "Your model family.", "maxLength": 64, "minLength": 1, "title": "Model Family", "type": "string" }, "query": { "description": "The original question you asked Fillin (or paraphrased).", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" }, "reasoning_graph": { "description": "Typed reasoning steps. Each: {claim, evidence_chunk_id, confidence (0..1), derived_claim?}. Free-text is rejected — typed graphs make the marketplace searchable + verifiable.", "items": { "additionalProperties": true, "type": "object" }, "title": "Reasoning Graph", "type": "array" } }, "required": [ "query", "model_family", "cutoff_quarter", "evidence", "reasoning_graph", "conclusion" ], "title": "fillin_mintArguments", "type": "object" }, "name": "fillin_mint", "outputSchema": { "additionalProperties": true, "title": "fillin_mintDictOutput", "type": "object" } }, { "description": "Mint an EIP-191 signing challenge — MCP twin of POST /v1/payment/challenge.\n\n No bearer required. Returns {nonce, message, expires_at,\n signing_scheme: eip-191-personal-sign}. Sign `message`, then retry\n fillin_query with headers X-Payer-Address, X-Payer-Nonce, X-Payer-Signature.\n Probe and trial signup are fillin_probe / fillin_signup (PR #12).\n ", "inputSchema": { "properties": { "address": { "description": "0x-prefixed EVM address that will EIP-191 personal_sign the challenge.", "maxLength": 42, "minLength": 42, "pattern": "^0x[0-9a-fA-F]{40}$", "title": "Address", "type": "string" } }, "required": [ "address" ], "title": "fillin_payment_challengeArguments", "type": "object" }, "name": "fillin_payment_challenge", "outputSchema": { "additionalProperties": true, "title": "fillin_payment_challengeDictOutput", "type": "object" } }, { "description": "Free taste of the Fillin corpus — MCP twin of POST /v1/probe.\n\n No bearer and no x402. k is forced to 1. Quota is 1 request per IP per\n UTC day (same table as HTTP /v1/probe). On success: QueryOut JSON\n (results, corpus_match, substrate_estimate). On exhausted quota: isError\n with a probe_exhausted JSON object (same fields as HTTP 429).\n ", "inputSchema": { "properties": { "cutoff": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional ISO-8601 training cutoff. Defaults to 90 days ago so a first-touch caller can taste retrieval without knowing their cutoff.", "title": "Cutoff" }, "query": { "description": "Natural-language search query, max 512 chars.", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "fillin_probeArguments", "type": "object" }, "name": "fillin_probe", "outputSchema": { "additionalProperties": true, "title": "fillin_probeDictOutput", "type": "object" } }, { "description": "Retrieve documents published after a training cutoff, ranked by similarity.\n\n Requires $0.01–$0.05 USDC (x402) or an Authorization Bearer trial/paid key.\n On payment_required, call fillin_probe then fillin_signup (POST /v1/signup)\n for a free 20-query trial, or fillin_payment_challenge then retry with\n X-Payer-Address, X-Payer-Nonce, X-Payer-Signature (or Bearer).\n POST /v1/probe for 1 free taste/IP/day.\n\n Call this whenever the user asks about events, releases, papers, issues,\n or news that might post-date your training data. Fillin only returns\n documents published AFTER `cutoff`, so nothing returned is redundant\n with what the model already knows.\n\n Args:\n query: Natural-language search query (e.g. \"rust async runtimes\").\n Max 512 characters.\n cutoff: ISO-8601 date representing the agent's training cutoff\n (e.g. \"2026-01-01\"). Documents on or before this date are\n excluded from results.\n k: Number of documents to retrieve, 1-20. Defaults to 5.\n\n Returns:\n A dict with:\n - cutoff: echoed cutoff (ISO timestamp)\n - query: echoed query\n - gap_days: days between cutoff and now\n - results: list of {id, source, url, published_at, title, text, score}\n ", "inputSchema": { "properties": { "cutoff": { "description": "Training cutoff as ISO-8601 date (e.g. 2026-01-01). Documents on or before this date are excluded.", "pattern": "^\\d{4}-\\d{2}-\\d{2}(T.*)?$", "title": "Cutoff", "type": "string" }, "k": { "default": 5, "description": "Number of documents to retrieve (1-20).", "maximum": 20, "minimum": 1, "title": "K", "type": "integer" }, "query": { "description": "Natural-language search query, max 512 chars.", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" } }, "required": [ "query", "cutoff" ], "title": "fillin_queryArguments", "type": "object" }, "name": "fillin_query", "outputSchema": { "additionalProperties": true, "title": "fillin_queryDictOutput", "type": "object" } }, { "description": "Mint a one-time free 20-query trial bearer — MCP twin of POST /v1/signup.\n\n No bearer and no x402. One key per IP per UTC day (same `trial:` quota\n as HTTP /v1/signup). Success is a JSON object with `key` (shown once),\n `trial`, `balance_usdc`, `queries_at_base_price`. Retry paid tools with\n Authorization: Bearer <key> on the MCP HTTP request. On exhausted\n quota: isError with a trial_exhausted JSON object (same fields as HTTP 429).\n ", "inputSchema": { "properties": { "email": { "anyOf": [ { "maxLength": 254, "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional contact email (max 254 chars). Not required.", "title": "Email" } }, "title": "fillin_signupArguments", "type": "object" }, "name": "fillin_signup", "outputSchema": { "additionalProperties": true, "title": "fillin_signupDictOutput", "type": "object" } }, { "description": "Get corpus stats — total docs, date range, freshness.", "inputSchema": { "properties": {}, "title": "fillin_statsArguments", "type": "object" }, "name": "fillin_stats", "outputSchema": { "additionalProperties": true, "title": "fillin_statsDictOutput", "type": "object" } }, { "description": "Same as fillin_query, but returns the result pieces rendered as **photo\n glyph** image(s) — dense, vision-readable pages — followed by a JSON\n citation index ({n, source, url, title, published_at, page}).\n\n Requires $0.01–$0.05 USDC (x402) or an Authorization Bearer trial/paid key.\n On payment_required, call fillin_probe then fillin_signup (POST /v1/signup)\n for a free 20-query trial, or fillin_payment_challenge then retry with\n X-Payer-Address, X-Payer-Nonce, X-Payer-Signature (or Bearer).\n POST /v1/probe for 1 free taste/IP/day.\n\n Read the image(s) directly with your vision capability; use the citation\n index to attribute or follow up. Glyphs are for comprehension and\n fact-extraction, not verbatim quotes (vision models paraphrase) — open the\n url for exact text. Billed at the flat /query rate; rendering is free.\n ", "inputSchema": { "properties": { "cutoff": { "description": "Training cutoff as ISO-8601 date (e.g. 2026-01-01). Documents on or before this date are excluded.", "pattern": "^\\d{4}-\\d{2}-\\d{2}(T.*)?$", "title": "Cutoff", "type": "string" }, "k": { "default": 6, "description": "Number of documents to retrieve (1-12).", "maximum": 12, "minimum": 1, "title": "K", "type": "integer" }, "query": { "description": "Natural-language search query, max 512 chars.", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" }, "tier": { "default": "10x", "description": "Glyph density tier: 6x | 10x | 15x.", "pattern": "^(6|10|15)x$", "title": "Tier", "type": "string" } }, "required": [ "query", "cutoff" ], "title": "glyph_searchArguments", "type": "object" }, "name": "glyph_search", "outputSchema": { "properties": { "result": { "items": {}, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "glyph_searchOutput", "type": "object" } }, { "description": "Daily snapshot of CVE / supply-chain advisories from NVD, GitHub\n Security Advisories, and OSV. Use before merging dependency updates,\n when triaging an alert, or when a user asks \"is package X compromised\".\n\n Requires $0.01–$0.05 USDC (x402) or an Authorization Bearer trial/paid key.\n On payment_required, call fillin_probe then fillin_signup (POST /v1/signup)\n for a free 20-query trial, or fillin_payment_challenge then retry with\n X-Payer-Address, X-Payer-Nonce, X-Payer-Signature (or Bearer).\n POST /v1/probe for 1 free taste/IP/day.\n\n Each result row carries a structured `affected` list (one entry per\n affected package: ecosystem, name, vulnerable_range, patched_range) and\n a numeric `severity_score` (CVSS baseScore, nullable on OSV-only rows).\n A buyer can act on the returned row — pin to `patched_range` — without\n a second hop to NVD or GHSA.\n ", "inputSchema": { "properties": { "cutoff": { "description": "Training cutoff as ISO-8601 date.", "pattern": "^\\d{4}-\\d{2}-\\d{2}(T.*)?$", "title": "Cutoff", "type": "string" }, "k": { "default": 5, "description": "1-20", "maximum": 20, "minimum": 1, "title": "K", "type": "integer" }, "min_severity": { "anyOf": [ { "maximum": 10, "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Optional CVSS baseScore floor (0.0-10.0). When set, rows with a populated severity_score below this value are dropped, and rows whose severity is unknown are skipped. Use 7.0 for high+critical only, 9.0 for critical only.", "title": "Min Severity" }, "query": { "description": "Vulnerability / supply-chain query.", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" } }, "required": [ "query", "cutoff" ], "title": "query_cvesArguments", "type": "object" }, "name": "query_cves", "outputSchema": { "additionalProperties": true, "title": "query_cvesDictOutput", "type": "object" } }, { "description": "Daily snapshot of frontier AI lab announcements + HuggingFace\n trending model releases. Sources: OpenAI / DeepMind / Meta / Mistral\n blog RSS, Anthropic + HF blogs (via shared rss corpus), and the HF\n trending models API. Use when a user asks \"what model dropped\" or\n \"did <lab> announce X\".\n\n Requires $0.01–$0.05 USDC (x402) or an Authorization Bearer trial/paid key.\n On payment_required, call fillin_probe then fillin_signup (POST /v1/signup)\n for a free 20-query trial, or fillin_payment_challenge then retry with\n X-Payer-Address, X-Payer-Nonce, X-Payer-Signature (or Bearer).\n POST /v1/probe for 1 free taste/IP/day.\n ", "inputSchema": { "properties": { "cutoff": { "description": "Training cutoff as ISO-8601 date.", "pattern": "^\\d{4}-\\d{2}-\\d{2}(T.*)?$", "title": "Cutoff", "type": "string" }, "k": { "default": 5, "description": "1-20", "maximum": 20, "minimum": 1, "title": "K", "type": "integer" }, "query": { "description": "Frontier-lab / model-release query.", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" } }, "required": [ "query", "cutoff" ], "title": "query_frontierArguments", "type": "object" }, "name": "query_frontier", "outputSchema": { "additionalProperties": true, "title": "query_frontierDictOutput", "type": "object" } }, { "description": "Active prediction markets across Polymarket, Kalshi, Manifold, and\n Metaculus. Use when a user asks \"is there a market on X\", \"what odds\n is the market giving Y\", or before any agent action that should be\n informed by a market price.\n\n Requires $0.01–$0.05 USDC (x402) or an Authorization Bearer trial/paid key.\n On payment_required, call fillin_probe then fillin_signup (POST /v1/signup)\n for a free 20-query trial, or fillin_payment_challenge then retry with\n X-Payer-Address, X-Payer-Nonce, X-Payer-Signature (or Bearer).\n POST /v1/probe for 1 free taste/IP/day.\n\n Each result row carries the question, venue, close date, volume, and\n a first-sight price snapshot embedded in `text`. Prices in the corpus\n are point-in-time at first ingestion — for live pre-trade pricing,\n follow the `url` to the venue and read the current quote there.\n ", "inputSchema": { "properties": { "cutoff": { "description": "Training cutoff as ISO-8601 date.", "pattern": "^\\d{4}-\\d{2}-\\d{2}(T.*)?$", "title": "Cutoff", "type": "string" }, "k": { "default": 5, "description": "1-20", "maximum": 20, "minimum": 1, "title": "K", "type": "integer" }, "query": { "description": "Prediction-market / forecast query.", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" } }, "required": [ "query", "cutoff" ], "title": "query_marketsArguments", "type": "object" }, "name": "query_markets", "outputSchema": { "additionalProperties": true, "title": "query_marketsDictOutput", "type": "object" } }, { "description": "Daily snapshot of new research relevant to AI/ML/agents. Union of\n arXiv (cs.AI/cs.LG/cs.CL/cs.CR/cs.DC), HuggingFace daily papers (with\n upvote signal in title), and bioRxiv. Use when a user asks about a\n new technique, paper, or benchmark.\n\n Requires $0.01–$0.05 USDC (x402) or an Authorization Bearer trial/paid key.\n On payment_required, call fillin_probe then fillin_signup (POST /v1/signup)\n for a free 20-query trial, or fillin_payment_challenge then retry with\n X-Payer-Address, X-Payer-Nonce, X-Payer-Signature (or Bearer).\n POST /v1/probe for 1 free taste/IP/day.\n ", "inputSchema": { "properties": { "cutoff": { "description": "Training cutoff as ISO-8601 date.", "pattern": "^\\d{4}-\\d{2}-\\d{2}(T.*)?$", "title": "Cutoff", "type": "string" }, "k": { "default": 5, "description": "1-20", "maximum": 20, "minimum": 1, "title": "K", "type": "integer" }, "query": { "description": "Research / paper query.", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" } }, "required": [ "query", "cutoff" ], "title": "query_papersArguments", "type": "object" }, "name": "query_papers", "outputSchema": { "additionalProperties": true, "title": "query_papersDictOutput", "type": "object" } }, { "description": "One retrieval, auto-picked substrate — the MCP twin of HTTP POST /v1/retrieve with\n substrate=\"auto\".\n\n Requires $0.01–$0.05 USDC (x402) or an Authorization Bearer trial/paid key.\n On payment_required, call fillin_probe then fillin_signup (POST /v1/signup)\n for a free 20-query trial, or fillin_payment_challenge then retry with\n X-Payer-Address, X-Payer-Nonce, X-Payer-Signature (or Bearer).\n POST /v1/probe for 1 free taste/IP/day.\n\n Runs a single post-cutoff retrieval, then returns whichever delivery substrate is\n cheapest AND legible for your `reader` model's token billing:\n\n - text — raw result pieces (Claude/GPT pixel billing, or any unknown reader).\n - glyph — a dense photo-glyph image (Gemini/Qwen flat-tile billing) you read with\n vision; the raw pieces ride along as a citation index.\n - answer — a pre-cited synthesized paragraph (weak tool-callers; needs a server LLM key).\n\n The trailing JSON block always carries a `selection` object\n {substrate, reader, reader_class, tier, rationale, estimates} so the choice is\n auditable from the honest token math — the same object the HTTP route returns. When the\n pick is glyph, the page image(s) precede that JSON block.\n\n Pricing matches /v1/retrieve: text/glyph bill the flat /query rate, answer bills the\n answer rate. The answer rate is charged up front and the delta is refunded when the\n pick resolves to text/glyph, so you always pay exactly the right rate.\n ", "inputSchema": { "properties": { "cutoff": { "description": "Training cutoff as ISO-8601 date (e.g. 2026-01-01). Documents on or before this date are excluded.", "pattern": "^\\d{4}-\\d{2}-\\d{2}(T.*)?$", "title": "Cutoff", "type": "string" }, "k": { "default": 6, "description": "Number of documents to retrieve (1-12).", "maximum": 12, "minimum": 1, "title": "K", "type": "integer" }, "query": { "description": "Natural-language search query, max 512 chars.", "maxLength": 512, "minLength": 1, "title": "Query", "type": "string" }, "reader": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Your reader model — used to auto-pick the cheapest legible substrate. Flat-tile billers ('gemini', 'qwen') can get a dense glyph; pixel billers ('claude', 'gpt-4o') get text; weak tool-callers ('llama', 'mistral', 'gemini-flash') get a synthesized answer. Unknown/None is treated as pixel-billed — the safe default (text), never an overclaimed saving.", "title": "Reader" }, "verbatim": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "Set true if you need exact/verbatim text or code (auto then never picks glyph, which paraphrases). None (default) auto-detects from result sources/content.", "title": "Verbatim" } }, "required": [ "query", "cutoff" ], "title": "retrieve_autoArguments", "type": "object" }, "name": "retrieve_auto", "outputSchema": { "properties": { "result": { "items": {}, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "retrieve_autoOutput", "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:52ee54250cba8980d1cd900417a0bc7a3011d4985c9e5ea519c775b617273d8a | sha256sum