Endpoints: 39,967MCP servers: 22,499Payout addresses: 2,533Paid calls: 3,308Letters: 54Defects: 1,852counted 2 min ago
teppi

Server definition

Hash
sha256:5ebe304099c9d90896525263e8ae387d193eeb48292b4d40fb1cde0c1b431f5a
What it is
What a remote MCP server returned when asked what it offers: 13 tools

The blob, as servednamed by its sha256

{ "instructions": "Thin, stateless bridge to the LLMExpert.io /v1 API. Each tool maps 1:1 onto a /v1 endpoint. Present your /v1 API key as `Authorization: Bearer <key>`; it is forwarded unchanged so the same scopes, rate limits, and spend caps apply. A `ct_` collection token (returned once by `transcribe` or `create_collection`) is accepted the same way for `get_status` and `get_transcript`. `transcribe`, `add_sources` and `query_collection` are charged: call `quote` first for the exact price, then poll `get_status` every 10–30 s until the job is completed, partial or failed. Without an API key, `transcribe` and `query_collection` are payable in USDC via x402: retry the payment-required result with `_meta['x402/payment']`; never pay again on a 409 or 502.", "tools": [ { "description": "Add a source to a channel and begin background ingestion. Maps to POST /v1/channels/{channelId}/sources. Only `type: video` is processed today; `document` and `website` are reserved and return a 501 error until released. Requires the key's `write` scope.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "channel_id": { "description": "Channel to add the source to.", "type": "string" }, "idempotency_key": { "description": "Idempotency-Key for safe retries.", "maxLength": 255, "type": "string" }, "source": { "anyOf": [ { "additionalProperties": false, "properties": { "type": { "const": "video", "type": "string" }, "youtube_video_id": { "description": "YouTube video id, e.g. dQw4w9WgXcQ.", "type": "string" } }, "required": [ "type", "youtube_video_id" ], "type": "object" }, { "additionalProperties": false, "properties": { "file_id": { "description": "Id from a prior upload.", "type": "string" }, "mime_type": { "description": "e.g. application/pdf.", "type": "string" }, "type": { "const": "document", "type": "string" }, "url": { "description": "Public document URL.", "format": "uri", "type": "string" } }, "required": [ "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "crawl_depth": { "description": "Crawl depth (default 1).", "maximum": 5, "minimum": 0, "type": "integer" }, "type": { "const": "website", "type": "string" }, "url": { "description": "URL to crawl.", "format": "uri", "type": "string" } }, "required": [ "type", "url" ], "type": "object" } ], "description": "The source to add (discriminated on `type`)." } }, "required": [ "channel_id", "source" ], "type": "object" }, "name": "add_source", "outputSchema": null }, { "description": "Charged like `transcribe`. Expand the given YouTube URLs, charge for the new work and start an ingest job in an existing collection. Maps to POST /v1/collections/{collectionId}/sources. $0.10/min standard, $0.25/min whisper by default, 1-minute minimum per video. Videos already in the collection are free. Pass a `quote_id` from `quote` to be charged exactly that price. Poll `get_status` every 10–30 s until `status` is completed, partial or failed; `completed` means every accepted video is transcribed and indexed, so the collection is queryable. API key required (the key's `write` scope). Prices are the service defaults; `quote` returns the exact price.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "channel_url": { "description": "`https://www.youtube.com/@handle`, `/channel/UC…`, or a playlist URL.", "type": "string" }, "channel_urls": { "description": "Several channel or playlist URLs.", "items": { "type": "string" }, "type": "array" }, "collection_id": { "description": "Collection to add the sources to.", "type": "string" }, "idempotency_key": { "description": "Idempotency-Key for safe retries.", "maxLength": 255, "type": "string" }, "language": { "description": "Optional BCP-47 hint for transcription, e.g. en.", "type": "string" }, "max_videos_per_channel": { "description": "Newest-first cap applied to each channel or playlist (default 25).", "maximum": 200, "minimum": 1, "type": "integer" }, "quality": { "description": "Transcription quality (default standard).", "enum": [ "standard", "whisper" ], "type": "string" }, "quote_id": { "description": "A `quote_id` from `quote`: charges exactly the quoted price (400 if unknown or expired).", "type": "string" }, "url": { "description": "One YouTube URL (video, @handle, /channel/UC…, or playlist).", "format": "uri", "type": "string" }, "urls": { "description": "Several YouTube URLs.", "items": { "format": "uri", "type": "string" }, "type": "array" } }, "required": [ "collection_id" ], "type": "object" }, "name": "add_sources", "outputSchema": null }, { "description": "Free. Create an empty collection to add sources to later with `add_sources`. Maps to POST /v1/collections. Returns the collection and its `collection_token` (`ct_…`, shown once: store it; absent on an idempotent replay). API key required (the key's `write` scope). Prices are the service defaults; `quote` returns the exact price.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "idempotency_key": { "description": "Idempotency-Key for safe retries.", "maxLength": 255, "type": "string" }, "title": { "description": "Display name for the collection.", "type": "string" } }, "required": [ "title" ], "type": "object" }, "name": "create_collection", "outputSchema": null }, { "description": "Fetch a single source and its processing status (type-specific provenance included). Maps to GET /v1/sources/{sourceId}. Requires the key's `read` scope.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "source_id": { "description": "Source identifier, e.g. src_71b0e4.", "type": "string" } }, "required": [ "source_id" ], "type": "object" }, "name": "get_source", "outputSchema": null }, { "description": "Free. Get an ingest job started by `transcribe` or `add_sources`. Maps to GET /v1/jobs/{jobId}. Poll every 10–30 s until `status` is completed, partial or failed (terminal). `completed` means every accepted video is transcribed and indexed, so the collection is queryable; `partial` means some videos failed and were credited back (`credited_usd`); `videos.completed` / `videos.failed` count progress. Works with an API key or the collection's `ct_` token as the bearer. Prices are the service defaults; `quote` returns the exact price.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "job_id": { "description": "The `job_id` from `transcribe` or `add_sources`.", "type": "string" } }, "required": [ "job_id" ], "type": "object" }, "name": "get_status", "outputSchema": null }, { "description": "Free. Get the transcript of a video that is completed in one of your collections. Maps to GET /v1/videos/{youtubeId}/transcript. `collection_id` is required with an API key; with the collection's `ct_` token as the bearer it defaults to the token's collection. `format` is json (segments with timestamps, default) or text (one `[H:MM:SS] text` line per segment). 404 when the video is not completed in that collection, or the transcript predates the transcript cache. Prices are the service defaults; `quote` returns the exact price.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "collection_id": { "description": "Collection the video is completed in (required with an API key).", "type": "string" }, "format": { "description": "json (default) or text.", "enum": [ "json", "text" ], "type": "string" }, "youtube_id": { "description": "The 11-character YouTube video id, e.g. dQw4w9WgXcQ.", "pattern": "^[A-Za-z0-9_-]{11}$", "type": "string" } }, "required": [ "youtube_id" ], "type": "object" }, "name": "get_transcript", "outputSchema": null }, { "description": "Get usage, quota, and spend for the calling key (queries, tokens, cost, budget remaining). Maps to GET /v1/usage. Requires the key's `read` scope.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "period": { "description": "Billing period (default current).", "enum": [ "current", "previous" ], "type": "string" } }, "type": "object" }, "name": "get_usage", "outputSchema": null }, { "description": "List the channels the calling key is scoped to. Maps to GET /v1/channels. Cursor-paginated. Requires the key's `read` scope.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "cursor": { "description": "Opaque pagination cursor from a prior response.", "type": "string" }, "limit": { "description": "Max items (default 25).", "maximum": 100, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "list_channels", "outputSchema": null }, { "description": "List the sources (video/document/website) in a channel, optionally filtered by type or status. Maps to GET /v1/channels/{channelId}/sources. Cursor-paginated. Requires the key's `read` scope.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "channel_id": { "description": "Channel whose sources to list.", "type": "string" }, "cursor": { "description": "Opaque pagination cursor.", "type": "string" }, "limit": { "description": "Max items (default 25).", "maximum": 100, "minimum": 1, "type": "integer" }, "status": { "description": "Filter by processing status.", "enum": [ "queued", "ingesting", "indexing", "ready", "error" ], "type": "string" }, "type": { "description": "Filter by source type.", "enum": [ "video", "document", "website" ], "type": "string" } }, "required": [ "channel_id" ], "type": "object" }, "name": "list_sources", "outputSchema": null }, { "description": "Run a retrieval-augmented query against a channel's indexed knowledge base and return a generated answer with citations. Maps to POST /v1/query. Requires the key's `query` scope and access to the channel.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "channel_id": { "description": "Channel to query. The key must be scoped to it.", "type": "string" }, "idempotency_key": { "description": "Idempotency-Key for safe retries.", "maxLength": 255, "type": "string" }, "query": { "description": "The natural-language question.", "maxLength": 4000, "minLength": 1, "type": "string" }, "session_id": { "description": "Optional session for multi-turn continuity.", "type": "string" }, "source_types": { "description": "Restrict retrieval to these source types.", "items": { "enum": [ "video", "document", "website" ], "type": "string" }, "type": "array" }, "top_k": { "description": "Chunks to retrieve (default 5).", "maximum": 20, "minimum": 1, "type": "integer" } }, "required": [ "channel_id", "query" ], "type": "object" }, "name": "query_channel", "outputSchema": null }, { "description": "Charged: $0.05 flat per call by default, no token multiplier. Ask a question of a collection and get a generated answer with citations. Maps to POST /v1/collections/{collectionId}/query. Query a collection once `get_status` says completed. With an API key it needs the key's `query` scope. Without an API key this tool is payable in USDC via x402: the first call returns a payment-required result (`isError` with the payment requirements in `structuredContent`); an x402-aware MCP client signs and retries the same call with `_meta['x402/payment']`, and the receipt returns in the result's `_meta['x402/payment-response']`. Never pay again after a 409 (already presented) or 502 (settlement unknown) result. Keyless, only the address that paid for the collection may query it. Prices are the service defaults; `quote` returns the exact price.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "collection_id": { "description": "Collection to query.", "type": "string" }, "idempotency_key": { "description": "Idempotency-Key for safe retries.", "maxLength": 255, "type": "string" }, "query": { "description": "The natural-language question.", "maxLength": 4000, "minLength": 1, "type": "string" }, "session_id": { "description": "Optional session for multi-turn continuity.", "type": "string" } }, "required": [ "collection_id", "query" ], "type": "object" }, "name": "query_collection", "outputSchema": null }, { "description": "Free. Expand YouTube URLs exactly as an ingest would and return the price, the per-video lines and the per-source rejections. Maps to POST /v1/quote. $0.10/min standard, $0.25/min whisper by default, 1-minute minimum per video. The `quote_id` is valid for 15 minutes; pass it to `transcribe` or `add_sources` to be charged exactly this price. Pass `collection_id` to price against an existing collection (videos already in it are free). At least one of url, urls, channel_url, channel_urls. Requires the key's `read` scope. Prices are the service defaults; `quote` returns the exact price.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "channel_url": { "description": "`https://www.youtube.com/@handle`, `/channel/UC…`, or a playlist URL.", "type": "string" }, "channel_urls": { "description": "Several channel or playlist URLs.", "items": { "type": "string" }, "type": "array" }, "collection_id": { "description": "Price against this collection (videos already in it are free).", "type": "string" }, "language": { "description": "Optional BCP-47 hint for transcription, e.g. en.", "type": "string" }, "max_videos_per_channel": { "description": "Newest-first cap applied to each channel or playlist (default 25).", "maximum": 200, "minimum": 1, "type": "integer" }, "quality": { "description": "Transcription quality (default standard).", "enum": [ "standard", "whisper" ], "type": "string" }, "url": { "description": "One YouTube URL (video, @handle, /channel/UC…, or playlist).", "format": "uri", "type": "string" }, "urls": { "description": "Several YouTube URLs.", "items": { "format": "uri", "type": "string" }, "type": "array" } }, "type": "object" }, "name": "quote", "outputSchema": null }, { "description": "Charged. Create a collection and start an ingest job for the given YouTube URLs in one call. Maps to POST /v1/transcribe. $0.10/min standard, $0.25/min whisper by default, 1-minute minimum per video. Pass a `quote_id` from `quote` to be charged exactly that price. Returns `job_id`, `collection_id` and `collection_token` (`ct_…`, shown once: store it; it reads this collection without an API key). Poll `get_status` every 10–30 s until `status` is completed, partial or failed; `completed` means every accepted video is transcribed and indexed, so the collection is queryable. With an API key it needs the key's `write` scope. Without an API key this tool is payable in USDC via x402: the first call returns a payment-required result (`isError` with the payment requirements in `structuredContent`); an x402-aware MCP client signs and retries the same call with `_meta['x402/payment']`, and the receipt returns in the result's `_meta['x402/payment-response']`. Never pay again after a 409 (already presented) or 502 (settlement unknown) result. Keyless `transcribe` takes one channel-like source and at most 3 videos. Prices are the service defaults; `quote` returns the exact price.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "channel_url": { "description": "`https://www.youtube.com/@handle`, `/channel/UC…`, or a playlist URL.", "type": "string" }, "channel_urls": { "description": "Several channel or playlist URLs.", "items": { "type": "string" }, "type": "array" }, "idempotency_key": { "description": "Idempotency-Key for safe retries.", "maxLength": 255, "type": "string" }, "language": { "description": "Optional BCP-47 hint for transcription, e.g. en.", "type": "string" }, "max_videos_per_channel": { "description": "Newest-first cap applied to each channel or playlist (default 25).", "maximum": 200, "minimum": 1, "type": "integer" }, "quality": { "description": "Transcription quality (default standard).", "enum": [ "standard", "whisper" ], "type": "string" }, "quote_id": { "description": "A `quote_id` from `quote`: charges exactly the quoted price (400 if unknown or expired).", "type": "string" }, "title": { "description": "Title for the new collection (default: generated).", "type": "string" }, "url": { "description": "One YouTube URL (video, @handle, /channel/UC…, or playlist).", "format": "uri", "type": "string" }, "urls": { "description": "Several YouTube URLs.", "items": { "format": "uri", "type": "string" }, "type": "array" } }, "type": "object" }, "name": "transcribe", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:5ebe304099c9d90896525263e8ae387d193eeb48292b4d40fb1cde0c1b431f5a | sha256sum