{"openapi":"3.1.0","info":{"title":"Skimless Public Integration Surfaces","version":"0.1.0","description":"Skimless turns YouTube channels, newsletters, RSS feeds, docs, and changelogs into a daily brief of what changed, what matters, and what to skip. This description documents only public, user-facing integration surfaces for feeds, briefs, and agent context.","contact":{"email":"support@skimless.com"}},"servers":[{"url":"https://www.skimless.com/"}],"paths":{"/api/mcp/{token}":{"get":{"operationId":"getMcpDiscovery","summary":"Return minimal MCP server discovery metadata.","parameters":[{"name":"token","in":"path","required":true,"description":"Private signed token. Use placeholders in docs and never publish a real token.","schema":{"type":"string","example":"<signed-token>"}}],"responses":{"200":{"description":"MCP discovery metadata.","content":{"application/json":{"examples":{"discovery":{"value":{"name":"skimless","version":"0.1.0","transport":"http-jsonrpc"}}}}}}}},"post":{"operationId":"callMcpJsonRpc","summary":"Call the user's token-authenticated Skimless MCP server.","description":"Send JSON-RPC 2.0 MCP requests over HTTP. Tokens are private and can query the user's knowledge base, latest brief, and Context Pack generator.","parameters":[{"name":"token","in":"path","required":true,"description":"Private signed token. Use placeholders in docs and never publish a real token.","schema":{"type":"string","example":"<signed-token>"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/JsonRpcRequest"},{"type":"array","items":{"$ref":"#/components/schemas/JsonRpcRequest"}}]},"examples":{"initialize":{"value":{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}},"listTools":{"value":{"jsonrpc":"2.0","id":2,"method":"tools/list"}}}}}},"responses":{"200":{"description":"JSON-RPC response.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/JsonRpcResponse"},{"type":"array","items":{"$ref":"#/components/schemas/JsonRpcResponse"}}]}}}},"204":{"description":"Notification accepted with no response body."},"400":{"description":"Invalid JSON."},"401":{"description":"Invalid token."},"403":{"description":"MCP access requires a paid plan."}}}},"/podcast/{token}":{"get":{"operationId":"getPodcastFeed","summary":"Return a private podcast RSS feed for a user's ready briefs.","parameters":[{"name":"token","in":"path","required":true,"description":"Private signed token. Use placeholders in docs and never publish a real token.","schema":{"type":"string","example":"<signed-token>"}}],"responses":{"200":{"description":"Podcast RSS XML.","content":{"application/rss+xml":{"schema":{"type":"string"}}}},"401":{"description":"Invalid token."}}}}},"components":{"schemas":{"JsonRpcRequest":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","enum":["initialize","notifications/initialized","tools/list","tools/call","ping"]},"params":{}}},"JsonRpcResponse":{"type":"object","required":["jsonrpc","id"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"result":{},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{}}}}}},"securitySchemes":{"signedPathToken":{"type":"apiKey","in":"path","name":"token","description":"Private signed token embedded in the URL path."}}},"x-skimless-mcp-tools":[{"name":"search_kb","description":"Semantic search across the user's Skimless knowledge base. Returns the most relevant items with URLs and excerpts.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language query."},"limit":{"type":"integer","default":10,"minimum":1,"maximum":30},"since_days":{"type":"integer","default":120,"minimum":1,"maximum":365}},"required":["query"]}},{"name":"latest_brief","description":"Return the user's most recent ready daily brief as Markdown, with audio URL and the three structured sections.","inputSchema":{"type":"object","properties":{}}},{"name":"generate_pack","description":"Generate a Context Pack for a project description. Returns the six markdown files in the v0.1 spec plus a manifest. The user's info diet is the corpus.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Describe the project: what you're building, stack, what you want context on."}},"required":["prompt"]}}]}