Asana · Capability

Asana Portfolios API — Portfolios

Asana Portfolios API — Portfolios. 8 operations. Lead operation: Asana Get multiple portfolios. Self-contained Naftiko capability covering one Asana business surface.

Run with Naftiko AsanaPortfolios

What You Can Do

GET
Getportfolios — Asana Get multiple portfolios
/v1/portfolios
POST
Createportfolio — Asana Create a portfolio
/v1/portfolios
GET
Getportfolio — Asana Get a portfolio
/v1/portfolios/{portfolio-gid}
PUT
Updateportfolio — Asana Update a portfolio
/v1/portfolios/{portfolio-gid}
DELETE
Deleteportfolio — Asana Delete a portfolio
/v1/portfolios/{portfolio-gid}
POST
Additemforportfolio — Asana Add a portfolio item
/v1/portfolios/{portfolio-gid}/additem
GET
Getitemsforportfolio — Asana Get portfolio items
/v1/portfolios/{portfolio-gid}/items
POST
Removeitemforportfolio — Asana Remove a portfolio item
/v1/portfolios/{portfolio-gid}/removeitem

MCP Tools

asana-get-multiple-portfolios

Asana Get multiple portfolios

read-only idempotent
asana-create-portfolio

Asana Create a portfolio

asana-get-portfolio

Asana Get a portfolio

read-only idempotent
asana-update-portfolio

Asana Update a portfolio

idempotent
asana-delete-portfolio

Asana Delete a portfolio

idempotent
asana-add-portfolio-item

Asana Add a portfolio item

asana-get-portfolio-items

Asana Get portfolio items

read-only idempotent
asana-remove-portfolio-item

Asana Remove a portfolio item

Capability Spec

portfolios-portfolios.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Asana Portfolios API — Portfolios
  description: 'Asana Portfolios API — Portfolios. 8 operations. Lead operation: Asana Get multiple portfolios. Self-contained
    Naftiko capability covering one Asana business surface.'
  tags:
  - Asana
  - Portfolios
  created: '2026-05-19'
  modified: '2026-05-19'
binds:
- namespace: env
  keys:
    ASANA_API_KEY: ASANA_API_KEY
capability:
  consumes:
  - type: http
    namespace: portfolios-portfolios
    baseUri: https://app.asana.com/api/1.0
    description: Asana Portfolios API — Portfolios business capability. Self-contained, no shared references.
    resources:
    - name: portfolios
      path: /portfolios
      operations:
      - name: getportfolios
        method: GET
        description: Asana Get multiple portfolios
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: workspace
          in: query
          type: string
          required: true
        - name: owner
          in: query
          type: string
        - name: limit
          in: query
          type: integer
        - name: offset
          in: query
          type: string
      - name: createportfolio
        method: POST
        description: Asana Create a portfolio
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: portfolios-portfolio_gid
      path: /portfolios/{portfolio_gid}
      operations:
      - name: getportfolio
        method: GET
        description: Asana Get a portfolio
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: portfolio_gid
          in: path
          type: string
          required: true
      - name: updateportfolio
        method: PUT
        description: Asana Update a portfolio
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: portfolio_gid
          in: path
          type: string
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
      - name: deleteportfolio
        method: DELETE
        description: Asana Delete a portfolio
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: portfolio_gid
          in: path
          type: string
          required: true
    - name: portfolios-portfolio_gid-addItem
      path: /portfolios/{portfolio_gid}/addItem
      operations:
      - name: additemforportfolio
        method: POST
        description: Asana Add a portfolio item
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: portfolio_gid
          in: path
          type: string
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: portfolios-portfolio_gid-items
      path: /portfolios/{portfolio_gid}/items
      operations:
      - name: getitemsforportfolio
        method: GET
        description: Asana Get portfolio items
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: portfolio_gid
          in: path
          type: string
          required: true
        - name: limit
          in: query
          type: integer
        - name: offset
          in: query
          type: string
    - name: portfolios-portfolio_gid-removeItem
      path: /portfolios/{portfolio_gid}/removeItem
      operations:
      - name: removeitemforportfolio
        method: POST
        description: Asana Remove a portfolio item
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: portfolio_gid
          in: path
          type: string
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    authentication:
      type: bearer
      token: '{{env.ASANA_API_KEY}}'
  exposes:
  - type: rest
    namespace: portfolios-portfolios-rest
    port: 8080
    description: REST adapter for Asana Portfolios API — Portfolios. One Spectral-compliant resource per consumed operation,
      prefixed with /v1.
    resources:
    - path: /v1/portfolios
      name: portfolios
      description: REST surface for portfolios.
      operations:
      - method: GET
        name: getportfolios
        description: Asana Get multiple portfolios
        call: portfolios-portfolios.getportfolios
        with:
          workspace: rest.workspace
          owner: rest.owner
          limit: rest.limit
          offset: rest.offset
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: createportfolio
        description: Asana Create a portfolio
        call: portfolios-portfolios.createportfolio
        with:
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/portfolios/{portfolio-gid}
      name: portfolios-portfolio-gid
      description: REST surface for portfolios-portfolio_gid.
      operations:
      - method: GET
        name: getportfolio
        description: Asana Get a portfolio
        call: portfolios-portfolios.getportfolio
        with:
          portfolio_gid: rest.portfolio_gid
        outputParameters:
        - type: object
          mapping: $.
      - method: PUT
        name: updateportfolio
        description: Asana Update a portfolio
        call: portfolios-portfolios.updateportfolio
        with:
          portfolio_gid: rest.portfolio_gid
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
      - method: DELETE
        name: deleteportfolio
        description: Asana Delete a portfolio
        call: portfolios-portfolios.deleteportfolio
        with:
          portfolio_gid: rest.portfolio_gid
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/portfolios/{portfolio-gid}/additem
      name: portfolios-portfolio-gid-additem
      description: REST surface for portfolios-portfolio_gid-addItem.
      operations:
      - method: POST
        name: additemforportfolio
        description: Asana Add a portfolio item
        call: portfolios-portfolios.additemforportfolio
        with:
          portfolio_gid: rest.portfolio_gid
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/portfolios/{portfolio-gid}/items
      name: portfolios-portfolio-gid-items
      description: REST surface for portfolios-portfolio_gid-items.
      operations:
      - method: GET
        name: getitemsforportfolio
        description: Asana Get portfolio items
        call: portfolios-portfolios.getitemsforportfolio
        with:
          portfolio_gid: rest.portfolio_gid
          limit: rest.limit
          offset: rest.offset
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/portfolios/{portfolio-gid}/removeitem
      name: portfolios-portfolio-gid-removeitem
      description: REST surface for portfolios-portfolio_gid-removeItem.
      operations:
      - method: POST
        name: removeitemforportfolio
        description: Asana Remove a portfolio item
        call: portfolios-portfolios.removeitemforportfolio
        with:
          portfolio_gid: rest.portfolio_gid
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    namespace: portfolios-portfolios-mcp
    port: 9090
    transport: http
    description: MCP adapter for Asana Portfolios API — Portfolios. One tool per consumed operation, routed inline through
      this capability's consumes block.
    tools:
    - name: asana-get-multiple-portfolios
      description: Asana Get multiple portfolios
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: portfolios-portfolios.getportfolios
      with:
        workspace: tools.workspace
        owner: tools.owner
        limit: tools.limit
        offset: tools.offset
      outputParameters:
      - type: object
        mapping: $.
    - name: asana-create-portfolio
      description: Asana Create a portfolio
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: portfolios-portfolios.createportfolio
      with:
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: asana-get-portfolio
      description: Asana Get a portfolio
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: portfolios-portfolios.getportfolio
      with:
        portfolio_gid: tools.portfolio_gid
      outputParameters:
      - type: object
        mapping: $.
    - name: asana-update-portfolio
      description: Asana Update a portfolio
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: portfolios-portfolios.updateportfolio
      with:
        portfolio_gid: tools.portfolio_gid
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: asana-delete-portfolio
      description: Asana Delete a portfolio
      hints:
        readOnly: false
        destructive: true
        idempotent: true
      call: portfolios-portfolios.deleteportfolio
      with:
        portfolio_gid: tools.portfolio_gid
      outputParameters:
      - type: object
        mapping: $.
    - name: asana-add-portfolio-item
      description: Asana Add a portfolio item
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: portfolios-portfolios.additemforportfolio
      with:
        portfolio_gid: tools.portfolio_gid
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: asana-get-portfolio-items
      description: Asana Get portfolio items
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: portfolios-portfolios.getitemsforportfolio
      with:
        portfolio_gid: tools.portfolio_gid
        limit: tools.limit
        offset: tools.offset
      outputParameters:
      - type: object
        mapping: $.
    - name: asana-remove-portfolio-item
      description: Asana Remove a portfolio item
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: portfolios-portfolios.removeitemforportfolio
      with:
        portfolio_gid: tools.portfolio_gid
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.