Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,534Letters: 13Defects: 1,322counted just now
teppi

Server definition

Hash
sha256:3c0a3f641107d160d4285aae02ada156309db25dc502b1c6d6e4c415aaf86936
What it is
What a remote MCP server returned when asked what it offers: 2 tools

The blob, as servednamed by its sha256

{ "instructions": "## Mux TypeScript SDK — Agent Operational Guide\n\n**Mux** is a video infrastructure API for ingesting, storing, streaming, and analyzing video content.\n\n---\n\n## Top Operations\n\n### 1. Create a video asset (from URL)\n```ts\nconst asset = await client.video.assets.create({ input: [{ url: 'https://...' }], playback_policy: ['public'] });\n// asset.id, asset.status ('preparing'|'ready'|'errored'), asset.playback_ids[0].id\n```\n\n### 2. Retrieve an asset\n```ts\nconst asset = await client.video.assets.retrieve('ASSET_ID');\n// asset.id, asset.status, asset.duration, asset.max_stored_resolution, asset.tracks[]\n```\n\n### 3. List assets (paginated)\n```ts\nconst page = await client.video.assets.list({ limit: 25 });\n// page.data: Asset[], page.next_cursor\nfor await (const asset of client.video.assets.list()) { /* auto-paginate */ }\n```\n\n### 4. Create a live stream\n```ts\nconst stream = await client.video.liveStreams.create({ playback_policy: ['public'], new_asset_settings: { playback_policy: ['public'] } });\n// stream.id, stream.stream_key (RTMP key), stream.status, stream.playback_ids[0].id\n```\n\n### 5. Create a direct upload URL\n```ts\nconst upload = await client.video.uploads.create({ cors_origin: 'https://example.com', new_asset_settings: { playback_policy: ['public'] } });\n// upload.id, upload.url (PUT binary to this), upload.status ('waiting'|'asset_created'|'errored')\n```\n\n### 6. Sign a playback ID (JWT)\n```ts\nconst token = await client.jwt.signPlaybackId('PLAYBACK_ID', { type: 'playback', expiration: '6h' });\n// Returns: string (JWT) — append as ?token=<jwt> on stream URLs\n```\n\n### 7. Verify a webhook\n```ts\nconst event = client.webhooks.unwrap(rawBody, headers);\n// event.type ('video.asset.ready'|'video.live_stream.active'|...), event.data: Asset|LiveStream|...\n```\n\n### 8. Get asset delivery/bandwidth usage\n```ts\nconst usage = await client.data.metrics.getOverallValues('requests', { timeframe: ['7:days'] });\n// usage.data.overall_average, usage.data.total_row_count, usage.timeframe\n```\n\n### 9. Add a subtitle track to an asset\n```ts\nconst track = await client.video.assets.createTrack('ASSET_ID', { url: 'https://.../en.vtt', type: 'text', text_type: 'subtitles', language_code: 'en-US', name: 'English' });\n// track.id, track.status, track.type, track.language_code\n```\n\n### 10. AI: ask questions about a video (RobotsPreview)\n```ts\nconst job = await client.robotsPreview.jobs.askQuestions.create({ asset_id: 'ASSET_ID', questions: [{ question: 'What topics are discussed?' }] });\n// job.id, job.status ('created'|'processing'|'completed'|'errored')\nconst result = await client.robotsPreview.jobs.askQuestions.retrieve(job.id);\n// result.outputs.data[0].answer\n```\n\n---\n\n## Common Patterns\n\n### Pagination\n- **Assets** use cursor-based: `page.next_cursor` → pass as `cursor` param\n- **LiveStreams/Uploads** use page-based: `page` param (integer)\n- **Auto-iterate all pages**: `for await (const item of client.video.assets.list()) {}`\n- **Manual**: `while (page.hasNextPage()) { page = await page.getNextPage(); }`\n\n### Binary/streaming responses\nThese return a raw `Response`, not JSON — handle with `.blob()`, `.arrayBuffer()`, or `.body`:\n```ts\nconst resp = await client.video.playback.thumbnail('PLAYBACK_ID', { time: 10 });\nconst buf = await resp.blob(); // image data\nconst manifest = await client.video.playback.hls('PLAYBACK_ID'); // m3u8 Response\n```\n\n### Errors\n```ts\nimport { MuxError, NotFoundError, RateLimitError } from '@mux/mux-node';\ntry { await client.video.assets.retrieve('bad-id'); }\ncatch (e) {\n if (e instanceof NotFoundError) { /* e.status=404, e.message, e.error */ }\n if (e instanceof RateLimitError) { /* e.status=429 — SDK auto-retries 2x */ }\n}\n// Other types: BadRequestError(400), AuthenticationError(401), InternalServerError(5xx)\n```\n\n### Raw HTTP response (headers, request-id)\n```ts\nconst { data, response } = await client.video.assets.create({...}).withResponse();\n// data: Asset, response.headers.get('x-request-id')\n```\n\n### Per-request options\n```ts\nawait client.video.assets.retrieve('ID', { timeout: 5000, maxRetries: 0, signal: abortController.signal });\n```", "tools": [ { "description": "Runs JavaScript code to interact with the Mux API.\n\nYou are a skilled TypeScript programmer writing code to interface with the service.\nDefine an async function named \"run\" that takes a single parameter of an initialized SDK client and it will be run.\nFor example:\n\n```\nasync function run(client) {\n const asset = await client.video.assets.create({ inputs: [{ url: 'https://storage.googleapis.com/muxdemofiles/mux-video-intro.mp4' }], playback_policies: ['public'] });\n\n console.log(asset.id);\n}\n```\n\nYou will be returned anything that your function returns, plus the results of any console.log statements.\nDo not add try-catch blocks for single API calls. The tool will handle errors for you.\nDo not add comments unless necessary for generating better code.\nCode will run in a container, and cannot interact with the network outside of the given SDK client.\nVariables will not persist between calls, so make sure to return or log any data you might need later.\nRemember that you are writing TypeScript code, so you need to be careful with your types.\nAlways type dynamic key-value stores explicitly as Record<string, YourValueType> instead of {}.", "inputSchema": { "properties": { "code": { "description": "Code to execute.", "type": "string" }, "intent": { "description": "Task you are trying to perform. Used for improving the service.", "type": "string" } }, "required": [ "code" ], "type": "object" }, "name": "execute", "outputSchema": null }, { "description": "Search SDK documentation to find methods, parameters, and usage examples for interacting with the API. Use this before writing code when you need to discover the right approach.", "inputSchema": { "properties": { "detail": { "description": "The amount of detail to return.", "enum": [ "default", "verbose" ], "type": "string" }, "language": { "description": "The language for the SDK to search for.", "enum": [ "http", "python", "go", "typescript", "javascript", "terraform", "ruby", "java", "kotlin" ], "type": "string" }, "query": { "description": "The query to search for.", "type": "string" } }, "required": [ "query", "language" ], "type": "object" }, "name": "search_docs", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:3c0a3f641107d160d4285aae02ada156309db25dc502b1c6d6e4c415aaf86936 | sha256sum