naftiko: "1.0.0-alpha2" info: label: "Kanye REST — Quotes" description: >- Quotes — Kanye REST. 3 operations. Lead operation: Get Random Quote. Self-contained Naftiko capability covering one Kanye REST business surface. tags: - Kanye REST - Quotes - Personality created: "2026-05-29" modified: "2026-05-29" binds: - namespace: env keys: {} capability: # ── 1. Consumes — the upstream HTTP API this capability speaks to ───── consumes: - type: http namespace: "kanye-rest-quotes" baseUri: "https://api.kanye.rest" description: "Kanye REST — Quotes business capability. Self-contained, no shared references. Public unauthenticated edge API hosted on Cloudflare Workers." resources: - name: "root" path: "/" operations: - name: "getRandomQuote" method: GET description: "Returns a single random Kanye West quote wrapped in a JSON object." outputRawFormat: json outputParameters: - name: result type: object value: "$." - name: "text" path: "/text" operations: - name: "getRandomQuoteText" method: GET description: "Returns a single random Kanye West quote as plain text." outputRawFormat: text outputParameters: - name: result type: string value: "$." - name: "quotes" path: "/quotes" operations: - name: "listAllQuotes" method: GET description: "Returns the complete collection of Kanye West quotes as a JSON array of strings." outputRawFormat: json outputParameters: - name: result type: array value: "$." # ── 2. REST exposer — required default. One Spectral-compliant resource per consumed op ── exposes: - type: rest namespace: "kanye-rest-quotes-rest" port: 8080 description: "REST adapter for Kanye REST — Quotes. One Spectral-compliant resource per consumed operation, prefixed with /v1." resources: - path: "/v1/quotes/random" name: "random-quote" description: "REST surface for retrieving a random Kanye West quote as JSON." operations: - method: GET name: "getRandomQuote" description: "Returns a single random Kanye West quote wrapped in a JSON object." call: "kanye-rest-quotes.getRandomQuote" with: {} outputParameters: - type: object mapping: "$." - path: "/v1/quotes/random-text" name: "random-quote-text" description: "REST surface for retrieving a random Kanye West quote as plain text." operations: - method: GET name: "getRandomQuoteText" description: "Returns a single random Kanye West quote as plain text." call: "kanye-rest-quotes.getRandomQuoteText" with: {} outputParameters: - type: object mapping: "$." - path: "/v1/quotes" name: "quotes" description: "REST surface for retrieving the complete collection of Kanye West quotes." operations: - method: GET name: "listAllQuotes" description: "Returns the complete collection of Kanye West quotes." call: "kanye-rest-quotes.listAllQuotes" with: {} outputParameters: - type: object mapping: "$." # ── 3. MCP exposer — required default. One verb-noun tool per consumed op ── - type: mcp namespace: "kanye-rest-quotes-mcp" port: 9090 transport: http description: "MCP adapter for Kanye REST — Quotes. One tool per consumed operation, routed inline through this capability's consumes block." tools: - name: "get-random-quote" description: "Returns a single random Kanye West quote as JSON." hints: readOnly: true destructive: false idempotent: true call: "kanye-rest-quotes.getRandomQuote" with: {} outputParameters: - type: object mapping: "$." - name: "get-random-quote-text" description: "Returns a single random Kanye West quote as plain text." hints: readOnly: true destructive: false idempotent: true call: "kanye-rest-quotes.getRandomQuoteText" with: {} outputParameters: - type: object mapping: "$." - name: "list-all-quotes" description: "Returns the complete collection of Kanye West quotes." hints: readOnly: true destructive: false idempotent: true call: "kanye-rest-quotes.listAllQuotes" with: {} outputParameters: - type: object mapping: "$."