Noun Project · Capability

Noun Project API V2 — Icon

Icon — Search, retrieve, find similar, and download royalty-free icons from the Noun Project library of nearly 10 million PNG and SVG icons. 4 operations. Lead operation: Search Icons by query term with optional style and line-weight filters. Self-contained Naftiko capability covering one Noun Project business surface.

Run with Naftiko Noun ProjectIconsSearch

What You Can Do

GET
Searchicons — Search and filter icons by query, style, and line weight.
/v1/icons
GET
Geticon — Retrieve a single icon by its numeric identifier with full metadata.
/v1/icons/{icon_id}
GET
Getsimilaricons — Find icons stylistically similar to the supplied icon ID.
/v1/icons/{icon_id}/similar
GET
Downloadicon — Download a rendered icon in SVG or PNG format with optional hex-color recoloring.
/v1/icons/{icon_id}/download

MCP Tools

search-icons

Search and filter icons by query, style, and line weight.

read-only idempotent
get-icon

Retrieve a single icon by its numeric identifier with full metadata.

read-only idempotent
get-similar-icons

Find icons stylistically similar to the supplied icon ID.

read-only idempotent
download-icon

Download a rendered icon in SVG or PNG format with optional hex-color recoloring.

read-only idempotent

Capability Spec

noun-project-icon.yaml Raw ↑
naftiko: "1.0.0-alpha2"

info:
  label: "Noun Project API V2 — Icon"
  description: >-
    Icon — Search, retrieve, find similar, and download royalty-free icons from
    the Noun Project library of nearly 10 million PNG and SVG icons. 4 operations.
    Lead operation: Search Icons by query term with optional style and line-weight
    filters. Self-contained Naftiko capability covering one Noun Project business
    surface.
  tags:
    - Noun Project
    - Icons
    - Search
  created: "2026-05-28"
  modified: "2026-05-28"

binds:
  - namespace: env
    keys:
      NOUN_PROJECT_OAUTH_KEY: NOUN_PROJECT_OAUTH_KEY
      NOUN_PROJECT_OAUTH_SECRET: NOUN_PROJECT_OAUTH_SECRET

capability:

  consumes:
    - type: http
      namespace: "noun-project-icon"
      baseUri: "https://api.thenounproject.com"
      description: "Noun Project API V2 — Icon business capability. Self-contained, no shared references."
      authentication:
        type: oauth1
        consumerKey: "{{env.NOUN_PROJECT_OAUTH_KEY}}"
        consumerSecret: "{{env.NOUN_PROJECT_OAUTH_SECRET}}"
        signatureMethod: HMAC-SHA1
      resources:
        - name: "icon-search"
          path: "/v2/icon"
          operations:
            - name: "searchIcons"
              method: GET
              description: "Search and filter icons by query, style, and line weight."
              inputParameters:
                - name: query
                  in: query
                  type: string
                  required: true
                  description: "Search term used to match icon titles, tags, and descriptions."
                - name: styles
                  in: query
                  type: string
                  required: false
                  description: "Comma-separated icon styles (solid, line)."
                - name: line_weight
                  in: query
                  type: integer
                  required: false
                  description: "Line weight in pixels (1-60) at 512px rendering."
                - name: limit_to_public_domain
                  in: query
                  type: boolean
                  required: false
                  description: "When true, restricts to public-domain icons."
                - name: thumbnail_size
                  in: query
                  type: integer
                  required: false
                  description: "Pixel dimension for returned thumbnail URLs (42, 84, 200)."
                - name: blacklist
                  in: query
                  type: boolean
                  required: false
                  description: "When true, applies the client's configured blocklist."
                - name: include_svg
                  in: query
                  type: boolean
                  required: false
                  description: "When true, includes raw SVG markup in each icon result."
                - name: limit
                  in: query
                  type: integer
                  required: false
                  description: "Maximum number of icons returned per page."
                - name: prev_page
                  in: query
                  type: string
                  required: false
                  description: "Cursor token returned by a prior response for backward pagination."
                - name: next_page
                  in: query
                  type: string
                  required: false
                  description: "Cursor token returned by a prior response for forward pagination."
              outputRawFormat: json
              outputParameters:
                - name: result
                  type: object
                  value: "$."
        - name: "icon-detail"
          path: "/v2/icon/{icon_id}"
          operations:
            - name: "getIcon"
              method: GET
              description: "Retrieve a single icon by its numeric identifier with full metadata."
              inputParameters:
                - name: icon_id
                  in: path
                  type: integer
                  required: true
                  description: "Numeric identifier of the icon."
                - name: thumbnail_size
                  in: query
                  type: integer
                  required: false
                  description: "Pixel dimension for the returned thumbnail URL."
                - name: blacklist
                  in: query
                  type: boolean
                  required: false
                  description: "When true, returns 404 if the icon is on the client's blocklist."
              outputRawFormat: json
              outputParameters:
                - name: result
                  type: object
                  value: "$."
        - name: "icon-similar"
          path: "/v2/icon/{icon_id}/more-like-this"
          operations:
            - name: "getSimilarIcons"
              method: GET
              description: "Find icons stylistically similar to the supplied icon ID."
              inputParameters:
                - name: icon_id
                  in: path
                  type: integer
                  required: true
                  description: "Numeric identifier of the seed icon."
                - name: query
                  in: query
                  type: string
                  required: false
                  description: "Optional search term to narrow similar-icon candidates."
                - name: limit_to_public_domain
                  in: query
                  type: boolean
                  required: false
                  description: "When true, restricts results to public-domain icons."
                - name: thumbnail_size
                  in: query
                  type: integer
                  required: false
                  description: "Pixel dimension for returned thumbnail URLs."
                - name: blacklist
                  in: query
                  type: boolean
                  required: false
                  description: "When true, applies the client's configured blocklist."
                - name: include_svg
                  in: query
                  type: boolean
                  required: false
                  description: "When true, includes raw SVG markup."
                - name: limit
                  in: query
                  type: integer
                  required: false
                  description: "Maximum number of icons returned per page."
                - name: prev_page
                  in: query
                  type: string
                  required: false
                  description: "Cursor token for backward pagination."
                - name: next_page
                  in: query
                  type: string
                  required: false
                  description: "Cursor token for forward pagination."
              outputRawFormat: json
              outputParameters:
                - name: result
                  type: object
                  value: "$."
        - name: "icon-download"
          path: "/v2/icon/{icon_id}/download"
          operations:
            - name: "downloadIcon"
              method: GET
              description: "Download a rendered icon in SVG or PNG format with optional hex-color recoloring."
              inputParameters:
                - name: icon_id
                  in: path
                  type: integer
                  required: true
                  description: "Numeric identifier of the icon."
                - name: color
                  in: query
                  type: string
                  required: false
                  description: "Hex color value (without leading #) used to recolor the icon."
                - name: filetype
                  in: query
                  type: string
                  required: false
                  description: "Output file format (svg or png)."
                - name: size
                  in: query
                  type: integer
                  required: false
                  description: "PNG pixel dimension (20-1200). Ignored for SVG."
              outputRawFormat: binary
              outputParameters:
                - name: result
                  type: object
                  value: "$."

  exposes:
    - type: rest
      namespace: "noun-project-icon-rest"
      port: 8080
      description: "REST adapter for Noun Project API V2 — Icon. One Spectral-compliant resource per consumed operation, prefixed with /v1."
      resources:
        - path: "/v1/icons"
          name: "icons"
          description: "REST surface for icon search."
          operations:
            - method: GET
              name: "searchIcons"
              description: "Search and filter icons by query, style, and line weight."
              call: "noun-project-icon.searchIcons"
              with:
                query: "rest.query"
                styles: "rest.styles"
                line_weight: "rest.line_weight"
                limit_to_public_domain: "rest.limit_to_public_domain"
                thumbnail_size: "rest.thumbnail_size"
                blacklist: "rest.blacklist"
                include_svg: "rest.include_svg"
                limit: "rest.limit"
                prev_page: "rest.prev_page"
                next_page: "rest.next_page"
              outputParameters:
                - type: object
                  mapping: "$."
        - path: "/v1/icons/{icon_id}"
          name: "icon-detail"
          description: "REST surface for retrieving a single icon."
          operations:
            - method: GET
              name: "getIcon"
              description: "Retrieve a single icon by its numeric identifier with full metadata."
              call: "noun-project-icon.getIcon"
              with:
                icon_id: "rest.icon_id"
                thumbnail_size: "rest.thumbnail_size"
                blacklist: "rest.blacklist"
              outputParameters:
                - type: object
                  mapping: "$."
        - path: "/v1/icons/{icon_id}/similar"
          name: "icon-similar"
          description: "REST surface for finding similar icons."
          operations:
            - method: GET
              name: "getSimilarIcons"
              description: "Find icons stylistically similar to the supplied icon ID."
              call: "noun-project-icon.getSimilarIcons"
              with:
                icon_id: "rest.icon_id"
                query: "rest.query"
                limit_to_public_domain: "rest.limit_to_public_domain"
                thumbnail_size: "rest.thumbnail_size"
                blacklist: "rest.blacklist"
                include_svg: "rest.include_svg"
                limit: "rest.limit"
                prev_page: "rest.prev_page"
                next_page: "rest.next_page"
              outputParameters:
                - type: object
                  mapping: "$."
        - path: "/v1/icons/{icon_id}/download"
          name: "icon-download"
          description: "REST surface for downloading rendered icons."
          operations:
            - method: GET
              name: "downloadIcon"
              description: "Download a rendered icon in SVG or PNG format with optional hex-color recoloring."
              call: "noun-project-icon.downloadIcon"
              with:
                icon_id: "rest.icon_id"
                color: "rest.color"
                filetype: "rest.filetype"
                size: "rest.size"
              outputParameters:
                - type: object
                  mapping: "$."

    - type: mcp
      namespace: "noun-project-icon-mcp"
      port: 9090
      transport: http
      description: "MCP adapter for Noun Project API V2 — Icon. One tool per consumed operation, routed inline through this capability's consumes block."
      tools:
        - name: "search-icons"
          description: "Search and filter icons by query, style, and line weight."
          hints:
            readOnly: true
            destructive: false
            idempotent: true
          call: "noun-project-icon.searchIcons"
          with:
            query: "tools.query"
            styles: "tools.styles"
            line_weight: "tools.line_weight"
            limit_to_public_domain: "tools.limit_to_public_domain"
            thumbnail_size: "tools.thumbnail_size"
            blacklist: "tools.blacklist"
            include_svg: "tools.include_svg"
            limit: "tools.limit"
            prev_page: "tools.prev_page"
            next_page: "tools.next_page"
          outputParameters:
            - type: object
              mapping: "$."
        - name: "get-icon"
          description: "Retrieve a single icon by its numeric identifier with full metadata."
          hints:
            readOnly: true
            destructive: false
            idempotent: true
          call: "noun-project-icon.getIcon"
          with:
            icon_id: "tools.icon_id"
            thumbnail_size: "tools.thumbnail_size"
            blacklist: "tools.blacklist"
          outputParameters:
            - type: object
              mapping: "$."
        - name: "get-similar-icons"
          description: "Find icons stylistically similar to the supplied icon ID."
          hints:
            readOnly: true
            destructive: false
            idempotent: true
          call: "noun-project-icon.getSimilarIcons"
          with:
            icon_id: "tools.icon_id"
            query: "tools.query"
            limit_to_public_domain: "tools.limit_to_public_domain"
            thumbnail_size: "tools.thumbnail_size"
            blacklist: "tools.blacklist"
            include_svg: "tools.include_svg"
            limit: "tools.limit"
            prev_page: "tools.prev_page"
            next_page: "tools.next_page"
          outputParameters:
            - type: object
              mapping: "$."
        - name: "download-icon"
          description: "Download a rendered icon in SVG or PNG format with optional hex-color recoloring."
          hints:
            readOnly: true
            destructive: false
            idempotent: true
          call: "noun-project-icon.downloadIcon"
          with:
            icon_id: "tools.icon_id"
            color: "tools.color"
            filetype: "tools.filetype"
            size: "tools.size"
          outputParameters:
            - type: object
              mapping: "$."