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 yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:52ee54250cba8980d1cd900417a0bc7a3011d4985c9e5ea519c775b617273d8a | sha256sum