Genius · Capability

Genius API — Songs

Songs — song metadata, contributors, comments, and activity. 4 operations. Lead operation: Get Song. Self-contained Naftiko capability covering one Genius business surface.

Run with Naftiko GeniusMusicSongs

What You Can Do

GET
Getsong — Get a song by ID.
/v1/songs/{id}
GET
Getsongcomments — List comments on a song.
/v1/songs/{id}/comments
GET
Getsongactivity — Activity stream for a song.
/v1/songs/{id}/activity
GET
Getsongcontributors — List song contributors.
/v1/songs/{id}/contributors

MCP Tools

get-song

Get a Genius song by ID.

read-only idempotent
list-song-comments

List comments on a Genius song.

read-only idempotent
get-song-activity

Get activity feed for a Genius song.

read-only idempotent
list-song-contributors

List contributors to a Genius song.

read-only idempotent

Capability Spec

genius-songs.yaml Raw ↑
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: "$." }]