naftiko: "1.0.0-alpha2"
info:
label: "Genius API — Songs"
description: >-
Songs — song metadata, contributors, comments, and activity. 4 operations. Lead operation: Get Song.
Self-contained Naftiko capability covering one Genius business surface.
tags:
- Genius
- Music
- Songs
created: "2026-05-29"
modified: "2026-05-29"
binds:
- namespace: env
keys:
GENIUS_ACCESS_TOKEN: GENIUS_ACCESS_TOKEN
capability:
consumes:
- type: http
namespace: "genius-songs"
baseUri: "https://api.genius.com"
description: "Genius API — Songs business capability."
authentication:
type: bearer
token: "{{env.GENIUS_ACCESS_TOKEN}}"
resources:
- name: "song"
path: "/songs/{id}"
operations:
- name: "getSong"
method: GET
description: "Returns full song metadata."
inputParameters:
- name: "id"
in: path
type: integer
required: true
description: "Genius song ID."
- name: "text_format"
in: query
type: string
required: false
description: "Format for textual fields."
outputRawFormat: json
outputParameters:
- name: result
type: object
value: "$."
- name: "song-comments"
path: "/songs/{id}/comments"
operations:
- name: "getSongComments"
method: GET
description: "Lists comments left on a song page."
inputParameters:
- { name: "id", in: path, type: integer, required: true, description: "Genius song ID." }
- { name: "per_page", in: query, type: integer, required: false, description: "Results per page." }
- { name: "page", in: query, type: integer, required: false, description: "Page index." }
- { name: "text_format",in: query, type: string, required: false, description: "Format for textual fields." }
outputRawFormat: json
outputParameters: [{ name: result, type: object, value: "$." }]
- name: "song-activity"
path: "/songs/{id}/activity"
operations:
- name: "getSongActivity"
method: GET
description: "Activity stream for a song."
inputParameters:
- { name: "id", in: path, type: integer, required: true, description: "Genius song ID." }
- { name: "per_page", in: query, type: integer, required: false, description: "Results per page." }
- { name: "page", in: query, type: integer, required: false, description: "Page index." }
outputRawFormat: json
outputParameters: [{ name: result, type: object, value: "$." }]
- name: "song-contributors"
path: "/songs/{id}/contributors"
operations:
- name: "getSongContributors"
method: GET
description: "List of users who have contributed to the song."
inputParameters:
- { name: "id", in: path, type: integer, required: true, description: "Genius song ID." }
outputRawFormat: json
outputParameters: [{ name: result, type: object, value: "$." }]
exposes:
- type: rest
namespace: "genius-songs-rest"
port: 8080
description: "REST adapter for Genius — Songs."
resources:
- path: "/v1/songs/{id}"
name: "song"
description: "Song detail."
operations:
- method: GET
name: "getSong"
description: "Get a song by ID."
call: "genius-songs.getSong"
with: { "id": "rest.id", "text_format": "rest.text_format" }
outputParameters: [{ type: object, mapping: "$." }]
- path: "/v1/songs/{id}/comments"
name: "song-comments"
description: "Song comments."
operations:
- method: GET
name: "getSongComments"
description: "List comments on a song."
call: "genius-songs.getSongComments"
with: { "id": "rest.id", "per_page": "rest.per_page", "page": "rest.page", "text_format": "rest.text_format" }
outputParameters: [{ type: object, mapping: "$." }]
- path: "/v1/songs/{id}/activity"
name: "song-activity"
description: "Activity stream for a song."
operations:
- method: GET
name: "getSongActivity"
description: "Activity stream for a song."
call: "genius-songs.getSongActivity"
with: { "id": "rest.id", "per_page": "rest.per_page", "page": "rest.page" }
outputParameters: [{ type: object, mapping: "$." }]
- path: "/v1/songs/{id}/contributors"
name: "song-contributors"
description: "Song contributors."
operations:
- method: GET
name: "getSongContributors"
description: "List song contributors."
call: "genius-songs.getSongContributors"
with: { "id": "rest.id" }
outputParameters: [{ type: object, mapping: "$." }]
- type: mcp
namespace: "genius-songs-mcp"
port: 9090
transport: http
description: "MCP adapter for Genius — Songs."
tools:
- name: "get-song"
description: "Get a Genius song by ID."
hints: { readOnly: true, destructive: false, idempotent: true }
call: "genius-songs.getSong"
with: { "id": "tools.id", "text_format": "tools.text_format" }
outputParameters: [{ type: object, mapping: "$." }]
- name: "list-song-comments"
description: "List comments on a Genius song."
hints: { readOnly: true, destructive: false, idempotent: true }
call: "genius-songs.getSongComments"
with: { "id": "tools.id", "per_page": "tools.per_page", "page": "tools.page", "text_format": "tools.text_format" }
outputParameters: [{ type: object, mapping: "$." }]
- name: "get-song-activity"
description: "Get activity feed for a Genius song."
hints: { readOnly: true, destructive: false, idempotent: true }
call: "genius-songs.getSongActivity"
with: { "id": "tools.id", "per_page": "tools.per_page", "page": "tools.page" }
outputParameters: [{ type: object, mapping: "$." }]
- name: "list-song-contributors"
description: "List contributors to a Genius song."
hints: { readOnly: true, destructive: false, idempotent: true }
call: "genius-songs.getSongContributors"
with: { "id": "tools.id" }
outputParameters: [{ type: object, mapping: "$." }]